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

MYSQL insere o valor (0.00) quando cadastro algo na tabela PRODUTOS.

Boa tarde!

Quando vou inserir na tabela produtos da aula de Conexão com banco de dados, o professor Guilherme cita que ao não cadastrar o PREÇO do produto, o mesmo é salvo no banco de dados sem apresentar um erro, porém no meu MYSQL o produto é salvo com o PREÇO = 0.00, quando o certo seria o mesmo não cadastrar.

7 respostas

Olá Caio, tudo bom?

Você pode colocar aqui seu código do adiciona-produto.phppra eu dar uma olhada?

<?php include ("cabecalho.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-danger"> Produto <?php echo $nome; ?>, não foi adicionado com sucesso.</p>
 <?php } else { ?>
 <p class="alert-success"> Produto <?php echo $nome; ?> adicionado com sucesso!</p> 
  <?php }

 mysqli_close($conexao);


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

Dando uma olhada na sua query:

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

Da pra perceber que tem aspas simples ao redor de preço. Não sou especialista em banco de dados mas acredito que ao colocar as aspas a inserção está passando um valor padrão. Apenas utilizamos aspas simples para trabalhar com strings, como o preço é um numero não há essa necessidade.

Tente retirar estas aspas simples e veja se funciona =)

Desculpe, colei o código errado.

Eu estava tentando validar pelo proprio PHP dessa forma:

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

 $query = " insert into produtos (nome, preco) values ('{$nome}','{$preco}') ";
 mysqli_query($conexao, $query);
 if (empty($nome||$preco)) { ?>
 <p class="alert-danger"> Produto <?php echo $nome; ?>, não foi adicionado com sucesso.</p>
 <?php } else { ?>
 <p class="alert-success"> Produto <?php echo $nome; ?> adicionado com sucesso!</p> 
  <?php }

 mysqli_close($conexao);


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

Porém tudo funcionava, o aviso de erro é exibido porém o banco continua a armazenar os campos vazios, exceto o ID que é autoincrement. O código que eu estava utilizando anteriormente que colei errado é este:

<?php include ("cabecalho.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"> Produto <?php echo $nome; ?> adicionado com sucesso!</p> 
 <?php } else { ?>
 <p class="alert-danger"> Produto <?php echo $nome; ?>, não foi adicionado com sucesso.</p>
  <?php }

 mysqli_close($conexao);


?>
<?php include ("rodape.php")?>
solução!

Dando uma olhada na lógica:

 if (empty($nome||$preco)) { ?>...

O método empty retorna true se a variavel analisada é vazia. Além disso, neste codigo estamos utilizando o operador dentro do método. Acredito que a ideia neste código é verificar se ambas as variaveis não são vazias, certo? Portanto devemos verificar se a variavel $nome ou a variavel $preço não são vazias:

 if (empty($nome) || empty($preco)) { ?>...

Tenta com esta sintaxe =)

Funcionou 100% valeu cara!

Fala Caio, vou deixar minha opinião aqui também como forma de ajudar outra pessoa que venha parar nesse tópico por estar passando pelo mesmo problema, eu também passei por isso adicionava um produto sem o preço e ele ia para o banco com 000 mesmo eu conferindo um milhão de vezes o código principalmente a condicional estava tudo certo mas mesmo assim não funcionava inclusive quando eu adicionava um produto sem preço ele ainda exibia a mensagem de cadastrado com sucesso então observei que o erro estava no começo do código quando coloquei a variável $preco entre aspas simples ela era tratada com string e isso causava esse bug só é tirar as aspas que tudo funciona perfeitamente.