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

Campo em branco é inserido no banco

Quando eu insiro um campo em branco, ele adiciona no banco mesmo assim.

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

                    $nome = $_GET["nome"];/*Declarando uma variavel e setando o valor a partir de uma entrada do user*/
                    $preco = $_GET["preco"];
                    $conexao = mysqli_connect('localhost','root', '', 'loja' );//Faz a conexão com o banco de dados

                    function insereProduto ($conexao,$nome, $preco){//função criada para inserir produto no banco de dados
                        $query = "insert into produtos (nome, preco) values ('{$nome}','{$preco}')";//comando usado para a inserção no banco
                        return mysqli_query($conexao,$query);//Executa a query

                    }

                    if (insereProduto ($conexao,$nome, $preco)) { ?>
                        <p class="text-success">Produto <?= $nome ?> com o preço R$<?=$preco?> adicionado com sucesso!</p>
                    <?php } 
                    else{ 
                        $msg = mysqli_error($conexao);
                        ?>
                        <p class="text-danger">Produto <?= $nome;?> não foi adicionado:<?= msg ?></p>
                    <?php    
                    }
                    mysqli_close($conexao);//Fecha a query                    
                    ?>                        
<?php include ("rodape.php")?>
2 respostas
solução!

Olá. Conforme vi no seu código ele irá fazer isso mesmo, pois você não implementou uma validação para impedir a inserção. Caso não queira que um registro seja inserido se não informar nome ou preço do produto poderá fazer algo semelhante a isso:

 function insereProduto ($conexao,$nome, $preco){//função criada para inserir produto no banco de dados
    if($nome != '' && $preco > 0){    
        $query = "insert into produtos (nome, preco) values ('{$nome}','{$preco}')";//comando usado para a inserção no banco
        return mysqli_query($conexao,$query);//Executa a query
    }else{
        return false;
    }
}

Oi Jonathan, tudo bom?

Bem apontado! Isso acontece por conta dessa linha:

$query = "insert into produtos (nome, preco) values ('{$nome}','{$preco}')";//comando usado para a inserção no banco

Aqui estamos inserindo '{$nome}' e '{$preco}'. Repare que se as variaveis $nome ou preco estiverem vazias, nosso resultado na query será:

$query = "insert into produtos (nome, preco) values ('','')";//comando usado para a inserção no banco

Ou seja, estamos passando duas strings vazias. O que é dfierente de vazio:

$query = "insert into produtos (nome, preco) values (,)";//comando usado para a inserção no banco

O mysql identifica a string vazia e não o campo realmente vazio!

Por isso ele passa.

Nesse caso, precisariamos fazer a validação antes do insert, como nosso amigo Tiago comentou =)

Abraço e bons estudos