8
respostas

Erro cadastro e alteração categoria

Estou com dificuldade na para alterar a categoria ou cadastrar um novo produto selecionando uma categoria diferente da "Transporte", ele cadastra normalmente mas não altera, retornando esse log:

Warning: Creating default object from empty value in C:\MAMP\htdocs\loja\altera-produto.php on line 12
O produto 23123, 312312.00 foi alterado.

e este é o meu altera-produto.php

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

$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']; # linha 12

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


if(alteraProduto($conexao, $produto)) { ?>
    <p class="text-success">O produto <?=$produto->nome?>, <?=$produto->preco?> foi alterado.</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"); ?>
8 respostas

Como está o código de "PRODUTO.php" ?

Esta assim:

<?php
    class Produto {
        public $id;
        public $nome;
        public $preco;
        public $descricao;
        public $categoria;
        public $usado;
    }

Faça esta mudança:

$produto = new Produto();
$produto->id = $_POST['id'];
$produto->nome = $_POST['nome'];
$produto->preco = $_POST['preco'];
$produto->descricao = $_POST['descricao'];

$produto->categoria = new Categoria();
$produto->categoria->id = $_POST['categoria_id'];

Você também pode colocar a criação do objeto categoria no construtor de produto:

<?php
    class Produto {
        public $id;
        public $nome;
        public $preco;
        public $descricao;
        public $categoria;
        public $usado;

        public function __construct()
        {
            $this->categoria = new Categoria();
        }
    }

Gabriel, o erro sumiu, mas ele ainda não altera a categoria

Envie o código que você está usando para alterar !

altera-produto.php

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

$produto = new Produto();
$produto->getId() = $_POST['id'];
$produto->getNome() = $_POST['nome'];
$produto->getPreco() = $_POST['preco'];
$produto->getDescricao() = $_POST['descricao'];
$produto->getCategoria() = new Categoria();
$produto->getCategoria()->getId() = $_POST['categoria_id'];

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


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

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

banco-produto.php

function alteraProduto($conexao, Produto $produto) {

    $query = "update produtos set nome = '{$produto->getNome()}',
        preco = {$produto->getPreco()}, descricao = '{$produto->getDescricao()}',
            categoria_id= {$produto->getCategoria()->getId()},
                usado = {$produto->getUsado()} where id = '{$produto->getId()}'";

    return mysqli_query($conexao, $query);
}

Faça uma alteração para ver se a query está correta.

function alteraProduto($conexao, Produto $produto) {

    $query = "update produtos set nome = '{$produto->getNome()}',
        preco = {$produto->getPreco()}, descricao = '{$produto->getDescricao()}',
            categoria_id= {$produto->getCategoria()->getId()},
                usado = {$produto->getUsado()} where id = '{$produto->getId()}'";

   echo $query; exit;

    return mysqli_query($conexao, $query);
}

Se tiver dúvidas, poste a query aqui.