🐘 درس هشتم: فرمها در PHP؛ دریافت و اعتبارسنجی اطلاعات کاربر
🎯 هدف این درس: یاد میگیریم چگونه در PHP اطلاعات واردشده توسط کاربر را از فرمهای HTML دریافت کنیم، با روشهای GET و POST کار کنیم و قبل از استفاده از دادهها، آنها را اعتبارسنجی و ایمن کنیم.
مهمان عزیز! 👋 به هشتمین درس از دوره جامع PHP خوش آمدی.
تا اینجا با متغیرها، انواع داده، عملگرها، شرطها، حلقهها، آرایهها و توابع آشنا شدی.
اما یک برنامه واقعی فقط با اطلاعاتی که خودمان داخل کد مینویسیم کار نمیکند.
در دنیای واقعی، کاربر باید بتواند اطلاعاتی مثل نام، ایمیل، شماره تلفن، رمز عبور یا پیام خودش را وارد کند.
اینجا دقیقاً جایی است که فرمها وارد ماجرا میشوند.
HTML فرم را در اختیار کاربر قرار میدهد و PHP اطلاعات ارسالشده را دریافت و پردازش میکند.
💡 نکته کلیدی مهمان:
فرم HTML فقط اطلاعات را از کاربر میگیرد. این PHP است که اطلاعات را دریافت، بررسی، اعتبارسنجی و پردازش میکند.
🧭 در این درس چه چیزهایی یاد میگیریم؟
- ✅ ساخت فرم HTML
- ✅ آشنایی با
methodوaction - ✅ دریافت اطلاعات با
$_GET - ✅ دریافت اطلاعات با
$_POST - ✅ تفاوت GET و POST
- ✅ بررسی وجود داده با
isset() - ✅ بررسی خالی نبودن اطلاعات با
empty() - ✅ اعتبارسنجی ایمیل با
filter_var() - ✅ پاکسازی خروجی با
htmlspecialchars() - ✅ ساخت فرم حرفهای و امنتر
- ✅ نمایش پیام خطا به کاربر
- ✅ ساخت یک پروژه عملی ثبتنام کاربر
📝 بخش ۱: فرم چیست و چه کاری انجام میدهد؟
فرم یکی از مهمترین بخشهای هر وبسایت تعاملی است.
زمانی که در یک سایت ثبتنام میکنی، وارد حساب کاربری میشوی، جستجو میکنی یا برای پشتیبانی پیام میفرستی، تقریباً همیشه با یک فرم سروکار داری.
یک فرم معمولاً شامل چند بخش است:
- input: دریافت اطلاعاتی مانند نام و ایمیل
- textarea: دریافت متنهای طولانیتر
- select: انتخاب یک گزینه از چند گزینه
- button: ارسال فرم
یک فرم ساده HTML
فرم ساده HTML
HTML
HTML5
<form action="process.php" method="post">
<label for="name">نام:</label>
<input type="text" id="name" name="name">
<label for="email">ایمیل:</label>
<input type="email" id="email" name="email">
<button type="submit">ارسال</button>
</form>
⚠️ نکته مهم:
مقدار name بسیار مهم است. PHP اطلاعات فرم را بر اساس همین نامها در $_GET یا $_POST قرار میدهد.
📤 بخش ۲: دریافت اطلاعات با GET
روش GET اطلاعات فرم را از طریق URL ارسال میکند.
به همین دلیل اطلاعات ارسالشده معمولاً در نوار آدرس مرورگر قابل مشاهده است.
برای مثال اگر کاربر نام خود را وارد کند، ممکن است URL به شکل زیر تبدیل شود:
example.com/search.php?name=Younes
فرم GET
فرم GET
PHP
v8.2+
<?php
if (isset($_GET['name'])) {
$name = $_GET['name'];
echo "سلام " . $name . "!";
}
?>
💡 نکته مهمان:
برای دسترسی به پارامترهای GET از آرایه فوقالعاده سراسری $_GET استفاده میکنیم.
📥 بخش ۳: دریافت اطلاعات با POST
در روش POST اطلاعات فرم در URL نمایش داده نمیشود و از بدنه درخواست HTTP ارسال میشود.
این روش معمولاً برای فرمهایی مانند ثبتنام، ورود، ارسال پیام و ایجاد یا ویرایش اطلاعات استفاده میشود.
دریافت اطلاعات POST
دریافت اطلاعات POST
PHP
v8.2+
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = $_POST['name'] ?? '';
echo "نام واردشده: " . $name;
}
?>
⚠️ چرا از ?? استفاده کردیم؟
ممکن است کلید موردنظر در $_POST وجود نداشته باشد. استفاده از ?? باعث میشود در این حالت مقدار پیشفرض تعیین کنیم و از خطاهای غیرضروری جلوگیری شود.
⚖️ بخش ۴: تفاوت GET و POST
GET یا POST؟
| ویژگی | GET | POST |
|---|---|---|
| نمایش در URL | ✅ بله | ❌ خیر |
| مناسب برای جستجو | ✅ بله | معمولاً خیر |
| مناسب برای ثبت اطلاعات | معمولاً خیر | ✅ بله |
| اطلاعات حساس | ❌ مناسب نیست | ✅ مناسبتر |
| قابل ذخیره در Bookmark | ✅ بله | ❌ خیر |
🎯 یک قانون ساده برای شروع:
اگر اطلاعات قرار است بخشی از آدرس یک صفحه یا جستجو باشد، GET معمولاً انتخاب مناسبی است.
اگر قرار است اطلاعاتی مثل ثبتنام یا ایجاد یک رکورد را ارسال کنیم، معمولاً POST انتخاب بهتری است.
🔍 بخش ۵: بررسی وجود اطلاعات با isset()
قبل از اینکه به یک مقدار در $_POST یا $_GET دسترسی پیدا کنیم، بهتر است بررسی کنیم که آن مقدار واقعاً ارسال شده است یا خیر.
تابع isset() برای همین کار استفاده میشود.
بررسی اطلاعات
PHP
v8.2+
<?php
if (isset($_POST['name'])) {
$name = $_POST['name'];
echo "اطلاعات دریافت شد.";
} else {
echo "نام ارسال نشده است.";
}
?>
🧹 بخش ۶: پاکسازی اطلاعات با trim()
کاربر ممکن است قبل یا بعد از اطلاعاتی که وارد میکند، فاصله اضافی قرار دهد.
تابع trim() فاصلههای اضافی ابتدا و انتهای رشته را حذف میکند.
پاکسازی ورودی
PHP
v8.2+
<?php
$name = " یونس ";
$clean_name = trim($name);
echo $clean_name;
?>
✉️ بخش ۷: اعتبارسنجی ایمیل
یکی از اشتباهات رایج در برنامهنویسی این است که هر دادهای را بدون بررسی قبول کنیم.
فرض کن کاربر به جای ایمیل معتبر، عبارت hello را وارد کند.
برنامه باید بتواند متوجه شود که این مقدار یک ایمیل معتبر نیست.
PHP تابع filter_var() را برای اعتبارسنجی انواع داده در اختیار ما قرار میدهد.
اعتبارسنجی ایمیل
PHP
v8.2+
<?php
$email = "student@example.com";
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "ایمیل معتبر است.";
} else {
echo "ایمیل واردشده معتبر نیست.";
}
?>
💡 نکته حرفهای مهمان:
اعتبارسنجی یعنی بررسی کنیم دادهای که کاربر ارسال کرده از نظر ساختار و قوانین مورد انتظار ما درست است یا خیر.
🛡️ بخش ۸: جلوگیری از نمایش HTML خطرناک با htmlspecialchars()
یکی از مهمترین نکات امنیتی هنگام نمایش اطلاعات کاربر، این است که نباید ورودی کاربر را بدون بررسی مستقیماً داخل HTML قرار دهیم.
تابع htmlspecialchars() کاراکترهای خاص HTML را به شکل امنتری تبدیل میکند.
این موضوع در جلوگیری از بسیاری از مشکلات XSS اهمیت دارد.
خروجی امن
PHP
v8.2+
<?php
$name = $_POST['name'] ?? '';
$name = trim($name);
$safe_name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
echo "سلام " . $safe_name. "!";
?>
🚨 قانون طلایی:
اطلاعاتی که از کاربر دریافت میکنی را به عنوان داده غیرقابل اعتماد در نظر بگیر و قبل از نمایش در HTML، آن را به شکل مناسب خروجیدهی و ایمن کن.
🧪 بخش ۹: ساخت فرم کامل تماس با ما
حالا که مفاهیم اصلی را یاد گرفتیم، یک نمونه واقعیتر میسازیم.
در این مثال کاربر نام، ایمیل و پیام خود را وارد میکند.
PHP اطلاعات را دریافت میکند، آنها را بررسی میکند و در صورت معتبر بودن، پیام موفقیت نمایش میدهد.
فایل contact.php
فرم تماس با ما
PHP
v8.2+
<?php
$name = '';
$email = '';
$message = '';
$errors = [];
$success = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');
$message = trim($_POST['message'] ?? '');
if ($name === '') {
$errors['name'] = 'نام را وارد کنید.';
}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors['email'] = 'ایمیل واردشده معتبر نیست.';
}
if ($message === '') {
$errors['message'] = 'پیام را وارد کنید.';
}
if (empty($errors)) {
$safe_name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
$success = "سلام " . $safe_name . "، پیام شما با موفقیت دریافت شد.";
}
}
?>
فرم HTML
فرم تماس
HTML
HTML5
<form action="" method="post">
<label for="name">نام:</label>
<input type="text" id="name" name="name">
<label for="email">ایمیل:</label>
<input type="email" id="email" name="email">
<label for="message">پیام:</label>
<textarea id="message" name="message"></textarea>
<button type="submit">ارسال پیام</button>
</form>
🚨 بخش ۱۰: اشتباهات رایج هنگام کار با فرمها
❌ اشتباه اول: اعتماد مستقیم به ورودی کاربر
هر چیزی که کاربر ارسال میکند باید ورودی غیرقابل اعتماد در نظر گرفته شود.
قبل از استفاده، داده را متناسب با کاربردش بررسی و اعتبارسنجی کن.
❌ اشتباه دوم: دسترسی مستقیم به کلیدهای POST
بهتر است قبل از استفاده بررسی کنی که کلید وجود دارد یا از عملگر ?? برای مقدار پیشفرض استفاده کنی.
❌ اشتباه سوم: استفاده از GET برای اطلاعات حساس
اطلاعات حساس نباید در URL قرار بگیرند. برای چنین اطلاعاتی از روش مناسب ارسال و ارتباط امن HTTPS استفاده کنید.
❌ اشتباه چهارم: اشتباه گرفتن اعتبارسنجی با پاکسازی
اعتبارسنجی مشخص میکند داده قابل قبول است یا خیر؛ پاکسازی و خروجیدهی امن برای کاهش خطر هنگام استفاده از داده انجام میشود.
این دو مفهوم جای یکدیگر را نمیگیرند.
🧩 پروژه عملی: فرم ثبتنام کاربر
🎯 پروژه این درس
یک فرم ثبتنام ساده طراحی کنید که اطلاعات زیر را از کاربر دریافت کند:
- نام و نام خانوادگی
- ایمیل
- سن
- رمز عبور
سپس اطلاعات را با PHP دریافت و بررسی کنید.
نام نباید خالی باشد، ایمیل باید معتبر باشد و رمز عبور باید حداقل ۸ کاراکتر داشته باشد.
💡 راهنمای حل پروژه
- فرم را با
method="post"بسازید. - دادهها را از
$_POSTدریافت کنید. - قبل از استفاده، وجود دادهها را بررسی کنید.
- برای حذف فاصلههای اضافی از
trim()استفاده کنید. - ایمیل را با
filter_var()بررسی کنید. - طول رمز عبور را با
strlen()بررسی کنید. - اطلاعاتی که در HTML نمایش میدهید را با
htmlspecialchars()خروجیدهی کنید.
🔍 یک نمونه ساده از اعتبارسنجی رمز عبور
اعتبارسنجی رمز عبور
PHP
v8.2+
<?php
$password = $_POST['password'] ?? '';
if (strlen($password) < 8) {
echo "رمز عبور باید حداقل ۸ کاراکتر باشد.";
} else {
echo "رمز عبور قابل قبول است.";
}
?>
📝 تمرینهای عملی
🎯 تمرین شماره ۱: فرم مشخصات فردی
فرمی بسازید که نام، نام خانوادگی، شهر و شغل کاربر را دریافت کند و اطلاعات را با PHP نمایش دهد.
🎯 تمرین شماره ۲: فرم تماس
یک فرم تماس با فیلدهای نام، ایمیل و پیام ایجاد کنید.
خالی نبودن فیلدها و معتبر بودن ایمیل را بررسی کنید.
🎯 تمرین شماره ۳: فرم ورود
فرمی با نام کاربری و رمز عبور بسازید.
اگر هر دو مقدار وارد شده باشند، پیام «اطلاعات دریافت شد» نمایش دهید.
🎯 تمرین شماره ۴: محاسبه سن
فرمی ایجاد کنید که سال تولد کاربر را دریافت کند و سن تقریبی او را محاسبه و نمایش دهد.
🧠 نکات کلیدی این درس
- 🔹 فرم HTML اطلاعات را از کاربر دریافت میکند.
- 🔹 ویژگی
methodمشخص میکند اطلاعات چگونه ارسال شوند. - 🔹 اطلاعات GET در
$_GETقرار میگیرند. - 🔹 اطلاعات POST در
$_POSTقرار میگیرند. - 🔹 مقدار
nameفیلد فرم، کلید دسترسی به داده در PHP است. - 🔹 با
isset()میتوانیم وجود یک مقدار را بررسی کنیم. - 🔹 با
trim()میتوانیم فاصلههای اضافی ابتدا و انتهای رشته را حذف کنیم. - 🔹 با
filter_var()میتوانیم دادههایی مانند ایمیل را اعتبارسنجی کنیم. - 🔹 با
htmlspecialchars()میتوانیم خروجی متنی کاربر را هنگام نمایش در HTML ایمنتر کنیم. - 🔹 اعتبارسنجی و امنیت ورودی را نباید نادیده گرفت.
📚 جمعبندی درس
مهمان جان، در این درس یک قدم مهم به سمت برنامهنویسی واقعی برداشتیم.
تا قبل از این، بیشتر اطلاعات را مستقیماً داخل کد قرار میدادیم؛ اما حالا یاد گرفتیم که چگونه اطلاعات را از کاربر دریافت کنیم و قبل از استفاده آنها را بررسی کنیم.
این مفاهیم پایه بسیاری از سیستمهایی هستند که بعداً در PHP میسازیم؛ از فرم ثبتنام و ورود گرفته تا پنل مدیریت، سیستمهای فروشگاهی و پروژه نهایی دوره.
در درس بعدی وارد بخش مهمی از مسیر میشویم و با پروژه نهایی دوره آشنا میشویم؛ جایی که مفاهیمی که در طول دوره یاد گرفتهایم را کنار هم قرار میدهیم و یک سیستم مدیریت کاربران میسازیم.



