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

Php 使用不同的用户名和电子邮件注册新用户,php,if-statement,registration,Php,If Statement,Registration,我的注册页面有问题。您可以使用已通过其他电子邮件注册的用户名注册新用户 例如,首次注册: 用户名:User-1 密码:123 电子邮件:123@email.com 收到消息:“您已注册” 另一项注册: 用户名:User-1 密码:123 电子邮件:另一个_email@email.com 收到消息:“您已注册” 页面应显示“用户名已存在”,但这并没有发生。我真的不知道少了什么 代码如下: <?php if(isset($_POST["register"])){ $username = $

我的注册页面有问题。您可以使用已通过其他电子邮件注册的用户名注册新用户

例如,首次注册:

用户名:User-1
密码:123
电子邮件:123@email.com

收到消息:“您已注册”

另一项注册:

用户名:User-1
密码:123
电子邮件:另一个_email@email.com

收到消息:“您已注册”

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

代码如下:

<?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
    }
}
}
?>

您的第二个
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
}
if(mysql\u num\u行($checkusername)==1){

?>除上述内容外,如果您已经有两个来自先前测试的User-1==1,则返回false?Try>=1


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

您的数据库中可能有多个使用此用户名的用户。可以尝试类似的方法

mysql_num_rows($checkusername) > 0

if
中的条件错误,导致您在输入的电子邮件尚不存在时插入用户

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

最后,除了修复脚本中的所有逻辑之外,还要确保在用户名字段中添加一个唯一的索引,并在电子邮件字段中添加一个类似的索引。这样,无论脚本中有什么缺陷,从技术上讲,都不可能创建重复的用户


不过,您仍然需要修复与MySQL的联系方式。您现在的联系方式已经过时,而且非常危险。

快速猜测>0而不是==(或者清空您的表)。例如,您已经有多个名为Fred的用户。您使用的mysql连接已过时且不推荐使用。此外,您非常容易受到SQL注入的攻击。此外,如果您的
if
错误。如果用户名匹配,但电子邮件不匹配,则仍将创建新用户。为什么您会对此感到惊讶?您会检查重复的用户名,但不会用这些信息做任何事。你只是盲目地插入新记录。另外,你很容易受到@Marc B的攻击,很严厉,但却是真的。[已解决]?WTF,这不是一个支持论坛。
mysql_num_rows($checkusername) > 0