用不同的用户名和电子邮件注册新用户


Registering new users with different usernames and emails

我的注册页面有问题。您可以使用已注册的用户名注册一个新用户,使用不同的电子邮件。

例如,第一次注册:

用户名:用户1
密码:123
123年电子邮件:.com

Message received: "You are Registered"

另一个注册:

用户名:用户1
密码:123
电子邮件:another_email.com

Message received: "You are Registered"

页面应该显示"用户名已经存在",但这并没有发生。我真不知道少了什么。

代码如下:

<?php
if(isset($_POST["register"])){
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
if (!empty($username) && !empty($password) && !empty($email)){
    $checkusername = mysql_query("SELECT `id` FROM `user` WHERE `username` = '".$username."'") or die(mysql_error());
    $checkemail = mysql_query("SELECT `id` FROM `user` WHERE `email` = '".$email."'") or die(mysql_error());
    if(mysql_num_rows($checkusername) == 1){
        ?><p><?php echo "Username already exists"; ?></p><?php
    }
    if(mysql_num_rows($checkemail) == 1){
        ?><p><?php echo "Email already exists"; ?></p><?php
    }
    else{
        mysql_query("INSERT INTO `database`.`user`(`username`,`password`,`email`) VALUES ('".$username."','".$password."','".$email."')") or die(mysql_error());
        ?><p><?php echo "You are Registered"; ?></p><?php
    }
}
else{
    if(empty($username)){
        $error[] = "Please insert a username";
    }
    if(empty($password)){
        $error[] = "Please insert a password";
    }
    if(empty($email)){
        $error[] = "Please insert a email";
    }
    foreach ($error as $value) {
        ?><p><?php echo "'".$value."'<br>"; ?></p><?php
    }
}
}
?>
编辑:

谢谢你的帮助,但是我找到了一个更好的解决方案。我使用$value也显示"用户名已经存在""电子邮件已经存在",并更改mysql_num_rows($checkusername) == 1mysql_num_rows($checkusername)> 0正如你们中的一些人所建议的。下面是新的代码:

<?php
include "header.php";
if(isset($_POST["register"])){
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
if (!empty($username) && !empty($password) && !empty($email)){
    $checkusername = mysql_query("SELECT `id` FROM `user` WHERE `username` = '".$username."'");
    $checkemail = mysql_query("SELECT `id` FROM `user` WHERE `email` = '".$email."'");
    if(mysql_num_rows($checkusername) == 0 && mysql_num_rows($checkemail) == 0){
        mysql_query("INSERT INTO `database`.`user`(`username`,`password`,`email`) VALUES ('".$username."','".$password."','".$email."')") or die(mysql_error());
        ?><p><?php echo "You are Registered"; ?></p><?php
    }
    else{
        if(mysql_num_rows($checkusername) > 0){
            $error[] = "Username already exists";
        }
        if(mysql_num_rows($checkemail) > 0){
            $error[] = "Email already exists";
        }
        foreach ($error as $value) {
            ?><p><?php echo "'".$value."'<br>"; ?></p><?php
        }
    }
}
else{
    if(empty($username)){
        $error[] = "Please insert a username";
    }
    if(empty($password)){
        $error[] = "Please insert a password";
    }
    if(empty($email)){
        $error[] = "Please insert a email";
    }
    foreach ($error as $value) {
        ?><p><?php echo "'".$value."'<br>"; ?></p><?php
    }
}
}
?>

第二个if应该是elseif

if(mysql_num_rows($checkusername) == 1){
    ?><p><?php echo "Username already exists"; ?></p><?php
}
elseif(mysql_num_rows($checkemail) == 1){
    ?><p><?php echo "Email already exists"; ?></p><?php
}
else{
    mysql_query("INSERT INTO `database`.`user`(`username`,`password`,`email`) VALUES ('".$username."','".$password."','".$email."')") or die(mysql_error());
    ?><p><?php echo "You are Registered"; ?></p><?php
}

你写它的方式,INSERT是完成每当电子邮件测试失败,但用户名测试并没有阻止它。

您还应该为表中的用户名和电子邮件列创建唯一的键,这样就不能创建重复的

除此之外,如果您已经从先前的测试中获得了两个user -1 ==1将返回false?试试> = 1 ?

我不确定|| mysql_die()是不是一个好主意,但可能不是问题所在。

希望您的数据库中有多个使用此用户名的用户。你可以试试这样做

mysql_num_rows($checkusername) > 0

if中的条件是错误的,如果输入的电子邮件还不存在,则导致您插入用户。

但是,检查也有一点风险。检查匹配的数目是否正好是 1。这意味着,无论出于何种原因,如果用户已经在数据库中存在两次,您可以继续添加具有相同名称的更多用户。

最后,除了在脚本中修复所有这些逻辑之外,请确保为username字段添加唯一索引,并为e-mail字段添加类似的索引。这样,无论脚本中存在什么缺陷,在技术上都不可能创建重复的用户。

你仍然需要修复你联系MySQL的方式。你现在的做法已经过时了,而且非常危险。