2015-03-19 39 views
0

這是我的PHP在上的MySQL自動提交清爽的瀏覽器數據

<?php 
 
/* Attempt MySQL server connection. Assuming you are running MySQLServer with default setting (user 'root' with no password) */ 
 

 
$link = mysqli_connect("localhost", "root", "", "login"); 
 

 
// Check connection 
 
if($link === false){ 
 
    die("ERROR: Could not connect. " . mysqli_connect_error()); 
 
} 
 
    
 
// Escape user inputs for security 
 
$fname = mysqli_real_escape_string($link, $_POST['fname']); 
 
$lname = mysqli_real_escape_string($link, $_POST['lname']); 
 
$address = mysqli_real_escape_string($link, $_POST['address']); 
 
$phone = mysqli_real_escape_string($link, $_POST['phone']); 
 
// attempt insert query execution 
 
$sql = "INSERT INTO persons (firstname, lastname, address, phone) VALUES ('$fname', '$lname', '$address', '$phone')"; 
 
if(mysqli_query($link, $sql)) 
 
{ 
 
    echo "Records added successfully."; 
 
\t 
 
} 
 
else 
 
{ 
 
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link); 
 
} 
 
    
 
// close connection 
 
mysqli_close($link); 
 
?>

此代碼運行良好,但令人耳目一新的形式後,它會自動提交的數據庫上的舊數據的代碼。請幫我解決這個問題。

+4

當保存在數據庫然後重定向到其他頁面。與'頭(位置:)'種類的東西。 – Jai 2015-03-19 09:05:55

+0

我不想重定向到任何位置。我認爲這是由於緩存或任何其他事情所以,如果我不想在其他地方重定向它,你可以描述我。 – 2015-03-19 09:11:59

+0

那麼你必須按照你下面的答案。 – Jai 2015-03-19 09:13:18

回答

0

我們可以檢查總體數據庫,然後將數據插入到數據庫中,或者我們可以爲特定數據創建主鍵。

請確保停止重新提交表單,您可以在提交後重定向提交的表單。

1

在插入數據之前,首先檢查數據庫以查看該行是否已經存在。例如 SELECT * FROM persons WHERE firstname = $fname AND lastname = $lname AND address = $address AND phone = $phone 如果一行返回,則不應再次添加它。

+0

相當我不明白這個代碼,你能描述我,我怎麼可以使用它。請。 – 2015-03-19 09:16:09

0

當您重新載入頁面時,提交的數據將被重新提交,這就是它將數據重新添加到數據庫的原因。爲了防止這種情況發生,您可以在添加或使用表單令牌後重新定向。檢查此鏈接:PHP form token usage and handling

0

發生什麼事情是您的網頁被請求具有特定的POST參數。 處理並保存到數據庫後,頁面將數據輸出到客戶端瀏覽器。

此瀏覽器會記住使用POST請求獲取此數據。因此,如果您點擊F5,則會出現一條警告:「此頁面有數據請求,如果繼續此數據將被重新提交」除非您勾選「我不想再看到此內容」選項

要解決此問題發出你需要有3頁:

一個頁保持您的形式,客戶在

填充保存

用於驗證並保存在數據庫 的數據頁這將重定向到成功Endresult誤差 使用header('Location:http://path/to/result');

Endresult

,顯示成功消息的頁

這是防止重複提交數據的最佳方法,除非您執行更昂貴的重複檢查。

0

或者只是添加一個主鍵.. fname和lname組合或其他任何東西..它將確保重複不會被創建。