-3

任何帮助,将不胜感激。我有一个登录表单,当用户输入密码时,我不知道如何检查密码,它只检查用户名并验证。它只是一个简单的登录,不太强调安全性。任何帮助将不胜感激。干杯!

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";
        }
    }
}
4

1 回答 1

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

笔记

正如Daniel 已经评论的那样,请不要将密码作为明文存储在数据库中。使用盐 + 哈希系统。


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

$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
}
于 2013-09-23T17:01:45.963 回答