PDA

View Full Version : سوال: بستن کد های php پس از اتمام کار



haniye70
پنج شنبه 12 مرداد 1391, 18:18 عصر
با سلام
من یک صفحه دارم که بعد از اینکه مقادیر رو از کاربر میگیره به یک صفحه دیگه انتقال پیدا میکنه
و بعد از اون مقادیر گرفته شده درون دیتابیس ذخیره می شود
مشکلی که حالا اینجا است اینکه که وقتی کاربر رفرش کنه بازم کد درج در دیتا بیس (INSERT)
بازم اجرا میشه که خودش مشکل ساز است
می خوام بعد از اجرای دستورات INSERT کلیه دستورات بسته بشه و دیگه با رفرش هم اجرا نشه

متشکر میشوم راهنمایی بفرماید

desatir7316
پنج شنبه 12 مرداد 1391, 21:09 عصر
شاید راه حل خوبی نباشه ولی شاید فعلا کارتو راه بندازه:
می تونی یه مقدار تصادفی هم خودت توی صفحه قبلی به مقادیری که به صفحه جدید ارسال می شن اضافه کنی و فیلد مربوط به این مقدار رو توی db به صورت unique بذاری
می تونی از طریق این فیلد کدتو کنترل کنی

Unique
پنج شنبه 12 مرداد 1391, 22:48 عصر
سوالتون یکم گنگی داره ! اما این یک موضوع کاملا طبیعی هستش ، احتمالا دلیل شما در مورد مشکل اینه که مثلا دو رکورد با اطلاعات یکسان پیدا خواهید کرد در صورت Refresh شدن اینه که شما از طریق فیلدی که باید یکتا باشه چک نمیکنین که کسی دوبار فرم را ارسال نکنه !

کار دیگه ای که میشه کرد اینه که شما مقادیر را به یک صفحه دیگه بفرستین و بعد از insert کردن کاربر را redirect کنید به صفحه نمایش پیام موفقیت درج رکورد ! اما باز هم میگم که این موضوع کاملا طبیعیه !

manager_66
جمعه 13 مرداد 1391, 04:27 صبح
میتونید چک کید اگه قبلا همچین پیامی تو جدول درج شده باشه پیغام مناسب داده بشه و دیگه تکراری تو جدول درج نشه :




$res= mysql_query("select * from `your_table`");
if (mysql_num_rows($res)>0)
echo 'repeat data';
else
echo 'your data inserted!';

hassanzanjani1374
جمعه 13 مرداد 1391, 11:08 صبح
میتونید چک کید اگه قبلا همچین پیامی تو جدول درج شده باشه پیغام مناسب داده بشه و دیگه تکراری تو جدول درج نشه :




$res= mysql_query("select * from `your_table`");
if (mysql_num_rows($res)>0)
echo 'repeat data';
else
echo 'your data inserted!';


اصلا راه حل خوبی نیست !!! چون امکان داره قبلا تو دیتابیس چیزی وارد کرده باشه ولی بعد از اون همیشه این پیام رو میده . علامت رو هم باید برعکس کنید .

MMSHFE
جمعه 13 مرداد 1391, 14:02 عصر
دوست عزیز چرا اینقدر راه سخت میرین؟ کافیه توی صفحه ای فرم همچین کدی بگذارین:


<?php
session_start();
$_SESSION['key'] = rand();
?>
<input name="key" type="hidden" value="<?php echo $_SESSION['key']; ?>"/>

و بعد توی صفحه مقصد فرم اینطوری کد بنویسید:


<?php
session_start();
if(isset($_POST['key']) && $_POST['key'] == $_SESSION['key']) {
// process form here
$_SESSION['key'] = rand();
}
?>

همونطور که میبینید، توی صفحه فرم اول یک سشن با مقدار تصادفی تولید میشه و همون توسط فرم ارسال میشه. توی صفحه مقصد هم ابتدا ارسال شدن این کد توسط فرم و بعد، برابر بودنش با مقدار موجود در سشن بررسی میشه. اگه برابر بودن، فرم پردازش میشه و در نهایت، سشن یک مقدار تصادفی دیگه میگیره. اینطوری با Refresh شدن، درسته که مقادیر فرم دوباره ارسال میشن ولی چون مقدار موجود در سشن یک عدد جدیده، دیگه فرم پردازش نمیشه.
موفق باشید.