نظام
كيف تنشئ نظام تسجيل دخول يحد المحاولات الفاشلة؟
لإنشاء نظام تسجيل دخول في PHP يمنع المستخدم من المحاولة لأكثر من ثلاث مرات خاطئة خلال فترة زمنية محددة، يمكن استخدام الجلسات (Sessions) أو قاعدة بيانات لتخزين عدد المحاولات ووقت الحظر.إعداد جدول قاعدة البياناتإنشاء جدول لتتبع المحاولات الفاشلة ووقت الحظر:CREATE TABLE login_attempts ( id INT AUTO_INCREMENT PRIMARY KEY, user_ip VARCHAR(45) NOT NULL, attempts INT DEFAULT 0, last_attempt DATETIME, blocked_until DATETIME);الكود الرئيسي للتحقق من تسجيل الدخول<?phpsession_start();$mysqli = new mysqli("localhost", "username", "password", "database");// التحقق من الاتصالif ($mysqli->connect_error) { die("Connection failed: " . $mysqli->connect_error);}// الحصول على عنوان IP الخاص بالمستخدم$user_ip = $_SERVER['REMOTE_ADDR'];$time_now = new DateTime();// استعلام المحاولات الفاشلة$stmt = $mysqli->prepare("SELECT attempts, blocked_until FROM login_attempts WHERE user_ip = ?");$stmt->bind_param("s", $user_ip);$stmt->execute();$result = $stmt->get_result();$row = $result->fetch_assoc();if ($row) { $attempts = $row['attempts']; $blocked_until = $row['blocked_until'] ? new DateTime($row['blocked_until']) : null; // التحقق مما إذا كان المستخدم محظورًا if ($blocked_until && $time_now < $blocked_until) { echo "تم حظرك. حاول مرة أخرى بعد " . $blocked_until->format('H:i:s'); exit; }} else { $attempts = 0; $blocked_until = null;}// معالجة تسجيل الدخولif ($_SERVER['REQUEST_METHOD'] === 'POST') { $username = $_POST['username']; $password = $_POST['password']; // استعلام للتحقق من صحة بيانات الدخول $stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); $stmt->bind_param("ss", $username, $password); $stmt->execute(); $user = $stmt->get_result()->fetch_assoc(); if ($user) { // نجاح تسجيل الدخول echo "مرحبًا بك، " . htmlspecialchars($username); // إعادة تعيين المحاولات $stmt = $mysqli->prepare("DELETE FROM login_attempts WHERE user_ip = ?"); $stmt->bind_param("s", $user_ip); $stmt->execute(); } else { // زيادة عدد المحاولات $attempts++; if ($attempts >= 3) { $blocked_until = $time_now->add(new DateInterval('PT10M')); } else { $blocked_until = null; } // تحديث أو إدراج المحاولات if ($row) { $stmt = $mysqli->prepare("UPDATE login_attempts SET attempts = ?, last_attempt = ?, blocked_until = ? WHERE user_ip = ?"); $stmt->bind_param("isss", $attempts, $time_now->format('Y-m-d H:i:s'), $blocked_until ? $blocked_until->format('Y-m-d H:i:s') : null, $user_ip); } else { $stmt = $mysqli->prepare("INSERT INTO login_attempts (user_ip, attempts, last_attempt, blocked_until) VALUES (?, ?, ?, ?)"); $stmt->bind_param("siss", $user_ip, $attempts, $time_now->format('Y-m-d H:i:s'), $blocked_until ? $blocked_until->format('Y-m-d H:i:s') : null); } $stmt->execute(); // رسالة خطأ if ($attempts >= 3) { echo "تم حظرك لمدة 10 دقائق بسبب المحاولات الفاشلة."; } else { echo "اسم المستخدم أو كلمة المرور غير صحيحة. لديك " . (3 - $attempts) . " محاولات متبقية."; } }}?><!-- نموذج تسجيل الدخول --><form method="POST"> اسم المستخدم: <input type="text" name="username" required> كلمة المرور: <input type="password" name="password" required> <button type="submit">تسجيل الدخول</button></form>شرح الكودالتحقق من عدد المحاولات: يتم تخزين عدد المحاولات وعنوان IP ووقت الحظر في قاعدة البيانات.الحظر عند الفشل: إذا تجاوز المستخدم الحد المسموح به، يتم حظره لمدة 10 دقائق.إعادة تعيين المحاولات: إذا تم تسجيل الدخول بنجاح، يتم حذف المحاولات الفاشلة.
كيف يمكن إنشاء نظام متكامل لتسجيل وتصنيف الطلبة باستخدام PHP؟
مرحبا بك في موسوعة معلومات سأقدم لك كودًا برمجيًا بسيطًا باستخدام PHP وMySQL لإنشاء نظام لتسجيل الطلبة مع تصنيفهم. النظام يشمل:صفحة إدخال معلومات الطالب.حفظ المعلومات في قاعدة البيانات.عرض قائمة الطلبة مع التصنيف.1. إعداد قاعدة البيانات:CREATE DATABASE student_management;USE student_management;CREATE TABLE students ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NULL, email VARCHAR(100), classification VARCHAR(50) NOT NULL);
2. صفحة إدخال معلومات الطالب (add_student.php):<?php// إعداد اتصال قاعدة البيانات$servername = "localhost";$username = "root";$password = "";$dbname = "student_management";$conn = new mysqli($servername, $username, $password, $dbname);// التحقق من الاتصالif ($conn->connect_error) { die("فشل الاتصال: " . $conn->connect_error);}// إضافة الطالب إلى قاعدة البياناتif ($_SERVER["REQUEST_METHOD"] == "POST") { $first_name = $_POST['first_name']; $last_name = $_POST['last_name']; $email = $_POST['email']; $classification = $_POST['classification']; $sql = "INSERT INTO students (first_name, last_name, email, classification) VALUES ('$first_name', '$last_name', '$email', '$classification')"; if ($conn->query($sql) === TRUE) { echo "تم إضافة الطالب بنجاح!"; } else { echo "خطأ: " . $sql . "<br>" . $conn->error; }}$conn->close();?><!DOCTYPE html><html lang="ar"><head> <meta charset="UTF-8"> <title>إضافة طالب</title></head><body> <h1>نموذج تسجيل طالب جديد</h1> <form method="POST" action="add_student.php"> <label for="first_name">الاسم:</label><br> <input type="text" name="first_name" required><br> <label for="last_name">اللقب:</label><br> <input type="text" name="last_name" required><br> <label for="email">البريد الإلكتروني:</label><br> <input type="email" name="email"><br> <label for="classification">تصنيف الطالب:</label><br> <select name="classification" required> <option value="ممتاز">ممتاز</option> <option value="جيد جدًا">جيد جدًا</option> <option value="جيد">جيد</option> <option value="متوسط">متوسط</option> </select><br><br> <input type="submit" value="إضافة الطالب"> </form></body></html>
3. صفحة عرض قائمة الطلبة (list_students.php):<?php$servername = "localhost";$username = "root";$password = "";$dbname = "student_management";$conn = new mysqli($servername, $username, $password, $dbname);// التحقق من الاتصالif ($conn->connect_error) { die("فشل الاتصال: " . $conn->connect_error);}// استرجاع معلومات الطلبة$sql = "SELECT * FROM students";$result = $conn->query($sql);?><!DOCTYPE html><html lang="ar"><head> <meta charset="UTF-8"> <title>قائمة الطلبة</title></head><body> <h1>قائمة الطلبة المسجلين</h1> <table border="1"> <tr> <th>الاسم</th> <th>اللقب</th> <th>البريد الإلكتروني</th> <th>التصنيف</th> </tr> <?php if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "<tr> <td>" . $row["first_name"] . "</td> <td>" . $row["last_name"] . "</td> <td>" . $row["email"] . "</td> <td>" . $row["classification"] . "</td> </tr>"; } } else { echo "<tr><td colspan='4'>لا يوجد طلبة مسجلين.</td></tr>"; } $conn->close(); ?> </table></body></html>شرح الكودقاعدة البيانات: تحتوي على جدول students لتخزين معلومات الطلبة مثل الاسم، اللقب، البريد الإلكتروني، والتصنيف.صفحة الإدخال: يتم إدخال البيانات عبر نموذج HTML بسيط، وإرسالها إلى قاعدة البيانات باستخدام استعلام INSERT.صفحة العرض: تعرض الطلبة المسجلين مع التصنيف الخاص بكل طالب.يمكنك تطوير هذا النظام أكثر بإضافة ميزات مثل التعديل، الحذف، أو البحث عن الطلبة.