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

Aula 2 de PHP MySQL - 04 Inserindo no banco de dados

Escrevi o código

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

mas independente se eu coloco um valor em "preco" ou não ele é incluído no banco de dados assim mesmo sem me dar o alerta de produto não contém "preco". O que pode ser?

4 respostas

Estou tendo exatamente o mesmo problema. Tudo bate com o que é descrito no Curso, mas não funciona a Query para inserir um novo item no DB.

O que está acontecendo é o seguinte ,você está validando o envio da query,

if(mysqli_query)

como voce nao está validando os campos ,podem ser armazenados valores em branco,retornando true,o "alerta de produto nao contém",so vai acontecer se houver um erro no envio da query, retornando "false",uma forma simples é validar os campos antes do envio da query.

<?php

$nome = "";
$preco = '';

$conexao = mysqli_connect('localhost', 'root', '', 'loja');
$query = "insert into produtos (nome, preco) values('{$nome}', '{$preco}')";


    if($nome == '' || $preco == ''){?>
    <p class="alert-danger"><b>Preencha</b> todos os campos!!</p>
    <?php 
        }else{
        if(mysqli_query($conexao, $query)){?>
    <p class="alert-success">Produto <b><?php echo $nome; ?></b>, valor: <b>R$<?php echo $preco?></b> foi inserido com sucesso!!!</p>
        <?php }else{ ?>
    <p class="alert-danger">Produto <?php echo $nome; ?>, R$<?php echo $preco ?> nao inserido,
    <?php echo "<b>Erro: ". mysqli_error($conexao). "</b>";?>
    </p>
    <?php
      }
}
?>

Eu revi meu código e fiz uma alteração String $query, onde está '{$query}', eu alterei para {squery} sem aspas. Neste caso eu estaria alterando a validação da minha variável?

solução!

Entao Allonso, vc pode fazer testes e ver os erros que sao gerados,retornos etc...

se voce retirou o apostrofo da variavel $nome,isso irá gerar um erro e o retorno será false,porque nome é uma "STRING" e precisa do uso do apostrofo nesse caso, agora se vc retirar o apostrofo da variavel $preco,nao irá gerar um erro,porque $preco é um numero,

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

Resumindo se voce usar um "IF" passando o

mysqli_query()

esse if irá verificar se o retorno é true.

se nao houver erro de inserçao,o valor retornado será "true",se houver o valor retornado será false, caindo no "ELSE"