计算行逻辑问题

时间:2016-03-25 12:21:09

标签: php oop pdo

我正在尝试为学习目的构建一个简单的OOP登录系统。

这是我用于注册/登录系统的Auth类。

<?php

require_once 'Database.class.php';

class Auth extends Database 
{
    const DATEFORMAT = 'd/m/Y';
    const TIMEFORMAT = 'H:i:s';

    public function __construct($host, $username, $password, $database)
    {
        parent::__construct($host, $username, $password, $database);
        $this->connect();
        $this->setTable('users');
    }

    public function insert(array $data)
    {
        $username = $data['username'];
        $password = $data['password'];
        $repeat_password = $data['repeat_password'];
        $last_login = date(self::DATEFORMAT . ' ' . self::TIMEFORMAT);

        if ($password == $repeat_password)
        {
            $password = hash("sha256", $password);
            $stmt = $this->connection->prepare("INSERT INTO {$this->table} (username, password, last_login) VALUES(:username, :password, :last_login)");

            $stmt->execute(array(':username' => $username, 
                                 ':password' => $password,
                                 ':last_login' => $last_login
                                 )
                           );
        }
        else
        {
            // do something
        }
    }

    public function select(array $data)
    {
        $username = $data['username'];
        $password = $data['password'];
        $password = hash("sha256", $password);

        $stmt = $this->connection->prepare("SELECT * FROM {$this->table} WHERE username=:username AND password=:password LIMIT 1");

        $stmt->execute(array(':username' => $username, 
                             ':password' => $password
                             )
                       );

        return $stmt->fetch(PDO::FETCH_ASSOC);
    }

}

这是我使用该课程的地方:

<?php

require_once 'Auth.class.php';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    $auth = new Auth('localhost', 'root', '', 'oop');

    $user = $auth->select($_POST);

    if (count($user) === 0) {
        echo 'User not found!';
    }else{
        echo 'Hello, ' . ucfirst($user['username']);
    }

问题是,即使密码错误或用户名不存在,它也不会显示错误消息&#34;用户未找到!&#34;因此,似乎我指定用户变量的计数应该大于0的条件不起作用。

我试图寻找替代我使用的简单count(),但似乎没有帮助。我迷失在OOP的细节中,我认为这更像是一个逻辑问题,而不是语法问题。

任何想法我做错了什么?此外,我写的代码的任何建设性审查都很好阅读。 :)

1 个答案:

答案 0 :(得分:1)

如果提取失败,则返回FALSE。所以你最终在获取失败时计算FALSE。

由于FALSE不是countable或数组,因此函数将返回1.

count return values

要解决此问题,您可以调整条件:

if (!$user)