这是php部分
<?php
include 'assets/db.php';
if(isset($_POST["register"])){
$sql = "INSERT INTO table (name, email, user_name, pass)
VALUES ('".mysqli_real_escape_string($conn, $_POST["name"])."',
'".mysqli_real_escape_string($conn, $_POST["email"])."',
'".mysqli_real_escape_string($conn, $_POST["user_name"])."',
'".mysqli_real_escape_string($conn, $_POST["pass"])."')";
if ($conn->query($sql) === TRUE) {
echo "<script type='text/javascript'>window.top.location='_sign_in.php?l=1';</script>";
} else {
echo "<script type= 'text/javascript'>alert('Error! Please refresh the page and try again.');</script>";
}
$conn->close();
我正在尝试避免重新注册任何user_name,如果user_name已经注册,则重定向回某个页面example-register.php?q = user_exists。
答案 0 :(得分:1)
要避免重复的用户名,请向表中添加唯一索引:
ALTER TABLE `table` ADD UNIQUE(`user_name`)
这将导致插入失败,允许您检测失败,而无需额外的SELECT
来检查重复。
如果要确保错误是由重复值引起的,请检查mysql错误1062
Error: 1062 SQLSTATE: 23000 (ER_DUP_ENTRY)
您可以使用mysqli::errno进行检查,然后只需发送位置标题即可重定向,即:
if (!$conn->query($sql))
{
if ($conn->errno == 1062)
{
header("Location: register.php?q=user_exists");
die();
}
die('Critical Failure');
}
编辑:而不仅仅是投票,如何评论这个答案有什么问题?