فیلدهای الزامی در PHP
در این آموزش، نحوه ی ساخت فیلدهای الزامی (required) و نمایش پیغام خطای مناسب نشان داده خواهد شد.
فیلدهای الزامی در PHP
در آموزش قبلی، تمام فیلدهای ورودی اختیاری بودند. اما همانطور که در جدول اعتبار سنجی زیر مشخص شده است، فیلدهای "نام"، "ایمیل" و "جنسیت" الزامی اند. این فیلدها نمی توانند خالی باشند و باید حتماً با یک مقدار تنظیم شوند.
قوانین اعتبارسنجی:
فیلد | قوانین اعتبارسنجی |
---|---|
نام | الزامی است. فقط باید شامل حروف الفبا و خط فاصله باشد. |
ایمیل | الزامی است. باید شامل فرمت صحیح ایمیل باشد (همراه با علامت @ و .) |
وب سایت | اختیاری است. اگر پر شد، باید شامل فرمت صحیح URL باشد. |
توضیحات | اختیاری است. می تواند شامل چند خط متن باشد (textarea) |
جنسیت | الزامی است. یکی از دو مورد باید انتخاب شود. |
در کد زیر، تعدادی متغیر جدید با نام های nameErr$ و emailErr$ و genderErr$ و websiteErr$ اضافه شده است. این متغیرهای خطا، متن خطای مورد نظر را برای فیلدهای الزامی در خود نگه می دارند. ما همچنین برای هر متغیر POST_$ یک دستور if ... else اضافه کرده ایم. این دستور شرطی، چک می کند که اگر متغیر POST_$ خالی است (با استفاده از تابع ()empty) یک متن خطای مناسب در متغیرهای خطا ذخیره می کند، و اگر خالی نبود، مقدار برگشتی تابع ()test_input در متغیر متناظرش ذخیره می شود:
// 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"]);}
if (empty($_POST["email"]))
{$emailErr = "Email is required";}
else
{$email = test_input($_POST["email"]);}
if (empty($_POST["website"]))
{$website = "";}
else
{$website = test_input($_POST["website"]);}
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"]);}
}
?>
نمایش متن خطا در PHP
در فرم HTML، باید یک اسکریپت PHP اضافه نمایید. که متن خطای مورد نظر را نمایش می دهد:
مثال (فیلدهای الزامی در PHP)
<html>
<head>
<style>
.error {color: #FF0000;}
span{min-width: 200px;float: right;}
</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 = "وارد کردن نام الزامی است";}
else
{$name = test_input($_POST["name"]);}
if (empty($_POST["email"]))
{$emailErr = "وارد کردن ایمیل الزامی است";}
else
{$email = test_input($_POST["email"]);}
if (empty($_POST["website"]))
{$website = "";}
else
{$website = test_input($_POST["website"]);}
if (empty($_POST["comment"]))
{$comment = "";}
else
{$comment = test_input($_POST["comment"]);}
if (empty($_POST["gender"]) || $_GET["gender"]=="undefined")
{$genderErr = "انتخاب جنسیت الزامی سات";}
else
{$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">
<span class="error">*</span>
</div>
<div>
<span>ایمیل:</span><input type="text" name="email">
<span class="error">*</span>
</div>
<div>
<span>وب سایت:</span><input type="text" name="website">
<span class="error"></span>
</div>
<div>
<span>توضیحات:</span><textarea name="comment" rows="5" cols="40"></textarea>
<span class="error">*</span>
</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 ($nameErr!="" || $emailErr!="" || $genderErr!="" || $websiteErr!="")
echo "<span style='color:red' >
$nameErr <br /> $emailErr <br /> $genderErr <br /> $websiteErr
</span>";
else
{
echo "<br /><h2>خروجی کدتان</h2>";
echo "نام :$name";
echo "<br />";
echo "ایمیل: $email";
echo "<br />";
echo "وب سایت: $website";
echo "<br />";
echo "توضیحات: $comment";
echo "<br />";
echo "جنسیت: $ender";
}
?>
</body>
</html>
خروجی کد بالا:
مثال اعتبارسنجی فرم ها در PHP
در آموزش بعدی نحوه اعتبارسنجی فیلدهای "نام"، "ایمیل" و "وب سایت" توضیح داده خواهد شد. (آیا فیلد "نام"، فقط شامل حروف و فاصله خالی است - آیا فیلد "ایمیل"، شامل یک فرمت صحیح است - اگر فیلد "وب سایت" پر شد، آیا شامل یک فرمت صحیح است)
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 35516
دیدگاهها
با سلام خدمت نویسنده ی عزیز
ممنون از آموزش
نمیدونم این نکته رو ذکر کردن یا نه ولی میتونستیم به جای تعریف متغیر یک آرایه تعریف کنیم و push array کنیم خطاها رو و در آخر با foreach خطاهای فرم رو نمایش بدیم. و ممکنه روش بهتری ام وجود داشته باشه.اگه صلاح دونستید این تغییر رو انجام بدید.
ممنون
باسلام. می شه بگید علامت " " در این خط چه معنی می ده$nameErr = $emailErr = $genderErr = $websiteErr = "";
سلام.آیا برای فیلدهایی که الزامی است، بهتر نیست به جای این همه کد PHP، به تگ input ویژگی required را اضافه کنیم تا خود مرورگر ارور بده؟
آیا این دو روش با هم تفاوتی دارن؟کد زیر
<input type="text" name="NAME" required />
سلام، توجه فرمایید که اعتبارسنجی یا Validation اطلاعات فرم، باید در سه قسمت زیر چک گردد:
1- سمت کاربر (Client)
2- سمت سرور (PHP یا ASP.NET)
3- سمت پایگاه داده (SQL Server)
در مطلب بالا، اعتبارسنجی سمت سرور با استفاده از کدهای PHP انجام شده است، اما موردی که شما می فرمایید، یعنی استفاده از ویژگی required، اعتبار سنجی سمت کاربر است که باید انجام شود. اما هدف ما در بالا آموزش کدهای PHP بوده است و در مورد ویژگی مذکور، در قسمت HTML5 آموزش داده شده است.
ببخشید دو تا سوال داشتم:
1- ابتدای کدها متغیری برای خطای وبسایت با نام website تعریف کردین اما ازش استفاده نشده.یعنی اونجایی که به مثلا متغیر خطای نام یک عبارت رشته تخصیص دادین, داخل if مربوط به اعتبارسنجی سایت, مقدار خالی گذاشتین داخل متغیر $website. پس websiteErr چه مقداری میگیره که در if پایانی مقدارشو چک میکنیم؟
2- فرض کنیم فقط فیلد نام رو خالی بگذاریم.پس فقط متغیر خطای نام پرمیشه و درنتیجه در if پایانی تمام متغیرهای خطای دیگر هم که فیلدمتناظرشون پرشده هم باید چاپ بشن که البته مقدار خالی دارن.اما چون از تگ br هم استفاده کردین, پس در خروجی خطوط خالی به جای متغیرهای خطای بدون مقدار دیگر, چاپ میشن درسته؟
سلام
1- بله حق با شماست، چون فیلد "وب سایت" و "توضیحات" الزامی نیستند، می توانستیم برای فیلد های مذکور متغیرهای websiteErr$ و commentErr$ را ایجاد نکنیم.
2- آفرین به دقت شما ... بله شما درست می فرمایید اما بدلیل انتقال سریع و آسان مطالب مجبور شدیم که کدها را مختصر کنیم.
ببخشید ابتدای کد که همه متغیرهارو خالی کردین ایا باعث نمیشه که بار اول که مقادیر با متد get ارسال میشن و درنتیجه if اول رو رد میکنه و میره if اخر, چون شرط اون if هم غلط میشه, پس بدون معتبرسازی متغیرها میاد چاپشون میکنه؟
بله حق با شماست، اما توجه داشته باشید که این کار برای انتقال راحت تر و سریع تر مطالب انجام شده است.
سلام برای اینکه بخواهیم طول محتویات یک فیلد بیشتر از یک حد و کمتر از یک حدی باشد(مثلاحتما اسم بین 2 تا 10 کاراکتر باشد) , یا مثلا فیلدی حتما 10 کاراکتر را شامل شود و نه کمترو بیشتر , چه کار باید کرد؟
با سلام.
در خود تگ input یه خصوصیت هست به نام max که میتونید حد بالای مقدار اون رو کنترل کنید. همینطور برای حد پایین هم خصوصیت هست.
< input type="text" name="txtFirstn ame" min="2" max="10" >
ولی راه اصولیتر کنترل این مقادیر توسط زبان سمت سرور هست. چون با کمی کدنویسی و ابزار هک میشه قسمت کلاینت رو دور زد.
سلام، قسمت فیلدهای الزامی در PHP رو بخوبی آموزش داده بودید می خواستم تشکر کنم.
چرا من اگه شرط if رو برای gender قرار ندم و فرم رو بدون تعیین gender ارسال کنم ارور undefined میگیرم؟
چون در کنترلها gender هست، بعد از ارسال فرم، باید اون رو مدیریت کنید. اگر همینطوری رها کنید، و براش کد ننویسید، در صورتی که مقداری براش تعیین نشه و صدا زده بشه، مقدار undefined رو میگیره.
چرا بعدش اومدیم و گفتیم اگه این اتفاق بیافته تمام ارورها رو برامون چاپ کنه؟!
خب هر فیلدی که پر نشه فقط باید برای اون پیام بده
روشهای مختلفی برای نمایش خطا وجود داره.
یه روشش هم اینه!
در ثانی اگر دقت کنید اگر فیلدی دارای خطا نباشه، متن خطای مربوط به اون نشون داده نمیشه، یا در واقع خالی نشون داده میشه.
با سلام
میشه در مورد این خط توضیح بدین؟
if ($nameErr!="" || $emailErr!="" || $genderErr!="" || $websiteEr
با سلام.
اگر دقت کنید متغیرهای nameErr$، $emailErr و ... متن خطا رو نگه میدارن.
از طرفی علامت =! بیانگر نامساوی بودن هست. عبارت "" =! nameErr$ یعنی اگر متن خطا مساوی با "" نبود.
در واقع این شرط داره این معنی رو میده که متن خطا پر بود، عبارت خطا رو نشون بده.
متن خطا زمانی پر میشه که فیلد موردنظر دارای خطا باشه.
با سلام
می خواستم خروجی کد php رو با css استایل داده و در صفحه html نمایش بدم؛ اینکار به چه صورت امکان پذیر است؟
با تشکر
با سلام.
خروجی کدهای PHP در نهایت یک عبارت هست که میتونه رشته هم باشه.
شما میتونید این رشته رو داخل تگهای html قرار بدید و به اون تگها کلاس موردنظر رو اعمال کنید.
خالی گذاشتن فرم تماس با ما:
با سلام و احترام. ممنون میشم به سوالات من جواب بدین.
من یک فرم تماس با ما دارم به صورت عکس شماره ۱
وقتی فیلدی خالی باشه میگه فیلد رو پر کنه.حالا میخوام کاری کنم که فیلد رو خالی بعد از ارسال نفرسته یعنی کاربر حتما فیلد رو پر کنه.کدهای جاوااسکریپتش رو فقط روی فیلد نام تونستم فعال کنم فقط اجازه نمیده فیلدنام خالی باشه.واسه بقیش چیکار کنم.
کدهای جاوا اسکریپت (تصاویر ۲ و ۳)
کدهای فرم (تصاویر ۴ و ۵)
کد پی اچ پی (تصویر۶)
بد که این اتفاق افتاد میخوام وقتی پیام ارسال کرد علاوه بر این که توی صفحه ی مدیریت پیام رو فرستاد یک ایمیل واسه مدیر هم بفرسته و همچنین یک پیام هم به کاربر و هم به مدیر بفرسته.من باید چیکار کنم?
لینک تصاویر
http://www.uplooder.net/files/26602f681c446cf43cb3df3f5d9f3822/تصاویر_سوالات.zip.html
با سپاس از شما.
با سلام.
سؤال و عکسا تا حدودی گویای منظورتون بود، ولی بهتر بود کد رو کامل به صورت یه فایل txt میفرستادید تا روی همون میشد کد زد.
یه کد براتون نوشتم، تا حدودی خواستههای شما رو درش لحاظ کردم. البته خیلی ابتدایی هست. بیشتر برای این هست که مفهوم رو درک کنید. خودتون باید ویرایش کنید و مواردی لازم من جمله اضافه به دیتابیس رو بهش اضافه کنید.
بخش ارسال ایمیل رو هم خیلی ابتدایی نوشتم. برای ارسال ایمیل میشه از کلاسهای مخصوصی استفاده کرد که خیلی بهتر از کد من هست.
کد رو کامل کپی و در یک فایل php. ذخیره کنید. برای اجرا، باید فایلهای php در سیستم شما قابل اجرا شدن داشته باشن.
<?php
if(count($_POST ) > 0 && isset($_POST['b tnSend'])){
$name = isset($_POST['t xtName']) ? $_POST['txtName '] : '';
$email = isset($_POST['t xtEmail']) ? $_POST['txtEmai l'] : '';
$title = isset($_POST['t xtTitle']) ? $_POST['txtTitl e'] : '';
$content = isset($_POST['t xtContent']) ? $_POST['txtCont ent'] : '';
$error = array();
if(empty($name) )
$error[] = 'فیلد نام خالی است.';
if(empty($email ))
$error[] = 'فیلد ایمیل خالی است.';
if(empty($title ))
$error[] = 'فیلد عنوان خالی است.';
if(empty($conte nt))
$error[] = 'فیلد متن خالی است.';
if(empty($error )){
echo '<p>نام : ' . $name . '</p>';
echo '<p>ایمیل : ' . $email . '</p>';
echo '<p>موضوع : ' . $title . '</p>';
echo '<p>متن : ' . $content . '</p>';
// operation
// save to database
// send mail
mail("[email protected]", 'Subject', 'Content of message for admin');
}
else{
echo '<div class="err or">< ;p>'.implode ("</p&g t;<p>&quo t;, $error).'</p ></div> ;';
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Co ntact Us</title> ;
<meta charset="u tf-8" />
<style>
body{direction: rtl;font-family :tahoma;font-si ze:12px;}
td{padding:5px; vertical-align: top;}
input, textarea{width: 100%;border:1px solid #ccc;padding:2p x;}
.error{font-wei ght:bold;color: red;}
</style>
<script>
function checkform(){
var inputName = document.getEle mentById(" txtName");
var inputEmail = document.getEle mentById(" txtEmail") ;
var inputTitle = document.getEle mentById(" txtTitle") ;
var inputContent = document.getEle mentById(" txtContent" ;);
var err = 0;
if(inputName.va lue == ""){
err++;
inputName.style .border = "1px solid red";
}
else{
inputName.style .border = "1px solid #ccc";
}
if(inputEmail.v alue == ""){
err++;
inputEmail.styl e.border = "1px solid red";
}
else{
inputEmail.styl e.border = "1px solid #ccc";
}
if(inputTitle.v alue == ""){
err++;
inputTitle.styl e.border = "1px solid red";
}
else{
inputTitle.styl e.border = "1px solid #ccc";
}
if(inputContent .value == ""){
err++;
inputContent.st yle.border = "1px solid red";
}
else{
inputContent.st yle.border = "1px solid #ccc";
}
if(err)
return false;
else
return true;
}
</script>
</head>
<body>
<form method="po st" action="&q uot; onsubmit=" return checkform();&qu ot;>
<table>
<tr>
<td>نام&l t;/td>
<td><i nput type="text " name="txtN ame" id="txtNam e"/>< ;/td>
</tr>
<tr>
<td>ایمیل </td>
<td><i nput type="text " name="txtE mail" id="txtEma il"/>&l t;/td>
</tr>
<tr>
<td>موضوع </td>
<td><i nput type="text " name="txtT itle" id="txtTit le"/>&l t;/td>
</tr>
<tr>
<td>متن&l t;/td>
<td><t extarea name="txtC ontent" id="txtCon tent">& lt;/textarea> ;</td>
</tr>
<tr>
<td>& nbsp;</td> ;
<td><i nput type="subm it" value="Sen d" name="btnS end"/>& lt;/td>
</tr>
</table>
</form>
</body>
</html>
سلام
تشکر از سایت و مطالب خوبتون
من طبق آموزش جلو رفتم و به نتیجه رسیدم در مرحله بعد میخام با زدن کلید ارسال اطلاعات ، داده های من داخل دیتابیس بنشینه، یک فایل php برای ذخیره کدها در db ایجاد کردم ولی حالا نمیدونم چطور باید داده ها را post کنم به فایل مذکور؟
سلام و خسته نباشید:
به لینک های زیر مراجعه نمایید و مثال مربوطه را مشاهده نمایید:
beyamooz.com/php/97-database/118
beyamooz.com/php/339-project-hotel/2594
زماني كه يك فرم رو معتبر ميكنيم فقط انجام دادن اين مراحل كافيه؟منظورم اينه كه توابع ديگه اي هستن كه امنيت رو بيشتر كنن؟
بله حتماً وجود دارد، بعنوان مثال برای جلوگیری از حملات SQL Injection از دستورات آماده یا Prepare استفاده می کنیم ... برای کسب اطلاعات بیشتر به لینک زیر مراجعه فرمایید:
www.beyamooz.com/php/97-database/3268
با سلام و خسته نباشید.
از مطالب بسیار مفیدتون هم نهایت تشکر را دارم.
در قسمت آخر جای ۲ تا علامت جابجا نوشته شده لطفا اصلاح بفرمایید.
?>
}
سلام، ممنون اصلاح شد.
ببخشد تو دستور php دوم $nameErr!=""
معنيش چيه؟
در مثال بالا، قرار است، مثلاً اگر کاربر فیلد "ایمیل" را خالی باقی گذاشت و روی دکمه ی "ارسال اطلاعات" کلیک کرد، با پیغام "وارد کردن ایمیل الزامی است" مواجه شود.
حالا برای پیاده سازی این امر به چند متغییر برای نگه داری پیغام های خطا نیاز داریم، یکی از این متغیرها، چیزی است که شما به آن اشاره کرده اید، یعنی nameErr ...
پس اگر فیلد "نام" خالی بود، مقدار "وارد کردن نام الزامی است" برای این متغییر، تنظیم خواهد شد.
حالا به قول شما در کد php دوم، اگر این متغیر خالی بود که هیچ، اما اگر مقدار دهی شده بود، یعنی کاربر آنرا خالی ارسال کرده است ...
دلیل اینکه در مثال ، ابتدا متغییرها رو برابر "" (خالی) قرار دادید چی هست ؟
اصلا این کار لازمه ؟ چون با نبودنش هم خطایی رخ نمیده.
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
همانطور که می دانید در PHP از متغييرها، بدون تعريف قبلي مي توان استفاده نمود. یعنی برخلاف C نیاز به اعلان و مشخص کردن نوع وجود ندارد. حالا تصور کنید در صفحات دیگر پروژه، بصورت اشتباهی از متغییرهای همنام با مثال آموزش داده شده در بالا استفاده شده باشد. بنابریان بجهت اینکه مطمئن شویم، محتوای متغییرهای اعتبار سنجی خالی است، آنها را با "" مقدار دهی می کنیم.
خب اگر در صفحات دیگه ما از نام مشابه استفاده کرده باشیم مگه در این صفحه تاثیر میگذاره ؟
مگر اینکه بخوایم اون صفحه رو include کنیم ، وگرنه فکر نکنم در این صفحه مربوط به فرم ها تاثیر بگذاره درسته ؟
وقتی ما به صفحه دیگه میریم اگر مقادیر فیلد ها رو به صفحه ای ارسال نکنیم ، متغیرها از بین میره دیگه درسته ؟
دقیقاً منظورم include بود. باید اینو در جواب قبلیم می گفتم.