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

Dúvida PHP MySQL

Quando faço o cadastro de um produto sem preço ou sem o nome, a minha pagina não está exibindo a mensagem de erro. Ela informa que foi cadastrado com sucesso.

Já fui no phpmyadmin e alterei na minha estrutura de tabela, os campo nome e preço para não aceitarem NULO Esse é o meu código

if(insereProduto($conexao, $nome, $preco)) {
        <p class="alert-success">Produto <?= $nome; ?>, <?= $preco; ?> adicionado com sucesso!</p>

        } else {
            $msg = mysqli_error($conexao);

        <p class="alert-danger">O produto <? = $nome; ?> não foi adicionado: <?= $msg ?></p>
        }
4 respostas

Olá, Fabiano!

Quando você envia um formulário vazio, os valores não vão como NULL, e sim como uma string vazia (""). Dessa forma, para que os valores não possam ser vazios, você precisa realizar uma verificação antes de executar sua query.

Espero ter ajudado.

Olá Fabiano,

Creio que possa estar ocorrendo uma dessas coisas:

Provavelmente você inicializa as variáveis de nome e preço zeradas ou em branco, ou você as recupera dos campos do formulário que foi submetido em branco, o que é diferente de estar realmente nula. Imagino que os registros estão sendo inseridos no BD mas com os dados da linha em branco, isso está acontecendo?

Ou, acho menos provável, pode ser que seu método insere produto está somente retornando true, ou qualquer dado que possa representar o valor booleano true no IF. As vezes você pode estar retornando um ID e por ser um número diferente de zero o php o identifica como true.

Acho que seria mais efetivo você validar essas variáveis com valor diferente de nulo ou vazio e caso seja verdadeiro, realizar a inserção no BD.

@editando

Exemplo:

if(!empty($nome) && !empty($preco)) {
    //executa o insert.
}

http://php.net/manual/pt_BR/function.empty.php

solução!

Olá Fabiano eu também tive esse "Bugzinho" no meu código e acredite se quiser mas tudo isso é causado por uma simples aspas '' observe lá no começo do código a variável $query que recebe como parâmetro as variáveis $nome e $preco provavelmente a variável $preco deve estar dentro de aspas simples e chaves '{$preco}' e é exatamente isso que causa esse erro, retire as aspas e teste novamente no meu código final esse trecho ficou assim:

$query = "insert into produtos (nome, preco) values ('{$nome}', {$preco})";

Valeu pessoal, era exatamente o que o William Roger disse.