Ich habe versucht, dies herauszufinden. Es ist ziemlich einfach, aber ich kann den Fehler nicht finden. Es sieht so aus, als wäre der Fehler in foreach, weil alles darüber funktioniert. Wenn ich die Eingaben fülle und auf die Schaltfläche Anmelden klicke, funktioniert das Skript nicht.Login funktioniert nicht
if (isset($_POST['submit']) AND (!empty($_POST['username']) AND (!empty($_POST['password'])))) {
$username = $_POST['username'];
$password = $_POST['password'];
$pass = hash('sha256',$password);
$select = $db->prepare("SELECT * FROM users WHERE username= :username AND password= :password");
$select->bindParam(':username', $username);
$select->bindParam(':password', $pass);
$select->execute();
foreach ($select as $data) {
if ($data['username'] == $username AND $data['password'] == $pass) {
$_SESSION['username'] = $username;
$_SESSION['id'] = $data['id'];
?>
<div class="echos">
<?php
echo "Login completed" . "<br>";
echo "<a href='http://jezecek.nostools.cz/'>Homepage</a>";
}
else {
echo "Wrong username or password!" . "<br>";
echo "<a href='http://jezecek.nostools.cz/include/registration.php'>Try again</a>";
}
}
}
else {
echo "Fill all fields!" . "<br>";
echo "<a href='http://jezecek.nostools.cz/include/login.php'>Try again</a>";
}
?>
</div>
Auch wenn ich fetchAll() verwenden, wie diese, es immer noch nicht funktioniert
$select = $db->prepare("SELECT * FROM users WHERE username= :username AND password= :password");
$select->bindParam(':username', $username);
$select->bindParam(':password', $pass);
$select->execute();
$result = $select->fetchAll();
foreach ($result as $data) {
if ($data['username'] == $username AND $data['password'] == $pass) {
$_SESSION['username'] = $username;
$_SESSION['id'] = $data['id'];
?>
<div class="echos">
<?php
echo "Login completed" . "<br>";
echo "<a href='http://jezecek.nostools.cz/'>Homepage</a>";
}
vor allem: Verwenden Sie 'pa ssword_hash() 'to * sicher * hash Ihre Passwörter. nur einmal sha256 anzurufen ist ** nicht ** sicher. –
vergessen, Daten nach 'execute()' zu holen. Lesen Sie http://php.net/manual/en/pdostatement.fetch.php – Saty
Sie müssen Ihren Datenbankaufrufen eine Fehlerbehandlung hinzufügen, indem Sie beispielsweise PDO-Ausnahmen auslösen lassen. Beachten Sie, dass Ihre Logik falsch ist: Wenn Sie sowohl den Benutzernamen als auch das Passwort auswählen, stimmen die einzigen Zeilen, die Sie finden, immer mit diesen Bedingungen überein. Falscher Benutzername/Passwort tritt auf, wenn in diesem Fall keine Zeilen gefunden werden. – jeroen