关于刷新MySQL上自动提交的浏览器数据

时间:2015-03-19 09:04:14

标签: javascript php jquery mysql

这是我的PHP代码

<?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.";
	
} 
else
{
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
 
// close connection
mysqli_close($link);
?>

此代码运行正常,但刷新表单后,它会自动提交数据库中的旧数据。请帮我解决这个问题。

5 个答案:

答案 0 :(得分:1)

在插入数据之前,首先检查数据库以查看该行是否已存在。例如 SELECT * FROM persons WHERE firstname = $fname AND lastname = $lname AND address = $address AND phone = $phone 如果有一行返回,则不应再次添加。

答案 1 :(得分:0)

当您重新加载页面时,重新提交提交的数据,这就是它将数据重新添加到数据库的原因。为防止这种情况,您可以在添加或使用表单令牌后重新定向。请检查此链接:PHP form token usage and handling

答案 2 :(得分:0)

使用特定的POST参数请求您的页面会发生什么。 处理并保存到数据库后,您的页面将数据输出到客户端浏览器。

此浏览器会记住使用POST请求获取此数据。因此,如果您点击F5,您会收到警告&#34;此页面被请求包含数据,如果继续,则会重新提交此数据&#34;除非你勾选了选项&#34;我不想再看到这个&#34;

要解决此问题,您需要有3个页面:

<强>表格

一个包含客户填写表单的页面

保存

验证并保存数据库中数据的页面 这将在成功时重定向到 Endresult ,或者在出错时重定向到表单 使用header('Location:http://path/to/result');

<强> Endresult

显示成功消息的页面

除非您进行更昂贵的重复检查,否则这是阻止重复提交数据的最佳方式。

答案 3 :(得分:0)

或者只是添加一个主键.. fname和lname组合或其他任何东西..它将确保不创建重复项。

答案 4 :(得分:0)

我们可以检查整个数据库,然后将数据插入数据库,或者我们可以为特定数据创建主键。

请确保停止重新提交表单后,您可以在提交后重定向提交的表单。