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

inserindo produtos com categoria

ola , sobre a aula 8 do curso de php onde inseri produtos com a categoria ja olhei o codigo de ponta a cabeça e nao conseguir achar o erro ao salvar segue o erro:

O Produto pp,1 nao foi adicionado:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 3

14 respostas

o arquivo banco-produto esta assim:

<?php
function listaprodutos($conexao){
  $produtos=array();
  $resultado=mysqli_query($conexao,"select p.*,c.nome as categoria_nome from produtos as p join 

categoria as c on c.id=p.categoria_id"); 

  while($produto = mysqli_fetch_assoc($resultado)) {     
      array_push($produtos,$produto);
  }
   return $produtos; 

}


function insereproduto($conexao,$nome,$preco,$descricao,$categoria_id) {
 $query="insert into produtos (nome,preco,descricao,categoria_id) 

values ('{$nome}',{$preco},'{$descricao}',{$categoria_id})";
   return mysqli_query($conexao,$query); 
} 


function removeproduto($conexao,$id) {
   $query="delete from produtos where id={$id}";
   return mysqli_query($conexao,$query);

}

o adiciona-produto assim:

<?php include("cabecalho.php");?>
<?php include("conecta.php");?>
<?php include("banco-produto.php");?>

<?php



$nome = $_POST["nome"];
$preco = $_POST["preco"];
$descricao = $_POST["descricao"];
$categoria_id = $_POST["categoria_id"];


if(insereproduto($conexao,$nome,$preco,$descricao,$categoria_id)) {?>
    <p class="text-success"> O Produto <?= $nome;?>,<?= $preco;?> adicionado com sucesso!!</p>
<?php } else {
 $msg = mysqli_error($conexao);

?>
    <p class="text-danger">O Produto <?= $nome;?>,<?= $preco;?> nao foi adicionado:<?=$msg?></p>

<?php
}
?>

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

e o produto-formulario assim:

<?php include("cabecalho.php");?>
<?php include("conecta.php");?>
<?php include("banco-categoria.php");?>

<?php $categorias=listacategorias($conexao);?>


 <h1>Formulario de cadastro</h1>

 <form action="adiciona-produto.php" method="post">
  <table class="table">
   <tr>
     <td>Nome</td>
     <td> <input class="form-control" type="text" name="nome"></td>
   </tr>
   <tr>
     <td>Preco</td>
     <td>    <input class="form-control" type="number" name="preco"><br/></td>
   </tr>    
    <tr>
     <td>Descrição</td>
     <td><textarea class="form-control" name="descricao"></textarea></td>   
    </tr>
    <tr>
     <td>Categoria</td>
     <td>
         <select name="categoria_id" class="form-control"> 
          <?php foreach($categorias as $categoria):?>             
              <option value="<?$categoria['id']?>">
                   <?=$categoria['nome']?><br/>
              </option>
         <?php endforeach ?>

    </td>   
    </tr>   
    <tr>
     <td>
      <input class="btn btn-primary" type="submit" value="Cadastrar">
      </td>   
    </tr>


</form>

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

Olá, Francisco. Tudo bom?

Repare que na query a tabela deveria se chamar categorias, não categoria:

 $resultado=mysqli_query($conexao,"select p.*,c.nome as categoria_nome from produtos as p join categorias as c on c.id=p.categoria_id");

Tente alterar o nome da tabela na query.

Lembre-se, também, que nossos métodos devem ser escritos em camelcase. Ou seja, os nomes devem ser:

listaProdutos(), insereProduto(), removeProduto()

estranho pq criei no banco como categoria mesmo no singular deveria funcionar

mas mudei o nome para o plural e deu o mesmo erro

Você criou no banco a tabela de categorias como categoria e a tabela de produtos como produtos? Se sim, mantenha os nomes das tabelas mesmo =)

Cola aqui pra mim o código do seu banco-categoria.php também, por favor?

sim tinha criado categoria mas mudei agora deletei a tabela e criei novamente como categorias

segue o codigo:

<?php

function listacategorias($conexao){
  $categorias = array(); 
  $query = "select* from categorias";
   $resultado = mysqli_query($conexao,$query);
  while($categoria = mysqli_fetch_assoc($resultado)) {     
      array_push($categorias,$categoria);
  }
   return $categorias; 

}

Quais dados você está inserindo nos seus inputs para realiza a inserção do produto?

Francisco,

Possivelmente você está inserindo algum texto com uma aspas simples (') em um dos inputs. Dá uma conferida nos dados de entrada.

Abraço!

dados normais o nome do produto,preco,descricao e escolho a categoria no combox, se retiro a parte da categoria o formulario funciona inseri normal

solução!

Oi Francisco,

Percebi que faltou um "=" na hora de montar a option do select. É só trocar de:

<option value="<?$categoria['id']?>">

para:

<option value="<?=$categoria['id']?>">

Abraços!

Joviane Fernandes obrigado era isso mesmo, vou ter mais atenção agora rs, mas deve ter ferramentas que me mostraria uma onde estaria o erro nao é? tipo um debugador? algum editor de texto mais avançado que me mostraria o erro na sintaxe do codigo

Francisco,

Na verdade esse é um tipo de erro muito difícil de debugar porque na verdade o erro só acontece em tempo de execução da query.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software