2014-10-02 61 views
1

林與一些PHP頁面的問題,下面的代碼是例如僅防止 「後再次」 在PHP中有

form.php的

<form mehtod="post" action="submit.php"> 
<input type="text" name="theTextbox"/> 
<input type="submit"/> 
</form> 

submit.php

<?php 
$theText = $_POST['theTextbox']; 
mysqli_query($link,"INSERT into textlist (text) VALUES ('$theText')"); 
mysqli_query($link,"SELECT * FROM textlist ORDER by inserted LIMIT1"); 
...some fetch stuff... 
echo "Last insert ID is...".$lastID 
?> 

所以,如果我在文本框中輸入「1234」,在form.php上,然後按提交,一個記錄被插入到表中234 「文本」 和 「ID」 變得像20 ....

上submit.php回聲 「最後插入ID是... 20」 ..

但現在....問題是,如果我提到的頁面,Firefox的問我是否想再次sumbit ..如果我按YES,相同的文本獲取插入和ID變爲21.

我不能建議用戶,不使用此功能。 ...和谷歌瀏覽器甚至沒有要求..

這怎麼可以防止?

+1

您可以將它們重定向回到一個空白表格/不同的頁面?你也開放給SQL注入攻擊。 – 2014-10-02 09:45:02

+1

重定向到@ʰᵈˑ表示的空白表單,或者對雙重條目進行某種檢查。 – Azrael 2014-10-02 09:45:44

+0

**危險**:您很容易[SQL注入攻擊](http://bobby-tables.com/)**,您需要[防禦](http://stackoverflow.com/questions/ 60174/best-way-to-prevent-sql -injection-in-php)自己從。 – Quentin 2014-10-02 09:47:46

回答

4

插入後,使用header()將用戶重定向回瀏覽器將丟失$ _POST信息,但是您需要使用會話來發回數據。

例子:

post_form.php

<?php 
session_start(); 
$theText = $_POST['theTextbox']; 
mysqli_query($link,"INSERT into textlist (text) VALUES ('$theText')"); 
mysqli_query($link,"SELECT * FROM textlist ORDER by inserted LIMIT1"); 
$_SESSION['last_id'] = $lastID; 
header('Location: /form.php'); 
?> 

form.php的

<?php 
session_start(); 
echo "Last insert ID is...".$_SESSION['last_id']; 
?> 

隨着<form>您將張貼到post_form.php,那麼該行已被插入後,它會設置會話並將用戶重定向回form.php

+0

這也會導致錯誤。你錯過了一個分號來結束回聲。 – 2014-10-02 09:47:35

+0

回聲呢?它會消失! – 2014-10-02 09:50:06

+1

編輯我的答案球員,有耐心,年輕的padawans。 – Karl 2014-10-02 09:52:21

相關問題