PHP 在数据库中插入重复项

2022-01-09 00:00:00 duplicates database insert php

我正在尝试构建一个注册页面,当前代码运行正常,但我在数据库端收到重复插入.我已经研究并尝试了几种不同的解决方案,但还没有成功.我希望它是我所缺少的非常简单的东西.如何防止我当前的代码插入两次?

I'am attempting to build a register page and the current code runs correctly but I'am getting duplicate inserts on the DB side. I've researched and have tried several different solutions but nothing has worked out yet. I'm hoping its something very simple that I'am missing. How can I prevent my current code from inserting twice?

<?php
session_start();
$error=''; // Variable To Store Error Message
if (isset($_POST['register'])) {
//if (empty($_POST['email']) || empty($_POST['hash'])) {
//$error = "<br /> <p style='font-family:talo; color:red; margin-top:10px; font-size:16px;'>* Username or Password is invalid</p>";
//}
//else
//{
// Define all labels on the register form
$firstName=$_POST['firstName'];
$lastName=$_POST['lastName'];
$title=$_POST['title'];
$suffix=$_POST['suffixOne'];
$suffixTwo=$_POST['suffixTwo'];
$email=$_POST['email'];
$employer=$_POST['employer'];
$expertise=$_POST['expertise'];
$hash=$_POST['password'];
$confirmHash=$_POST['passwordConfirm'];
$primaryAddress=$_POST['primaryAddress'];
$secondaryAddress=$_POST['secondaryAddress'];
$city=$_POST['city'];
$state=$_POST['state'];
$zip=$_POST['zip'];
$country=$_POST['country'];
$primaryPhone=$_POST['primaryPhone'];
$secondaryPhone=$_POST['secondaryPhone'];

$connection = mysqli_connect("localhost", "username", "password","DB");


$register = "INSERT INTO user (userID, firstName, lastName, title, suffix, suffixTwo, email, employer, expertise, primaryAddress, secondaryAddress, primaryPhone, secondaryPhone, city, postalCode, hash) 
VALUES (DEFAULT, '$firstName', '$lastName', '$title', '$suffix', '$suffixTwo', '$email', '$employer', '$expertise', '$primaryAddress', '$secondaryAddress', '$primaryPhone', '$secondaryPhone', '$city', '$zip', '$hash')";
if (mysqli_query($connection, $register)) {
   header('Location: index.php');
}
mysqli_close($connection);
}
?>

推荐答案

如果页面被刷新,或者有人使用返回"按钮再次点击它,数据将被重新发送到服务器并因此被插入两次.您需要使用 POST/REDIRECT/GET 模式将用户重定向到另一个页面或同一页面来避免这种情况.发送 303 HTTP 响应将告诉浏览器在其历史记录中替换该页面并避免重新发送已发布的数据.

If the page is refreshed, or someone hits it again using the "back" button, the data will get resent to the server and thus get inserted twice. You need to redirect the user to another page, or the same page, using the POST/REDIRECT/GET pattern to avoid this. Sending a 303 HTTP response will tell the browser to replace that page in its history and avoid re-sending the posted data.

if (mysqli_query($connection, $register)) {
    header('Location: index.php', true, 303);
    exit;
}

相关文章