PHP - MySQL我总是有用户名存在,但为什么?

时间:2015-08-04 12:51:53

标签: php mysql if-statement

我尝试了echo($numrows);

numrows等于0。 那么为什么我收到此错误:用户名存在?

我经常去过很多次,但我找不到问题所在。

<?php

function generateRandomString($length = 6) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

//innen regiszt:
$username = strip_tags($_POST['username']);
$email1 = strip_tags($_POST['email1']);
$email2 = strip_tags($_POST['email2']);
$pw1 = strip_tags($_POST['pw1']);
$pw2 = strip_tags($_POST['pw2']);

if($username&&$email1&&$email2&&$pw1&&$pw2)
    {
     if ($email1==$email2)
         {
             if ($pw1==$pw2)
             {               
                 if (5<strlen($pw1)&&20>=strlen($pw1))
                 {
                    if (5<strlen($pw1)&&20>=strlen($pw1)) 
                    {                       
                    $connect = mysql_connect('HOST','UNAME','PW');
                    $database = mysql_select_db('virtualtc',$connect);  
                    $query = mysql_query("SELECT * FROM users WHERE username='$username'");
                    $querymail = mysql_query("SELECT * FROM users WHERE email='$email1'");
                    $numrowsmail = mysql_num_rows($querymail);
                    $numrows = mysql_num_rows($query);
                       if ($numrows=0)
                       {
                            if ($querymail=0)  
                            {
                                $md5pass= md5($pw1);
                                $date=date("Y-m-d");
                                $query3 = mysql_query(
                                    "INSERT INTO users VALUES '','$username','$md5pass','$email1', 0 ,'$date'");
                                include("registration_complete.php");//regist

                            }else include("/errors/email_exists.html");//email exists
                       }else include("/errors/user_exists.html")//user exists                   
                    }else include("/errors/uname_length.html");//username length 6-20!                   
                 }else include("/errors/pass_length.html"); //password length 6-20!              
             } else include("/errors/different_pw.html");//different password
         } else include("/errors/different_email.html");//different email
    } else include("/errors/empty_regist.html");//empty field


?>

4 个答案:

答案 0 :(得分:1)

您编写了if($numrows=0),将$numrows更改为0,然后检查该值。 php中的0等于false,这就是执行else块的原因。

<强>旁注: 请注意阅读arrow code。您可以编写一个函数来检查是否使用了用户名...

答案 1 :(得分:1)

因为您要分配,而不是比较

if ($numrows=0)

应该是

if ($numrows==0)

同样适用于其他条件陈述。

好吧,我没有看到你的架构,但我会这样做:

mysql_query("INSERT INTO users VALUES (NULL,'$username','$md5pass','$email1', 0 ,'$date')");

假设您的第一列是AI。

另外,在传递数据库之前不要忘记准备数据,例如至少使用addslashes。

答案 2 :(得分:0)

仅使用一个=会将$numrows设置为0,而不会检查$numrows是否为0

if($numrows == 0)

答案 3 :(得分:0)

更改

if ($numrows=0)

 if ($numrows==0)

=表示作业

==表示比较

供参考see here