🏆 درس نهم: پروژه نهایی سطح متوسط؛ ساخت وبلاگ شخصی با قابلیت مدیریت محتوا
🎯 هدف این درس: ترکیب تمام آموختههای دوره (PDO, Sessions, OOP, MVC, Security, File Upload) در یک پروژه واقعی و کامل. ساخت یک سیستم وبلاگ ساده که امکان ثبتنام، ورود، نوشتن مطلب و آپلود تصویر را داشته باشد.
مهمان عزیز! 👋
تبریک میگویم! تو تا اینجا راه طولانی و پرفراز و نشیبی را طی کردهای. از نصب XAMPP شروع کردی و حالا به نقطهای رسیدهای که میتوانی یک سیستم کامل وبمحور بسازی.
در این درس آخر، دیگر کد جدیدی یاد نمیگیریم؛ بلکه تمام قطعات پازل را کنار هم میچینیم. ما یک «وبلاگ شخصی» میسازیم که دارای دو بخش است:
1. بخش عمومی: نمایش لیست مطالب برای همه بازدیدکنندگان.
2. پنل مدیریت: فضایی امن برای ادمین جهت افزودن مطلب جدید همراه با تصویر.
💡 ویژگیهای کلیدی پروژه:
- استفاده از ساختار MVC برای نظم دهی.
- امنیت کامل در لاگین (Hashing & Sessions).
- آپلود امن تصاویر برای مطالب.
- جلوگیری از حملات XSS و SQL Injection.
🗄️ مرحله ۱: طراحی دیتابیس
ما به دو جدول نیاز داریم: یکی برای کاربران (admins) و دیگری برای مطالب (posts).
database.sql
SQL
MySQL
CREATE TABLE admins (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL
);
CREATE TABLE posts (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
image VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
// ایجاد یک ادمین تستی (رمز عبور: 123456)
INSERT INTO admins (username, password)
VALUES ('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi');
🧠 مرحله ۲: مدلها (Models)
کلاسهایی میسازیم که مسئولیت ارتباط با دیتابیس را بر عهده دارند.
models/Post.php
PHP
8.x
<?php
class Post {
private $pdo;
public function __construct($pdo) {
$this->pdo = $pdo;
}
public function getAll() {
$stmt = $this->pdo->query("SELECT * FROM posts ORDER BY id DESC");
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
public function create($title, $content, $image) {
$stmt = $this->pdo->prepare("INSERT INTO posts (title, content, image) VALUES (?, ?, ?)");
return $stmt->execute([$title, $content, $image]);
}
}
🎮 مرحله ۳: کنترلر (Controller)
منطق اصلی برنامه اینجا قرار دارد. بررسی لاگین، دریافت دادههای فرم و هدایت کاربر.
controllers/AdminController.php
PHP
8.x
<?php
class AdminController {
private $postModel;
public function __construct($pdo) {
$this->postModel = new Post($pdo);
}
public function storePost() {
// بررسی امنیت و لاگین بودن
if (!isset($_SESSION['admin_id'])) die("دسترسی غیرمجاز");
$title = htmlspecialchars($_POST['title']);
$content = $_POST['content'];
// مدیریت آپلود فایل (طبق درس ۳)
$imageName = $_FILES['image']['name'];
move_uploaded_file($_FILES['image']['tmp_name'], "uploads/" . $imageName);
$this->postModel->create($title, $content, $imageName);
header("Location: index.php");
}
}
🎨 مرحله ۴: نما (View)
نمایش لیست مطالب در صفحه اصلی.
views/home.php
PHP/HTML
Mixed
<h1>آخرین مطالب وبلاگ</h1>
<div class="posts-grid">
<?php foreach ($posts as $post): ?>
<article>
<img src"uploads/<?= $post['image'] ?>" alt"<?= $post['title'] ?>">
<h2><?= htmlspecialchars($post['title']) ?></h2>
<p><?= substr($post['content'], 0, 100) ?>...</p>
</article>
<?php endforeach; ?>
</div>
🏁 جمعبندی نهایی دوره
مهمان عزیز، تو اکنون یک توسعهدهنده PHP مقدماتی نیستی؛ تو کسی هستی که میداند چگونه یک سیستم امن، ساختاریافته و پویا بسازد.
- ✅ تسلط بر دیتابیس و PDO.
- ✅ درک عمیق از Sessions و امنیت کاربر.
- ✅ توانایی کار با فایلها و APIها.
- ✅ آشنایی با معماری MVC و شیگرایی.
🎓 قدم بعدی چیست؟
پیشنهاد میکنیم برای حرفهایتر شدن، سراغ یادگیری یک فریمورک مدرن مثل Laravel بروید یا دورههای پیشرفتهتر رجستری را دنبال کنید.
🗺️ نقشه راه دوره: پایان مسیر
تو با موفقیت تمام دروس این دوره را پشت سر گذاشتی. امیدواریم این دانش پایهای محکم برای آینده شغلی تو باشد.
| درس | عنوان درس | وضعیت |
|---|---|---|
| ۱ تا ۸ | دروس قبلی… | ✅ تکمیل شده |
| ۹ | پروژه نهایی سطح متوسط | 🏆 در حال انجام |



