PHP mysql错误查询


PHP mysql bug query

嗨,伙计们,我已经连续工作了12个小时,似乎找不到解决办法。我试图将用户输入与数据库结果进行比较,例如$username == $result echo"Username是aldready take,但问题是它通过了2个语句而没有中断,如果我中断以退出循环,它总是检查$email == $result2,尽管没有在字段中输入任何电子邮件。

if (isset($_POST['username']) or isset($_POST['email'])) {
    $extract = mysql_query("
        SELECT
          `username`, `email`
        FROM `users`
        WHERE `username`='$username' OR `email`='$email'
    ");
    $resultq = mysql_num_rows($extract);
    while ($row = mysql_fetch_array($extract)) {
        $result = $row['username'];
        $result2 = $row['email'];
        echo " " . $result;
        echo " " . $result2;
        if ($username == $result) {
            echo " Username is already Taken!";
            //  break; //whenever i put break, it always gives me the else if statement echo, despite not entering any email in the field
        } //$pass = $_POST['pass'];
        else if ($email == $result2) {
            echo "Email Address is already used!";
            //  break;
        } else {
        }
    }
}

从mysql升级到MySQLi或PDO。

然而;

$extract= mysql_query("SELECT username, email FROM users where username='$username' or email='$email'");
$resultq = mysql_num_rows($extract);
    if($resultq > 0) {
       echo 'Either your username, or email is already taken!';
       return;
    }

请参阅sniko了解您最初问题的答案。但是,请参阅以下内容。。。

您没有定义$username或$email

if ($username == $result )应为

if ($_POST['username'] == $result ) 

或者您可以在条件的开头定义$username和$email。

你也应该改变这个:

isset($_POST['username']) or isset($_POST['email'])

到此:

isset($_POST['username']) && isset($_POST['email'])

因为您在查询中依赖于这两者。

正如sniko所说,切换到mysqli或PDO。mysql已被弃用。

全样本:

if(isset($_POST['username']) && isset($_POST['email']))
{
    $username = $_POST['username'];
    $email = $_POST['email'];
    $extract= mysql_query("SELECT username, email FROM users where username='$username' or email='$email'");
    $resultq = mysql_num_rows($extract);
    if($resultq > 0) {
       echo 'Either your username, or email is already taken!';
       return;
    }
}

另外请注意,您没有对输入进行消毒。你可能会被这个输入入侵。切换到mysqli或pdo并使用准备好的语句将对此有所帮助。