NULL کردن آرایه و reload صفحه

masima

Member
سلام
من میخوام آرایه پست (یا در حالت کلی آرایه ) که در برنامه مقدار گرفته و قراره یه جایی استفاده بشه ( مثلا به پاک شدن یک سطر از جدول منجر میشه ) رو NULL کنم !
یعنی در واقع میخوام اگه کاربر صفحه رو reload کرد دیگه این متغیر مقداری نداشته باشه مثل اینکه از روز ازل وجود نداره ! :shock: باید چطوری این کار رو انجام بدم ؛ در واقع میخوام بدونم آیا یک دستور فسقلی مثل یک تابع وجود داره که همچین کاری رو انجام بده یا نه ؟
یا اینکه باید بذارم توی حلقه و تک تک اندیس ها رو تهی کنم ؟

سوال دوم :
چه طور تشخیص بدم که صفحه دوباره لود شده ؟

با تشکر

 

Cyletech

Member
برای سوال اولتون:
PHP:
$array = array();
یا $array = NULL;
برای سوال دومتون: فکر نکنم تابع خاصی وجود داشته باشه. باید اول آی پی و تاریخ کامل وارد شدن آی پی رو ذخیره کنید بعد چک کنید اگر همون آی پی در همون زمان یا یه مقدار اینور اونور وارد این صفحه شده یعنی صفحه رفرش شده.
 

masima

Member
برا سوال اولم NULL شد ؛ ممنون ؛ حالا یه سوال دیگه دارم : پیش فرض : تو یک صفحه چند تا سطر هست مثلا (10 تا) که با checkbox انتخاب میشه و کاربر یک چند تا سطر رو انتخاب میکنه مثلا با اندیس های 3و4 و بعدش دکمه میزنه میره یک صفحه دیگه اونجا این سطرهای برگزیده از جدول پاک میشن. حالا اگه کاربر دکمه back رو بزنه و صفحه رو دوباره بارگزاری کنه حالا سطرها 8 تا هستن ولی باز هم اندیس های 3و4 انتخاب شدن ! من چه کار کنم که وقتی دوباره صفحه لود میشه این تیک ها برداشته بشن ؟ اینو باید بگم که این دو صفحه فرم و اجرای حذف توسط یک صفحه دیگه بر اساس دستور switch فراخوانی میشن ؛ که شرط فراخوانی هم پر بودن آرایه پست هست ! حالا اگه بخوام توی (یا اول یا آخر! ) دستور سوئیچ آرایه رو NULL کنم اصلا به صفحه دوم نمیره ! شما میگید چه کار کنم ؟ در مورد سوال دوم :
برای سوال دومتون: فکر نکنم تابع خاصی وجود داشته باشه. باید اول آی پی و تاریخ کامل وارد شدن آی پی رو ذخیره کنید بعد چک کنید اگر همون آی پی در همون زمان یا یه مقدار اینور اونور وارد این صفحه شده یعنی صفحه رفرش شده.
مثلا اگه کاربر یک ربع ؛ یک نیم ساعت ؛ یک ساعت ؛ تو این صفحه باشه چی ؟! به نظرم این راه اصلا جالب نیست و مطمئن هم نیست ! راه بهتری وجود نداره ؟
 
برا سوال اولم NULL شد ؛ ممنون ؛ حالا یه سوال دیگه دارم : پیش فرض : تو یک صفحه چند تا سطر هست مثلا (10 تا) که با checkbox انتخاب میشه و کاربر یک چند تا سطر رو انتخاب میکنه مثلا با اندیس های 3و4 و بعدش دکمه میزنه میره یک صفحه دیگه اونجا این سطرهای برگزیده از جدول پاک میشن. حالا اگه کاربر دکمه back رو بزنه و صفحه رو دوباره بارگزاری کنه حالا سطرها 8 تا هستن ولی باز هم اندیس های 3و4 انتخاب شدن ! من چه کار کنم که وقتی دوباره صفحه لود میشه این تیک ها برداشته بشن ؟ اینو باید بگم که این دو صفحه فرم و اجرای حذف توسط یک صفحه دیگه بر اساس دستور switch فراخوانی میشن ؛ که شرط فراخوانی هم پر بودن آرایه پست هست ! حالا اگه بخوام توی (یا اول یا آخر! ) دستور سوئیچ آرایه رو NULL کنم اصلا به صفحه دوم نمیره ! شما میگید چه کار کنم ؟ در مورد سوال دوم : مثلا اگه کاربر یک ربع ؛ یک نیم ساعت ؛ یک ساعت ؛ تو این صفحه باشه چی ؟! به نظرم این راه اصلا جالب نیست و مطمئن هم نیست ! راه بهتری وجود نداره ؟

راهی که Cyletech گفت راه خوبیه. شما میتونید میتونید یک تیبل جدا به این کار اختصاص بدید و به این صورت که هر بار رکورد نام صفحه + یک متغیر مثل VIEWPAGE در ASPX رو ضبط کنه که همون صفحه رو نشون بده (این متغیر میتونه به صورت تگ HTML وجود داشته باشه ) . تایم رو هم داشته باشه. یا میتونید فقط اسم صفحه رو داشته باشید با زمان آخرین ورود, برای نمایش زمانی که در صفحه بوده هم میتونید زمان حال رو - زمان ثبت شده بکنید.

در جواب به سوال دیگرتون هم میتونید در زمان ارسال فرم به صورت POST, کش ایجاد شده رو پاک کنید که دیگه با back کردن به صفحه قبلی اطلاعات دوباره نمایش داده نشه.
برای این کار میتونید از HTML و header در php استفاده کنید. برای مثال:
PHP:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1"> 
<?php
Header( "Last-Modified: " . gmdate( "D, j M Y H:i:s" ) . " GMT" );
Header( "Expires: " . gmdate( "D, j M Y H:i:s", time() ) . " GMT" );
Header( "Cache-Control: no-store, no-cache, must-revalidate" ); // HTTP/1.1
Header( "Cache-Control: post-check=0, pre-check=0", FALSE );
Header( "Pragma: no-cache" ); // HTTP/1.0
echo '
<form method="POST" action="">
<input type="textbox" name="x">
<input type="submit" value="Go!">
</form>';
?>
 
آخرین ویرایش:

Domanjiri

Well-Known Member
سلام دوست من(حالت خوبه؟!)

در ادامه جواب دوست عزیز، جناب equilibriumator

...مثلا با اندیس های 3و4 و بعدش دکمه میزنه میره یک صفحه دیگه اونجا این سطرهای برگزیده از جدول پاک میشن. حالا اگه کاربر دکمه back رو بزنه و صفحه رو دوباره بارگزاری کنه حالا...
به نظر میرسه که از متد GET برای ارسال اطلاعات استفاده می کنید، اگه از متد POST استفاده کرده بودید( یا کنید!) وقتی کار دکمه بک رو میزنه، پیغام نمایش داده میشه که "آیا دوباره اطلاعات ارسال بشه و..".
PHP:
header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");//تاریخ مربوط به گذشته

موفق باشید
 
آخرین ویرایش:

masima

Member
equilibriumator
شما میتونید میتونید یک تیبل جدا به این کار اختصاص بدید و به این صورت که هر بار رکورد نام صفحه + یک متغیر مثل VIEWPAGE در ASPX رو ضبط کنه که همون صفحه رو نشون بده (این متغیر میتونه به صورت تگ HTML وجود داشته باشه ) . تایم رو هم داشته باشه. یا میتونید فقط اسم صفحه رو داشته باشید با زمان آخرین ورود, برای نمایش زمانی که در صفحه بوده هم میتونید زمان حال رو - زمان ثبت شده بکنید.
خیلی ممنون ، میشه یه کم روشن تر بگید آخه خیلی مبهم نوشتید من متوجه نشدم !

Domanjiri
سلام دوست من(حالت خوبه؟!)
وااا..اای سلام خوبی عزیز ؟ منم خوبم ... چرا اسمتو عوض کردی ناقلا ؟ :lol:
به نظر میرسه که از متد GET برای ارسال اطلاعات استفاده می کنید، اگه از متد POST استفاده کرده بودید( یا کنید!) وقتی کار دکمه بک رو میزنه، پیغام نمایش داده میشه که "آیا دوباره اطلاعات ارسال بشه و..".
نه اصلا ! از پست استفاده میکنم ؛ خودت که بهتر میدونی؟! :shock:
نه ببین کاربر توی یه صفحه یه چیزایی رو جستجو میکنه ؛ تو صفحه دیگه نتیجه نشون داده میشه ؛ بعد میتونه سطرهایی که میخواد حذف بشه رو انتخاب کنه ؛ دکمه حذف میزنه میره مرحله بعد (! :shock:دیگه اگه همینجوری ادامه بده به گنج میتونه برسه ! :lol:)
حالا اگه دکمه back رو بزنه و ... بقیه اش رو تو پست پیش گفتم دیگه !




 
equilibriumator

خیلی ممنون ، میشه یه کم روشن تر بگید آخه خیلی مبهم نوشتید من متوجه نشدم !



با این مثالی که بنده نوشتم میتونید Cache e Browser خودتون رو پاک کنید یا اصلا اجازه ی کش کردن ندید.
در این صورت اطلاعات ارسالی بعد از ارسال دخیره نمیشن.
میتونید کد رو تست کنید, متوجه میشید.
 

masima

Member
equilibriumator

با این مثالی که بنده نوشتم میتونید Cache e Browser خودتون رو پاک کنید یا اصلا اجازه ی کش کردن ندید. در این صورت اطلاعات ارسالی بعد از ارسال دخیره نمیشن. میتونید کد رو تست کنید, متوجه میشید.
خیلی ممنون کاملا درسته ! اینجوری دیگه اصلا کش ندارم. خیلی عالیه ! خیلی خوبید !
سوال دوم :
چه طور تشخیص بدم که صفحه دوباره لود شده ؟
این سوالم رو به عنوان سوال جدا در نظر بگیرید ؛ بدون توجه به مطلبی که در مورد آرایه پست و checkbox , .. گفتم .

Domanjiri
Doman جان ممنون ؛ این خط کد لازم نیست ؛ چون خطا میگیره !
header("Content-Type: application/xml; charset=utf-8")
 
آخرین ویرایش:
equilibriumator


خیلی ممنون کاملا درسته ! اینجوری دیگه اصلا کش ندارم. خیلی عالیه ! خیلی خوبید !

این سوالم رو به عنوان سوال جدا در نظر بگیرید ؛ بدون توجه به مطلبی که در مورد آرایه پست و checkbox , .. گفتم .

Domanjiri
Doman جان ممنون ؛ این خط کد لازم نیست ؛ چون خطا میگیره !

جواب این سوالتون رو هم قبلا دادم. با این حال دوباره توضیح میدم.
میتونید به صورت ساده تر اگه میخواید بدونید در کل صفحه مورد نظر چند بار Refresh شده, میتونید یک مقدار حال تنظیم کنید برای مثال 2 و یک مقدار با نام اخرین بار که برای مثال باز هم 2. حالا اگه مقدار حال بشه 3, مقدار آخر که 2 بوده یکی کمتر از اونه که نشون میده یکبار صفحه refresh شده.
برای اینکه گمراه نشید مثال کد رو براتون میگذارم.
(این کد ها فقط یک مثال برای درک الگوریتم هست...)
( ما اطلاعات رو اینجا در 2 فایل به نام current.txt که مقدار حال هست و lasttime.txt که آخرین بار هست ذخیره میکنیم)
این کد در صفحه مربوطه قرار داده میشه:
PHP:
$reload = 'current.txt';
$reload2 = file_get_contents($reload);
$reload2 = $reload2 + 1;
file_put_contents($reload, $reload2);
و حالا برای چک کردن این کد در صفحه ای جدا قرار داده میشه:
PHP:
$current = file_get_contents("current.txt");
$lasttime = file_get_contents("lasttime.txt");
if($current > $lasttime){
$times = $current - $lasttime;
echo "Safhe morede nazar ".$times." bar refresh shode";
};
$check = 'current.txt';
$lastseen = file_get_contents($check);
file_put_contents("lasttime.txt", $lastseen);
حالا وقتی که صفحه چک کردن رو باز کنید, مقدار حال با مقدار آخر یکی میشه.
بعد از اون اگه هر چقدر صفحه بیشتر refresh بشه, با اولین refresh کردن صفحه check.php مقدار نمایش داده میشه.

البته این الگوریتم خیلی ساده هست و برای درک کردنه. اگه متوجه شدید میتونید خیلی روش مانور بدید.
 

جدیدترین ارسال ها

بالا