دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / فیلدهای اجباری (PHP Form Required)

فیلدهای اجباری (PHP Form Required)

30 دقیقه Article

فیلد‌هایِ الزامی: اجبارِ کاربر به پاسخگویی ⚠️📝

در دنیایِ واقعی، شما نمی‌خواهید فرمی ارسال شود که بخشِ "نام" یا "ایمیل" آن خالی باشد. در این بخش یاد می‌گیریم چطور پیام‌هایِ خطایِ هوشمند را به کاربر نشان دهیم.

استراتژیِ مدیریت خطا:

معمولاً برایِ هر فیلد یک متغیرِ خطا (مثلاً $nameErr) تعریف می‌کنیم. اگر فیلد خالی بود، این متغیر را پر می‌کنیم.

{code_block('if (empty($_POST["name"])) {\n $nameErr = "نام الزامی است";\n} else {\n $name = test_input($_POST["name"]);\n}')}

نمایشِ خطا در کنارِ فیلد:

بهترین روشِ UX این است که پیامِ قرمز رنگ دقیقاً زیر یا کنارِ همان فیلد ظاهر شود، نه اینکه کاربر را به یک صفحه‌یِ جدید ببریم.

تلفیق با HTML:

<span class="error">* <?php echo $nameErr;?></span>
تابعِ empty(): این تابع بسیار هوشمند است. مقدار null، رشته‌یِ خالی ""، عدد 0 و حتی آرایه‌یِ خالی را به عنوان "خالی" در نظر می‌گیرد.
سمبولِ ستاره (*): طبقِ استانداردهایِ جهانی، فیلدهایی که با کاراکتر * مشخص می‌شوند به معنایِ الزامی بودن هستند. حتماً این موضوع را در راهنمایِ فرم ذکر کنید.

اعتبارسنجیِ سمتِ کلاینت vs سرور

شما می‌توانید از صفتِ required در HTML5 استفاده کنید. این برایِ کاربر خوب است، اما کافی نیست! چون هکرها می‌توانند به راحتی HTML را دور بزنند. اعتبارسنجیِ نهایی باید در PHP انجام شود.

<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: امنیت و مدیریتِ پیشرفته‌یِ فرم‌ها 🐘🛡️

در دنیایِ واقعی، فرم‌ها خطرناک‌ترین بخشِ اپلیکیشنِ شما هستند. هکرها از طریقِ فرم‌ها سعی می‌کنند کدهایِ مخرب تزریق کنند یا داده‌هایِ شما را سرقت کنند.

۱. امنیت در برابر XSS (تزریق کد)

هرگز داده‌یِ کاربر را بدونِ پاکسازی چاپ نکنید. تابعِ htmlspecialchars() کاراکترهایی مثل < و > را به کدهایِ بی‌خطر تبدیل می‌کند تا مرورگر آن‌ها را به عنوانِ تگِ HTML اجرا نکند.

۲. تکنیکِ CSRF Protection

برایِ جلوگیری از این که یک مهاجم از طرفِ کاربرِ شما فرمی را ارسال کند، باید از یک Token امنیتیِ یکبار مصرف در هر فرم استفاده کنید. این توکن در سمتِ سرور چک می‌شود تا تایید شود فرم واقعاً از سایتِ خودتان ارسال شده است.

۳. استفاده از Filter Extension

PHP دارایِ یک افزونه‌یِ داخلیِ قدرتمند برایِ اعتبارسنجی است. به جایِ نوشتنِ رگکس‌هایِ پیچیده برایِ ایمیل، از filter_var($email, FILTER_VALIDATE_EMAIL) استفاده کنید که بسیار دقیق‌تر و ایمن‌تر است.

نکته مهندسی: همیشه از متد POST برایِ ارسالِ داده‌هایِ حساس استفاده کنید. داده‌هایِ GET در تاریخچه‌یِ مرورگر (History) و لاگ‌هایِ سرور باقی می‌مانند که یک ریسکِ امنیتیِ بزرگ است.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

چک کردنِ خالی نبودن Easy
سوال تمرین

متغیر $name را با تابعِ empty() چک کنید. اگر خالی بود عبارت Required را چاپ کنید.

پاسخ تمرین
PHP
<?php
$name = "";
if (empty($name)) {
  echo "Required";
}
?>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.