تعلّم إنشاء نظام تسجيل دخول آمن بـ PHP وMySQL خطوة بخطوة
🔑 إنشاء نظام تسجيل دخول آمن بـ PHP وMySQL (خطوة بخطوة)
في هذا الدليل العملي سنبني نظام تسجيل دخول بسيط وآمن باستخدام PHP وMySQL مع تشفير كلمات المرور. كل الأكواد أدناه قابلة للنسخ مباشرة، ومهيأة للمبتدئين وأصحاب المشاريع الصغيرة.
ملخص سريع:
• قاعدة بيانات users — تخزين الاسم وكلمة المرور المشفرة.
•
• صفحات: التسجيل، الدخول، لوحة محمية، وتسجيل الخروج.
• قاعدة بيانات users — تخزين الاسم وكلمة المرور المشفرة.
•
password_hash() و password_verify() للحماية.• صفحات: التسجيل، الدخول، لوحة محمية، وتسجيل الخروج.
المتطلبات
- XAMPP/WAMP أو خادم PHP 8+ مع MySQL.
- من الأفضل تفعيل HTTPS في بيئة الإنتاج.
1) إنشاء قاعدة البيانات والجداول
CREATE DATABASE login_system CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE login_system;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2) ملف الاتصال بقاعدة البيانات db.php
<?php
$host = "localhost";
$user = "root";
$pass = "";
$db = "login_system";
$conn = new mysqli($host, $user, $pass, $db);
if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
$conn->set_charset("utf8mb4");
?>
3) صفحة التسجيل register.php
<?php
session_start();
require "db.php";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$username = trim($_POST["username"] ?? "");
$password = $_POST["password"] ?? "";
if ($username === "" || strlen($password) < 6) {
$msg = "الرجاء إدخال اسم مستخدم وكلمة مرور (6 أحرف على الأقل).";
} else {
$hash = password_hash($password, PASSWORD_DEFAULT);
$sql = "INSERT INTO users (username, password) VALUES (?, ?)";
$st = $conn->prepare($sql);
$st->bind_param("ss", $username, $hash);
if ($st->execute()) { $msg = "تم إنشاء الحساب. يمكنك تسجيل الدخول الآن."; }
else { $msg = "اسم المستخدم مستخدم مسبقًا."; }
}
}
?>
<form method="post" style="display:grid;gap:8px;max-width:360px;">
<input name="username" placeholder="اسم المستخدم" required>
<input name="password" type="password" placeholder="كلمة المرور" required>
<button>تسجيل حساب جديد</button>
</form>
<?= isset($msg)? "<p>$msg</p>" : "" ?>
4) صفحة تسجيل الدخول login.php
<?php
session_start();
require "db.php";
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$username = trim($_POST["username"] ?? "");
$password = $_POST["password"] ?? "";
$sql = "SELECT id, username, password FROM users WHERE username=?";
$st = $conn->prepare($sql);
$st->bind_param("s", $username);
$st->execute();
$res = $st->get_result();
if ($row = $res->fetch_assoc()) {
if (password_verify($password, $row["password"])) {
$_SESSION["uid"] = $row["id"];
$_SESSION["uname"] = $row["username"];
header("Location: dashboard.php"); exit;
} else { $msg = "❌ كلمة المرور غير صحيحة"; }
} else { $msg = "❌ اسم المستخدم غير موجود"; }
}
?>
<form method="post" style="display:grid;gap:8px;max-width:360px;">
<input name="username" placeholder="اسم المستخدم" required>
<input name="password" type="password" placeholder="كلمة المرور" required>
<button>تسجيل الدخول</button>
</form>
<?= isset($msg)? "<p>$msg</p>" : "" ?>
5) صفحة محمية dashboard.php
<?php
session_start();
if (!isset($_SESSION["uid"])) { header("Location: login.php"); exit; }
?>
<h2>مرحبًا <?= htmlspecialchars($_SESSION["uname"]) ?>!</h2>
<p>هذه صفحة محمية لا يراها إلا المستخدمون المسجلون.</p>
<p><a href="logout.php">تسجيل الخروج</a></p>
6) تسجيل الخروج logout.php
<?php
session_start();
session_unset();
session_destroy();
header("Location: login.php"); exit;
?>
نصائح أمان سريعة
- استخدم دائماً Prepared Statements (كما في الأمثلة) لمنع حقن SQL.
- طبّق حدًا لمحاولات الدخول الفاشلة (rate limiting) أو reCAPTCHA.
- احفظ الجلسات بأمان، وفعّل HTTPS في السيرفر الحقيقي.
- لا تخزّن كلمات المرور نصًا صريحًا؛ استخدم
password_hash()فقط.
دعوة للتفاعل:
تبغاني أجهز لك جزء التكملة (تفعيل البريد، إعادة تعيين كلمة المرور، أدوار المستخدمين)؟ اكتب في التعليقات.
تبغاني أجهز لك جزء التكملة (تفعيل البريد، إعادة تعيين كلمة المرور، أدوار المستخدمين)؟ اكتب في التعليقات.
كلمات مفتاحية
تسجيل دخول PHP, نظام تسجيل دخول, MySQL, تشفير كلمات المرور, برمجة مواقع, السعودية, الخليج
تعليقات
إرسال تعليق