در این آموزش نحوه ی جلوگیری از خالی شدن فیلدهای فرم، زمانی که کاربر روی دکمه 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 کلیک کنید.
ممنونم به خاطر سایت خوبتون
همچنین پیشنهاد می شود فیلم آموزشی پروژه محور رزرو هتل را نیز مشاهده فرمایید:
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
1- نمیدونم دلیل اینکه شما همه ی کدهای php رو یکجا ننوشتین چیه؟
2- خروجی هم برام میده .فقط وقتی فیلد نامعتبری وارد میکنم و ارور چاپ میشه مقادیر فیلدهای دیگه هم پاک میشه.درحالی که کدهای مربوط به پاک نشدنشون رو نوشتم. مشکل از چیه؟ ممنون و تشکر
1- دلیل یکجا قرار دادن کدهای PHP و HTML آموزش آسانتر و ساده تر PHP است.
2- سعی کنید محل قرارگیری کدهای PHP و HTML را طبق مثال بالا رعایت کنید.
[color=#FF0000][dir=#555] if (empty($_POST["gender"]) || $_POST["gender"]=="undefined")
[/dir][/color]
وقتی از post استفاده میشه مشکلی نداره ولی وقتی در قسمت دوم از get استفاده میشه مشکل داره.
[dir=#555]if (empty($_POST["gender"]) || $_GET["gender"]=="undefined")
[/dir]
و خطای undfined برای متغیر gender ایجاد میشه.
قابل ذکر است که فیلد gender الزامی است و با استفاده از کدی که دوست خوبم مشخص کرده می توانیم تنظیم شدن یا نشدن آنرا بررسی کنیم.
اما قسمت دوم شرط بالا اصلا نیازی نیست و فقط کافی است بصورت زیر عمل فرمایید:
[dir=#555] if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}[/dir]
اما جدای از صحبت بالا، خطایی که به شما گزارش شده به این خاطر است که پارامتری از طریق URL با نام gender ارسال نشده است و در اینجاست که دستور GET_$ با خطا مواجه خواهد شد.
وقتی که ما فرم رو ساب میت میکنم به خودش؛اطلاعاتش پست بک میشه؛بدین معنی که کدهای صفحه دوباره از نوع نوشته میشوند ؛آیا درست میگم
حال اینکه اگر صفحه کلا بازنویسی بخواهد بشود؛به نظرم یکم سرعت لود صفحه رو میگیرد؛نمیشه کاری کرد فقط قسمتی که باید تغییر کند لود شود
امیدوارم منظورمو رسونده باشم
منظورتون خیلی واضح نیست. بیشتر توضیح بدید!!
اما من یه توضیحی بدم.
با هر بار اجرای یک صفحه درخواستی به سمت سرور ارسال و پاسخی دریافت میشه.
اگر در این درخواست نیاز به وصل شدن به دیتابیس باشه، و نیاز داشته باشیم که حجمی از رکوردها رو از دیتابیس fetch کنیم، این درخواست کمی نیاز به زمان و فضا داره. ولی در کل اگه حجم اطلاعات دریافتی از سرور زیاد نباشه، سرعت لود اونقدر زیاد نیست که باعث اذیت بشه.
این سرعت برای واکشی حجم زیادی رکورد از دیتابیس به چشم میاد.
اگه همه چیز ایدهآل باشه، سرعت لود اونقدر نیست که به چشم بیاد.
ولی منظرمو نتوستم برسونم؛یکم توضیح میدهم
در هربار پست شدن فایل Php اطلاعاتی که postback میشود منجر به بازنویسی کل صفحه میشود
که به نظرم برای صفحات سنگین یکم وقت گیر میشود
آیا راهی است که بشود قسمتی که فقط باید تغییر کند دوباره لود شود و قسمت های دیگر ثابت بمونند
یک چیزی در مورد مسترپیج شنیده ام؛ولی درست نمیدونم چیست و آیا php این قابلیتو دارد یا نه
با تشکر
اگه منظورتون از گرفتن اطلاعات هستش و آپدیت شدن اونها بدون این که صفحه رفرش بشه دوباره میتونید از آجاکس به راحتی این کار رو انجام بدید اما اگه منظورتون چیز دیگه ای هستش توضیح بدید تا کدشو براتون بنویسم
با تشکر و احترام
لطفا آموزش کامل همراه با سورس کدش رو بزارید منظورم همین آموزش ارسال مقادیر تو این روش به دیتابیس هست
beyamooz.com/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-my-sql
من هم فکر میکنم کاربردی تر کار کنم خوبه..ولی مثلا الان با چه تمرینها و پروژه های ساده تری کار کنم!؟
یعنی از کجا پیدا کنم؟!
شما به من معرفی میکنید؟!
پروژه رزرو هتل، یک پروژه بسیار ساده و ابتدایی است که برای شروع خیلی خوب می تونه شما رو راه بیندازه ...
اما در پروژه آموزش ساخت فروشگاه که بیش از 100 قسمت است شما با تمام مباحث برنامه نویسی آشنا خواهید شد. بنابراین پیشنهاد می کنم که کار رو با پروژه هتل شروع کنید و سپس برید سراغ پروژه ساخت فروشگاه اینترنتی ...
برای این منظور شما نیاز به پرس و جو در دیتابیس (کلا کار با دیتابیس)، فرم ها در html، پاسکاری بین صفحات html، کار با سشن ها و ... دارید.
این برای شروع میتونه خوب باشه.
به من یه راهنمایی میکنید!؟
شدیدا نیاز دارم..
من تازه شروع به یادگیری php
کردم و الان ترم دوم هستم...اموزشهای این درس رو تا سر اعتبارسنجی ایمیل خوندم...فکر کنم کمی بلدم...با توجه به اینکه ترم آینده از ما پروژه میخوان..به نظرتون اگه الان من یکی از پروژه هاتون رو بخرم چیزی ازش سر در میارم؟
یعنی بخوام کمی تغیرش بدم و دستکاریش کنم..بنظرتون برای من زیاد سنگین نمیشه!؟
میخام از الان شروع کنم که تا ترم دیگه اماده باشم...
اگه اینطوره شما کدوم پروژه تون رو پیشنهاد میکنید که من بگیرم؟!
مرسی از راهنماییتون..
به نظر من خریدن یه پروژه شاید در ابتدا برای شما کمی سنگین باشه. معمولا پروژه ها با متدهای خاص برنامه نویسی پیاده سازی میشن و چون شما آشنایی ندارید، مطمئنا با سردرگمی مواجه خواهید شد.
بهتره کمی آموزش رو جلو ببرید و مثالها رو تمرین کنید. کاربردی تر کار کنید. بعد از چند هفته صرفا میتونید از پروژه های ساده شروع کنید و کدهاشو مطالعه کنید.
به نظر من خودتون یه پروژه رو شروع کنید و با توجه به آموخته هاتون اون رو پیش ببرید. هر جا هم که نیاز به آموزش و یا سوال داشتید، مطرح کنید. در صورت توان کمک خواهیم کرد.
مرسی از آموزش های خوبتون
من یه مشکل با آموزش این جلسه دارم ، زمانی که برای name مقدار value و کدش رو نوشتن بعد از اینکه خطای ورود اطلاعات نمایش داده میشه و به فرم برمی گردم بجای نام با یه چیز دیگه مواجه میشم :
[dir=#555]Notice: Undefined variable: name in C:\xampp\htdocs\myproject\Register\insert2.php on line 133[/dir]
دقت کنید، هر وقت با خطای Notice: Undefined variable: name برخورد کردید،به این معنی هست که در اون خط اون متغیر رو نمیتونه بخونه و یا در واقع اون متغیر در اون تعریف نشده.
میشه بهم بگید واسه یه فرم dropdown حفظ مقادیر رو چطوری باید انجام بدیم؟؟
و همین طور واسه فایلی که آپلود کردیم چطوری مقدارش رو حفظ کنیم؟؟
سؤالتون ابهام داره. منظورتون از حفظ مقادیر چیه دقیقا؟؟؟
برای حفظ مقادیر باید اطلاعات در دیتابیس یا فایل ذخیره بشه و همینطور برای بازیابیشون.
فایلی رو هم که اپلود میکنید، میتونید توسط دستورات مربوط به فایل، مقادیرش رو بخونید.
بیشتر توضیح بدید تا بشه دقیق راهنمایی کرد.
من اعتبار سنجی فرمم رو با جاوااسکریپت نوشتم الان با php بخوام مقدایر فرم رو حفظ کنم چیکار باید انجام بدم امکان داره راهنمایی کنید چطوری مقدار value رو تعریف کنم!!
در مطلب بالا بخوبی نحوه ی حفظ مقادیر فرم، بین Post Back ها توضیح داده شده است. اما اگر اعتبارسنجی فرم همان طور که شما فرمودید سمت کلاینت و با استفاده از JavaScript و یا jQuery انجام شود، قبل از ارسال اطلاعات به سرور، اعتبار تک تک فیلد ها چک می شود و اگر مشکلی وجود داشته باشد، Post Back اتفاق نمی افتد. پس تا اینجای کار حفظ مقادیر فرم معنی ندارد ...!
اما اگر به هر نحوی Post Back اتفاق افتاد و شما خواستید که مقادیر فرم حفظ شود. دقیقاً مانند بالا عمل می کنیم. یعنی بعنوان مثال اگر یک تکس باکس داشتیم مقدار Value آنرا بصورت زیر تنظیم می کنیم:[dir=#555]<input type="text" name="email" value="[color=#FF0000]<?php echo $email;?>[/color]">[/dir] البته فراموش نکنیم که متغییر email$ هنگام ارسال اطلاعات، مقدار دهی شده باشد.
دستور isset بررسی می کند که یک متغیر دارای مقدار باشد و null نباشد.
چطور میشود که وقتی روی یک ایتم منو مثلا درباره ما کلیک میشود ؛
محتیوات آن پست در ستون وسط نمایش داده شود؟
من توسط php عناصر منو رو به صورت پویا اینجاد کردم ولی نمیدانم چطوری باید محتویات را در صفحه ی اصلی نمایش بدهم؟
این کار رو شما باید با css و javascript انجام بدید. بسته به اینکه چطور محتویات تولید میشه، میتونید از کلاسهای CSS استفاده کنید یا اینکه محتویات رو توسط ajax فراخوانی کرده و در هنگام نمایش توسط جاوااسکریپت در وسط صفحه قرار بدید.
وقتی که روی یک عنصری از لیست های منو کلیک شده؛میتوان id مربوط به همان پست را به خود صفحه ارسال کرد(get)و در قسمتی که باید نمایش داده شود چک شود که اگر id ارسال شد محتویات مربوط به آن پست را در آن قسمت نمایش بدهد.
1) برای ساختن کپچر باید کدنویسی کنید. نمونه کدهاش زیاد هست تو اینترنت. توسط کدنویسی یک تصویر حاوی نوشته ایجاد میشه که این نوشته در یه جایی از برنامه ذخیره شده. کاربر با واردکردن اعداد اون تصویر، صحت فرم رو ارسال میکنه.
2) این کار هم توی php هست و هم توی جاوااسکریپت. ولی بهتره اعتبارسنجی در سمت سرور چک بشه، تا امکان دور زدن خیلی بیاد پایین.
سؤال 3 هم واضح نیست.
در غیر اینصورت باید دوباره برگشت بشه به صفحهی قوانین و بگه تا زمانی که قوانین رو تأیید نکنی، مجاز به رفتن به مرحلهی بعد نیستی.
دوست عزیز بهتره کدهای خودتون رو برای من بفرستید تا دقیق بتونم بگم مشکل از کجاست. نمایش کدهای PHP در داخل کنترل در واقع داره میگه که شما یه جایی تو کد اشتباه کردید. اون اشتباه رو با دیدن میشه پیدا کرد.
در مورد شرط زیر 18 باید بگم که این بستگی به شرایط ثبتنام در سایت داره... در اینترنت معمولا این شرایط خیلی مصداق اصلی پیدا نمیکنه. در فیس بوک هم افراد زیر 18 سال حق ثبتنام ندارند، ولی میبینیم که شخص با وارد کردن سن خودش بیشتر از 18 این محدودیت رو دور میزنه.
در مورد خطای 403 هم فکر میکنم خطای forbidden باشه. یه جایی تو کدها یه اسکریپتی وجود داره که باعث بروز مشکل میشه. یا خطای سطح دسترسی یا ...
باید کدها رو دید تا بشه دقیق گفت مشکل از کجاست.
با تشکر و آرزوی موفقیت برای شما دوست عزیز.