【问题标题】:PHP mysql bug queryPHP mysql 错误查询
【发布时间】:2013-08-24 03:04:45
【问题描述】:

大家好,我已经连续工作了 12 个小时,我似乎找不到解决办法。 我正在尝试将用户输入与数据库结果进行比较,例如 $username == $result echo "用户名已被占用,但问题是它通过 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 {
        }
    }
}

【问题讨论】:

标签: php mysql


【解决方案1】:

从 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;
    }

【讨论】:

    【解决方案2】:

    请参阅 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 并使用准备好的语句会有所帮助。

    【讨论】:

    • 我在if语句之前有这个,是一样的吗? $email = $_POST['email']; $username = $_POST['username'];
    • 是的,就分配而言,它几乎相同,但您仍然在查询中调用两者,因此您需要将其分成两个查询或将两个字段都设为必填
    • 我快疯了,我在想网站如何确定是否使用电子邮件或用户名或两者都使用...似乎不可能没有任何解决方案,但我可以'找不到答案 :( 我很困扰我无法继续前进
    猜你喜欢
    • 2017-01-17
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多