اعتبارسنجی داده های فرم با PHP
اولین کاری که باید انجام دهید این است که تمام متغییرها را به تابع ()htmlspecialchars پاس دهیم.
حالا اگر کاربر تلاش کند که متنی مانند زیر را ارسال کند:
<script>location.href('http://www.hacked.com')</script>
در اینصورت اسکریپت بالا اجرا نخواهد شد، چونکه کاراکترهای خاص در متن بالا به HTML entity معادلاشان تبدیل شده اند:
<script>location.href('http://www.hacked.com')</script>
حالا این کد برای نمایش در یک صفحه یا داخل یک ایمیل، امن شده است.
همچنین ما دو کار دیگر را هنگام ارسال داده ها به سرور انجام می دهیم:
- با استفاده از تابع ()trim کاراکترهای غیرضروری (مثل: فاصله های اضافی، tab و خطوط خالی) را حذف می کنیم.
- با استفاده از تابع ()stripslashes، بک اسلش ها (\) را حذف می کنیم
گام بعدی، ایجاد یک تابع، برای انجام تمام کارهای بالاست (بجای اینکه کدهای مربوط به این قسمت را بارها و بارها بنویسیم، مناسب تر است که از یک تابع استفاده کنیم)
ما این تابع را ()test_input می نامیم.
حالا ما می توانیم به ازای هر متغییر POST_$ مقدار آنرا با تابع ()test_input چک کنیم و کد آن شبیه زیر است:
مثال (اعتبارسنجی داده های فرم با PHP)
<html>
<head>
<style>
span{min-width: 200px;float: right;}
</style>
</head>
<body style="direction:rtl;">
<?php
$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;
}
?>
<h2>مثال اعتبارسنجی فرم ها در PHP</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<div><span>نام:</span><input type="text" name="name"></div>
<div><span>ایمیل:</span><input type="text" name="email"></div>
<div><span>وب سایت:</span><input type="text" name="website"></div>
<div><span>توضیحات:</span><textarea name="comment" rows="5" cols="40"></textarea>
</div>
<div><span>جنسیت:</span>
<input type="radio" name="gender" value="female">زن
<input type="radio" name="gender" value="male">مرد
</div>
</div><input type="submit" name="submit" value="ارسال اطلاعات"></div>
</form>
<?php
if (isset($name) || isset($email) || isset($gender) || isset($comment) ||isset($website))
{
echo "<br /><h2>خروجی کدتان</h2>";
echo "نام :$name";
echo "<br />";
echo "ایمیل: $email";
echo "<br />";
echo "وب سایت: $website";
echo "<br />";
echo "توضیحات: $comment";
echo "<br />";
echo "جنسیت: $gender";
}
?>
</body>
</html>
خروجی کد بالا:
مثال اعتبارسنجی فرم ها در PHP
توجه داشته باشید که در ابتدای اسکریپت، با استفاده از متغییر "REQUEST_METHOD" نحوه ارسال داده های فرم را چک می کنیم. اگر نحوه ی ارسال داده های فرم، از طریق متد "POST" است، اطلاعات فرم پردازش خواهد شد وگرنه با یک صفحه خالی روبرو خواهیم شد.
توجه: برای بار اول که کاربر درخواست مشاهده فایل مثال بالا را به سرور ارسال می کند، بدلیل اینکه متد پیش فرض برای مشاهده صفحات از نوع get است، بنابراین شرط "$_SERVER["REQUEST_METHOD"] == "POST درست نخواهد بود و دستورات داخل شرط اجرا نخواهد شد. اما بعد از اینکه کاربر اطلاعات فرم را پر کرده و روی دکمه ارسال (submit) کلیک کرد، چون ویژگی method فرم را با مقدار "post" تنظیم کرده ایم، شرط ذکر شده درست خواهد بود و دستورات داخل آن اجرا خواهد شد.
اما در مثال بالا، تمام فیلدهای ورودی اختیاری است. حتی اگر کاربر هیچ کدام از فیلدها را پر نکند، اسکریپت بالا باز هم کار خواهد کرد.
در بیاموز بعدی برای فیلدهای الزامی، یک پیغام مناسب نمایش خواهیم داد.