ايران ويج

نسخه‌ی کامل: تشخیص refresh صفحه php
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام
من یه صفحه html با کد زیر دارم :

کد:
<form name="money" action="a.php" method="post">
    <input name="LName" type="text" value="ali">
    <input type="submit" value="go"/>
</form>

و یه صفحه php با کد زیر :
کد php:
<?php
    
echo $_POST["LName"];
?>


من میخوام زمانی که کاربر روی دکمه کلیک کرد نامی که وارد کرده نمایش داده شود اما با این تفاوت که اگه کاربر صفحه php را refresh کرد بفهمه و بجای نمایش دوباره نام وارد شده پیام خطا بده

به قول معروف یجوری متد post را unset کنه

نکته : نمیخوام از سشن استفاده کنم
سلام
بحثی که مطرح هست اینه که http پروتوکل فراموش کاریه؛
به این معنی که مثلا اگه کسی با نام کاربری و پوزرنیمش وارد سایتی بشه؛ و بعد اگه بخواد به صفحه‌ای محدود شده دسترسی پیدا کنه؛ http این اجازه رو بهش نمیده! چون یادش نمونده کاربری وارد شده!!

برای پوشش این ضعف اومدن کوکی و سشن رو درست کردند!‌ با این روش میتونیم کاربران رو شناسایی کنیم...

حالا شما هم میگین سشن نه؛
باید یه روش غیر معمول ایجاد کنید که کاربران رو بشناشید؛ مثلا از طریق آیپی؛ یا اینکه توی فرمتون یه تکست مخفی بزارید و بجار کوکی از اون استفاده کنید؛
برای فهمیدن رفرش یا باید از ریفر استفاده کنید $_server['http_reffer'] یا همون طور که baby عزیز گفتن از یک hidden field استفاده کنید
این فرمی که گذاشتم واسه ورود نیست
فکر کنید این یه فرم ثبت تبلیغ کاربر در یک سایت تبلیغاتی هست

من بعد از ثبت تبلیغ کاربر post های گرفته شده را برابر null قرار میدم اما اگه صفحه رو کاربر refresh کنه باز محصول در db ذخیره میشه یعنی با هر با refresh صفحه دوباره اطلاعات رو درون db ذخیره میکنه میخوام جلو این کا رو بگیرم

یه همچین چیزی میخوام

کد php:
if (isset($_POST['submit'])) 
(۰۶-مهر-۱۳۹۲, ۱۵:۵۵:۱۶)crafcrab نوشته است: [ -> ]این فرمی که گذاشتم واسه ورود نیست
فکر کنید این یه فرم ثبت تبلیغ کاربر در یک سایت تبلیغاتی هست

من بعد از ثبت تبلیغ کاربر post های گرفته شده را برابر null قرار میدم اما اگه صفحه رو کاربر refresh کنه باز محصول در db ذخیره میشه یعنی با هر با refresh صفحه دوباره اطلاعات رو درون db ذخیره میکنه میخوام جلو این کا رو بگیرم

یه همچین چیزی میخوام

کد php:
if (isset($_POST['submit'])) 

سلام
به نظر من قبل از درج برسی کن اگر قبلا درج نشده درج کنید!یا بعد از درج اول(پست شدن)کلا مسیر را تغییر بدید(البته این رفشها خیلی مبتی هست ولی .....)

موفق باشید
سلام خدمت عزیزان

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

دیتابیس جستجو کنی که این صورت میشه که: اول دریافت داده دوم بررسی داده در صورت وجود سوم عمل مناسب

نسبت به داده ها!!

داخل این مثال شما هم باید قبل از نمایش اسم باید اسم رو داخل دیتابیس بررسی کنی آیا این اسم در

دیتابیس هست در صورت وجود پیغام مناسب صادر بشه در غیر این صورت اسم ذخیره بشه و اسم به نمایش در

بیاد..

یک نمونه سورس هم میزارم:
PHP:
کد php:
<?php
mysql_connect
('Your localhost','YOUR root');
        
mysql_select_db('YOUR_db1');
        
$search=$_POST['search'];
        
$query ="SELECT Lname FROM YOUR_TABLE WHERE Fname='$search'";
        
$data=mysql_query($query);
        
$num_records=mysql_num_rows($data);
        if(
$num_records==0)
        {
            
$query "INSERT INTO YOUR_TABLE (Lname) VALUES ('$search')";
            
$data mysql_query($query);
            echo 
"First Name:";
            echo 
$_POST['search'];
        }
        else
        {
            echo 
"This Name Not new!!";
        }
?>
بله میشه با فرستادن کاربر به یک صفحه دیگه مشکل رو حل کرد اما من دنبال راه حل اصولی تری بودم واسه همین اینجا تاپیک زدم
(۰۶-مهر-۱۳۹۲, ۱۶:۴۲:۱۲)crafcrab نوشته است: [ -> ]بله میشه با فرستادن کاربر به یک صفحه دیگه مشکل رو حل کرد اما من دنبال راه حل اصولی تری بودم واسه همین اینجا تاپیک زدم
پس قبل از درج اطلاعات برسی کن قبلا درج نشده باشه!
حتما هم لازم نیست کلا صفحه عوض بشه ها.....همین که
iranled.com/index.php?p=1

به
iranled.com/index.php
تغییر کنه کفایت میکنه
(۰۶-مهر-۱۳۹۲, ۱۶:۴۱:۵۸)code91 نوشته است: [ -> ]یک نمونه سورس هم میزارم:
PHP:
کد php:
mysql_connect('Your localhost','YOUR root');
        
mysql_select_db('YOUR_db1');
        
$search=$_POST['search'];
        
$query ="SELECT Fname,Lname,Email FROM t1 WHERE Fname='$search'";
        
$data=mysql_query($query);
        
$num_records=mysql_num_rows($data);
        if(
$num_records==0)
        {
            
$query "INSERT INTO t1 (Fname) VALUES ('$search')";
            
$data mysql_query($query);
            
header("location: dbTest.php");
            echo 
"First Name:";
            echo 
$_POST['search'];
        }
        else
        {
            echo 
"This Name Not new!!";
        } 

این الان باگ اینجشکشن داره Biggrin خطریه Biggrin

-----------------

نگاه کنید؛ شما یه فرم دارید؛ که میخوایین هر کاربری فقط بتونه یکبار توش بنویسه!!
بهترین راه همونیه که ققنوس فرمودند؛ نزارید اطلاعات مشابه ذخیره بشن!!
کد php:
<?php
mysql_connect
('Your localhost','YOUR root');
        
mysql_select_db('YOUR_db1');
        
$search=$_POST['search'];
        
$query ="SELECT LName FROM YOUR_TABLE WHERE Fname='$search'";
        
$data=mysql_query($query);
        
$num_records=mysql_num_rows($data);
        if(
$num_records==0)
        {
            
$query "INSERT INTO YOUR_TABLE(LName) VALUES ('$search')";
            
$data mysql_query($query);
            echo 
"First Name:";
            echo 
$_POST['search'];
        }
        else
        {
            echo 
"This Name Not new!!";
        } 
?>
یک نمونه بود برای این که مطلب باز بشه :-)))) که به جای اینکه در صفحه ی php فقط نوشته بشه
کد php:
<?php
    
echo $_POST["LName"];
?>

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

باگش زیاد جدیدی نسیت گه دیتا بیس پسورد بزاره دیگه موردی نداره!! :-)))