在PHP中防止“再次发布”

时间:2014-10-02 09:40:34

标签: php post

我遇到一些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上,然后按提交,则会在表格中插入一条记录,其中1234为“text”,“id”变为20 ....

在submit.php上的回显是“最后一次插入ID是...... 20”..

但现在....问题是,如果我引用页面,firefox会问我是否要再次汇总...如果我按YES,相同的文本会得到insertet,id变为21。

我无法建议用户,不要使用此功能....而Google Chrome甚至不会要求..

如何防止这种情况?

1 个答案:

答案 0 :(得分: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