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

تکمیل فرم (PHP Form Complete)

30 دقیقه Article

پروژه‌یِ نهایی: فرمِ کامل و ایمن 🏗️🚀

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

۱. متغیرهایِ وضعیت (State)

ما نیاز داریم مقادیری که کاربر وارد کرده را "نگه داریم" تا اگر فرم خطایی داشت و دوباره لود شد، کاربر مجبور نشود همه چیز را از اول تایپ کند.

{code_block('// مثال در فیلد HTML\nvalue="<?php echo $name; ?>"')}

ساختارِ فایلِ نهایی:

  1. بخشِ منطق: تعریفِ متغیرها و تابعِ test_input().
  2. بخشِ پردازش: چک کردنِ $_SERVER["REQUEST_METHOD"] == "POST".
  3. بخشِ نمایش: نمایشِ فرم و پیام‌هایِ خطا.

پاکسازیِ نهایی:

{code_block('function test_input($data) {\n $data = trim($data);\n $data = stripslashes($data);\n $data = htmlspecialchars($data);\n return $data;\n}')}
جلوگیری از ارسالِ مجدد (Resubmission): بعد از موفق بودنِ فرم، معمولاً بهتر است کاربر را به یک صفحه‌یِ "تشکر" هدایت کنید (Redirect) تا با رفرش کردنِ صفحه، داده‌ها دوباره برایِ شما ارسال نشود.

قدمِ بعدی چیه؟

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

فریم‌ورک‌ها: اگر در آینده از فریم‌ورک‌هایی مثل Laravel یا Symfony استفاده کنید، خواهید دید که همه‌یِ این کارها با امنیتِ بسیار بالاتر و کدِ کمتر برایتان انجام می‌شود. اما یادگیریِ اصولِ پایه (مثل این فصل) برایِ یک متخصص شدن الزامی است.
<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) و لاگ‌هایِ سرور باقی می‌مانند که یک ریسکِ امنیتیِ بزرگ است.

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

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

پاکسازی نهایی Medium
سوال تمرین

تابعی به نام clean بسازید که یک ورودی بگیرد و هر دو عملِ trim و htmlspecialchars را روی آن انجام دهد و خروجی را return کند.

پاسخ تمرین
PHP
<?php
function clean($data) {
  $data = trim($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

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

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