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