Я пытаюсь создать простую систему входа ООП для обучения.Задайте логическую задачу строк строк
Это класс 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']);
}
Проблема заключается в том, что даже если неверный пароль или имя пользователя не существует, он не отображает сообщение об ошибке " Пользователь не найден!" поэтому кажется, что условие, когда я указал, что счетчик пользовательской переменной должен быть больше 0, не работает.
Я попытался найти альтернативу для простого count()
, который я использовал, но это, похоже, не помогло. Я теряюсь в деталях ООП, и я думаю, что это скорее логическая проблема, чем синтаксическая.
Любые идеи, что я сделал не так? Кроме того, любой конструктивный обзор кода, который я написал, замечательно читать. :)
Вы можете использовать 'var_dump' чтобы увидеть, что внутри '$ user' после вызова' select'. – PierreDuc
Это не имеет ничего общего с ООП. Спроси себя, * что ты хочешь здесь сосчитать? Затем замените условие только 'if ($ user)'. В отношении обзора вы можете найти эту статью интересной, [ваши первые болезни базы данных базы данных] (https://phpdelusions.net/pdo/common_mistakes) –
@PierreDuc с использованием var_dump возвращает 'bool (false)' –