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

Erro em adicionar produtos

Toda vez que tento inserir algum produto, ele me retorna os seguintes erros.

Warning: Creating default object from empty value in /var/www/html/loja/adiciona-produto.php on line 8

Catchable fatal error: Object of class stdClass could not be converted to string in /var/www/html/loja/class/ProdutoDAO.php on line 22

Minha função insereProdutos está da seguinte forma:

    function insereProduto($produto) { $query = "insert into produtos (nome, preco, descricao, categoria_id, usado) values ('{$produto->nome}', {$produto->getPreco()}, '{$produto->descricao}', {$produto->categoria_id}, {$produto->usado})";
            return mysqli_query($this->conexao, $query);
        }

E meu adiciona-produto

$categoria = new Categoria();
if(array_key_exists('usado', $_POST)) {
    $usado->usado = true;
} else {
    $usado->usado = false;
}
$produto = new Produto($_POST['nome'], $_POST['preco'], $_POST['descricao'], $categoria, $usado);
$produtoDAO = new ProdutoDAO($conexao);
if($produtoDAO->insereProduto($produto)) { ?>
    <p class="text-success">O produto <?=$produto->nome?>, <?=$produto->getPreco()?> foi adicionado.</p>
<?php } else {
    $msg = mysqli_error($conexao);
?>
    <p class="text-danger">O produto <?=$produto->nome?> não foi adicionado: <?=$msg?></p>
<?php
}
?>

Alguém poderia me ajudar?

2 respostas
solução!

Oi Naldson,

O warning é porque você está usando o usado como um objeto sendo que é só uma variável:

Está assim:

$usado->usado = true;

Deveria estar assim:

$usado = true;

O aviso é porque o PHP acha que você está usando um objeto sem inicializá-lo.

Já o erro você, me manda o "ProdutoDAO.php" para dar uma olhada, é lá que está dando o erro.

Abraços!

Obrigado, Sergio! Fiz o que você disse e deu certo aqui. Na minha query de adicionar produto também tinha um errinho, estava assim:

{$produto->categoria_id}

e o correto era

{$produto->categoria->id}

As duas mensagens sumiram. Muito obrigado!