我的PHP表单有问题。每当我刷新页面时,旧数据都会自动插入到我的数据库中。我的代码是:
<?php
if(isset($_GET['send'])){
isset($_GET['name'])?$name = $_GET['name']:"";
isset($_GET['score'])?$score = $_GET['score']:0;
$con = mysql_connect('localhost','root','') or die(mysql_error());
mysql_select-db('student',$con) or die(mysql_error());
$qry = mysql_query('INSERT INTO student(name, score) VALUES('$name', $score)') or die(mysql_error());
$display = mysql_query('SELECT * FROM student',$con) or die(mysql_error());
echo '<table border=1>';
while($rows = mysql_fetch_array($display)){
echo '<tr>';
echo "<td>$rows['id']</td>";
echo "<td>$rows['name']</td>";
echo "<td>$rows['score']</td>";
echo '</tr>';
}
echo '</table>';
}
?>
请帮我解决这个问题。
答案 0 :(得分:2)
防止重复表单提交的常用方法是使用Post/Redirect/Get Pattern。
您需要将表单方法更改为发布。成功提交表单后,您将再次重定向到表单,但将重定向设置为get请求。表格将被重置(空值)。
修改强>
现在我看来,你的脚本实际上可以做类似的事情:插入mysql数据库后你可以将它重定向到自己去除get参数:
<?php
if(isset($_GET['send'])){
isset($_GET['name'])?$name = $_GET['name']:"";
isset($_GET['score'])?$score = $_GET['score']:0;
$con = mysql_connect('localhost','root','') or die(mysql_error());
mysql_select-db('student',$con) or die(mysql_error());
$qry = mysql_query('INSERT INTO student(name, score) VALUES('$name', $score)') or die(mysql_error());
header('Location: myscriptsurl.php');
exit;
}
$display = mysql_query('SELECT * FROM student',$con) or die(mysql_error());
echo '<table border=1>';
while($rows = mysql_fetch_array($display)){
echo '<tr>';
echo "<td>$rows['id']</td>";
echo "<td>$rows['name']</td>";
echo "<td>$rows['score']</td>";
echo '</tr>';
}
echo '</table>';
?>
答案 1 :(得分:1)
所以你有问题。 因为你无法避免刷新屏幕......
如果您正在进行表单发布,可以考虑发送一个位置 插入记录后的标题:
<form action="process.php" method="POST">
<input type="text" name="number">
<input type="sumbit">
</form>
然后从process.php: //你通常根据帖子在数据库中插入
header("Location: http://www.example.com/thanks.php");
// do not forget the exit, since your script will run on without it.
exit;
以这种方式,您的脚本将处理发布,然后重定向
浏览器到thanks.php.
重新加载thanks.php
不会导致新的数据库插入。
答案 2 :(得分:1)
U使用了GET方法,因此每次刷新页面时都会从URL获取值。 尝试使用POST方法......它将解决您的问题并且不要忘记将条件置于POST
if(isset($_POST))
{
/* Your Insert Code */
}