A função tem_erros() retorna false e o array $_post fica vazio;
A variável $tarefas retorna todas as tarefas mas a variável $tarefa fica vazia e $tarefa_id retorna null. Comparei meus códigos com os do livro e não encontrei a diferença:
<?php
class Tarefa{
private $id;
private $nome;
private $descricao;
private $prazo;
private $prioridade;
private $concluida;
private $anexos = [];
public function setId(int $id){
$this -> id = (int) $id;
}
public function getId($id) : int {
return $this -> $id;
}
public function setNome(string $nome){
$this -> nome = $nome;
}
public function getNome($nome) : string{
return $this -> $nome;
}
public function setDescricao( string $descricao){
$this -> descricao = $descricao;
}
public function getDescricao($descricao) : string {
return $this -> $descricao;
}
public function setPrazo( string $prazo){
$this -> prazo = $prazo;
}
public function getPrazo($prazo) : string {
return $this -> $prazo;
}
public function setPrioridade( int $prioridade){
$this -> prioridade = $prioridade;
}
public function getPrioridade($prioridade) : int {
return $this -> $prioridade;
}
public function setConcluida( bool $concluida){
$this -> concluida = $concluida;
}
public function getConcluida($concluida) : bool {
return $this -> $concluida;
}
public function setAnexos( array $anexos){
$this -> anexos = [];
foreach ($anexos as $anexo){
$this->adicionarAnexo($anexo);
}
}
public function adicionarAnexo(Anexo $anexo)
{
array_push($this->anexos, $anexo);
}
public function getAnexos() : array {
return $this -> anexos;
}
}
?>
A RepositorioTarefas ficou assim:
<?php
//Arquivo classes/RepositorioTarefas.php
class RepositorioTarefas
{
private $conexao;
public function __construct($conexao)
{
$this->conexao = $conexao;
}
public function salvar(Tarefa $tarefa)
{
$nome = $tarefa->getNome();
$descricao = $tarefa->getDescricao();
$prioridade = $tarefa->getPrioridade();
$prazo = $tarefa->getPrazo();
$concluida = ($tarefa->getConcluida()) ? 1 : 0;
if(is_object($prazo)){
$prazo = $prazo->format('Y-m-d');
}
$sqlGravar = "INSERT INTO tarefas
(nome, descricao, prioridade, prazo, concluida)
VALUES
('{$nome}'
'{$descricao}'
{$prioridade}
'{$prazo}'
{$concluida}
)";
$this->conexao->query($sqlGravar);
}
public function atualizar(Tarefa $tarefa)
{
$id = $tarefa->getId();
$nome = $tarefa->getNome();
$descricao = $tarefa->getDescricao();
$prioridade = $tarefa->getPrioridade();
$prazo = $tarefa->getPrazo();
$concluida = ($tarefa->getConcluida()) ? 1 : 0;
if(is_object($prazo)){
$prazo = $prazo->format('Y-m-d');
}
$sqlEditar = "UPDATE tarefas SET
nome = '{$nome}',
descricao = '{$descricao}',
prioridade = {$prioridade},
prazo = '{$prazo}',
concluida = {$concluida}
WHERE id = {$id}";
$this->conexao->query($sqlEditar);
}
public function buscar($tarefa_id = 0)
{
if ($tarefa_id > 0) {
return $this->buscar_tarefa($tarefa_id);
} else {
return $this->buscar_tarefas();
}
}
private function buscar_tarefas()
{
$sqlBusca = 'SELECT * FROM tarefas';
$resultado = $this->conexao->query($sqlBusca);
$tarefas = [];
while ($tarefa = $resultado->fetch_object('Tarefa')) {
$tarefas[] = $tarefa;
}
return $tarefas;
}
private function buscar_tarefa($tarefa_id)
{
$sqlBusca = "SELECT * FROM tarefas WHERE id = {$tarefa_id}";
$resultado = $this->conexao->query($sqlBusca);
$tarefa = $resultado->fetch_object('Tarefa');
return $tarefa;
}
function remover($tarefa_id)
{
$sqlRemover = "DELETE FROM tarefas WHERE id = {$tarefa_id}";
$this->conexao->query($sqlRemover);
}
}
?>
tarefas.php
<?php session_start();
require 'config.php';
require 'banco.php';
require 'ajudantes.php';
require 'classes/Tarefa.php';
require 'classes/RepositorioTarefas.php';
$repositorio_tarefas = new RepositorioTarefas($conexao);
$exibir_tabela = TRUE;
$tem_erros = FALSE;
$erros_validacao = [];
$tarefa = new Tarefa();
$tarefa->setPrioridade(1);
if(tem_post()){
$tarefa = [];
if(array_key_exists('nome', $_POST) && strlen($_POST['nome']) > 0){
$tarefa['nome'] = $_POST['nome'];
}else{
$tem_erros = true;
$erros_validacao['nome'] = 'O nome da tarefa é obrigatório!';}
if(array_key_exists('descricao', $_POST)){
$tarefa['descricao'] = $_POST['descricao'];
}else{
$tarefa['descricao'] = "";
}
if(array_key_exists('prazo', $_POST) && strlen($_POST['prazo']) > 0){
if(validar_data($_POST['prazo'])){
$tarefa['prazo'] = traduz_data_para_banco($_POST['prazo']);
} else {
$tem_erros = true;
$erros_validacao['prazo'] = 'O prazo não é uma data válida';}
}else {
$tarefa['prazo'] = "";
}
$tarefa['prioridade'] = $_POST['prioridade'];
if(array_key_exists('concluida', $_POST)){
$tarefa['concluida'] = 1;
}else{
$tarefa['concluida'] = 0;
}
if(!$tem_erros){
gravar_tarefa($conexao, $tarefa);
if(array_key_exists('lembrete', $_POST) && $_POST['lembrete'] == '1'){
enviar_email($tarefa);
}
header('location: tarefas.php');
die();
}
}
$tarefas = $repositorio_tarefas->buscar();
include "template.php";?>
E tabela.php:
<table>
<tr>
<th>Tarefas</th>
<th>Descriçao</th>
<th>Prazo</th>
<th>Prioridade</th>
<th>Concluída</th>
<th>Opções</th>
</tr>
<?php foreach($tarefas as $tarefa) : ?>
<tr>
<td>
<a href =“tarefa.php?id=<?php echo $tarefa->getId();?>”>
<?php echo $tarefa->getNome(); ?>
</a>
</td>
<td><?php echo $tarefa->getDescricao(); ?></td>
<td><?php echo traduz_data_para_exibir($tarefa->getPrazo()); ?></td>
<td><?php echo traduz_prioridade($tarefa->getPrioridade()); ?></td>
<td><?php echo traduz_concluida($tarefa-getConcluida()); ?></td>
<td>
<a href=“editar.php?id=<?php echo $tarefa->getId(); ?>”>Editar</a>
<a href=“remover.php?id=<?php echo $tarefa->getId(); ?>”>Remover</a>
</td>
</tr>
<?php endforeach; ?>
</table>