Ich versuche, ein einfaches OOP Login-System für Lernzwecke zu bauen.Graf Zeilen Problem
Dies ist die Auth-Klasse, die ich für das Registrierungs-/Anmeldesystem verwende.
<?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);
}
}
Und dies ist der Ort, an dem ich die Klasse verwenden:
<?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']);
}
Das Problem ist, dass selbst wenn das Passwort falsch oder der Benutzername nicht existiert es nicht die Fehlermeldung angezeigt werden " Benutzer nicht gefunden!" So scheint es, dass die Bedingung, wo ich angegeben, dass die Anzahl der Benutzervariablen größer als 0 sein sollte, nicht funktioniert.
Ich suchte nach einer Alternative für die einfache count()
, die ich verwendete, aber das schien nicht zu helfen. Ich verliere mich in den Details von OOP und ich denke, das ist eher ein logisches Problem als ein Syntax-Problem.
Irgendwelche Ideen, was ich falsch gemacht habe? Außerdem ist jede konstruktive Überprüfung des Codes, den ich geschrieben habe, großartig zu lesen. :)
Sie können 'var_dump' um nach dem Aufruf von 'select' zu sehen, was sich in $ $ user befindet. – PierreDuc
Es hat nichts mit OOP zu tun. Frage dich, * was * willst du hier zählen? Dann ersetzen Sie die Bedingung mit nur 'if ($ user)'. In Bezug auf die Überprüfung, können Sie diesen Artikel interessant finden, [Ihre Kinderkrankheiten erste Datenbank-Wrapper] (https://phpdelusions.net/pdo/common_mistakes) –
@PierreDuc mit var_dump gibt 'bool (false)' –