Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Mensagem de erro não é exibida

O meu código de erro não está sendo exibido... Já mudei a sintaxe de exibição da mensagem e nada. Será que alguém pode ajudar?

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


<?php

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

    $conexao = mysqli_connect('localhost', 'root', '', 'loja');
    $query = "insert into produtos (nome, preco) values('{$nome}' , {$preco})";
    $resultaQuery = mysqli_query($conexao, $query);

    return $resultaQuery;

}

$nome = $_GET["nome"];
$preco = $_GET["preco"];
$conexao = mysqli_connect('localhost', 'root', '', 'loja');


if (insereProduto($conexao, $nome, $preco)){
?>

<p class="alert-success alert">
    Produto
    <?php echo $nome; ?> adicionado com sucesso!<br>
    Preço: R$
    <?php echo $preco; ?><br>

</p>

<?php

}else{

    $msg = mysqli_error($conexao);

?>


<p class="alert-danger alert">
    O produto não foi adicionado devido ao erro: <?php echo $msg ?>

</p>

<?php
}
?>

<?php include('rodape.php'); ?>
7 respostas

Bruno, o que está fazendo você afirmar que está dando erro? Pode ser que a função insereProduto() esteja retornando true.

Pra gente confirmar isso, coloca um echo "Passou por aqui"; no else que pega o erro.

Aguardo seu feedback.

Fala aí, Bruno? Conseguiu resolver o problema? Atualiza aqui pra gente saber.

Abraços!

Colocando o echo dentro do else consigo ver que ele realmente entra no else, mas ao que aparenta ele não está guardando o erro na variável msg e por isso o erro não está aparecendo.

Bruno, bom dia.

Duas coisas:

  1. O código com o include do rodapé está sendo executado?
  2. A função insereProduto está retornando false mesmo sem que haja erro no MySQL? Coloca aqui o código dessa função pra gente avaliar, por favor.

No aguardo.

Boa noite Daniel!

Sim, o rodapé está sendo executado. E a função insereProduto aparentemente está funcionando corretamente. O que eu preciso é que a variável $msg seja exibida caso os produtos não sejam cadastrados. E por algum motivo, parece que mesmo entrando no else quando há algo que impeça de efetuar o cadastro a variável não recebe o erro.

Seguem os códigos:

adiciona-produto.php

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


<?php

include('conecta.php');
include('bd-produto.php');


$nome = $_GET["nome"];
$preco = $_GET["preco"];

if (insereProduto($conexao, $nome, $preco)){
?>

<p class="mt-5 alert-success alert">
    Produto
    <?php echo $nome; ?> adicionado com sucesso!<br>
    Preço: R$
    <?php echo $preco; ?><br>

</p>

<?php }else{
    $msg = mysqli_error($conexao);
?>
   <p class="mt-5 alert-danger alert">
    O produto não foi adicionado devido ao erro:<?= $msg ?>
    </p>
<?php
}
?>

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

E o bd-produtos.php que contém as funções:

<?php

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

    $conexao = mysqli_connect('localhost', 'root', '', 'loja');
    $query = "insert into produtos (nome, preco) values('{$nome}' , {$preco})";
    $resultaQuery = mysqli_query($conexao, $query);

    return $resultaQuery;

}

function listaProdutos($conexao){


    $resultado = mysqli_query($conexao, "select * from produtos");
    $produtos = array();

    while($produto = mysqli_fetch_assoc($resultado)){


        array_push($produtos, $produto);

    }

    return $produtos;

} 

function removeProduto($conexao, $id){

    $query = "delete from produtos where id = {$id}";

    return mysqli_query($conexao, $query);

}
solução!

Bruno, o que está acontecendo é que a variável $conexao está sendo instanciada duas vezes: uma no arquivo adiciona-produto.php e outra dentro da função insereProduto(). Isso significa que a variável instanciada na função morre quando o escopo da função termina. E com ela morre também o erro associado. Sacou?

Quando você tenta recuperar o erro através da função myqli_error(), está fazendo para uma variável $conexao que realmente não teve erro algum associado.

Na prática basta você remover a linha $conexao = mysqli_connect('localhost', 'root', '', 'loja'); da sua função insereProduto().

Testa aí e me dá um feedback.

Abraços!

Valeu, era exatamente isso! Agora funcionou, acabei não me atentando a essa conexão a mais na função.

Abraços!!