php实现待办
PHP 实现待办事项功能
使用 PHP 实现待办事项功能需要结合数据库操作和前端交互。以下是一个简单的实现方法:
数据库设计
创建一张 todos 表,包含以下字段:
id: 主键,自增task: 任务内容completed: 完成状态,默认为 0created_at: 创建时间
CREATE TABLE todos (
id INT AUTO_INCREMENT PRIMARY KEY,
task VARCHAR(255) NOT NULL,
completed TINYINT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
连接数据库
$host = 'localhost';
$dbname = 'todo_db';
$username = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
添加待办事项
if (isset($_POST['add_task'])) {
$task = trim($_POST['task']);
if (!empty($task)) {
$stmt = $pdo->prepare("INSERT INTO todos (task) VALUES (:task)");
$stmt->execute([':task' => $task]);
}
}
显示待办事项
$stmt = $pdo->query("SELECT * FROM todos ORDER BY created_at DESC");
$todos = $stmt->fetchAll(PDO::FETCH_ASSOC);
标记完成/未完成
if (isset($_GET['toggle'])) {
$id = $_GET['toggle'];
$stmt = $pdo->prepare("UPDATE todos SET completed = 1 - completed WHERE id = :id");
$stmt->execute([':id' => $id]);
header("Location: index.php");
exit();
}
删除待办事项
if (isset($_GET['delete'])) {
$id = $_GET['delete'];
$stmt = $pdo->prepare("DELETE FROM todos WHERE id = :id");
$stmt->execute([':id' => $id]);
header("Location: index.php");
exit();
}
前端示例
<form method="post">
<input type="text" name="task" placeholder="添加新任务..." required>
<button type="submit" name="add_task">添加</button>
</form>
<ul>
<?php foreach ($todos as $todo): ?>
<li>
<span style="<?= $todo['completed'] ? 'text-decoration: line-through' : '' ?>">
<?= htmlspecialchars($todo['task']) ?>
</span>
<a href="?toggle=<?= $todo['id'] ?>"><?= $todo['completed'] ? '未完成' : '完成' ?></a>
<a href="?delete=<?= $todo['id'] ?>">删除</a>
</li>
<?php endforeach; ?>
</ul>
安全注意事项
- 使用预处理语句防止 SQL 注入
- 对输出内容使用
htmlspecialchars()防止 XSS 攻击 - 重要操作应验证用户权限
- 考虑使用 CSRF 令牌保护表单
扩展功能建议
- 添加任务分类功能
- 实现任务优先级
- 添加截止日期提醒
- 实现用户系统,使每个用户有自己的待办列表
- 添加搜索和过滤功能
这个基本实现可以进一步扩展为完整的待办事项应用。根据需求可以调整数据库结构和功能逻辑。







