فیلدهای اجباری (PHP Form Required)
فیلدهایِ الزامی: اجبارِ کاربر به پاسخگویی ⚠️📝
در دنیایِ واقعی، شما نمیخواهید فرمی ارسال شود که بخشِ "نام" یا "ایمیل" آن خالی باشد. در این بخش یاد میگیریم چطور پیامهایِ خطایِ هوشمند را به کاربر نشان دهیم.
استراتژیِ مدیریت خطا:
معمولاً برایِ هر فیلد یک متغیرِ خطا (مثلاً $nameErr) تعریف میکنیم. اگر فیلد خالی بود، این متغیر را پر میکنیم.
نمایشِ خطا در کنارِ فیلد:
بهترین روشِ UX این است که پیامِ قرمز رنگ دقیقاً زیر یا کنارِ همان فیلد ظاهر شود، نه اینکه کاربر را به یک صفحهیِ جدید ببریم.
تلفیق با HTML:
<span class="error">* <?php echo $nameErr;?></span>
null، رشتهیِ خالی ""، عدد 0 و حتی آرایهیِ خالی را به عنوان "خالی" در نظر میگیرد.
* مشخص میشوند به معنایِ الزامی بودن هستند. حتماً این موضوع را در راهنمایِ فرم ذکر کنید.
اعتبارسنجیِ سمتِ کلاینت vs سرور
شما میتوانید از صفتِ required در HTML5 استفاده کنید. این برایِ کاربر خوب است، اما کافی نیست! چون هکرها میتوانند به راحتی HTML را دور بزنند. اعتبارسنجیِ نهایی باید در PHP انجام شود.
بخش تخصصی: امنیت و مدیریتِ پیشرفتهیِ فرمها 🐘🛡️
در دنیایِ واقعی، فرمها خطرناکترین بخشِ اپلیکیشنِ شما هستند. هکرها از طریقِ فرمها سعی میکنند کدهایِ مخرب تزریق کنند یا دادههایِ شما را سرقت کنند.
۱. امنیت در برابر XSS (تزریق کد)
هرگز دادهیِ کاربر را بدونِ پاکسازی چاپ نکنید. تابعِ htmlspecialchars() کاراکترهایی مثل < و > را به کدهایِ بیخطر تبدیل میکند تا مرورگر آنها را به عنوانِ تگِ HTML اجرا نکند.
۲. تکنیکِ CSRF Protection
برایِ جلوگیری از این که یک مهاجم از طرفِ کاربرِ شما فرمی را ارسال کند، باید از یک Token امنیتیِ یکبار مصرف در هر فرم استفاده کنید. این توکن در سمتِ سرور چک میشود تا تایید شود فرم واقعاً از سایتِ خودتان ارسال شده است.
۳. استفاده از Filter Extension
PHP دارایِ یک افزونهیِ داخلیِ قدرتمند برایِ اعتبارسنجی است. به جایِ نوشتنِ رگکسهایِ پیچیده برایِ ایمیل، از filter_var($email, FILTER_VALIDATE_EMAIL) استفاده کنید که بسیار دقیقتر و ایمنتر است.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
متغیر $name را با تابعِ empty() چک کنید. اگر خالی بود عبارت Required را چاپ کنید.
<?php
$name = "";
if (empty($name)) {
echo "Required";
}
?>
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.