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

A falta do preço não é interpretado como erro

Olá!

Fiz o exercício proposto na aula, e aparentemente fiz tudo seguindo o exemplo, porém quando adiciono um produto sem preço, o sistema não se comporta da mesma maneira apresentada na aula. O produto é adicionado ao banco de dados com o preço 0,00.

Configurei algo errado ou houve uma mudança de comportamento?

Segue o código:

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

<?php

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

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

if(mysqli_query($conexao, $query) ){ ?>
    <p class="alert-success">O produto <?= $nome; ?> foi cadastrado com o preço de <?= $preco;?> </p>

<?php } else { ?>

    <p class="alert-danger">O produto <?= $nome; ?> não foi cadastrado! </p>

<?php

}

mysqli_close($conexao);

?>

<?php include("footer.php"); ?>    
4 respostas
solução!

Oi Júlio, tudo bom?

Acredito que isso aconteça por conta da forma com que a query foi estruturada:

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

Aqui, passamos o valor $nome e $preco entre aspas simples. Ou seja, se a gente não passar nada no preço o resultado da query será algo como:

insert into produtos (nome, preco) values ('Produto Sem Preco', '');

Aqui, não temos o campo preco vazio para o mysql. Temos uma string vazia. Tenta injetar o preço sem aspas:

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

E tenta não passar preço de novo. Desse jeito, devemos ver um erro para executar a query no mysql, que será repassado pro PHP =)

Fala André, beleza?

Fiz essa alteração e deu certo! Muito obrigado!

Pelo que eu entendi é necessário usar aspas simples quando utilizar uma variável na concatenação para transforma-la em uma string, que pode ou não ser vazia, certo?

O preço então não é passado como string?

Oi Júlio, boa!

Sim, pra evitar problemas com a validação não nulla (not null) é interessante evitar o uso de strings nos valores numéricos =)

Fico feliz que tenha resolvido!

Abraço

Muito obrigado!

Abraço!