ساخت یک برنامه CRUD با PHP و رابط PDO
در دنیای توسعه وب، عملیات CRUD (Create, Read، Update، Delete) به عنوان پایه و اساس برنامهنویسی سمت سرور محسوب میشود. این عملیات، امکان مدیریت دادهها در پایگاه دادهها را فراهم میآورند و برای ایجاد برنامههای کاربردی، بسیار حیاتی هستند. یکی از بهترین روشها برای انجام این عملیات در PHP، استفاده از رابط PDO (PHP Data Objects) است که امنیت، انعطافپذیری و سادگی را به توسعهدهندگان ارائه میدهد. در ادامه، به صورت جامع و کامل، مراحل ساخت یک برنامه CRUD با PHP و PDO شرح داده میشود، به طوری که حتی افراد تازهکار هم بتوانند این روند را درک و پیادهسازی کنند.
مقدمات و نیازمندیها
قبل از هر چیز، باید یک پایگاه داده MySQL یا MariaDB راهاندازی کنید. فرض کنیم که پایگاه دادهای به نام `test_db` دارید و جدولی به نام `users` در آن ایجاد کردهاید. ساختار جدول میتواند به صورت زیر باشد:
sql
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
age INT
);
همچنین، باید اطمینان پیدا کنید که PHP روی سرور نصب شده است و قابلیت اتصال به پایگاه داده را دارد. در محیط توسعه محلی، میتوانید از XAMPP یا WAMP استفاده کنید که شامل PHP، MySQL و ابزارهای دیگر است.
ایجاد فایل اتصال به پایگاه داده (Database Connection)
در شروع، باید یک فایل جداگانه برای اتصال به پایگاه داده بنویسید، تا بتوانید در سایر فایلها به راحتی از آن استفاده کنید. این فایل، معمولا با نام `db.php` ذخیره میشود:
php
<?php
$host = 'localhost';
$db_name = 'test_db';
$username = 'root';
$password = '';
try {
$pdo = new PDO("mysql:host=$host;dbname=$db_name;charset=utf8", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
?>
در این قسمت، ما از PDO برای اتصال استفاده میکنیم، که خطاهای احتمالی را با استثنا مدیریت میکند و کاربر را در صورت مشکل، مطلع میسازد.
ایجاد صفحههای CRUD
حالا نوبت به ساخت صفحات مختلف میرسد که هر کدام وظیفه مخصوص خود را دارند: نمایش لیست کاربران، افزودن کاربر جدید، ویرایش، و حذف.
---
1. صفحه لیست کاربران (index.php)
این صفحه، تمامی کاربران را نمایش میدهد و لینکهایی برای ویرایش و حذف هر کاربر در اختیار قرار میدهد.
php
<?php
require 'db.php';
try {
$stmt = $pdo->prepare("SELECT * FROM users");
$stmt->execute();
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
die("Error fetching users: " . $e->getMessage());
}
?>
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8" />
<title>لیست کاربران</title>
</head>
<body>
<h1>لیست کاربران</h1>
<a href="create.php">افزودن کاربر جدید</a>
<table border="1" cellpadding="10" cellspacing="0">
<tr>
<th>ID</th>
<th>نام</th>
<th>ایمیل</th>
<th>سن</th>
<th>عملیات</th>
</tr>
<?php foreach ($users as $user): ?>
<tr>
<td><?= $user['id']; ?></td>
<td><?= htmlspecialchars($user['name']); ?></td>
<td><?= htmlspecialchars($user['email']); ?></td>
<td><?= $user['age']; ?></td>
<td>
<a href="edit.php?id=<?= $user['id']; ?>">ویرایش</a>
|
<a href="delete.php?id=<?= $user['id']; ?>" onclick="return confirm('آیا مطمئن هستید؟');">حذف</a>
</td>
</tr>
<?php endforeach; ?>
</table>
</body>
</html>
در این صفحه، ابتدا دادهها با استفاده از PDO فراخوانی میشوند و سپس در قالب جدول نمایش داده میشوند. لینکهای ویرایش و حذف، کاربر را به صفحات مربوطه هدایت میکنند.
---
2. صفحه افزودن کاربر (create.php)
در این صفحه، فرم ثبت اطلاعات جدید قرار دارد و پس از ارسال، دادهها در پایگاه داده ذخیره میشوند.
php
<?php
require 'db.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
$age = $_POST['age'] ?? '';
// اعتبارسنجی ساده
if ($name && $email && $age) {
try {
$stmt = $pdo->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$stmt->execute([$name, $email, $age]);
header('Location: index.php');
exit();
} catch (PDOException $e) {
die("Error inserting data: " . $e->getMessage());
}
} else {
$error = "لطفا تمام فیلدها را پر کنید.";
}
}
?>
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8" />
<title>افزودن کاربر جدید</title>
</head>
<body>
<h1>افزودن کاربر جدید</h1>
<?php if (isset($error)) echo "<p style='color:red;'>$error</p>"; ?>
<form method="POST" action="">
<label>نام:</label><br>
<input type="text" name="name" required><br><br>
<label>ایمیل:</label><br>
<input type="email" name="email" required><br><br>
<label>سن:</label><br>
<input type="number" name="age" required><br><br>
<button type="submit">ثبت</button>
</form>
<a href="index.php">بازگشت به لیست</a>
</body>
</html>
در این قسمت، دادههای فرم پس از تایید، در پایگاه داده درج میشوند. همچنین، اگر فیلدها خالی باشند، کاربر خطا را مشاهده میکند.
---
3. صفحه ویرایش کاربر (edit.php)
در این صفحه، اطلاعات کاربر بر اساس شناسه (`id`) موجود است و کاربر میتواند تغییرات لازم را انجام دهد.
php
<?php
require 'db.php';
$id = $_GET['id'] ?? null;
if (!$id) {
die("شناسه معتبر نیست.");
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = $_POST['name'] ?? '';
$email = $_POST['email'] ?? '';
$age = $_POST['age'] ?? '';
if ($name && $email && $age) {
try {
$stmt = $pdo->prepare("UPDATE users SET name=?, email=?, age=? WHERE id=?");
$stmt->execute([$name, $email, $age, $id]);
header('Location: index.php');
exit();
} catch (PDOException $e) {
die("Error updating data: " . $e->getMessage());
}
} else {
$error = "لطفا تمامی فیلدها را پر کنید.";
}
} else {
// دریافت اطلاعات کاربر
try {
$stmt = $pdo->prepare("SELECT * FROM users WHERE id=?");
$stmt->execute([$id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$user) {
die("کاربر یافت نشد.");
}
} catch (PDOException $e) {
die("Error fetching user: " . $e->getMessage());
}
}
?>
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8" />
<title>ویرایش کاربر</title>
</head>
<body>
<h1>ویرایش کاربر</h1>
<?php if (isset($error)) echo "<p style='color:red;'>$error</p>"; ?>
<form method="POST" action="">
<label>نام:</label><br>
<input type="text" name="name" value="<?= htmlspecialchars($user['name']); ?>" required><br><br>
<label>ایمیل:</label><br>
<input type="email" name="email" value="<?= htmlspecialchars($user['email']); ?>" required><br><br>
<label>سن:</label><br>
<input type="number" name="age" value="<?= $user['age']; ?>" required><br><br>
<button type="submit">ذخیره تغییرات</button>
</form>
<a href="index.php">بازگشت به لیست</a>
</body>
</html>
در این صفحه، اطلاعات قبلی کاربر بارگذاری میشود و کاربر میتواند تغییرات لازم را اعمال کند. پس از ثبت، دادهها بهروزرسانی میشوند.
---
4. صفحه حذف کاربر (delete.php)
در این صفحه، کاربر بر اساس شناسه حذف میشود و سپس به صفحه لیست برگردانده میشود.
php
<?php
require 'db.php';
$id = $_GET['id'] ?? null;
if (!$id) {
die("شناسه معتبر نیست.");
}
try {
$stmt = $pdo->prepare("DELETE FROM users WHERE id=?");
$stmt->execute([$id]);
header('Location: index.php');
exit();
} catch (PDOException $e) {
die("Error deleting user: " . $e->getMessage());
}
?>
در این قسمت، عملیات حذف با استفاده از PDO انجام میشود و پس از آن، کاربر به لیست برمیگردد.
---
جمعبندی و نکات مهم
در این فرآیند، ما چهار صفحه اصلی برای عملیات CRUD ساختیم که هر کدام وظیفه خاص خود را دارند. نکات کلیدی که باید در هنگام توسعه این برنامهها رعایت کنید، عبارتند از:
- استفاده از prepared statements در PDO برای جلوگیری از حملات SQL injection.
- اعتبارسنجی دادههای ورودی کاربران.
- مدیریت خطاهای احتمالی با try-catch.
- استفاده از htmlspecialchars برای جلوگیری از حملات XSS.
- طراحی رابط کاربری ساده و کاربرپسند.
علاوه بر این، میتوانید امکانات بیشتری مانند pagination، جستجو، فیلتر و امنیت بیشتر (مثلاً احراز هویت) را به برنامه اضافه کنید. در کل، ساخت برنامه CRUD با PHP و PDO، راهی سریع و امن برای مدیریت دادهها است و یادگیری آن، پایهای مهم در توسعه وب محسوب میشود.
در پایان، این پروژه نمونهای است که میتواند پایهای محکم برای پروژههای بزرگتر و پیچیدهتر باشد و به شما کمک میکند تا مفاهیم برنامهنویسی سمت سرور، ارتباط با پایگاه داده، امنیت و طراحی رابط کاربری را بهتر درک کنید.