PDA

View Full Version : سوال: جلوگیری از فراخوانی



janbozorgi
پنج شنبه 06 فروردین 1388, 15:31 عصر
با سلام و تبریک سال جدید بهمراه آروزی موفقیت برای همگی
کد زیر رو دوستان نگاه کنن:




<html><body>
<table align="center"><tr><td align="center">
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post">
<input type="text" name="txtInsert">
<input type="submit" value="insert" name="insert">
</form>
</td></tr></table>
<?php
if(isset($_POST['insert'])) {
echo "ok";
}
?>
</td></tr></table>
</body>
</html>



در کد بالا وقتی کاربر دکمه insert رو کلیک میکنه کلمه ok پرینت خواهد شد. مشکل بنده این است که در این هنگام وقتی کاربر صفحه رو رفرش کنه مثلا دکمه f5 رو بزنه خود به خود با اجرای دوباره صفحه کلمه ok پرینت خواهد شد یعنی شرط if برقرار است همچنان.
دوستان بفرمایند چگونه از این کار جلوگیری کنم.
ممنون

امیـرحسین
پنج شنبه 06 فروردین 1388, 15:45 عصر
سلام

وقتی صفحه برای اولین بار لود میشه هم ok چاپ میشه؟
احتمالا مشکل اینجاست که شما بعد از فشار دادن دکمه صفحه رو refresh می کنید و مرورگرتون آخرین URL یعنی اونی که مقادیر POST همراهش هست رو refresh می کنه و احتمالا مرورگرتون اینترنت اکسپلورره چون مرورگرهای Gecko و Webkit این موضوع رو سوال می کنند.

tabib_m
پنج شنبه 06 فروردین 1388, 16:47 عصر
اگر برات مهمه که این اتفاق نیفته بهتره که محتویات داخل if رو همه رو بریزی توی یک فایل دیگه و action فرمت رو بدی به اون فایل. بعد، پس از انجام اتفاقاتی که میخوای بیافته، صفحه رو با header منتقل کن به همین صفحه... در این صورت در صورتی که دکمه ی رفرش زده بشه، اتفاقی نمی افته...

موفق باشید...

janbozorgi
شنبه 08 فروردین 1388, 10:11 صبح
اگر برات مهمه که این اتفاق نیفته بهتره که محتویات داخل if رو همه رو بریزی توی یک فایل دیگه و action فرمت رو بدی به اون فایل. بعد، پس از انجام اتفاقاتی که میخوای بیافته، صفحه رو با header منتقل کن به همین صفحه... در این صورت در صورتی که دکمه ی رفرش زده بشه، اتفاقی نمی افته...

موفق باشید...


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

tabib_m
شنبه 08 فروردین 1388, 19:31 عصر
فکر نمیکنم... صفحه ای که ایجاد شده با درخواست post همراره... اگر بخوات همین صفحه رفرش بشه درخواست تکرار میشه...
میتونی مثلا کاری کنی که بفهمی درخواست post تکراریه یا اولین باره، بر اساس اون تعیین کنی که چه کاری باید انجام بدی، اما به طور کلی فکر نمیکنم بتونی درخواست post رو توی رفرش لغو کنی...

موفق باشید

امیـرحسین
سه شنبه 11 فروردین 1388, 03:56 صبح
من یه پیشنهاد دارم.
یه فیلد مخفی با مقدار ()time ایجاد بشه. هر بار که فرم اجرا شد، مقدار این فیلد توی یه آرایه و آرایه هم بصورت SESSION ذخیره بشه. دقیقتر اینکه اگر timestamp یا مقدار این فیلد تو آرایه نبود ذخیره بشه و اگر بود، یعنی یه فرم یکسان دوباره داره ارسال میشه و نباید چیزی چاپ شه.

در واقع ما داریم از طریق کوکی، یه لیست سیاه درست می کنیم.

امیـرحسین
سه شنبه 11 فروردین 1388, 04:15 صبح
سرچ کردم دیدم کلی روش و حقه واسه همچین چیزی وجود داره:
http://www.google.com/search?hl=en&q=php+prevent+resubmit+form