PDA

View Full Version : مبتدی: از بین بردن یک ارایه



masiha68
جمعه 18 بهمن 1392, 13:34 عصر
سلام
دنبال دستوری هستم که یک ارایه رو از بین ببره
با unset کردم نشد ....نمی خوام ارایه رو خالی کنم می خوام کلا از بین ببرمش .
در کل می خوام بعد از ارسال یک مقدار توسط فرم کل اطلاعات فرم که با post ارسال شده و به صورت یک ارایه است از بین ببرم

masiha68
جمعه 18 بهمن 1392, 13:40 عصر
توی سایت php نوشته با unset کلا از بین میره ولی نمی دونم چرا وقتی رفرش رو میزنم بازم همون مقدارها ارسال میشن

abolfazl-z
جمعه 18 بهمن 1392, 13:48 عصر
دوست عزیز خوب باید همین باشه !

PHP یک مفسر(interpreter) هست و زمانی که یک درخواستی ارسال میشه به صفحه PHP، مفسر PHP از بالا خط به خط شروع به تفسیر برنامه می کند و وقتی به پایان برسد همه چی تموم میشه و این روند برای در خواست های دیگر هم همین هست!

abolfazl-z
جمعه 18 بهمن 1392, 13:49 عصر
یا شما منظورتون متغیر های super global است ؟

masiha68
جمعه 18 بهمن 1392, 14:36 عصر
یا شما منظورتون متغیر های super global است ؟

نه منظورم این نیست
منظورم من همون فرمه که با post ارسال میشه و وقتی هم رفریش میشه دوباره مقادیر رو میفرسته ....در مورد کامپایلر پی اچ پی هم اطلاعات کافی دارم و من وقتی فرم رو ارسال مینم توی خط اخر php ارایه ی post رو unset می کنم ولی بازم وقت رفرش شدن همون مقادیر پست ارسال میشه
در کل یعنی راهی وجود نداره از ارسال مجدد اطلاعات با رفرش جلوگیری کرد

smksmk
جمعه 18 بهمن 1392, 15:38 عصر
شما درست unset نمیکنین ، مشکل از جای دیگه نیست ، کدش رو بزارین معلوم میشه.

MMSHFE
جمعه 18 بهمن 1392, 15:55 عصر
نه ایشون درست Unset میکنن. مسئله در عدم درک صحیح از پروتکل HTTP هست. دقت کنید که وقتی صفحه ای که مقادیر بهش Post شده درخواست میشه، اطلاعات واردشده در فرم، توسط هدر درخواست، برای سرور ارسال میشه و چنین درخواستهایی، درصورت Refreshشدن صفحه، مجدداً هدرها رو میسازن و میفرستن. بنابراین عملاً درسته که شما آرایه POST_$ رو Unset کردین ولی در درخواست بعدی (که با Refresh اتفاق میفته) مجدداً مقادیر ارسال میشن و آرایه POST_$ خالی نیست! برای حل اینجور مشکلات، توی صفحه فرم، یک متغیر Session بسازین و توی صفحه مقصد فرم، وجود اون Session رو چک کنید. اگه وجود داشت، فرم رو پردازش کنید و بعد از پردازش فرم هم مقدار Session رو حذف کنید تا در Refreshهای بعدی، حتی اگه آرایه POST_$ پر هم باشه، دیگه پردازش نشه. اینطوری تاحدودی جلوی ارسال مقادیر برای سایت شما توسط فرمهایی که توی سایتهای دیگه (یا حتی localhost) قرار داره و بیشتر برای عملیاتی مثل Fishing و XSS و... تولید میشن هم گرفته میشه.

abolfazl-z
جمعه 18 بهمن 1392, 16:15 عصر
نه منظورم این نیست
منظورم من همون فرمه که با post ارسال میشه و وقتی هم رفریش میشه دوباره مقادیر رو میفرسته ....در مورد کامپایلر پی اچ پی هم اطلاعات کافی دارم و من وقتی فرم رو ارسال مینم توی خط اخر php ارایه ی post رو unset می کنم ولی بازم وقت رفرش شدن همون مقادیر پست ارسال میشه
در کل یعنی راهی وجود نداره از ارسال مجدد اطلاعات با رفرش جلوگیری کرد

$_POST هم جزء یکی از super globals ها است.

لیست super globals:


$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
آقای شهرکی توضیحات لازم را نوشتند.

موفق باشید. :لبخندساده:

rezaonline.net
جمعه 18 بهمن 1392, 16:55 عصر
فکر کنم بعد از اینزرت کردن توی دیتابیس همون آدرس رو خودشون رفرش کنن مشکل حل میشه .
دقیقا عین متد refresh فریم ورک Yii :)

MMSHFE
جمعه 18 بهمن 1392, 17:04 عصر
راستش با متا امتحان نکردم ولی Refresh معمولی فکر نمیکنم جواب بده و یه جورایی باید Redirect‌ باشه (مثل هدر location) تا مقادیر دوباره Post نشه. فرق هدر location و Refresh دقیقاً مثل تفاوت وقتی هست که توی آدرس بار کلیک کنید و Enter بزنید و وقتی که صفحه رو با F5 یا Ctrl+R مجدداً Refresh کنید (در اولی، دیگه مقادیر Post نمیشه ولی در دومی میشه).

masiha68
جمعه 18 بهمن 1392, 22:12 عصر
نه ایشون درست Unset میکنن. مسئله در عدم درک صحیح از پروتکل HTTP هست. دقت کنید که وقتی صفحه ای که مقادیر بهش Post شده درخواست میشه، اطلاعات واردشده در فرم، توسط هدر درخواست، برای سرور ارسال میشه و چنین درخواستهایی، درصورت Refreshشدن صفحه، مجدداً هدرها رو میسازن و میفرستن. بنابراین عملاً درسته که شما آرایه POST_$ رو Unset کردین ولی در درخواست بعدی (که با Refresh اتفاق میفته) مجدداً مقادیر ارسال میشن و آرایه POST_$ خالی نیست! برای حل اینجور مشکلات، توی صفحه فرم، یک متغیر Session بسازین و توی صفحه مقصد فرم، وجود اون Session رو چک کنید. اگه وجود داشت، فرم رو پردازش کنید و بعد از پردازش فرم هم مقدار Session رو حذف کنید تا در Refreshهای بعدی، حتی اگه آرایه POST_$ پر هم باشه، دیگه پردازش نشه. اینطوری تاحدودی جلوی ارسال مقادیر برای سایت شما توسط فرمهایی که توی سایتهای دیگه (یا حتی localhost) قرار داره و بیشتر برای عملیاتی مثل Fishing و XSS و... تولید میشن هم گرفته میشه.
مشکل من تو این کار اینه که بار که رفرش میشه یه پیغام هم توی صفحه نشون میده
در کل من اینو واسه این مطلب :http://barnamenevis.org/showthread.php?440136-%D9%85%D8%B3%D8%AA%D8%B1-%D9%BE%DB%8C%D8%AC-%D8%AF%D8%B1-php&p=1969660#post1969660
می خوام . چون هر بار که پیج رو رفریش میکنه یه پیغام میده و یه کم ازار دهنده ست .
با این حساب راهی هست که بعد اینکه مقدار post رو داخل یه سشن ریختیم اونم از هدر هم پاک کنیم

rezaonline.net
جمعه 18 بهمن 1392, 23:41 عصر
راستش با متا امتحان نکردم ولی Refresh معمولی فکر نمیکنم جواب بده و یه جورایی باید Redirect‌ باشه (مثل هدر location) تا مقادیر دوباره Post نشه. فرق هدر location و Refresh دقیقاً مثل تفاوت وقتی هست که توی آدرس بار کلیک کنید و Enter بزنید و وقتی که صفحه رو با F5 یا Ctrl+R مجدداً Refresh کنید (در اولی، دیگه مقادیر Post نمیشه ولی در دومی میشه).
منم دقیقا منظورم ریدارکت به همین لینک صفحه جاری هست .