حفظ مقادیر فرم در PHP
در این آموزش نحوه ی جلوگیری از خالی شدن فیلدهای فرم، زمانی که کاربر روی دکمه submit کلیک می کند را نشان خواهیم داد.
حفظ مقادیر فرم در PHP
زمانی که کاربر، مقادیر فیلدهای فرم را تنظیم و روی دکمه submit کلیک می کند، تمام فیلدها، مقادیرشان را از دست می دهند. حالا تصور نمایید که کاربر، در ورود اطلاعات یک فیلد (مثلاً فیلد "ایمیل") خطایی داشته باشد، بنابراین باید از ابتدا شروع به وارد کردن اطلاعات کند...!
بمنظور حفظ مقادیر فیلدهای فرم، برای فیلدهای متنی، باید یک کد PHP کوچک در خصوصیت value تگ <input> قرار دهیم. همچنین برای عنصر <textarea> باید کد PHP را بین تگ های باز و بسته <textarea> و </textarea> قرار دهیم. این قطعه کدها، مقادیر متغیرهای name, $email, $website, $comment$ را نمایش می دهند.
سپس، در مورد فیلد "جنسیت" باید مشخص کنیم که کدام گزینه انتخاب شده است. بنابراین باید خصوصیت ckecked آنرا دستکاری کنیم (نه خصوصیت value):
ایمیل: <input type="text" name="email" value="<?php echo $email;?>">
وب سایت: <input type="text" name="website" value="<?php echo $website;?>">
توضیحات: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
جنسیت:
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="female") echo "checked";?>
value="female">زن
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="male") echo "checked";?>
value="male">مرد
مثال تکمیل شده اعتبارسنجی فرم در PHP
در زیر، کد تکمیل شده اعتبارسنجی فرم در PHP آمده است:
مثال (حفظ مقادیر فرم در PHP)
<html>
<head>
<style>
body {direction:rtl;}
.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 syntax is valid
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
{
$emailErr = "Invalid email format";
}
}
if (empty($_POST["website"]))
{$website = "";}
else
{
$website = test_input($_POST["website"]);
// check if URL address syntax is valid (this regular expression also allows dashes in the URL)
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>مثال اعتبارسنجی فرم ها در PHP</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<div>
<span>نام:</span><input type="text" name="name" value="<?php echo $name;?>">
<span class="error">*</span>
</div>
<div>
<span>ایمیل:</span><input type="text" name="email" value="<?php echo $email;?>">
<span class="error">*</span>
</div>
<div>
<span>وب سایت:</span>
<input type="text" name="website" value="<?php echo $website;?>">
<span class="error"></span>
</div>
<div>
<span>توضیحات:</span><textarea name="comment" rows="5" cols="40">
<?php echo $comment;?>
</textarea>
<span class="error">*</span>
</div>
<div>
<span>جنسیت:</span>
<input type="radio" name="gender" value="female" <?php if (isset($gender) && $gender=="female") echo "checked";?> >زن
<input type="radio" name="gender" value="male" <?php if (isset($gender) && $gender=="male") echo "checked";?> >مرد
</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 "جنسیت: $gender";
}
?>
</body>
</html>
خروجی کد بالا:
مثال اعتبارسنجی فرم ها در PHP
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 24834
دیدگاهها
سلام خسته نباشین خیلی ممنون به خاطر سایت بسیار خوب و آموزندتون. ببخشید م یه سوال داشتم. بعد از این که این فرم رو طراحی کردم و کاربر اطلاعاتشو وارد کرد و ارسال کرد چطوری میتونم این اطلاعات رو در پایگاه داده mysql ذخیره کنم و در صفحه مدیریت این اطلاعات رو بازخوانی کنم؟
ممنونم به خاطر سایت خوبتون
سلام و تشکر از شما ... برای این منظور به بخش 4 یعنی "آموزش پایگاه داده" مراجعه فرمایید.
همچنین پیشنهاد می شود فیلم آموزشی پروژه محور رزرو هتل را نیز مشاهده فرمایید:
beyamooz.com/product/php-hotel/%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%B1%D8%B2%D8%B1%D9%88-%D9%87%D8%AA%D9%84-%D8%AF%D8%B1-php
سلام و خداقوت من کدهامو مثل شما نوشتم فقط ابتدا کدهای فرم رو نوشتم بعد تموم کدهای تگ php
1- نمیدونم دلیل اینکه شما همه ی کدهای php رو یکجا ننوشتین چیه؟
2- خروجی هم برام میده .فقط وقتی فیلد نامعتبری وارد میکنم و ارور چاپ میشه مقادیر فیلدهای دیگه هم پاک میشه.درحالی که کدهای مربوط به پاک نشدنشون رو نوشتم. مشکل از چیه؟ ممنون و تشکر
سلام و درود
1- دلیل یکجا قرار دادن کدهای PHP و HTML آموزش آسانتر و ساده تر PHP است.
2- سعی کنید محل قرارگیری کدهای PHP و HTML را طبق مثال بالا رعایت کنید.
سلام کد بالاتون خروجی نمیده لطفا اصلاحش کنید ممنون از سایت خوبتون
سلام، با تشکر فراوان، اصلاح شد.
چرا در این خط
if (empty($_POST[" gender"]) || $_POST["gender" ]=="undefined")
وقتی از post استفاده میشه مشکلی نداره ولی وقتی در قسمت دوم از get استفاده میشه مشکل داره.
if (empty($_POST[" gender"]) || $_GET["gender"]=="undefined")
و خطای undfined برای متغیر gender ایجاد میشه.
سلام
قابل ذکر است که فیلد gender الزامی است و با استفاده از کدی که دوست خوبم مشخص کرده می توانیم تنظیم شدن یا نشدن آنرا بررسی کنیم.
اما قسمت دوم شرط بالا اصلا نیازی نیست و فقط کافی است بصورت زیر عمل فرمایید:
if (empty($_POST[" gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_PO ST["gender"]);
}
اما جدای از صحبت بالا، خطایی که به شما گزارش شده به این خاطر است که پارامتری از طریق URL با نام gender ارسال نشده است و در اینجاست که دستور GET_$ با خطا مواجه خواهد شد.
سلام.من با ذخیره کردن اطلاعات دریافتی تو mysql مشکل دارم یعنی نمیتونم داده هایی که از input ها میگیرم رو insert شون کنم تو دیتابیسم !؟ قبلا یبار تونستم ولی اونم وقتی صفحه رفرش میشد یه row خالی تو جدول دیتابیسم ذخیره میشد!!!
لطفا آموزش کامل همراه با سورس کدش رو بزارید منظورم همین آموزش ارسال مقادیر تو این روش به دیتابیس هست
سلام، در فصل 4 یعنی "آموزش پایگاه داده" به موردی که فرمودید پرداخته شده است.
beyamooz.com/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-my-sql
سلام ...
مرسی از آموزش های خوبتون
من یه مشکل با آموزش این جلسه دارم ، زمانی که برای name مقدار value و کدش رو نوشتن بعد از اینکه خطای ورود اطلاعات نمایش داده میشه و به فرم برمی گردم بجای نام با یه چیز دیگه مواجه میشم :
Notice: Undefined variable: name in C:\xampp\htdocs \myproject\Regi ster\insert2.ph p on line 133
سلام.
دقت کنید، هر وقت با خطای Notice: Undefined variable: name برخورد کردید،به این معنی هست که در اون خط اون متغیر رو نمیتونه بخونه و یا در واقع اون متغیر در اون تعریف نشده.
سلام ممنونم از سایت خیلی خوبتون...
میشه بهم بگید واسه یه فرم dropdown حفظ مقادیر رو چطوری باید انجام بدیم؟؟
و همین طور واسه فایلی که آپلود کردیم چطوری مقدارش رو حفظ کنیم؟؟
سلام و تشکر
سؤالتون ابهام داره. منظورتون از حفظ مقادیر چیه دقیقا؟؟؟
برای حفظ مقادیر باید اطلاعات در دیتابیس یا فایل ذخیره بشه و همینطور برای بازیابیشون.
فایلی رو هم که اپلود میکنید، میتونید توسط دستورات مربوط به فایل، مقادیرش رو بخونید.
بیشتر توضیح بدید تا بشه دقیق راهنمایی کرد.
سلام دستور isset کارش چیه ؟
سلام
دستور isset بررسی می کند که یک متغیر دارای مقدار باشد و null نباشد.
سلام
چطور میشود که وقتی روی یک ایتم منو مثلا درباره ما کلیک میشود ؛
محتیوات آن پست در ستون وسط نمایش داده شود؟
من توسط php عناصر منو رو به صورت پویا اینجاد کردم ولی نمیدانم چطوری باید محتویات را در صفحه ی اصلی نمایش بدهم؟
سلام.
این کار رو شما باید با css و javascript انجام بدید. بسته به اینکه چطور محتویات تولید میشه، میتونید از کلاسهای CSS استفاده کنید یا اینکه محتویات رو توسط ajax فراخوانی کرده و در هنگام نمایش توسط جاوااسکریپت در وسط صفحه قرار بدید.
البته راه حل را پیدا کردم با خود php
وقتی که روی یک عنصری از لیست های منو کلیک شده؛میتوان id مربوط به همان پست را به خود صفحه ارسال کرد(get)و در قسمتی که باید نمایش داده شود چک شود که اگر id ارسال شد محتویات مربوط به آن پست را در آن قسمت نمایش بدهد.
مدیر عزیز سلام ببخشید انقدر سؤال میکنم 4تا سؤال دیگه کنم قول میدم دیگه سؤال نکنم اگر هم از حوصله این مطلب خارج هست توی ایمیلم جواب بدید باز هم ببخشید. 1. ساخت فرمی که دارای کپچر کد باشه باید چه کنیم. 2. چه کنیم قبل از اینکه تمامی فرم ها پر نشود دکمه سابمیت کار نکند اصلا کار php هست یا javascript. 3. شما در قسمت فرم ها فرم های نوشتنی را آموزش دادید اما خواستم ببینم برای مثلا یک چکباکس یا فرم ریدیو کد های php را چگونه باید نوشت یا همینطور برای لیست های کشویی که مثلا استان محل زندگیتان را انتخاب کنید یا مثلا نظر سنجی. اگر توضیحشان طول میکشه یک منبع معرفی کنید خیلیییی ممنون
با سلام و تشکر.
1) برای ساختن کپچر باید کدنویسی کنید. نمونه کدهاش زیاد هست تو اینترنت. توسط کدنویسی یک تصویر حاوی نوشته ایجاد میشه که این نوشته در یه جایی از برنامه ذخیره شده. کاربر با واردکردن اعداد اون تصویر، صحت فرم رو ارسال میکنه.
2) این کار هم توی php هست و هم توی جاوااسکریپت. ولی بهتره اعتبارسنجی در سمت سرور چک بشه، تا امکان دور زدن خیلی بیاد پایین.
سؤال 3 هم واضح نیست.
فکر کنم منظورم درست نگفتم خواستم ببینم آیا برای اینکه بتونیم از رفتن کاربر بدونه تعیید این گزینه مثلا قوانین سایت باید چه کدی بنویسیم آیا از طریق php هست یا ن این هم کد اینکه قسمت value را نمایش میدهد
برای تأیید قوانین توسط کاربر شما میتونیه یک چکباکس تعبیه کنید. با زدن چک باکس و ارسال به صفحه بعدی، برنامهنویس باید مقدار چکباکس رو بخونه و در صورتی که مقدار درستی داشت، به معنی این هست که کاربر تیک رو زده و در واقع قوانین رو تأیید کرده. از اینجا میشه رفت مرحلهی بعدی.
در غیر اینصورت باید دوباره برگشت بشه به صفحهی قوانین و بگه تا زمانی که قوانین رو تأیید نکنی، مجاز به رفتن به مرحلهی بعد نیستی.
با سلام خدمت مدیر عزیز خیییییییلی ممنون بابت آموزش هایتان ببخشید چندتا سؤال داشتم: 1. در حفظ مقادیر فیلد ها وقتی قسمت ولیو را با کد php پر میکنم اون کد را در زمان اجرای کد داخل فیلد نشاد میدهد. 2. چگونه میتوانیم کاری کنیم که مثلا کاربر ما اگر زیر 18 سال بود نتواند ثبت نام را ادامه دهد یا مثلا اگر قوانین سایت را تعیید نکرد ادامه ندهد.3 من اون کدی را که در قسمت اکشن فرم وارد میکنیم را وقتی در localhost اجرا میکنم ارور 403 میدهد چرا؟ مجبور شدم به یک آدرس دیگه آدرس دهم و در همان صفحه باز نمیشود. با تشکر من با اینکه نابینا هستم اما انقدر آموزشهایتان عالی است که کاملا میتوانم از آنها استفاده کنم خییییییلی ممنون
با سلام خدمت شما دوست عزیز.
دوست عزیز بهتره کدهای خودتون رو برای من بفرستید تا دقیق بتونم بگم مشکل از کجاست. نمایش کدهای PHP در داخل کنترل در واقع داره میگه که شما یه جایی تو کد اشتباه کردید. اون اشتباه رو با دیدن میشه پیدا کرد.
در مورد شرط زیر 18 باید بگم که این بستگی به شرایط ثبتنام در سایت داره... در اینترنت معمولا این شرایط خیلی مصداق اصلی پیدا نمیکنه. در فیس بوک هم افراد زیر 18 سال حق ثبتنام ندارند، ولی میبینیم که شخص با وارد کردن سن خودش بیشتر از 18 این محدودیت رو دور میزنه.
در مورد خطای 403 هم فکر میکنم خطای forbidden باشه. یه جایی تو کدها یه اسکریپتی وجود داره که باعث بروز مشکل میشه. یا خطای سطح دسترسی یا ...
باید کدها رو دید تا بشه دقیق گفت مشکل از کجاست.
با تشکر و آرزوی موفقیت برای شما دوست عزیز.
یه سوال
وقتی که ما فرم رو ساب میت میکنم به خودش؛اطلاعاتش پست بک میشه؛بدین معنی که کدهای صفحه دوباره از نوع نوشته میشوند ؛آیا درست میگم
حال اینکه اگر صفحه کلا بازنویسی بخواهد بشود؛به نظرم یکم سرعت لود صفحه رو میگیرد؛نمیشه کاری کرد فقط قسمتی که باید تغییر کند لود شود
امیدوارم منظورمو رسونده باشم
با سلام.
منظورتون خیلی واضح نیست. بیشتر توضیح بدید!!
اما من یه توضیحی بدم.
با هر بار اجرای یک صفحه درخواستی به سمت سرور ارسال و پاسخی دریافت میشه.
اگر در این درخواست نیاز به وصل شدن به دیتابیس باشه، و نیاز داشته باشیم که حجمی از رکوردها رو از دیتابیس fetch کنیم، این درخواست کمی نیاز به زمان و فضا داره. ولی در کل اگه حجم اطلاعات دریافتی از سرور زیاد نباشه، سرعت لود اونقدر زیاد نیست که باعث اذیت بشه.
این سرعت برای واکشی حجم زیادی رکورد از دیتابیس به چشم میاد.
اگه همه چیز ایدهآل باشه، سرعت لود اونقدر نیست که به چشم بیاد.
سلام ؛ممنون از پاسختان
ولی منظرمو نتوستم برسونم؛یکم توضیح میدهم
در هربار پست شدن فایل Php اطلاعاتی که postback میشود منجر به بازنویسی کل صفحه میشود
که به نظرم برای صفحات سنگین یکم وقت گیر میشود
آیا راهی است که بشود قسمتی که فقط باید تغییر کند دوباره لود شود و قسمت های دیگر ثابت بمونند
یک چیزی در مورد مسترپیج شنیده ام؛ولی درست نمیدونم چیست و آیا php این قابلیتو دارد یا نه
با تشکر
با سلام به شما کاربر عزیز و گرامی
اگه منظورتون از گرفتن اطلاعات هستش و آپدیت شدن اونها بدون این که صفحه رفرش بشه دوباره میتونید از آجاکس به راحتی این کار رو انجام بدید اما اگه منظورتون چیز دیگه ای هستش توضیح بدید تا کدشو براتون بنویسم
با تشکر و احترام
خب الان چنتا پروژه ی ساده به من معرفی کنید!
من هم فکر میکنم کاربردی تر کار کنم خوبه..ولی مثلا الان با چه تمرینها و پروژه های ساده تری کار کنم!؟
یعنی از کجا پیدا کنم؟!
شما به من معرفی میکنید؟!
سلام
پروژه رزرو هتل، یک پروژه بسیار ساده و ابتدایی است که برای شروع خیلی خوب می تونه شما رو راه بیندازه ...
اما در پروژه آموزش ساخت فروشگاه که بیش از 100 قسمت است شما با تمام مباحث برنامه نویسی آشنا خواهید شد. بنابراین پیشنهاد می کنم که کار رو با پروژه هتل شروع کنید و سپس برید سراغ پروژه ساخت فروشگاه اینترنتی ...
مثلا برای شروع سعی کنید یه صفحه لاگین بسازید.
برای این منظور شما نیاز به پرس و جو در دیتابیس (کلا کار با دیتابیس)، فرم ها در html، پاسکاری بین صفحات html، کار با سشن ها و ... دارید.
این برای شروع میتونه خوب باشه.
با سلام و احترام
به من یه راهنمایی میکنید!؟
شدیدا نیاز دارم..
من تازه شروع به یادگیری php
کردم و الان ترم دوم هستم...اموزشهای این درس رو تا سر اعتبارسنجی ایمیل خوندم...فکر کنم کمی بلدم...با توجه به اینکه ترم آینده از ما پروژه میخوان..به نظرتون اگه الان من یکی از پروژه هاتون رو بخرم چیزی ازش سر در میارم؟
یعنی بخوام کمی تغیرش بدم و دستکاریش کنم..بنظرتون برای من زیاد سنگین نمیشه!؟
میخام از الان شروع کنم که تا ترم دیگه اماده باشم...
اگه اینطوره شما کدوم پروژه تون رو پیشنهاد میکنید که من بگیرم؟!
مرسی از راهنماییتون..
با سلام و تشکر.
به نظر من خریدن یه پروژه شاید در ابتدا برای شما کمی سنگین باشه. معمولا پروژه ها با متدهای خاص برنامه نویسی پیاده سازی میشن و چون شما آشنایی ندارید، مطمئنا با سردرگمی مواجه خواهید شد.
بهتره کمی آموزش رو جلو ببرید و مثالها رو تمرین کنید. کاربردی تر کار کنید. بعد از چند هفته صرفا میتونید از پروژه های ساده شروع کنید و کدهاشو مطالعه کنید.
به نظر من خودتون یه پروژه رو شروع کنید و با توجه به آموخته هاتون اون رو پیش ببرید. هر جا هم که نیاز به آموزش و یا سوال داشتید، مطرح کنید. در صورت توان کمک خواهیم کرد.
سلام و تشکر فراوان
من اعتبار سنجی فرمم رو با جاوااسکریپت نوشتم الان با php بخوام مقدایر فرم رو حفظ کنم چیکار باید انجام بدم امکان داره راهنمایی کنید چطوری مقدار value رو تعریف کنم!!
سلام
در مطلب بالا بخوبی نحوه ی حفظ مقادیر فرم، بین Post Back ها توضیح داده شده است. اما اگر اعتبارسنجی فرم همان طور که شما فرمودید سمت کلاینت و با استفاده از JavaScript و یا jQuery انجام شود، قبل از ارسال اطلاعات به سرور، اعتبار تک تک فیلد ها چک می شود و اگر مشکلی وجود داشته باشد، Post Back اتفاق نمی افتد. پس تا اینجای کار حفظ مقادیر فرم معنی ندارد ...!
اما اگر به هر نحوی Post Back اتفاق افتاد و شما خواستید که مقادیر فرم حفظ شود. دقیقاً مانند بالا عمل می کنیم. یعنی بعنوان مثال اگر یک تکس باکس داشتیم مقدار Value آنرا بصورت زیر تنظیم می کنیم:<input type="text" name="email" value="<? php echo $email;?>"> البته فراموش نکنیم که متغییر email$ هنگام ارسال اطلاعات، مقدار دهی شده باشد.