سرفصلهای پست
آموزش طراحی سایت با پی اچ پی – اعتبارسنجی ایمیل و URL در php
امروز با یک قسمت جدید از سری پست های کنترل فرم بخش آموزش پی اچ پی به زبان ساده در خدمت شما عزیزان هستم. در این جلسه به اعتبارسنجی ایمیل و url در php میپردازیم.
اعتبارسنجی فیلد نام در PHP
همانطور که در فرم اولیه مشاهده کردید برای ارسال موفق فرم تنها قادر به وارد کردن حروف الفبای کوچک و بزرگ لاتین و فضای خالی خواهید بود . در صورتی که کاراکتری به جز آن ها وارد کنید باپیغام خطا مواجه خواهید شد .
برای بررسی معتبر بودن نام کدی مشابه زیر را باید برای این فیلد بنویسیم :
$name = test_input($_POST["name"]); if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "فقط مجاز به استفاده از حروف الفبای بزرگ و کوچک لاتین و فاصله هستید"; }
name$
به همراه تابع test_input را در جلسه ی فیلد های الزامی در php آموزش داده ایم .
در این مثال مقدار فیلد name را ابتدا الزامی بودنش را بررسی کرده ایم و سپس مقدار آن را در متغیر name$
قرار داده ایم. سپس با استفاده از تابع preg_match! چک کرده ایم که آیا محتوای آن در محدوده ی تعیین شده ( حروف الفبای بزرگ و کوچک لاتین و اسپیس) قرار ندارد . در صورتی که قرار نداشته باشد دستور if اجرا خواهد شد و مقدار ” فقط مجاز به استفاده از حروف الفبای بزرگ و کوچک لاتین و فاصله هستید ” را داخل متغیر nameErr$
می ریزد.
تابع preg_match دو پارامتر را به عنوان ورودی می پذیرد . ابتدا محدوده ی مورد نظر و سپس رشته ی دلخواه . در صورتی که رشته با محدوده هم خوانی داشته باشد true و در غیر این صورت false را بر می گرداند.
اعتبارسنجی فیلد ایمیل در PHP
سریع ترین راه برای اعتبار سنجی فیلد ایمیل استفاده از تابع filter_var می باشد. این تابع فرمت اصلی ایمیل را بررسی می کند و در صورت صحیح بودن true و در صورت نامناسب بودن فرمت ایمیل وارد شده false را برمی گرداند. کد این بخش به صورت یر نوشته می شود :
$email = test_input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "فرمت ایمیل نادرست است";
}
پس از بررسی پر بودن این فیلد با تابع filter_var شرط را بررسی می کنیم و در صورت نامناسب بودن فرمت ایمیل وارد شده مقدار ” فرمت ایمیل نادرست است ” را در متغیر emailErr$
می ریزد.
اعتبارسنجی فیلد وب سایت در PHP
در قطعه کد زیر بررسی اعتبار فیلد حاوی url را مشاهده می کنید . که این کد – را هم در url معتبر به حساب می آورد. در صورت نامعتبر بودن پیغام ” url نامعتبر است ” را چاپ می کند .
$website = test_input($_POST["website"]); if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) { $websiteErr = " url نامعتبر است "; }
در ادامه پیشرفت فرم تا این مرحله را که شامل طراحی اولیه فرم و بررسی فیلدهای اجباری و همچنین صحیح بودن فرمت ایمیل و url را مشاهده می کنید.
<!DOCTYPE HTML> <html> <head> <style> .error {color: #FF0000;} </style> </head> <body> <?php // define variables and set to empty values $nameErr = $emailErr = $genderErr = $websiteErr = ""; $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "Name is required"; } else { $name = test_input($_POST["name"]); // check if name only contains letters and whitespace if (!preg_match("/^[a-zA-Z ]*$/",$name)) { $nameErr = "Only letters and white space allowed"; } } if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = test_input($_POST["email"]); // check if e-mail address is well-formed if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $emailErr = "Invalid email format"; } } if (empty($_POST["website"])) { $website = ""; } else { $website = test_input($_POST["website"]); // check if URL address syntax is valid 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 = test_input($_POST["comment"]); } if (empty($_POST["gender"])) { $genderErr = "Gender is required"; } else { $gender = test_input($_POST["gender"]); } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <h2>Mizfa.com Form Validation Example</h2> <p><span class="error">* required field.</span></p> <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="5" cols="40"></textarea> <br><br> Gender: <input type="radio" name="gender" value="female">Female <input type="radio" name="gender" value="male">Male <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>
خروجی :
منبع : w3schools
4 پاسخ
باسلام خدمت مدیریت اين سایت
این سایت واقعا خیلی عالی هست
دست سازنده این سایت درد نکنه
سلام
درسایت من برای وارد کردن ایمیل عضویت فقط جیمیل و یاهو مجاز هستن. البته فرم عضویت ووکامرسه. که من اعتبارسنجی رو توی فایل form-login.php و input ایمیل استفاده کردم . و کار میکنه. فقط مشکل اینه که الان فقط برای عضویت از قسمت ووکامرس کار میکنه . میخوام از قسمت عضویت خود وردپرس بشه این اعتبار سنجی رو انجام داد. میشه این اعتبار سنجی رو در فایل functions.php قرارداد که شامل کل فیلد های ایمیل سایت بشه؟
چون قرار دادن اعتبار سنجی توی input درست نیست و کسی زرنگ باشه میتونه دورش بزنه.
اگر کدش برای فایل functions.php رو میدونید ممنون میشم ارسال کنید.
سلام لطفا جواب منو بدین.
الان با این کارها تا حدی ایمیل اعتبار سنجی میشه ولی نه کامل مثلا ببینید کاربر تو اینپوت ایمیل میاد بعد از نقطه com. رو وارد نمیکنه و co. یا . C رو وارد میکنه و با این کد لازهم پیغام معتبر بودن ایمیل رو میده درصورتی که معتبر نیست.برای اینکه دامنه رو کامل بررسی کنه چیکار کنیم؟
سلام محمد. اتفاقا co نیازه چون ممکنه یک دامنه خود کاربر داشته باشه که co باشه مثلا test.co و موردی نداره. بهترین راه حل برای اعتبارسنجی ایمیل به نظر من این هست که وقتی کاربر ایمیل رو زد بعدش باید بره ایمیلش رو تایید کنه یعنی یک لینک ارسال بشه. این راه خیلی هم ساده هست و همینطور خیلی مطمئن.