سیستم لیست وظایف یا همان To-Do List یکی از پروژههای پایهای و در عین حال کاربردی در دنیای برنامهنویسی است که به راحتی میتواند نشان دهد چگونه با PHP و تکنولوژیهای مرتبط، یک سامانه کاربرپسند و قابل توسعه ساخته شود. در این مقاله، قصد دارم به صورت کامل و جامع، موضوع «اسکریپت سیستم لیست وظایف با PHP» را شرح دهم، از مفاهیم پایه گرفته تا جزئیات فنی و نکات مهم در پیادهسازی.
مقدمهای بر سیستم لیست وظایف
سیستم لیست وظایف، برنامهای است که به کاربران امکان میدهد وظایف مختلف خود را ثبت، مدیریت و پیگیری کنند. این نوع برنامهها، ساده اما موثر هستند، چون به کاربران کمک میکنند تا کارهای روزمره، پروژهها یا اهداف کوتاهمدت و بلندمدت خود را منظم کنند. پیادهسازی چنین سیستمی، فرصت خوبی است تا مفاهیم کلیدی PHP، مانند کار با پایگاه داده، مدیریت فرمها، عملیات CRUD (ایجاد، خواندن، بروزرسانی، حذف) و امنیت را تمرین کنیم.
ساختار کلی سیستم
در طراحی این سیستم، چند بخش اصلی باید در نظر گرفته شود:
1. صفحه اصلی (لیست وظایف): جایی که وظایف ثبت شده نمایش داده میشوند.
2. فرم افزودن وظیفه جدید: بخش کاربری برای وارد کردن وظایف جدید.
3. ویرایش وظایف موجود: امکان تغییر و اصلاح وظایف.
4. حذف وظایف: قابلیت حذف وظایف غیرضروری یا تکمیل شده.
5. پایگاه داده: جایی که دادهها ذخیره میشوند.
برای سادگی، فرض میکنیم سیستم روی سرور محلی یا سرور وب فعال راهاندازی شده است و از پایگاه داده MySQL استفاده میشود.
طراحی پایگاه داده
در مرحله اول، باید یک جدول مناسب در پایگاه داده ایجاد کنیم. فرض کنید نام جدول، `tasks` است. ساختار جدول میتواند شامل فیلدهای زیر باشد:
- `id` (کلید اصلی، خودافزا، авто اینکریمنت)
- `title` (عنوان وظیفه)
- `description` (توضیحات مربوط به وظیفه)
- `status` (وضعیت انجام، مثلا "در حال انجام" یا "تکمیل شده")
- `created_at` (تاریخ ثبت وظیفه)
- `updated_at` (تاریخ آخرین ویرایش)
کد SQL برای ساخت این جدول:
sql
CREATE TABLE tasks (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
description TEXT,
status VARCHAR(50) DEFAULT 'در حال انجام',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
پیادهسازی بخشهای PHP
در ادامه، باید فایلهای PHP مربوط به عملیات مختلف را توسعه دهیم. معمولا، بهتر است این فایلها در ساختاری منطقی و منسجم قرار بگیرند، مثلا در پوشهای به نام `includes` یا `functions`.
۱. اتصال به پایگاه داده
یک فایل جدا به نام `db.php` ایجاد میکنیم که مسؤولیت برقراری ارتباط با پایگاه داده را بر عهده دارد:
php
<?php
$conn = new mysqli('localhost', 'username', 'password', 'database_name');
if ($conn->connect_error) {
die("ارتباط برقرار نشد: " . $conn->connect_error);
}
?>
این فایل، هر بار که نیاز باشد، باید در فایلهای دیگر وارد شود.
۲. صفحه اصلی (نمایش وظایف)
در فایل `index.php`، لیست وظایف را نمایش میدهیم. ابتدا، ارتباط با پایگاه داده برقرار میکنیم، سپس دادهها را بازیابی و نمایش میدهیم:
php
<?php
include 'db.php';
$result = $conn->query("SELECT * FROM tasks ORDER BY created_at DESC");
?>
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8" />
<title>لیست وظایف</title>
</head>
<body>
<h1>لیست وظایف</h1>
<a href="add_task.php">وظیفه جدید</a>
<ul>
<?php while($row = $result->fetch_assoc()): ?>
<li>
<?php echo htmlspecialchars($row['title']); ?>
<a href="edit_task.php?id=<?php echo $row['id']; ?>">ویرایش</a>
<a href="delete_task.php?id=<?php echo $row['id']; ?>">حذف</a>
</li>
<?php endwhile; ?>
</ul>
</body>
</html>
در این قسمت، وظایف به صورت لیستی نمایش داده میشوند و لینکهایی برای ویرایش و حذف هر وظیفه وجود دارد.
۳. افزودن وظیفه جدید
در فایل `add_task.php`، فرم برای وارد کردن وظیفه جدید قرار میگیرد. پس از ارسال فرم، عملیات درج در پایگاه داده انجام میشود:
php
<?php
include 'db.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$title = $_POST['title'];
$description = $_POST['description'];
$stmt = $conn->prepare("INSERT INTO tasks (title, description) VALUES (?, ?)");
$stmt->bind_param('ss', $title, $description);
$stmt->execute();
header('Location: index.php');
}
?>
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8" />
<title>وظیفه جدید</title>
</head>
<body>
<h1>افزودن وظیفه جدید</h1>
<form method="post" action="">
<label>عنوان وظیفه:</label><br />
<input type="text" name="title" required /><br />
<label>توضیحات:</label><br />
<textarea name="description"></textarea><br />
<button type="submit">افزودن</button>
</form>
</body>
</html>
در اینجا، پس از ثبت وظیفه، کاربر به صفحه اصلی بازمیگردد.
۴. ویرایش وظیفه
در فایل `edit_task.php`، کاربر میتواند وظیفه موجود را تغییر دهد. ابتدا، شناسه وظیفه را میگیریم، دادهها را بازیابی و در فرم قرار میدهیم، سپس پس از تغییر، بروزرسانی در پایگاه داده انجام میشود:
php
<?php
include 'db.php';
$id = $_GET['id'];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$title = $_POST['title'];
$description = $_POST['description'];
$stmt = $conn->prepare("UPDATE tasks SET title=?, description=? WHERE id=?");
$stmt->bind_param('ssi', $title, $description, $id);
$stmt->execute();
header('Location: index.php');
} else {
$result = $conn->query("SELECT * FROM tasks WHERE id=$id");
$task = $result->fetch_assoc();
}
?>
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8" />
<title>ویرایش وظیفه</title>
</head>
<body>
<h1>ویرایش وظیفه</h1>
<form method="post" action="">
<label>عنوان وظیفه:</label><br />
<input type="text" name="title" value="<?php echo htmlspecialchars($task['title']); ?>" required /><br />
<label>توضیحات:</label><br />
<textarea name="description"><?php echo htmlspecialchars($task['description']); ?></textarea><br />
<button type="submit">ذخیره</button>
</form>
</body>
</html>
نکات امنیتی و بهبودها
در پروژههای واقعی، باید امنیت دادهها را مدنظر داشت، مثلا از ضد حملات SQL Injection با استفاده از prepared statements بهره برد. همچنین، باید اعتبارسنجی فرمها، مدیریت خطاها و امکاناتی مانند فیلتر وظایف بر اساس وضعیت را اضافه کرد. برای توسعه بیشتر، میتوان از فریمورکهای PHP مانند Laravel یا Symfony بهره گرفت، یا از AJAX برای بهروزرسانیهای بدون نیاز به رفرش صفحه استفاده کرد.
نتیجهگیری
در مجموع، ساخت یک سیستم لیست وظایف با PHP، نه تنها تمرین خوبی برای فهم عملیات پایهای در برنامهنویسی وب است، بلکه پایهای است برای توسعه برنامههای پیچیدهتر. این پروژه، مفاهیم کلیدی مانند کار با پایگاه داده، مدیریت فرمها، عملیات CRUD و امنیت را به خوبی نشان میدهد. با افزودن امکانات پیشرفتهتر مانند ورود و ثبتنام کاربر، اعلانها، و همگامسازی با سرویسهای دیگر، میتوان این سیستم را به یک ابزار کامل و کاربرپسند تبدیل کرد.
امیدوارم این توضیحات جامع، راهنمای خوبی برای شروع و توسعه سیستم لیست وظایف با PHP باشد.