PHP
كيف تنشئ نظام تسجيل دخول يحد المحاولات الفاشلة؟
لإنشاء نظام تسجيل دخول في 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.صفحة العرض: تعرض الطلبة المسجلين مع التصنيف الخاص بكل طالب.يمكنك تطوير هذا النظام أكثر بإضافة ميزات مثل التعديل، الحذف، أو البحث عن الطلبة.
كيف يمكن التحقق من عدد المستخدمين النشطين حاليًا على الموقع باستخدام PHP؟
بسم الله والصلاة والسلام على رسول الله،يمكنك التحقق من عدد المستخدمين النشطين حاليًا في جلسة معينة باستخدام PHP مع تخزين الجلسات (Sessions) في قاعدة بيانات. سأوضح لك الطريقة الأساسية لتنفيذ ذلك:الخطوات:تخزين معلومات الجلسات في قاعدة بيانات.تحديث حالة المستخدم عند تسجيل الدخول والخروج.حساب عدد المستخدمين النشطين.1. إعداد قاعدة البياناتCREATE DATABASE user_sessions;USE user_sessions;CREATE TABLE sessions ( session_id VARCHAR(128) PRIMARY KEY, user_id INT NOT NULL, last_activity TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);2. كود التحقق وإدارة الجلسات (session_manager.php)<?php// إعداد اتصال قاعدة البيانات$servername = "localhost";$username = "root";$password = "";$dbname = "user_sessions";$conn = new mysqli($servername, $username, $password, $dbname);// التحقق من الاتصالif ($conn->connect_error) { die("فشل الاتصال: " . $conn->connect_error);}// بدء الجلسةsession_start();// تحديد معرف المستخدم (مثال: 1)$user_id = 1; // هذا يجب تغييره بناءً على المستخدم الفعلي// تحديث أو إدخال الجلسة في قاعدة البيانات$session_id = session_id();$sql = "REPLACE INTO sessions (session_id, user_id, last_activity) VALUES ('$session_id', '$user_id', NOW())";$conn->query($sql);// حذف الجلسات القديمة (مثلاً، الجلسات غير النشطة لمدة 5 دقائق)$conn->query("DELETE FROM sessions WHERE last_activity < NOW() - INTERVAL 5 MINUTE");// حساب عدد المستخدمين النشطين$result = $conn->query("SELECT COUNT(*) AS active_users FROM sessions");$row = $result->fetch_assoc();$active_users = $row['active_users'];echo "عدد المستخدمين النشطين حاليًا: " . $active_users;$conn->close();?>شرح الكودتحديث الجلسة: يتم تحديث أو إدخال الجلسة في جدول قاعدة البيانات باستخدام REPLACE INTO.تنظيف الجلسات القديمة: يتم حذف الجلسات غير النشطة لأكثر من 5 دقائق.حساب المستخدمين النشطين: يتم استخدام استعلام COUNT لحساب الجلسات النشطة حاليًا.ملاحظة:يمكنك تعديل الفترة الزمنية لحذف الجلسات غير النشطة وفقًا لاحتياجات موقعك.تأكد من أن كل مستخدم يحصل على user_id فريد عند تسجيل الدخول.
ما هي تطبيقات البرمجية السهلة التي يمكن تنفيذها بلغة PHP؟
1. مدونة بسيطةالوصف: إنشاء مدونة بسيطة حيث يمكن للمستخدمين نشر المقالات.المميزات: كتابة المقالات، عرض قائمة المقالات، قراءة المقالات.2. نظام إدارة المهام الشخصية (To-Do List)الوصف: تطبيق لإدارة المهام اليومية.المميزات: إضافة المهام، عرض قائمة المهام، تعليم المهام كمكتملة.3. نموذج الاتصال (Contact Form)الوصف: إنشاء نموذج اتصال يمكن للمستخدمين استخدامه لإرسال الرسائل.المميزات: إدخال الاسم والبريد الإلكتروني والرسالة، إرسال البيانات إلى بريد إلكتروني أو قاعدة بيانات.4. آلة حاسبة بسيطةالوصف: تطبيق ويب بسيط يقوم بالعمليات الحسابية الأساسية.المميزات: جمع، طرح، ضرب، قسمة.5. دليل العناوينالوصف: تطبيق لتخزين وعرض عناوين الأشخاص.المميزات: إضافة، تعديل، وحذف العناوين.6. كتاب الضيوف (Guestbook)الوصف: صفحة ويب حيث يمكن للزوار ترك تعليقات ورسائل.المميزات: كتابة التعليقات، عرض قائمة التعليقات.7. نظام تسجيل دخول بسيطالوصف: نظام يسمح للمستخدمين بتسجيل الدخول والخروج.المميزات: إنشاء حسابات، تسجيل الدخول، تسجيل الخروج.8. عرض الصور (Photo Gallery)الوصف: تطبيق بسيط لعرض الصور المرفوعة.المميزات: رفع الصور، عرض الصور في شبكة، حذف الصور.9. مدونة مصغرة (Microblogging)الوصف: تطبيق مشابه لتويتر ولكن بميزات محدودة.المميزات: نشر التحديثات القصيرة، عرض التحديثات، حذف التحديثات.10. مفكرة (Note-taking App)الوصف: تطبيق لتسجيل الملاحظات.المميزات: إضافة الملاحظات، عرض الملاحظات، تعديل وحذف الملاحظات.11. عداد الزوارالوصف: تطبيق يعرض عدد الزيارات للصفحة.المميزات: عداد بسيط يزيد مع كل زيارة جديدة.12. مدقق الكلمات (Word Counter)الوصف: تطبيق يعد الكلمات في النصوص المدخلة.المميزات: إدخال النص، عرض عدد الكلمات.المصادر والتعلم:يمكنك استخدام دروس PHP على مواقع مثل W3Schools أو PHP.net للحصول على أمثلة وشروحات حول كيفية بناء هذه التطبيقات.اختر أحد هذه المشاريع وابدأ في تطويره، وستجد أن تجربة بناء تطبيقات بسيطة ستساعدك كثيرًا في تحسين مهاراتك البرمجية بلغة PHP.
كيف يمكن تطوير نظام قوالب باستخدام XML في PHP؟
لتطوير نظام قوالب باستخدام XML في PHP، يمكنك اتباع هذه الخطوات الأساسية:تحديد هيكل القالب في XML:قم بتحديد هيكل القالب الذي ترغب في استخدامه باستخدام XML. يمكنك تعريف متغيرات للبيانات المتغيرة وتحديد مكانها في القالب.إنشاء ملفات XML للقوالب:قم بإنشاء ملفات XML لكل قالب، حيث يحتوي كل ملف على هيكل القالب والبيانات المتغيرة التي يجب عرضها.قراءة ملفات XML في PHP:استخدم PHP لقراءة ملفات XML واستخراج هيكل القالب والمتغيرات منها. يمكنك استخدام SimpleXML أو DOMDocument لهذه الغرض.تحميل القوالب في الصفحات الخاصة بك:عند تحميل صفحة تحتوي على قالب، استخدم PHP لقراءة الملف الخاص بالقالب وتعبئة البيانات المتغيرة في الصفحة.تعديل القوالب بسهولة:بفضل استخدام XML، يمكنك تعديل القوالب بسهولة عبر تعديل ملفات XML، دون الحاجة إلى تعديل مباشر في الكود PHP.إضافة مزيد من المرونة:يمكنك توسيع النظام ليشمل ميزات مثل الوراثة بين القوالب (inheritance)، حيث يمكنك استخدام قوالب أساسية تورث منها قوالب فرعية مع تعديلات بسيطة.اختبار النظام والتحسين:قم بإجراء اختبارات للنظام الخاص بك للتأكد من عمله بشكل صحيح، واحرص على تحسينه بناءً على الملاحظات والتغذية الراجعة.باستخدام هذه الخطوات، يمكنك بناء نظام قوالب مرن وقابل للتعديل باستخدام XML في PHP بطريقة فعالة ومنظمة.لنقدم مثالًا بسيطًا لنظام قوالب باستخدام XML في PHP، نفترض أننا نريد إنشاء قالب بسيط لصفحة HTML باستخدام XML لتحديد هيكل الصفحة والمتغيرات المختلفة. هذا المثال سيظهر كيفية استخدام XML لتعريف القالب واستخدام PHP لملء البيانات المتغيرة في الصفحة.ملف القالب (template.xml)<!-- template.xml --><template> <header> <title>{{title}}</title> </header> <body> <div class="content"> <h1>{{heading}}</h1> <p>{{content}}</p> </div> </body></template>ملف PHP لقراءة وتطبيق القالب (template.php)<?php// Load and parse the template XML file$templateFile = 'template.xml';$xml = simplexml_load_file($templateFile);// Simulated data (can come from a database or another source)$data = array( 'title' => 'Welcome to My Site', 'heading' => 'Hello, World!', 'content' => 'This is a sample content paragraph.');// Function to replace placeholders with actual datafunction replacePlaceholders($content, $data) { foreach ($data as $key => $value) { $placeholder = '{{' . $key . '}}'; $content = str_replace($placeholder, $value, $content); } return $content;}// Replace placeholders in the template$title = (string)$xml->header->title;$title = replacePlaceholders($title, $data);$heading = (string)$xml->body->div->h1;$heading = replacePlaceholders($heading, $data);$content = (string)$xml->body->div->p;$content = replacePlaceholders($content, $data);// Output the HTML with replaced dataecho "<!DOCTYPE html>\n";echo "<html>\n";echo "<head>\n";echo "<title>{$title}</title>\n";echo "</head>\n";echo "<body>\n";echo "<div class=\"content\">\n";echo "<h1>{$heading}</h1>\n";echo "<p>{$content}</p>\n";echo "</div>\n";echo "</body>\n";echo "</html>";?>Expalanation:template.xml: يحدد هيكل القالب باستخدام XML، حيث يحتوي على عناصر <header> و <body> مع بعض البيانات المتغيرة التي تبدأ وتنتهي بـ {{ }}.template.php: يستخدم PHP لقراءة ملف القالب XML واستبدال المتغيرات {{ }} بالبيانات الفعلية من المصدر (في هذه الحالة، متغيرات محاكاة).بهذا المثال، يمكنك تطبيق أنظمة قوالب مرنة باستخدام XML في PHP، مما يتيح لك تعديل وتخصيص الصفحات بسهولة عبر تعديل ملفات XML فقط دون الحاجة إلى تعديل مباشر في الكود PHP.