2012-01-24 23 views
0

對不起,我已經張貼了這個問題,我GOOGLE了它很多靜止影像無法來解決這個重定向到當前頁面,如果用戶單擊後退或刷新頁面

我有了一個形式的PHP頁面,當用戶點擊刷新或F5它會在數據庫中創建重複值,並且還會向用戶發出一條消息提示,表示重新提交可能會在數據庫中插入重複值。我的老闆不希望瀏覽器的警報框給用戶,也會將重複值插入數據庫中

我知道它的header()。我在php手冊中閱讀了大量的header(),並且還閱讀了server_name函數,但我仍然嘗試了很多方法,但是無法解決它。這很重要。任何人都可以請幫助我的代碼示例解釋的方式do.any幫助是非常感謝。

<form method="post" action"demo.php"> 
    <input name="fname" type="text"> 
    <input type="submit" value="submit"> 
</form> 
demo.php 
    <?php 
    $firstname = $_POST['fname']; 
    ?> 

告訴我,我應該怎麼在demo.php頁面添加到從一而再,再而也提交表單停止,如果用戶單擊後退按鈕上它不應該直接到前面的頁面瀏覽器,它應該仍然重定向到當前頁面。

所以,如果用戶點擊刷新或後退按鈕應該重定向到只有當前頁面,不應插入任何重複的值,並警告框應該是disabled.Please解釋我做什麼在這裏,即時通訊在深help.Thanks

+0

提交表單後,你應該使用JavaScript'location.href ='url''刷新頁面。順便說一句,你沒有使用任何框架或體系結構或CMS等? – Bajrang

+0

@ J.J。你的意思是你沒有使用任何框架?我有點新鮮的PHP。請讓我知道如果我需要使用任何框架 – niko

+0

你聽過ZEND,MVC,Magento,joomla,Typo3等? – Bajrang

回答

0

我會使用PHP的頭功能,以取代目前的位置,這樣如果用戶單擊刷新,也不會重新發布的信息和會話來存儲發佈的值並檢查重新提交。 demo.php

<?php 
session_start(); 
if($_POST) 
{ 
    if(!isset($_SESSION[fname])) 
    { 
     //database queries here 
    } 
    $_SESSION[fname] = $_POST['fname']; 
    header('location:demo.php', true); //true replaces the current location 
}elseif(!issset($_SESSION[fname])){ 
    header('location:form.php'); 
} 

$firstname = $_SESSION[fname]; 

?> 

form.php的

<form method="post" action"demo.php"> 
    <input name="fname" type="text"> 
    <input type="submit" value="submit"> 
</form> 
0

該解決方案將像插入,更新數據庫操作後,該頁面重定向和刪除 頁面名稱:test.php的

if(isset($_REQUEST['deleteBtn'])) 
{ 
$emp_id=$_REQUEST['emp_id']; 
$count=mysql_query("delete from employees where emp_id=$emp_id"); 
header("location:test.php"); 
} 

這樣,如果你點擊F5或後退按鈕形式的數據不會再次發佈。

+0

嘿納文,Kya hal h? – Bajrang

+0

@ J.J Sab Teek hai ter Kya hal hi? –

1

代碼有很多錯誤,並且有很多方法可以減輕影響。

首先,你爲什麼要創建重複條目? 除了不良數據的問題也意味着您的網站容易受到CSRF的影響。閱讀有關如何使用一次性令牌防止CSRF的信息。

如果您的網站存在性能問題,那麼用戶通常會多次點擊提交按鈕。在處理數據庫中的重複提交問題時,使用javascript禁用頁面上的提交鏈接,並提供該頁面正在執行某些操作的可視反饋。

重定向不是解決問題的方法。

我的老闆不希望瀏覽器

你說的是重複的職位警報是警告框?雖然你可以使用PRG解決這個問題,但這會產生其他問題。

+0

是的,我不想要從瀏覽器彈出一個警告框,你可以解釋我寫的PHP和HTML頁面,讓我明白,人們告訴我要添加此和重定向所有thos,但仍然沒有找到解決方案,我需要一個更好的解決方案我需要PHP和HTML頁面示例來了解,而不是直接發佈鏈接到它 – niko

0

您想要的是在創建表單時在表單中嵌入會話標識,並在服務器上跟蹤該會話標識。然後,當表單被提交併且您正在服務器上處理表單時,如果表單被多次提交,您可以覆蓋數據庫中的第一次提交,或者用錯誤消息或其他方式迴應。 (僅在第一次提交時顯示彈出窗口,無論如何)。

執行此操作的一種簡單方法是生成會話標識,將其作爲表單中的隱藏字段發送,並在提交表單時存儲會話標識在你的數據庫中,會話ID是唯一的。

1

您必須發佈一個唯一的id(session_id)並將其保存在數據庫中。 當你註冊時,測試session_id是否已經存在。如果是這樣,請發送消息給用戶。 「你已經張貼了這種形式的」

代碼:

<?php session_start; ?> 
    <form method="post" action"demo.php"> 
     <input name="fname" type="text"> 
     <input type="submit" value="submit"> 
     <input type="hidden" name="session_id" value="<?php echo session_id();?>"> 
    </form> 
    demo.php 
     <?php 
     //test session_id in database 
     $session_id = session_id(); 
     mysql_connect('localhost','xxx','xxx'); 
     mysql_select_db('xxx'); 
     $return = mysql_query("SELECT COUNT(*) AS nb_data FROM TABLENAME WHERE session_id='".session_id()."'"); 
     $data = mysql_fetch_assoc($return); 
     if ($data['nb_data'] == 0){ 
      echo 'Your message'; 
     } 
     else{  
      $firstname = $_POST['fname']; 
      //..... 
      header('location:xxx.php')? 
     } 
?> 
+0

並且我該如何避免瀏覽器的警報框? – niko

+0

剛插入'echo'您的留言';'''用'echo'';' –

+0

確定回來並標記哪個答案最有助於您作爲「答案「與選中標記。 –

相關問題