Boa tarde pessoal, tudo bem?
Meu projeto está alterando produtos normalmente com os magic methods, porém não consigo adicionar produtos, por dar o seguinte erro:
Fatal error: Call to a member function getNome() on null in /Applications/XAMPP/xamppfiles/htdocs/loja/produto-formulario.php on line 14
Lá vai meu código do produto-formulario.php
<?php require_once("cabecalho.php");
require_once("banco-categoria.php");
require_once("logica-usuario.php");
require_once("class/produto.php");
require_once("class/categoria.php");
verificaUsuario();
$categoria = new Categoria;
$categoria->setid(1);
$usado = "";
$produto = new Produto($produto->getNome(), $produto->getPreco(),$produto->getDescricao(), $produto->setCategoria($categoria), $produto->setUsado($usado));
$categorias = listaCategorias($conexao);
?>
<h1>Formulário de produto</h1>
<form action="adiciona-produto.php" method="post">
<table class="table">
<?php include("produto-formulario-base.php"); ?>
<tr>
<td>
<button class="btn btn-primary" type="submit">Cadastrar</button>
</td>
</tr>
</table>
</form>
<?php include("rodape.php"); ?>
Meu código do produto.php
<?php
class Produto {
private $id;
private $nome;
private $preco;
private $descricao;
private $categoria;
private $usado;
function __construct($nome,$preco,$descricao,Categoria $categoria,$usado) {
$this->setNome($nome);
$this->setPreco($preco);
$this->setDescricao($descricao);
$this->setCategoria($categoria);
$this->setUsado($usado);
}
public function setId ($id) {
$this->id = $id;
}
public function getId () {
return $this->id;
}
public function setNome ($nome) {
$this->nome = $nome;
}
public function getNome () {
return $this->nome;
}
public function setDescricao ($descricao) {
$this->descricao = $descricao;
}
public function getDescricao () {
return $this->descricao;
}
public function setUsado ($usado) {
$this->usado = $usado;
}
public function getUsado () {
return $this->usado;
}
public function setCategoria ($categoria) {
$this->categoria = $categoria;
}
public function getCategoria () {
return $this->categoria;
}
public function valorDesconto ($valor) {
if ($valor <= 0.5 && $valor > 0) {
$this->preco -= $this->preco * $valor;
}
return $this->preco;
}
public function setPreco ($preco) {
if($preco > 0) {
$this->preco = $preco;
}
}
public function getPreco () {
return $this->preco;
}
}
E meu código do produto-formulario-base.php
<tr>
<td>Nome</td>
<td> <input class="form-control" type="text" name="nome" value="<?=$produto->getnome()?>"></td>
</tr>
<tr>
<td>Preço</td>
<td><input class="form-control" type="number" name="preco"
value="<?=$produto->getpreco()?>"></td>
</tr>
<tr>
<td>Descrição</td>
<td><textarea class="form-control" name="descricao"><?=$produto->getdescricao()?></textarea></td>
</tr>
<tr>
<td></td>
<td><input type="checkbox" name="usado" <?=$usado?> value="true"> Usado
</tr>
<tr>
<td>Categoria</td>
<td>
<select name="categoria_id" class="form-control">
<?php foreach($categorias as $categoria) :
$essaEhACategoria = $produto->getcategoria()->getid() == $categoria->getid();
$selecao = $essaEhACategoria ? "selected='selected'" : "";
?>
<option value="<?=$categoria->getid()?>" <?=$selecao?>>
<?=$categoria->getnome()?>
</option>
<?php endforeach ?>
</select>
</td>
</tr>