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

Ao passar campos nulos, esta gravando no banco

Onde estou errando na validação? A mensagem de retorno sempre é o sucesso.

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

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

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

}
?>

<?php
    if(insereProduto($conexao, $nome, $preco)) {
?>
    <p class="alert-success">Produto <?= $nome; ?>, <?= $preco; ?> adicionado com sucesso!</p>
<?php
} else {
   $msgErroGravaBanco = mysqli_error($conexao);
?>
    <p class="alert-danger">O produto <?= $nome; ?> não foi adicionado<?= $msgErroGravaBanco; ?></p>
<?php
}
?>

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

Olá, João.

Quando a mensagem de sucesso aparece, o produto é adicionado no banco ou não?

solução!

Olá, João.

Pelo que análise o código acima, não é feita validação alguma dos dados recebidos por GET.

Uma recomendação é não utilizar as super globais o seu caso $_GET, em seu lugar utilize o gilter_input, por exemplo:

$nome = filter_input(INPUT_GET, 'nome');

$preco = filter_input(INPUT_GET, 'preco');

Pois com a função acima, quando não especificada o terceiro parâmetro, o método de filter, é realizado o filter default.

Para não inserir dados null no banco, que no seu caso é quando não informam algum valor para 'preco' ou 'nome', pode-se criar uma function de validação, por exemplo:

/*
 * Responsável por executar validações no dado desejado.
 * 
 * @return boolean
 */
function validateData($data)
{
    // Análise se a variável está vazia
    if( empty($dava) ){
        return false;
    }

   // pode ser incluso mais validações..

    return true;
}

A função acima é simplista, caso suas regras de validações sejam grandes, por exemplo: - Validar se não está vazio. - Validar min lenght - Validar max lenght

Recomenda-se a criação de uma estrutura que comporte com maior facilidade a chamada de uma única função, porém que cada validação esteja contida em uma função isolada, facilitando assim a inclusão de novas regras, testes e manutenção nas validações existentes.

Caso tenha alguma dúvida, deixe nos comentários que tento lhe auxiliar na medida do possível

Ola Diego Brocanelli, muito obrigado pelo retorno, estou seguindo as tarefas do curso e no vídeo do exemplo que o professor fez retornou uma mensagem de validação na tela. Sinceramente analisei a logica e também não entendi como a validação é feita, minha suposição seria no mysqli_error, mas nos meus testes passou. Em relação a pegunta a resposta é sim grava no banco. Mas legal, vou estudar estes parâmetros de filter. Muito obrigado.