آموزش فرم ها در PHP – اعتبارسنجی فیلدها
سلام
با چهارمین قسمت از آموزش فرم ها در PHP در خدمتتون هستیم؛ تا این جای کار فرمی را که ساخته بودیم،؛ فرم را غیر قابل نفوذ در برابر حمله xss کردیم،؛ سپس داده ها را قبل از ارسال به سمت سرور از فیلتر عبور دادیم تا کاراکترهای اضافی را حذف کند و در نهایت فیلدهای ضروری را تعیین کردیم؛ حالا در این جسله می پردازیم به اعبتار سنجی فیلدهایی نظیر نام، ایمیل، آدرس سایت و … که ببینیم کاربر فیلد را صحیح تکمیل میکند یا خیر، در ادامه همراه بپرسم باشید.
اعتبار سنجی فیلد Name
کدی که در زیر می بینید، یک روش برای این است که برای یک فیلد قوانینی تعیین کنیم که اگر این قوانین را تعیین نکرد، اجازه ارسال فیلد به سمت سرور را نمیدیم و در عوض خطایی به کاربر نمایش میدهیم.
۱ ۲ ۳ ۴ |
$name = filterInput($_POST["name"]); if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "Only letters and white space allowed"; } |
در کد بالا فقط حروف لاتین و فاصله را مجاز کردیم، به این معنا که کاربر در فیلد name فقط قادر به استفاده از حروف و فاصله می باشد و اگر چیزی به غیر از اینها وارد کرد پیغام خطای درون متغیر nameErr$ نمایش داده میشود.
تابع ()preg_match یک الگو میگیرد، اگر فیلد مربوطه این الگو را داشته باشد نتیجه True و اگر نداشته باشد False بر میگرداند.
اعتبار سنجی فیلد Email
ساده ترین کاری که برای بررسی صحیح بودن یک آدرس ایمیل میتوانیم انجام بدیم استفاده از تابع filter_var هست که این تابع دو ورودی میگیرد:
- ورودی اول: فیلد فرم هست.
- ورودی دوم: الگو
که در کد زیر همانطور که می بینید، به عنوان ورودی اول فیلد email را بهش دادیم و به عنوان ورودی دوم FILTER_VALIDATE_EMAIL که برای بررسی صحیح بودن آدرس ایمیل استفاده میشود.
۱ ۲ ۳ ۴ |
$email = filterInput($_POST["email"]); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Invalid email format"; } |
اعتبار سنجی فیلد URL
برای بررسی آدرس سایت باید یک الگو مشخص کنیم و برای این کار از تابع preg_match کمک میگیریم.
۱ ۲ ۳ ۴ |
$website = filterInput($_POST["website"]); if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) { $websiteErr = "Invalid URL"; } |
و در انتها تمام کدهایی که برای فرم تا الان نوشتیم:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ ۴۹ ۵۰ ۵۱ ۵۲ ۵۳ ۵۴ ۵۵ ۵۶ ۵۷ ۵۸ ۵۹ ۶۰ ۶۱ ۶۲ ۶۳ ۶۴ ۶۵ ۶۶ ۶۷ ۶۸ ۶۹ ۷۰ ۷۱ ۷۲ ۷۳ ۷۴ ۷۵ ۷۶ ۷۷ ۷۸ ۷۹ ۸۰ ۸۱ ۸۲ ۸۳ ۸۴ ۸۵ ۸۶ ۸۷ ۸۸ ۸۹ ۹۰ ۹۱ ۹۲ ۹۳ ۹۴ ۹۵ ۹۶ ۹۷ ۹۸ ۹۹ ۱۰۰ ۱۰۱ ۱۰۲ ۱۰۳ ۱۰۴ ۱۰۵ ۱۰۶ ۱۰۷ ۱۰۸ |
<!DOCTYPE HTML> <html> <head> </head> <body> <?php // تابعی که نوشتیم و داده های ارسالی را قبلا از ارسال از این تابع عبور میدهیم function filterInput($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } // تغریف متغیر ها و دادن مقدار اولیه خالی به هر کدام $name = $email = $gender = $comment = $website = ""; // تعریف متغیر، برای نگهداری پیغام های خطا $nameErr = $emailErr = $genderErr = $websiteErr = ""; // چک میکنیم اگر متد ارسالی برابر پست بود، مقادیر را از فرم دریافت کند // و از تابعی که نوشتیم، عبور دهد تا داده هایی بی عیب و نقص داشته باشیم. if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "Name is required"; } else { $name = filterInput($_POST["name"]); // کاربر در فیلد نام، فقط مجاز به استفاده از حروف و فضای خالی می باشد if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "Only letters and white space allowed"; } } if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = filterInput($_POST["email"]); // بررسی صحیح بودن آدرس ایمیل if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Invalid email format"; } } if (empty($_POST["website"])) { $website = ""; } else { $website = filterInput($_POST["website"]); // بررسی صحیح بودن آدرس سایت if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) { $websiteErr = "Invalid URL"; } } if (empty($_POST["comment"])) { $comment = ""; } else { $comment = filterInput($_POST["comment"]); } if (empty($_POST["gender"])) { $genderErr = "Gender is required"; } else { $gender = filterInput($_POST["gender"]); } } ?> <h2>PHP Form Validation Example</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Name: <input type="text" name="name"> <span class="error">* <?php echo $nameErr;?></span> <br><br> E-mail: <input type="text" name="email"> <span class="error">* <?php echo $emailErr;?></span> <br><br> Website: <input type="text" name="website"> <span class="error"><?php echo $websiteErr;?></span> <br><br> Comment: <textarea name="comment" rows="۵" cols="۴۰"></textarea> <br><br> 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 <span class="error">* <?php echo $genderErr;?></span> <br><br> <input type="submit" name="submit" value="Submit"> </form> <?php echo "<h2>Your Input:</h2>"; echo $name; echo "<br>"; echo $email; echo "<br>"; echo $website; echo "<br>"; echo $comment; echo "<br>"; echo $gender; ?> </body> </html> |
برای اجرا کافیست کدهای بالا را در یک فایل PHP ذخیره و در سمت سرور یا لوکال هاست، اجرا کنید.
موفق باشید.
ارسال نظر
شما باید وارد شوید یا عضو شوید تا بتوانید نظر ارسال کنید