我正在尝试为学习目的构建一个简单的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的细节中,我认为这更像是一个逻辑问题,而不是语法问题。
任何想法我做错了什么?此外,我写的代码的任何建设性审查都很好阅读。 :)
答案 0 :(得分:1)
如果提取失败,则返回FALSE。所以你最终在获取失败时计算FALSE。
由于FALSE不是countable或数组,因此函数将返回1.
要解决此问题,您可以调整条件:
if (!$user)