English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دروس PHP الأساسية

دروس PHP متقدمة

PHP & MySQL

كتيب مرجع PHP

تحقق من النموذج في PHP

في هذا الدرس، ستعلم كيفية استخدام مرشحات PHP لتنظيف وتحقق بيانات النموذج.

تنظيف وتحقق بيانات النموذج

كما رأيت في الدرس السابق، عملية التقاطع وعرض بيانات النموذج المقدمة بسيطة جدًا. في هذا الدرس، ستعلم كيفية تنفيذ نموذج الاتصال البسيط على موقعك، والذي يسمح للمستخدمين بإرسال تعليقات ومراجعات عبر البريد الإلكتروني. سنستخدم نفسوظيفة PHP mail()لإرسال البريد الإلكتروني.

سنقوم أيضًا بتكوين بعض الميزات الأساسية للأمان، مثل تنظيف وتحقق محتوى إدخال المستخدم، لمنع المستخدمين من إدخال بيانات قد تهدد أمان الموقع أو قد تسبب ضررًا للنظام.

إليك سكربت PHP المتكامل الخاص بنا، والذي يقوم بما يلي:

  • سيطلب من المستخدم إدخال تعليقاته حول الموقع.

  • يظهر نفس السكربت نموذج الاتصال ويقوم بمعالجة بيانات النموذج المقدمة.

  • يقوم السكربت بتنظيف وتحقق إدخال المستخدم. إذا كان أي حقل مطلوب (مطابقًا للرمز *) مفقودًا، أو إذا فشل التحقق بسبب إدخال غير صحيح، سيتم عرض النموذج مرة أخرى، وسيتم عرض رسالة خطأ في مجال النموذج相应的.

  • سيتذكر هذا السكربت الحقول التي تم ملؤها من قبل المستخدم، وسيقوم بملء هذه الحقول مسبقًا عند عرض النموذج مرة أخرى بسبب أخطاء التحقق.

  • إذا كانت البيانات التي قدمها المستخدم قابلة للقبول وأن كل شيء على ما يرام، سيتم إرسال بريد إلكتروني إلى مدير الموقع، وسيتم عرض رسالة نجاح للمستخدم.

أدخل الكود التالي في ملف "contact.php" وأحفظه في مجلد الجذر للمشروع:

<?php
// الوظيفة التي تتم من خلالها تصفية إدخال المستخدم
function filterName($field){
    // تنظيف اسم المستخدم
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    
    // التحقق من اسم المستخدم
    if(filter_var($field, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        return $field;
    } else{
        return FALSE;
    }
}    
function filterEmail($field){
    // تنظيف عنوان البريد الإلكتروني
    $field = filter_var(trim($field), FILTER_SANITIZE_EMAIL);
    
    //تحقق من عنوان البريد الإلكتروني
    if(filter_var($field, FILTER_VALIDATE_EMAIL)){
        return $field;
    } else{
        return FALSE;
    }
}
function filterString($field){
    // تنظيف النص
    $field = filter_var(trim($field), FILTER_SANITIZE_STRING);
    إذا (!فرغ ($field)){}}
        return $field;
    } else{
        return FALSE;
    }
}
 
//تعريف المتغيرات واستخدام القيم الفارغة للتحديد
$nameErr = $emailErr = $messageErr = "";
$name = $email = $subject = $message = "";
 
//معالجة بيانات النموذج عند تقديم النموذج
إذا ($_SERVER["REQUEST_METHOD"] == "POST"){
 
    //تحقق من اسم المستخدم
    إذا (فرغ ($_POST["name"])){
        $nameErr = "Please enter your name.";
    } else{
        $name = filterName($_POST["name"]);
        إذا ($name == FALSE){
            $nameErr = "من فضلك أدخل اسم صالح.";
        }
    }
    
    //تحقق من عنوان البريد الإلكتروني
    إذا (فرغ ($_POST["email"])){
        $emailErr = "من فضلك أدخل عنوان بريدك الإلكتروني.";     
    } else{
        $email = filterEmail($_POST["email"]);
        إذا ($email == FALSE){
            $emailErr = "Please enter a valid email address.";
        }
    }
    
    //تحقق من عنوان الرسالة
    إذا (فرغ ($_POST["subject"])){
        $subject = "";
    } else{
        $subject = filterString($_POST["subject"]);
    }
    
    //تحقق من تعليق المستخدم
    إذا (فرغ ($_POST["message"])){
        $messageErr = "Please enter your comment.";     
    } else{
        $message = filterString($_POST["message"]);
        إذا ($message == FALSE){
            $messageErr = "من فضلك أدخل تعليق صالح.";
        }
    }
    
    //تحقق من أخطاء الإدخال قبل إرسال البريد الإلكتروني
    إذا (فرغ ($nameErr) && فرغ ($emailErr) && فرغ ($messageErr)){
        // Recipient email address
        $to = '[email protected]';
        
        // Create email headers
        $headers = 'From: '. $email . "\r\n" .
        'Reply-To: '. $email . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
        
        // Sending email
        if(mail($to, $subject, $message, $headers)){
            echo '<p class="success">تم إرسال رسالتك بنجاح!</p>';
        } else{
            echo '<p class="error">فشل إرسال البريد الإلكتروني. يرجى المحاولة مجددا!</p>';
        }
    }
}
?>
!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Contact Form</title>
    <style type="text/css">
        .error{ color: red; }
        .success{ color: green; }
    </style>
</head>
    <h2>اتصل بنا</h2>
    <p>الرجاء ملء هذا النموذج وإرساله لنا</p>
    <form action="contact.php" method="post">
        <p>
            <label for="inputName">Name:<sup>*</sup></label>
            <input type="text" name="name" id="inputName" value="<?php echo $name; ?>">
            <span class="error"><?php echo $nameErr; ?></span>
        </p>
        <p>
            <label for="inputEmail">Email:<sup>*</sup></label>
            <input type="text" name="email" id="inputEmail" value="<?php echo $email; ?>">
            <span class="error"><?php echo $emailErr; ?></span>
        </p>
        <p>
            <label for="inputSubject">الموضوع:</label>
            <input type="text" name="subject" id="inputSubject" value="<?php echo $subject; ?>">
        </p>
        <p>
            <label for="inputComment">رسالة:<sup>*</sup></label>
            <textarea name="message" id="inputComment" rows="5" cols="30"><?php echo $message; ?></textarea>
            <span class="error"><?php echo $messageErr; ?></span>
        </p>
        <input type="submit" value="إرسال">
        <input type="reset" value="إعادة تعيين">
    </form>
</html>

استخدام الكود

قد تفكر في معنى الكود كله. حسناً، دعونا ندخل مباشرة.

  • وظيفة filterName() تقوم بتحقق من أن القيمة الإدخالية هي اسم شخص. الاسم الصالح يمكن أن يحتوي فقط على أحرف (a-z، A-Z).

  • وظيفة filterEmail() تقوم بتحقق من أن القيمة الإدخالية هي عنوان بريد إلكتروني.

  • وظيفة filterString() تقوم بتنظيف قيمة الإدخال من علامات HTML والرموز الخاصة دون التحقق من أي قيمة إدخال. إنها لا تقوم بتحقق من أي قيمة إدخال.

  • داخل علامة<form>خصائص action="contact.php" تشير إلى نفس ملف contact.php لعرض النموذج وتعامل بيانات النموذج.

  • <input>و<textarea>الكود PHP في داخل خاصية value، مثل<?php echo $name; ?>عند إعادة عرض الخطأ في النموذج، يظهر القيمة المسبقة.

  • الكود PHP في داخل .error class، مثل<span class="error"><?php echo $nameErr; ?></span>يظهر خطأ الحقل المطلق.

 للحصول على معلومات إضافية حول تنظيف وتحقق تصفية الفلاتر، يرجى الرجوع إلىمتصفح PHPمرجع.

ملاحظة:يجب عليك إعداد خادم بريد الإلكتروني على الحاسوب لتعمل وظيفة PHP mail() بشكل صحيح. إذا كنت تريد فقط تنفيذ التحقق من صحة النموذج، يمكنك استبدال جزء البريد بمصدر تعليمات برمجية مخصص.