كود PHP و MySQL لإنشاء منتدى بسيط: دليل عملي للمبتدئين
إنشاء منتدى بسيط باستخدام PHP و MySQL يمكن أن يكون مشروعًا تعليميًا رائعًا. دعنا نبدأ بدليل عملي خطوة بخطوة لإنشاء منتدى بسيط.
المتطلبات الأساسية لإنشاء منتدى بسيط
خادم ويب: مثل Apache
- قاعدة بيانات MySQL
- PHP
إعداد قاعدة البيانات
سنبدأ بإنشاء قاعدة البيانات والجداول اللازمة.
إنشاء قاعدة البيانات
CREATE DATABASE forum;
USE forum;
إنشاء الجداول
-- جدول المستخدمين
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- جدول الفئات
CREATE TABLE categories (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- جدول المواضيع
CREATE TABLE topics (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
category_id INT,
title VARCHAR(100) NOT NULL,
body TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (category_id) REFERENCES categories(id)
);-- جدول الردود
CREATE TABLE replies (
id INT AUTO_INCREMENT PRIMARY KEY,
topic_id INT,
user_id INT,
body TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (topic_id) REFERENCES topics(id),
FOREIGN KEY (user_id) REFERENCES users(id)
);
إنشاء صفحات PHP
ملف الاتصال بقاعدة البيانات db.php
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "forum";// إنشاء الاتصال
$conn = new mysqli($servername, $username, $password, $dbname);// التحقق من الاتصال
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
?>
صفحة التسجيل register.php
<?php
include 'db.php';if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);$sql = "INSERT INTO users (username, password) VALUES ('$username', '$password')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
?><!DOCTYPE html>
<html>
<head>
<title>Register</title>
</head>
<body>
<form method="POST" action="register.php">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="Register">
</form>
</body>
</html>
صفحة تسجيل الدخول login.php
<?php
include 'db.php';
session_start();if ($_SERVER["REQUEST_METHOD"] == "POST") {
$username = $_POST['username'];
$password = $_POST['password'];$sql = "SELECT * FROM users WHERE username = '$username'";
$result = $conn->query($sql);if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
if (password_verify($password, $row['password'])) {
$_SESSION['user_id'] = $row['id'];
header("Location: index.php");
} else {
echo "Invalid password.";
}
} else {
echo "No user found.";
}
}
?><!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="POST" action="login.php">
Username: <input type="text" name="username"><br>
Password: <input type="password" name="password"><br>
<input type="submit" value="Login">
</form>
</body>
</html>
صفحة الفئة category.php
<?php
include 'db.php';
session_start();if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}$category_id = $_GET['id'];
$sql = "SELECT * FROM topics WHERE category_id = $category_id";
$topics = $conn->query($sql);
?><!DOCTYPE html>
<html>
<head>
<title>Category</title>
</head>
<body>
<h1>Topics in Category</h1>
<ul>
<?php while($topic = $topics->fetch_assoc()): ?>
<li><a href="topic.php?id=<?= $topic['id'] ?>"><?= $topic['title'] ?></a></li>
<?php endwhile; ?>
</ul>
<a href="new_topic.php?category_id=<?= $category_id ?>">Create New Topic</a>
</body>
</html>
صفحة الموضوع topic.php
<?php
include 'db.php';
session_start();if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}$topic_id = $_GET['id'];
$sql = "SELECT * FROM topics WHERE id = $topic_id";
$topic = $conn->query($sql)->fetch_assoc();$sql = "SELECT * FROM replies WHERE topic_id = $topic_id";
$replies = $conn->query($sql);
?><!DOCTYPE html>
<html>
<head>
<title>Topic</title>
</head>
<body>
<h1><?= $topic['title'] ?></h1>
<p><?= $topic['body'] ?></p>
<h2>Replies</h2>
<ul>
<?php while($reply = $replies->fetch_assoc()): ?>
<li><?= $reply['body'] ?></li>
<?php endwhile; ?>
</ul>
<form method="POST" action="reply.php">
<input type="hidden" name="topic_id" value="<?= $topic_id ?>">
<textarea name="body"></textarea><br>
<input type="submit" value="Reply">
</form>
</body>
</html>
صفحة إنشاء موضوع جديد new_topic.php
<?php
include 'db.php';
session_start();if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit();
}if ($_SERVER["REQUEST_METHOD"] == "POST") {
$user_id = $_SESSION['user_id'];
$category_id = $_POST['category_id'];
$title = $_POST['title'];
$body = $_POST['body'];$sql = "INSERT INTO topics (user_id, category_id, title, body) VALUES ('$user_id', '$category_id', '$title', '$body')";
if ($conn->query($sql) === TRUE) {
header("Location: category.php?id=$category_id");
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
?><!DOCTYPE html>
<html>
<head>
<title>New Topic</title>
</head>
<body>
<form method="POST" action="new_topic.php">
<input type="hidden" name="category_id" value="<?= $_GET['category_id'] ?>">
Title: <input type="text" name="title"><br>
Body: <textarea name="body"></textarea><br>
<input type="submit" value="Create">
</form>
</body>
</html>
صفحة الرد على موضوع reply.php
<?php
include 'db.php';
session_start();if ($_SERVER["REQUEST_METHOD"] == "POST") {
$user_id = $_SESSION['user_id'];
$topic_id = $_POST['topic_id'];
$body = $_POST['body'];$sql = "INSERT INTO replies (topic_id, user_id, body) VALUES ('$topic_id', '$user_id', '$body')";
if ($conn->query($sql) === TRUE) {
header("Location: topic.php?id=$topic_id");
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
?>
هذا الدليل يغطي الأساسيات لإنشاء منتدى بسيط باستخدام PHP و MySQL. يمكنك تحسين وتوسيع هذا المنتدى بإضافة ميزات أخرى مثل إدارة المستخدمين، وتنسيق النصوص، والإشعارات، وغيرها.