代码之家  ›  专栏  ›  技术社区  ›  roydukkey

比较MYSQL查询结果时IF-THEN中断的帮助

  •  0
  • roydukkey  · 技术社区  · 16 年前

    我的邀请系统有问题。if语句似乎中断了。它显示消息“Fail”,但UPDATE语句仍然执行。为什么“当时”和“其他”都要执行?

    $dbConn = new dbConn();
    
    // Check if POST user_username and user_hash are matching and valid; both are hidden for fields
    $sql = "SELECT user_username "
        . "FROM table_users "
        . "WHERE user_id=".mysql_real_escape_string($_POST["user_id"])." "
        . "AND user_hash='".mysql_real_escape_string($_POST["user_hash"])."' "
        . "AND user_enabled=0;";
    $objUser = $dbConn->query($sql);
    
    // If result contains 1 or more rows
    if( mysql_num_rows($objUser) != NULL ){
        $objUser = mysql_fetch_assoc($objUser);
    
        $ssnUser->login( $objUser["user_username"] );
    
        $sql = "UPDATE table_users SET "
            . "user_enabled=1, "
            . "user_first_name='".mysql_real_escape_string($_POST["user_first_name"])."', "
            . "user_last_name='".mysql_real_escape_string($_POST["user_last_name"])."', "
            . "user_password='".mysql_real_escape_string( md5($_POST["user_password"]) )."' "
            . "WHERE user_id=".mysql_real_escape_string($_POST["user_id"]).";";
        $dbConn->query($sql);
    
        echo "Success";
        header( "Refresh: 5; url=/account/?action=domains" );
    
    } else {
        echo "Fail";
    }
    

    此dbConn类如下所示:

    class dbConn{
        var $username = "xxxx_admin";
        var $password = "xxxxxxxx";
        var $server = "localhost";
        var $database = "xxxx";
        var $objConn;
    
        function __construct(){
            $conn = mysql_connect( $this->server, $this->username, $this->password, true );
            if( !$conn ){
                die("Could not connect: ".mysql_error() );
            } else {
                $this->objConn = $conn;
            }
            unset($conn);
        }
        function __destruct(){
            mysql_close( $this->objConn );
            unset( $this );
        }
        function query( $query, $db = false ){
            mysql_select_db( $db != false ? $db : $this->database, $this->objConn );
            $result = mysql_query( $query );
            unset($query,$db);
            return $result;
        }
    }
    
    1 回复  |  直到 16 年前
        1
  •  0
  •   Scott Saunders    16 年前

    我看不出你的代码有什么奇怪的地方。login()方法中是否有“Fail”调用?不管怎样,我都会改变路线:

    if( mysql_num_rows($objUser) != NULL ){
    

    $rowCount = mysql_num_rows($objUser);
    if($rowCount and $rowCount > 0){
    

    然后,放一个 exit(); 在header()行之后调用。

    推荐文章