5
respostas

Notice: Undefined variable

Olá, estou tendo um problema em meu código no momento e visualizar a descrição do produto. Segue abaixo os três arquivos modificadas para adicionar a descrição:

produto-formulario.php

<?php include("cabecalho.php"); ?>

<h1>Formulário de cadastro</h1>
<form action="adiciona-produto.php">
    <table class="table">
        <tr>
            <td>Nome:</td>
            <td><input class="form-control" type="text" name="nome" /></td>
        </tr>

        <tr>
            <td>Preço:</td>
            <td><input class="form-control" type="number" name="preco" /></td>
        </tr>

        <tr>
            <td>Descrição:</td>
            <td><textarea name="descricao" type="text" class="form-control"></textarea></td>
        </tr>

        <tr>
            <td></td>
            <td class="align-right">
                <button class="btn btn-primary" type="submit">Cadastrar</button>        
            </td>
        </tr>
    </table>


</form>

<?php include("rodape.php"); ?>

banco-produto.php

function insereProduto ($conexao, $nome, $preco, $descricao) {

        $query = "insert into produtos (nome, preco, descricao) values ('{$nome}', {$preco}, '{$descricao}')";
        $resultadoDaInsercao = mysqli_query($conexao, $query);
        return $resultadoDaInsercao;

    }

adiciona-produto.php

<?php
    include("cabecalho.php");
    include("conexao.php");
    include("banco-produto.php");
?>

<?php
$nome = $_GET["nome"];
$preco = $_GET["preco"];
$descricao = $_GET['descricao'];


if(insereProduto($conexao, $nome, $preco, $descricao)){

    $mensagemDeErro = mysqli_error($conexao);
?>    
    <p class="text-success">
        Produto <?= $nome; ?>, <?= $preco; ?> adicionado com sucesso!
    </p>
<?php
} else {
?>
    <p class="text-danger">
        Produto <?= $nome; ?>, não foi adicionado! <br>
        <?= $mensagemDeErro ?>
    </p>
<?php
}
?>



<?php include("rodape.php"); ?>
5 respostas

Pois bem não entendi muito mais tenta criar a variável $mensagemDeErro global pois no else tu só imprime ela mais em nenhum momento tu criou ela apenas no if. Ou seja se der algum erro não vai passar pelo if onde tu criou a variável $mensagemDeErro. então tu não pode imprimir ela no( else ) a não ser se a variável seja global.

Observe as imagens para entender melhor:

Erro: https://imgur.com/Aqosm2f

Estrutura do Banco: https://imgur.com/JUkUH6w

Manda a página lista-produto.php pois pelo que percebi o erro é nela !! pois pelo erro a variável descricao não está definida neste arquivo.

Dá uma olhada se a digitação neste arquivo se está tudo correto !!

O problema pode ser na consulta usada para montar a lista. Talvez não tenha o campo descricao

Aqui está o arquivo produtos-lista.php

<?php
    include("cabecalho.php");
    include("conexao.php");
    include("banco-produto.php");
?>


<?php
        $produtos = listaProdutos($conexao);
?>

<?php if(array_key_exists("removido", $_GET) && $_GET['removido']=='true'){ ?>
        <p class="alert-success">Produto removido com sucesso</p>
<?php } ?>

<!-- inicio tabela para inserir os prdutos -->
<table class="table table-striped table-bordered">

<?php
        // permite acessar cada elemento individualmente iterando sobre toda a coleção e sem a necessidade de informação de índices
        // vale lembrar que $produtos agora tem o array retornado da função listaProdutos()
        foreach($produtos as $produto) :
?>

                <!-- uma linha com duas colunas para exibir os nome e valor dos produtos  -->
                <tr>
                        <td>    <?=$produto['nome']?></td>
                        <td> R$ <?=$produto['preco']?></td>
                        <td>    <?=$descricao['descricao']?></td>
                        <td>
                                <a href="remove-produto?id=<?=$produto['id']?>" class="text-danger">Remover</a>
                        </td>
                </tr>

<?php
        endforeach
?>
</table>
<!-- fim tabela para inserir os prdutos -->

<?php include("rodape.php"); ?>

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software