Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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.