PDA

View Full Version : مشکلی با متد $_POST



barnamenevis2016
جمعه 25 اردیبهشت 1394, 13:13 عصر
سلام.....فرض کنی یک فرمی داریم و با متد $_POST اطلاعات فرم بازیابی می کنیم....خوب فرض کنید در صفحه register.php فرممون یک اینپوت داره که با نام name...که وقتی دکمه submit رو می زنیم دوباره به همون صفحه register.php منتقل می شیم تا بررسی بشه که آیا مقدار $_POST['name'] ست هست یا نه و اگر ست شده مقدارش چقدره و اگر قابل قبول بود مثلا ثبت نام صورت بگیره....
حالا فرضا یکی یک مقدار اشتباه وارد کرد و submit رو زد و بعد چون مقدار $_POST ست شده بود...مثلا مقداری که کاربر فرستاده رو چک می کنیم و error متناسب می دیم..حالا مشکل اینجاست..که وقتی کاربر error دریاف کرد...و بعد همون صفحه رو refresh کرد....باز هم مثل اینکه دکمه submit رو زده باشه... $_POST['name'] رو ست شده فرض می گیره و همون مقدار قبلی ای که کاربر فرستاده براش در نظر می گیره و دوباره اونو چک می کنه...در حالی که کاربر submit رو نزده و تنها صفحه رو refresh کرده...برای حل این مشکل باید چه بکنیم....

mojooriass
جمعه 25 اردیبهشت 1394, 13:41 عصر
سلام.....فرض کنی یک فرمی داریم و با متد $_POST اطلاعات فرم بازیابی می کنیم....خوب فرض کنید در صفحه register.php فرممون یک اینپوت داره که با نام name...که وقتی دکمه submit رو می زنیم دوباره به همون صفحه register.php منتقل می شیم تا بررسی بشه که آیا مقدار $_POST['name'] ست هست یا نه و اگر ست شده مقدارش چقدره و اگر قابل قبول بود مثلا ثبت نام صورت بگیره....
حالا فرضا یکی یک مقدار اشتباه وارد کرد و submit رو زد و بعد چون مقدار $_POST ست شده بود...مثلا مقداری که کاربر فرستاده رو چک می کنیم و error متناسب می دیم..حالا مشکل اینجاست..که وقتی کاربر error دریاف کرد...و بعد همون صفحه رو refresh کرد....باز هم مثل اینکه دکمه submit رو زده باشه... $_POST['name'] رو ست شده فرض می گیره و همون مقدار قبلی ای که کاربر فرستاده براش در نظر می گیره و دوباره اونو چک می کنه...در حالی که کاربر submit رو نزده و تنها صفحه رو refresh کرده...برای حل این مشکل باید چه بکنیم....





راه سادش اینه کا به جای echo کردن مقدار ارور کاربر با دستور زیر به صفحه register.php ببرید و به انتهای ان یک متغییر get اضافه کنید که بر اساس اون خطا مورد نظر چاپ کنید


header("location: register.php?error=name");

توی صفحه register.php هم چنین شرطی بزارید:


if(isset($_GET['error']){
$error=$_GET['error'];
switch($error){
case 'name':
echo 'نام وارد شده سحیح نیست';
break;
case 'email':
echo 'ایمیل وارد شده صحیح نیست';
break;
}

شرط بالا چک میکنه ببینه مقدار به نام error به صورت get ارسال شده یا نه اگه وجود داشت با دستور switch مقدار اون را بررسی میکنه .

راه دیگه هم استفاده از اجاکس هست.