آموزش فرم ها در PHP – فیلدهای ضروری
سلام
در سومین بخش از آموزش کار با فرم ها در PHP در خدمتتون هستیم، در دو جلسه ی قبلی ارسال داده ها و اعتبار سنجی داده های فرم را توضیح دادیم، حال در این بخش می پردازیم به فیلد های ضروری و اینکه چطوری میتونیم فیلد یا فیلدهایی را ضروری کنیم، تا هنگامی که کاربر این فیلدها را تکمیل نکرده باشد، نتواند فرم را ارسال کند، در ادامه همراه بپرسم باشید.
فرم HTML که استفاده میکنیم، همان فرمی هست که در دو جلسه ی قبلی ازش استفاده کردیم.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ |
<form method="post" action=""> Name: <input type="text" name="name" value=""> <span class="error">* </span> <br><br> E-mail: <input type="email" name="email" value=""> <span class="error">* </span> <br><br> Website: <input type="text" name="website" value=""> <span class="error"></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">* </span> <br><br> <input type="submit" name="submit" value="Submit"> </form> |
قوانینی که برای اعتبار سنجی فرم بالا در نظر گرفتیم، به شرح زیر است:
فیلد |
قوانین |
Name |
این فیلد ضروری هست و فقط نام هایی را ثبت میکند که شامل حروف و فضای خالی باشند. |
|
این فیلد ضروری هست و فقط ایمیل هایی را ثبت میکند که از قوانین ایمیل در آنها رعایت شده باشد، شامل @ و . باشند. |
Website |
این فیلد اختیاری هست و آدرس سایت وارد شده باید صحیح باشد |
Comment |
این فیلد اختیاری هست و هر کاراکتری را قبول میکند. |
Gender |
این فیلد ضروری هست و کاربر فقط میتواند یک گزینه را انتخاب کند |
فیلدهای ضروری
در کد زیر که برای فیلدهای ضروری استفاده میکنیم، علاوه بر متغیرهای قبل(که در جلسه قبل نوشتیم)، چند متغیر جدید که عبارت اند از:
- nameErr$
- emailErr$
- genderErr$
- websiteErr$
این متغیرها خطاهایی که برای فیلدهایی که الزامی هستند را در خودشون ذخیره میکنند، تا اگر کاربر فیلد ضروری را تکمیل نکرد و خواست فرم را ارسال کند، خطایی مربوطه نمایش داده شود.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ |
<?php // تعریف متغیرها $nameErr = $emailErr = $genderErr = $websiteErr = ""; $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { if (empty($_POST["name"])) { $nameErr = "Name is required"; } else { $name = filterInput($_POST["name"]); } if (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = filterInput($_POST["email"]); } if (empty($_POST["website"])) { $website = ""; } else { $website = filterInput($_POST["website"]); } if (empty($_POST["comment"])) { $comment = ""; } else { $comment = filterInput($_POST["comment"]); } if (empty($_POST["gender"])) { $genderErr = "Gender is required"; } else { $gender = filterInput($_POST["gender"]); } } ?> |
در خط ۶ همانطور که قبلا هم گفتیم، چک کردیم که اگر متد ارسالی برابر POST بود، اون موقع بیاد و عملیاتی که مد نظر داریم را روی فیلدها اعمال کند.
و سپس چک کردیم که اگر مقدار فیلد ارسال شده از سمت کاربر خالی بود(یعنی چیزی ارسال نکرده بود)، بیاد و بررسی های لازم را انجام دهد. اگر بخواهیم بیشتر توضیح دهیم به این صورت است که:
- فیلد Name در فرم ضروری هست، پس برای اینکه کاربر نتونه فرم رو بدون تکمیل کردن این فیلد ارسال کنه، به این صورت کد نویسی کردیم:
۱ ۲ ۳ ۴ ۵ |
if (empty($_POST["name"])) { $nameErr = "Name is required"; } else { $name = filterInput($_POST["name"]); } |
در تکه کد بالا گفتیم، اگر فیلد Name از سمت کاربر خالی فرستاده شده، بیاد و داخل متغیر nameErr پیغام مناسب رو چاپ کنه(که ما در اینجا پیغام Name is required) را قرار دادیم و اگر فیلد name خالی نبود، مقدار ارسال شده از سمت کاربر رو بیاد از تابع filterInput که برای فیلتر کردن داده های کاربران در جلسه قبل نوشتیم عبور بده.
- فیلد Comemnt هم اختیاری است و نیازی به تکمیل کردن توسط کاربر نیست، لذا به این صورت کد نویسی میکنیم:
۱ ۲ ۳ ۴ ۵ |
if (empty($_POST["comment"])) { $comment = ""; } else { $comment = filterInput($_POST["comment"]); } |
گفتیم اگه مقدار ارسال شده خالی بود، اشکال نداره فرم رو سمت سرور ارسال کن(مقدارش رو برابر رشته خالی گذاشتیم)، ولی اگر این فیلد توسط کاربر تکمیل شده بود، قبل از ارسال به سمت سرور از تابع filterInput عبورش بده.
این دو نمونه کد که در بالا توضیح داده شد، یکی برای فیلدهای ضروری و یکی هم برای فیلدهای غیرضروری بود. که درک بیشتری داشته باشید.
نمایش پیغام های خطا به کاربران
تا اینجای کار، پیغام ها را تعیین کردیم ولی به کاربر نشون ندادیم، برای اینکه به کاربر نشون بدیم باید در فرمی که داریم، تعدادی کد به این صورت اضافه کنیم:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ |
<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> |
در کنار فیلدهای ضروری یک تگ span به این صورت اضافه کردیم:
۱ |
<span class="error">* <?php echo $nameErr;?></span> |
که پیغام مورد نظر ما را در صورت خالی نبودن فرم، نمایش دهد.
و در انتها تمام کدهایی که تا الان نوشتییم به صورت یکجا:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ ۴۶ ۴۷ ۴۸ ۴۹ ۵۰ ۵۱ ۵۲ ۵۳ ۵۴ ۵۵ ۵۶ ۵۷ ۵۸ ۵۹ ۶۰ ۶۱ ۶۲ ۶۳ ۶۴ ۶۵ ۶۶ ۶۷ ۶۸ ۶۹ ۷۰ ۷۱ ۷۲ ۷۳ ۷۴ ۷۵ ۷۶ ۷۷ ۷۸ ۷۹ ۸۰ ۸۱ ۸۲ ۸۳ ۸۴ ۸۵ ۸۶ ۸۷ ۸۸ ۸۹ ۹۰ ۹۱ ۹۲ ۹۳ ۹۴ ۹۵ ۹۶ ۹۷ |
<!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 (empty($_POST["email"])) { $emailErr = "Email is required"; } else { $email = filterInput($_POST["email"]); } if (empty($_POST["website"])) { $website = ""; } else { $website = filterInput($_POST["website"]); } 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 ذخیره و در سمت سرور یا لوکال هاست، اجرا کنید.
در قسمت بعدی به صورت حرفه ای تر میخواهیم داده های ورودی را اعتبار سنجی کنیم، برای مثال باید بررسی کنیم ببینیم آدرس ایمیلی که کاربر وارد کند، از قوانین یک آدرس ایمیل پیروی میکند یا خیر، در قسمت بعدی نیز همراه ما باشید.
موفق باشید.
ارسال نظر
شما باید وارد شوید یا عضو شوید تا بتوانید نظر ارسال کنید