2
respostas

Erro na alteração do campo usado

Olá, estou com o seguinte erro no código altera-produto.php:

Warning: Creating default object from empty value in C:\xampp\htdocs\Projeto-de-php\loja\altera-produto.php on line 17
O produto bola de futebol 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 ' usado = true where id = '1'' at line 3

Segue o código do altera-produto.php:

<?php 
    require_once("cabecalho.php");
    require_once("banco-produto.php"); 
    require_once("class/Produto.php");
    require_once("class/Categoria.php");?>

<?php

$usado = false;
$categoria = new Categoria();
$produto = new Produto();

$produto->id = $_POST["id"];
$produto->nome = $_POST["nome"];
$produto->preco = $_POST["preco"];
$produto->descricao = $_POST["descricao"];
$produto->categoria->id = $_POST["categoria_id"];
$produto->usado = $_POST["usado"];

$produto->categoria = $categoria;

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

if(alteraProduto($conexao,$produto)) { ?>
    <p class="text-success">O produto <?= $produto->nome; ?>, <?= $produto->preco; ?> alterado com sucesso!</p>
<?php } else {
    $msg = mysqli_error($conexao);
?>
    <p class="text-danger">O produto <?= $produto->nome; ?> não foi alterado: <?= $msg ?></p>
<?php
}
?>

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

Segue o código da function alteraProduto no banco-produto.php:

function alteraProduto($conexao, Produto $produto) {

    $query = "update produtos set nome = '{$produto->nome}', 
        preco = {$produto->preco}, descricao = '{$produto->descricao}', 
            categoria_id= {$produto->categoria->id}, usado = {$produto->usado} 
                where id = '{$produto->id}'";

    return mysqli_query($conexao, $query);
}
2 respostas

TEnte desta forma:

$query = "update produtos set nome = '{$produto->nome}', 
        preco = {$produto->preco}, descricao = '{$produto->descricao}', 
            categoria_id= {$produto->categoria->id}, usado = {$produto->usado} 
                where id = {$produto->id} ";

Tire as aspas simples depois de "where id".

ID é um campo numérico. Não pode ficar entre aspas.

Parece que tem um erro lógico nestas linhas;

$produto->categoria->id = $_POST["categoria_id"];
$produto->usado = $_POST["usado"];
$produto->categoria = $categoria;

Deveriam ficar nesta ordem:

$produto->categoria = $categoria;
$produto->categoria->id = $_POST["categoria_id"];
$produto->usado = $_POST["usado"];

Parece que o erro está aqui. Você está tentando atribuir um atributo antes de atribuir o obeto categoria ao objeto produto.

Esta observação está mais de acordo com o erro apresentado:

Warning: Creating default object from empty value