2017-03-17 65 views
1

假設我有像PAGE_1形式此

<form action="page_2.php" method="post"> 
<input type="text" name="text"> 
<input type="submit" name="submit" value="Submit"> 
</form> 

而在page_2,它就像

if(isset($_POST['submit'])){ 

    $q = mysqli_query("INSERT INTO sample_table VALUES('$_POST[text]')",$database_connect); 

} 

這段代碼的問題是,它會第一次正常工作。但是,如果用戶刷新page_2,那麼每次創建一個新行時,同樣的數據會一次又一次地插入到我的數據庫表'sample_table'中。但我希望我的用戶只在第一次點擊「提交」按鈕時將數據插入到我的數據庫中。後來,如果他刷新page_2,數據將不會一次又一次地添加到我的數據庫表中。如何才能做到這一點?

+0

** WARNING **:當使用'mysqli'你應該使用[參數化查詢(http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[ 'bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢中。 **不要**使用字符串插值或連接來完成此操作,因爲您創建了嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 **不要**將'$ _POST','$ _GET'或**任何**用戶數據直接放入查詢中,如果有人試圖利用您的錯誤,這可能會非常有害。 – tadman

+0

我是這個行業的新人。你能給我一個例子如何使用查詢? –

+0

這一切都在評論的鏈接。 PHP手冊和相關注釋進入了大量的細節。 – tadman

回答

0

如果你想防止重複提交,你需要另一列添加到您的表某種獨特的密鑰。如果將約束添加到此列,則重複的插入操作將被數據庫拒絕。

渲染表單時,窗體上有UUID-type value填充,這是這樣做的典型方式。

如果你正在尋找拒絕完全複製提交你可以跳過UUID部分,使用類似,而不是內容的SHA256哈希值。這些指數很好地與UNIQUE

0

如果不同的用戶不會插入相同的數據,可以查詢與文本值的數據庫,並查看它是否存在。所有的數據放到單獨的變量也

+0

不僅不同的用戶,而且同一個用戶可以再次發佈相同的信息。但是我希望只有用戶第一次點擊提交按鈕時才能將數據插入到我的數據庫中。要再次插入數據,用戶必須回到表單並再次點擊提交。 –

+0

好了,所以如果你想要的數據只需輸入一次,無論哪個用戶進入它,你只希望它一次,就可以查詢數據庫檢查該數據已經存在,如果是這樣,你可以將其代碼,以便它不會再次更新,使用if語句 – Wilobate

0

如果你不希望將數據重新輸入。然後添加一行,在提交表單後強制用戶回到上一頁。

if(isset($_POST['submit'])){ 

$q = mysqli_query("INSERT INTO sample_table VALUES('$_POST[text]')",$database_connect); 

header("Location: page_1.php"); 
}