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

Erro na alteração do produto.

Quando tento atualizar as informações do banco de dados apresenta o seguinte erro:

0 Produto pudim de doce de leite não foi alterado: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '

Notice: Undefined index: id in C:\xampp\htdocs\loja\produto-a' at line 1

Segue abaixo os cogidos:

produto-altera-formulario.php

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

$id = $_GET['id'];
$produto = buscaProduto($conexao, $id);
$categorias = listaCategorias($conexao);
$usado = $produto['usado'] ? "checked='checked'" : "";

?>

<h1>Alterando produto</h1>

<form action="altera-produto.php" method="post">
    <input type="hidden" name="id" value="<?=$produto['id']?>">
    <table class="table">
        <tr>
            <td>
                Nome: 
            </td>    
            <td>
                <input class="form-control" type="text" name="nome" value="<?=$produto['nome']?>">
            </td>

        </tr>

        <tr>
            <td>
                Preco: 
            </td>
            <td>
                <input class="form-control" type="number" name="preco" value="<?=$produto['preco']?>">
            </td>
        </tr>

        <tr>
            <td>
                Descrição: 
            </td>
            <td>
                <textarea class="form-control" name="descricao" ><?=$produto['descricao']?></textarea>
            </td>
        </tr>

        <tr>
            <td></td>
            <td><input type="checkbox" name="usado" <?=$usado?> value="true"> Usado </td>

        </tr>

        <tr>
            <td>Categoria</td>
            <td>

                <select name="categoria_id" class="form-control">
                <?php foreach($categorias as $categoria): 
                    $essaEhACategoria = $produto['categoria_id'] == $categoria['id'];
                    $selecao = $essaEhACategoria ? "selected='selected'":"";
                    ?>

            <option value="<?=$categorias['id']?>" <?=$selecao?> >
                <?=$categoria['nome']?>
            </option>
                <?php endforeach?>
                </select>

            </td>

        </tr>

        <tr>
            <td>
                <button class="btn btn-primary" type="submit">Alterar</button>
            </td>

        </tr>
    </table>
</form>

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

altera-produto.php

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

$id = $_POST['id'];
$nome = $_POST['nome'];
$preco = $_POST['preco'];
$descricao = $_POST['descricao'];
$categoria_id = $_POST['categoria_id'];

if(array_key_exists('usado', $_POST)){
    $usado = "true";
} else{
    $usado = "false";
}

?>

<?php

if(alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado)) { 
?>

<p class="text-success"> O Produto <?= $nome?>, <?= $preco?> foi alterado.</p>

<?php 
}else{ 
    $msg = mysqli_error($conexao);
?>

<p class="text-danger">0 Produto <?=$nome?> não foi alterado: <?= $msg ?></p>

<?php

}
?>

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

banco-produto.php

<?php

function listaProdutos($conexao){
    $produtos = array();
    $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");
    while($produto = mysqli_fetch_assoc($resultado)) {
            array_push($produtos, $produto);
    }
    return $produtos;
}

 function insereProduto($conexao, $nome, $preco, $descricao, $categoria_id, $usado){
    $query = "INSERT INTO produtos (nome, preco, descricao, categoria_id, usado) VALUES ('{$nome}', {$preco}, '{$descricao}', {$categoria_id}, {$usado})";
    return mysqli_query($conexao, $query);
}

 function alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado){
    $query = "UPDATE produtos SET nome = '{$nome}', preco={$preco}, descricao='{$descricao}',categoria_id={$categoria_id}, usado={$usado} WHERE id ={$id}";
    return mysqli_query($conexao, $query);
}


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

function buscaProduto($conexao, $id){
    $query = "SELECT * from produtos where id = {$id}";
    $resultado = mysqli_query($conexao, $query);
    return mysqli_fetch_assoc($resultado);
}

Desde já agradeço a atenção.

7 respostas

Tente

$query = "UPDATE produtos SET nome={$nome} preco={$preco} descricao={$descricao} categoria_id={$categoria_id}  usado={$usado} WHERE id ={$id}";

Agora o erro ta assim:

0 Produto pudim de doce de leite não foi alterado: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'de doce de leite, preco=2, descricao=doce de leite delicioso,categoria_id=' at line 1

Parece que o id ta recebendo ' no lugar do numero

agora o código ficou assim.

function alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado){
    $query = "UPDATE produtos SET nome = {$nome}, preco={$preco}, descricao={$descricao},categoria_id={$categoria_id}, usado={$usado} WHERE id ={$id}";
    return mysqli_query($conexao, $query);
}

Remova as vírgulas e o espaço entre " id ="

Agora apareceu esse erro

Parse error: syntax error, unexpected 'produtos' (T_STRING) in C:\xampp\htdocs\loja\banco-produto.php on line 18

Não é padrão o uso de "" ?

código

function alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado){
    $query = UPDATE produtos SET nome = {$nome}, preco={$preco}, descricao={$descricao},categoria_id={$categoria_id}, usado={$usado} WHERE id={$id};
    return mysqli_query($conexao, $query);
}

Você removeu os aspas rs no lugar das vírgulas

Voltou o mesmo erro :

Não consigo encontrar o problema!

0 Produto pudim de doce de leite não foi alterado: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'de doce de leite preco=2 descricao=doce de leite delicioso categoria_id= ' at line 1

function alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado){
    $query = "UPDATE produtos SET nome={$nome} preco={$preco} descricao={$descricao} categoria_id={$categoria_id} usado={$usado} WHERE id={$id}";
    return mysqli_query($conexao, $query);
}
solução!

Consegui resolver, o erro foi de digitação no arquivo produto-alteral-formulario.php no código da coluna de categorias.

<td>Categoria</td>
            <td>

                <select name="categoria_id" class="form-control">
                <?php foreach($categorias as $categoria): 
                    $essaEhACategoria = $produto['categoria_id'] == $categoria['id'];
                    $selecao = $essaEhACategoria ? "selected='selected'":"";
                    ?>

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

                <?php endforeach?>
                </select>

            </td>

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