PDO PHP,LOGIN FORM

时间:2013-09-23 16:51:36

标签: php mysql login pdo

任何帮助将不胜感激。我有一个登录表单,我无法弄清楚当用户输入密码时如何检查密码,它只检查用户名和验证。它只是一个简单的登录,不太注重安全性。 任何帮助将不胜感激。干杯!

public function adminl() {
    if (!empty($_POST['username']) && !empty($_POST['passw'])) {
        // get user's data
        $con = $this->db->prepare("SELECT id, 
            username, passw,
            passw   
            FROM admin
            WHERE username = :username;");

        $con->execute(array(':username' => $_POST['passw']));
        $count =  $con->rowCount();

        if ($count == 1) { 
            if( $con->execute(array(':passw' => $_POST['username'])) == 1) {
                // fetch one row 
                $result = $con->fetch;
                return true;
                echo "success"; 
            } 
        }  
        else {
            echo "Failed to login";
        }
    }
}

1 个答案:

答案 0 :(得分:0)

  1. 您的查询中有username = :username,而在执行准备好的查询时,您将array(':username' => $_POST['passw'])传递给它。我认为这不是预期的行为。
  2. 在稍后阶段,您通过将array(':passw' => $_POST['username'])传递给其执行调用来执行相同的语句;然而,您的查询中没有名为passw的占位符。
  3. 您没有调用函数fetch(),而是尝试访问对象fetch中名为$con的变量。

  4. 注意

    由于已经commented by Daniel,请不要将密码作为纯文本存储在数据库中。使用salt +哈希系统。


    也许,这就是你想要实现的目标:

    $con = $this->db->prepare("SELECT id, 
            username,
            passw   
        FROM admin
        WHERE username = :username
            AND passw = :passw
        LIMIT 1");
    $con->execute( array(':username' => $_POST['username'], ':passw' => $_POST['passw']) );
    $count = $con->rowCount();
    if( $count > 0 ) {
        $result = $con->fetch();
        return TRUE; // or $result, whatever is the intended behaviour
    }