Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema com Categorias

Altera Produto

<?php
require_once("cabecalho.php");


$tipoProduto = $_POST['tipoProduto'];
$produto_id = $_POST['id'];
$categoria_id = $_POST['categoria_id'];


$factory = new ProdutoFactory();
$produto = $factory->criaPor($tipoProduto, $_POST);
$produto->atualizaBaseadoEm($_POST);

$produto->setId($produto_id);
$produto->getCategoria()->setId($categoria_id);



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

$produtoDao = new ProdutoDao($conexao);

if($produtoDao->alteraProduto($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"); ?>

Produto Factory:

<?php 
class ProdutoFactory{

    private $classes = array("Produto", "Ebook", "LivroFisico");

    public function criaPor($tipoProduto, $parametros){
        $nome = $parametros['nome'];
        $preco = $parametros['preco'];
        $descricao = $parametros['descricao'];
        $categoria = new Categoria();
        $usado = $parametros['usado'];

        if (in_array($tipoProduto, $this->classes)) {
        //instanciando o objeto
            return new $tipoProduto($nome, $preco, $descricao, $categoria, $usado);
        }

        return new Produto($nome, $preco, $descricao, $categoria, $usado);
    }
}

erro:

Fatal error: Call to a member function setId() on null in /opt/lampp/htdocs/loja/altera-produto.php on line 15
1 resposta
solução!

Oi Cesar, tudo bem?

Parece que a variável produto está referenciando nulo. Talvez o método criaPor, da factory, não esteja retornando o que deveria.