PHP – اعتبارسنجی فرمها (PHP Form Validation)
فرم HTML ساده
فرم HTML که در این فصلها با آن کار خواهیم کرد شامل فیلدهای ورودی مختلف: فیلدهای متنی ضروری و اختیاری، دکمههای رادیویی و یک دکمه ارسال است:
قوانین اعتبارسنجی برای فرم بالا به شرح زیر است:
- نام (Name): ضروری. + باید فقط حاوی حروف و فاصله باشد.
- ایمیل (E-mail): ضروری. + باید شامل یک آدرس ایمیل معتبر (با
@
و.
) باشد. - وبسایت (Website): اختیاری. اگر موجود باشد، باید شامل یک URL معتبر باشد.
- نظر (Comment): اختیاری. فیلد ورودی چند خطی (textarea).
- جنسیت (Gender): ضروری. باید یکی را انتخاب کنید.
فیلدهای متنی (Text Fields)
کد HTML برای فیلدهای متنی به این صورت است:
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
Website: <input type="text" name="website"><br>
Comment: <textarea name="comment" rows="5" cols="40"></textarea><br>
دکمههای رادیویی (Radio Buttons)
کد HTML برای فیلدهای جنسیت به این صورت است:
Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other
عنصر فرم (The Form Element)
کد HTML برای فرم به این صورت است:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
وقتی فرم ارسال میشود، دادههای فرم با روش post
ارسال میشوند.
متغیر $_SERVER["PHP_SELF"]
تابع htmlspecialchars()
تابع htmlspecialchars()
کاراکترهای خاص را به موجودیتهای HTML تبدیل میکند. این بدان معنی است که کاراکترهایی مانند <
و >
را با <
و >
جایگزین میکند. این کار از سوء استفاده مهاجمان از کد با تزریق HTML یا کد جاوااسکریپت (حملات Cross-site Scripting) در فرمها جلوگیری میکند.
اجتناب از سوء استفاده از $_SERVER["PHP_SELF"]
برای جلوگیری از سوء استفاده از $_SERVER["PHP_SELF"]
، باید از تابع htmlspecialchars()
استفاده کنیم. کد فرم باید به این صورت باشد:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
با استفاده از htmlspecialchars()
، اگر کاربر تلاش کند متغیر PHP_SELF
را سوء استفاده کند، نتیجه به صورت زیر خواهد بود:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
تلاش برای سوء استفاده شکست میخورد و هیچ آسیبی وارد نمیشود!
اعتبارسنجی دادههای فرم با پیاچپی (Validate Form Data With PHP)
اولین کاری که انجام میدهیم این است که تمام متغیرها را از طریق تابع htmlspecialchars()
پیاچپی عبور دهیم.
زمانی که از تابع htmlspecialchars()
استفاده میکنیم، اگر کاربری بخواهد کد زیر را در یک فیلد متنی ارسال کند:
<script>location.href('http://www.hacked.com')</script>
این کد اجرا نمیشود، زیرا به صورت کد HTML فرار یافته ذخیره میشود، مانند:
<script>location.href('http://www.hacked.com')</script>
کد اکنون ایمن است تا در صفحه یا داخل یک ایمیل نمایش داده شود.
ما همچنین دو کار دیگر انجام میدهیم زمانی که کاربر فرم را ارسال میکند:
- حذف کاراکترهای غیرضروری (فضای اضافی، تب، خط جدید) از دادههای ورودی کاربر (با تابع
trim()
پیاچپی). - حذف بکاسلشها
از دادههای ورودی کاربر (با تابع
stripslashes()
پیاچپی).
قدم بعدی ایجاد یک تابع است که تمامی بررسیها را برای ما انجام دهد (که بسیار راحتتر از نوشتن همان کد بارها و بارها است). ما نام این تابع را test_input()
میگذاریم.
اکنون میتوانیم هر متغیر $_POST
را با تابع test_input()
بررسی کنیم، و اسکریپت به این صورت خواهد بود:
مثال
// تعریف متغیرها و تنظیم آنها به مقادیر خالی
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
توجه داشته باشید که در ابتدای اسکریپت بررسی میکنیم که آیا فرم ارسال شده است یا خیر با استفاده از $_SERVER["REQUEST_METHOD"]
. اگر REQUEST_METHOD
برابر با POST
باشد، سپس فرم ارسال شده است و باید اعتبارسنجی شود. اگر ارسال نشده باشد، اعتبارسنجی را انجام نمیدهیم و فرم خالی نمایش داده میشود.
با این حال، در مثال بالا، تمام فیلدهای ورودی اختیاری هستند. اسکریپت به خوبی کار میکند حتی اگر کاربر هیچ دادهای وارد نکند.
قدم بعدی این است که فیلدهای ورودی را ضروری کنیم و در صورت نیاز پیامهای خطا ایجاد کنیم.
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام