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

Estou com dúvida no curso de PHP, mysql e fundamentos da web - parte 2, no exercício do capítulo Um único formulário para adicionar e alterar.

Quando tentei alterar o produto, recebi o seguinte erro:

"O produto Novo Produto, não foi alterado: 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 'where id = 7' at line 1"

o código de alterar produto é o seguinte:

<?php
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);
}
?>

Formulário de alterar:

<?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">

        <?php include("produto-formulario-base.php");?>


            <tr>
                <td>
                    <button class="btn btn-primary" type="submit">Alterar</button>
                </td>
            </tr>
        </table>
    </form>
<?php include("rodape.php"); ?>
5 respostas

Olá Mayara, vendo por cima assim não estou conseguindo identificar o que está acontecendo para não dar certo, então para ver como a query está sendo montada faça um echo $query; antes do return da seguinte forma

<?php
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}'";
    echo $query;
    return mysqli_query($conexao, $query);
}
?>

Assim o php irá exibir na tela para você a query montada antes de ser executada. Assim talvez fique fácil de você encontrar o erro. Qualquer coisa copia o resultado e poste aqui, abaixo da minha resposta, assim eu ou alguém pode te ajudar.

Espero que te ajude.

Obrigada Joel, o resultado foi:

update produtos set nome = 'aa', preco = 2.00, descricao = '12', categoria_id = 2, usado = where id = '9'

O produto aa, não foi alterado: 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 'where id = '9'' at line 1
solução!

a clausura where id não é uma String e sim um int ou seja não precisa das 'aspas'

o campo . Usado está como vazio. check

Quando você não selecciona um input check ele não é submetido pelo formulário e assim chega nulo o que está ocasionando erro. Você precisa verificar se o valor dele foi atribuido ou não, pode tentar um codigo como o de baixo, além disso o seu id está como string e deveria ser number ou seja deve retirar as aspas dele, apesar de não causar erro este pois o mysql deve fazer conversão implícita.

$usado = array_key_exists([$_POST['usado']) ? true ? false;

Para só então passar o array como parametro