【问题标题】:Handling various errors in database connection - some not working?处理数据库连接中的各种错误 - 有些不工作?
【发布时间】:2011-11-21 21:18:21
【问题描述】:

我正在编写一个用于登录数据库的脚本(主要用于学习目的),使用两个不同的 mySQL DB。一切正常,除了一些错误捕获。我有以下情况(粗体不起作用):

  1. 空白用户名和密码
  2. 空白用户名
  3. 空白密码
  4. 用户名和密码都包含数据,但用户名有误。
  5. 用户名和密码都包含数据,但密码有误。
  6. 用户名和密码都包含数据,并且都是正确的。

问题:我是否有效地解决了这个问题,为什么 (4) 和 (5) 返回空白。

<?php

    $loginstatus;
    if(!$_POST["username"] && !$_POST["password"]){ //FROM HERE
        $loginstatus = "You must enter a username & password!";
    }elseif(!$_POST["username"]){
        $loginstatus = "You must enter a username!";
    }elseif(!$_POST["password"]){
        $loginstatus = "You must enter a password!";//TO HERE WORKS
    }elseif($_POST["username"] && $_POST["password"]){ 
        require_once('config.php'); //contains db info
        $db1 = mysql_connect($dbserver, $dbuser, $dbpass);
        $db2 = mysql_connect($dbserver, $dbuser2, $dbpass2, true);

        if ($db1 && $db2) {                             //both connections must have worked at the same time
            mysql_select_db("nitrousc_tclydb", $db1);   //connect using $db1 link
            $userid = $_POST["username"];               //assign $userid to POST username
            $userid =  mysql_query("SELECT id FROM users WHERE username='$userid'", $db1)or die("Invalid Password!"); //THIS RETUNRS BLANK!
            $userid = mysql_fetch_array($userid);       //reuse $userid again, assigning the returned array.

            $userid = $userid['id'];                    //reuse $userid again - at this point we lose the returned array.

            mysql_select_db("nitrousc_tclyprv", $db2);  //switch databases, using $db2

            $password =  mysql_query("SELECT * FROM users WHERE id='$userid'", $db2) or die("Invalid Password!"); //THIS RETUNRS BLANK!
            $password = mysql_fetch_array($password);   //resuse $password
            $password = $password['hashed_password'];   //resuse, store final hashed in $password




            if (crypt($_POST["password"], $password) == $password){ //check the returned POST password against the hash
                $loginstatus = "Login for".$_POST['username']."succesful!"; //THIS WORKS
                };

        }

        }

    echo $loginstatus;











    ?>

【问题讨论】:

    标签: php mysql error-handling


    【解决方案1】:

    mysql_query总是返回true,只有查询错误才会返回false。

    你需要检查的是:

    $userid =  mysql_query("SELECT id FROM users WHERE username='$userid'", $db1)or die("query error"); //THIS RETUNRS BLANK!
    if(mysql_num_rows($userid) == 0){ //if no rows returned
         die("user id is wrong");
    } 
    

    停止对所有内容重复使用相同的变量,这可能会导致混乱和错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 2017-01-21
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多