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

Adiciona mesmo com campos vazios

O meu código está adicionando mesmo tendo ambos os campos vazios, onde o campo de nome fica null, e o valor 0.00

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

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

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

}


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

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

    <p class="text-success">
        Produto <?= $nome; ?>, <?= $preco; ?> R$, adicionado com sucesso!
    </p>

<?php }else{ ?>

    <p class="text-danger">
        Produto <?= $nome; ?>,  -NÃO-  adicionado !
    </p>    

<?php

}

mysqli_close($conexao);

?>

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

Fala Ruan,

Tranquilo?

Isso está acontecendo pois você não está validando se os campos estão preenchidos, de uma forma básica você poderia fazer assim:

function insereProduto($conexao, $nome, $preco) {
    if ( $conexao && $nome && $preco ) {
        $query = "insert into produtos(nome, preco) values ('{$nome}', '{$preco}')";
        return mysqli_query($conexao, $query);
    } else {
        return false;
    }
}

Assim ele só irá realizar a operação SQL se tiver todos os parâmetros.

Abraços!

Opa amigo, tudo bem? Na aula, o If só deveria dar true se fosse passado todos os parâmetros, antes funcionou, mas dps que fiz as mudanças pedida na aula, ele tá retornando true de toda forma.

Fala Ruan,

Vi na aula citada que ele usa uma variável para guardar o retorno do mysqli_query, você já testou mantendo essa variavel para ver se funciona, pode ser algum retorno do PHP que está gerando o retorno de sempre true;

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

Testei, mesma coisa. Pode ser alguma diferença da versão PHP? O vídeo é meio antigo.

solução!

Não tenho certeza se pode ser algum conflito de versão, mas em todo o caso, é sempre bom você validar os parâmetros que você recebe, se eu não me engano ele vai falar um pouco mais pra frente isso para evitar que pessoas consigam acesso ao banco de dados usando SQL Injection.

Já fica a dica para validação dos parâmetros.

Obrigado

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