Boa noite! @evaldojuniorbento Pessoal estou mais uma vez incomodando com mais um problema que estou a ter: Notice: Undefined variable: mysqli in C:\xampp\htdocs\tarefas\tarefas.php on line 12
Fatal error: Call to a member function query() on null in C:\xampp\htdocs\tarefas\classes\RepositorioTarefas.php on line 7
Apresento o código do arquivo tarefas.php
<?php
session_start();
require "config.php";
require "banco.php";
require 'ajudantes.php';
require "classes/Tarefa.php";
require "classes/RepositorioTarefas.php";
// Passando a nossa conexao com MySQL que esta na variavel msqli
$repositorio_tarefas = new RepositorioTarefas($mysqli);
# Variavel de controlo para exibicao da tabela
$exibir_tabela = true;
# Esta variavel controla os erros de preenchimento dos campos do formulario
# Ficara true conforme as validacoes acontecerem
$tem_erros = false;
# Guardara erros de validacao
$erros_validacao = [];
$tarefa = new Tarefa();
$tarefa->setPrioridade(1);
# Verifica se existe algum indice no metodo post
if (tem_post()) {
//$tarefa = array();
# A funcao strlen() conta o tamanho de uma string
if (array_key_exists('nome', $_POST) && strlen($_POST['nome']) > 0) {
$tarefa->setNome($_POST['nome']);
} else {
$tem_erros = true;
$erros_validacao['nome'] = 'O nome da tarefa é obrigatório!';
}
# Verifica se existe algum indice igual a descricao
if (array_key_exists('descricao', $_POST)) {
$tarefa->setDescricao($_POST['descricao']);
} else {
$tarefa->descricao('');
}
if (array_key_exists('prazo', $_POST) && strlen($_POST['prazo']) > 0) {
if (validar_data($_POST['prazo'])) {
$tarefa->setPrazo(traduz_data_para_objecto($_POST['prazo']));
} else {
$tem_erros = true;
$erros_validacao['prazo'] = 'O prazo não é uma data válida!';
}
} else {
$tarefa->setPrazo('');
}
$tarefa->setPrioridade($_POST['prioridade']);
if (array_key_exists('concluida', $_POST)) {
$tarefa->setConcluida(true);
} else {
$tarefa->setConcluida(false);
}
# Grava somente quando nao houver erro
if (! $tem_erros) {
$repositorio_tarefas->salvar($tarefa);
if (array_key_exists('lembrete', $_POST) && $_POST['lembrete'] == '1') {
enviar_email($tarefa);
}
header('Location: tarefas.php');
die();
}
}
# Busca as tarefas na base de dados e atribui o resultado ao array $lista_tarefas
//$lista_tarefas = buscar_tarefas($conexao);
$tarefas = $repositorio_tarefas->buscar();
# Esta variavel vai ser exibida para evitar os erros de variavel nao definida
# Para o caso de prenchimento invalido do formulario tambem
/*$tarefa = [
'id' => 0,
'nome' => (array_key_exists('nome', $_POST)) ? $_POST['nome'] : '',
'descricao' => (array_key_exists('descricao', $_POST)) ? $_POST['descricao'] : '',
'prazo' => (array_key_exists('prazo', $_POST)) ? traduz_data_para_banco($_POST['prazo']) : '',
'prioridade' => (array_key_exists('prioridade', $_POST)) ? $_POST['prioridade'] : 1,
'concluida' => (array_key_exists('concluida', $_POST)) ? $_POST['concluida'] : ''
];*/
require "template.php";
?>
E agora apresento o código da classe RepositorioTarefas.php
<?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);
}
# $tarefa_id = 0 e um parametro opcional do metodo
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;
}
public function remover($tarefa_id) {
$sqlRemover = "DELETE FROM tarefas WHERE id = {$tarefa_id}";
$this->conexao->query($sqlRemover);
}
}
?>