如果user_name已经注册,则重定向回到同一页面ex。 register.php Q = user_exists

时间:2018-02-23 00:29:08

标签: php mysqli

这是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。

1 个答案:

答案 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');
}

编辑:而不仅仅是投票,如何评论这个答案有什么问题?