Clique aqui e veja todas as aulas
1. Visão Geral da Edição de Tarefas
Para permitir a edição de uma tarefa, precisamos:
- Buscar os dados da tarefa atual no banco de dados.
- Exibir os dados em um formulário, permitindo que o usuário faça as alterações.
- Atualizar o banco de dados com as novas informações após a submissão do formulário.
2. Criando o Método updateTask()
Na classe Task.php, vamos implementar o método updateTask(), responsável por atualizar uma tarefa no banco de dados com base no ID da tarefa.
public function updateTask() {
$query = "UPDATE " . $this->table_name . "
SET name = ?, description = ?, status = ?
WHERE id = ?";
$stmt = $this->conn->prepare($query);
$stmt->bind_param("sssi", $this->name, $this->description, $this->status, $this->id);
return $stmt->execute();
}Aqui:
- A consulta SQL usa placeholders (
?) para prevenir ataques de SQL Injection. - A função
bind_param()associa os valores fornecidos pelo usuário aos placeholders na consulta. - O método retorna
truese a execução for bem-sucedida efalsecaso contrário.
3. Criando o Formulário de Edição
Agora vamos criar uma página edit_task.php que permitirá ao usuário editar uma tarefa existente. O formulário será preenchido com os dados atuais da tarefa, que poderão ser alterados e enviados para atualização.
<?php
require_once 'classes/Database.php';
require_once 'classes/Task.php';
$database = new Database();
$db = $database->getConnection();
$task = new Task($db);
// Verifica se um ID foi passado via GET
if (isset($_GET['id'])) {
$task->id = $_GET['id'];
$result = $task->getTaskById();
if ($result) {
$row = $result->fetch_assoc();
$task->name = $row['name'];
$task->description = $row['description'];
$task->status = $row['status'];
}
}
// Processar o formulário quando o usuário enviar
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$task->name = $_POST['name'];
$task->description = $_POST['description'];
$task->status = $_POST['status'];
if ($task->updateTask()) {
echo "Tarefa atualizada com sucesso!";
} else {
echo "Erro ao atualizar a tarefa.";
}
}
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Editar Tarefa</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<div class="container mt-5">
<h2>Editar Tarefa</h2>
<form method="post">
<div class="form-group">
<label for="name">Nome da Tarefa</label>
<input type="text" name="name" class="form-control" value="<?php echo $task->name; ?>" required>
</div>
<div class="form-group">
<label for="description">Descrição</label>
<textarea name="description" class="form-control" required><?php echo $task->description; ?></textarea>
</div>
<div class="form-group">
<label for="status">Status</label>
<input type="text" name="status" class="form-control" value="<?php echo $task->status; ?>" required>
</div>
<button type="submit" class="btn btn-primary">Atualizar Tarefa</button>
</form>
</div>
</body>
</html>4. Testando a Funcionalidade de Edição
Passo 1: Acesse a página
tasks.phpe, ao lado de cada tarefa, adicione um link "Editar" que levará à página de edição. O link deve passar o ID da tarefa pela URL.<a href="edit_task.php?id=<?php echo $row['id']; ?>" class="btn btn-warning btn-sm">Editar</a>- Passo 2: Após clicar no botão de "Editar", você será redirecionado para a página
edit_task.php, onde os dados atuais da tarefa serão carregados no formulário. Faça as alterações e clique em "Atualizar Tarefa" para ver se os dados são atualizados corretamente.
5. Segurança no Update
Aqui estão algumas práticas importantes para manter a segurança na funcionalidade de edição:
- SQL Injection: Utilizamos
prepare()ebind_param()para evitar ataques de SQL Injection. - Validação de Dados: Certifique-se de validar os dados do formulário antes de enviá-los para o banco de dados.
- Confirmação de Atualização: Adicione mensagens de confirmação para informar o usuário sobre o sucesso ou falha na operação de edição.
6. Exercício Prático
- Tente adicionar um campo de "Prioridade" para cada tarefa e inclua-o na funcionalidade de edição.
- Experimente adicionar um campo de "Data de Conclusão" para tarefas e implemente essa nova funcionalidade na classe
Task.
7. Próximos Passos
Na próxima aula, vamos continuar aprimorando nosso projeto, adicionando novas funcionalidades e recursos para tornar o sistema de tarefas mais robusto e completo.
