Ich hab versucht eine simple Useranmeldung zu programmieren. Da ich mich mit der ganzen Password-Security aber nie beschäftigt hab, hab ich folgende Anleitung/Guideline benutzt:
http://alias.io/2010/01/store-…afely-with-php-and-mysql/
Passwörter verschlüsseln geht einwandfrei. Nur das Anmelden haut jetzt nicht so hin, wie ichs gern hätte
Folgender Code aus der Guide scheint mir fehlerbehaftet, aber ich weiß nicht wo ich ansetzen soll, weil ich noch nie mit objektorientierten Abfragen in MySQL gearbeitet hab :-/
$username = 'Admin';
$password = 'gf45_gdf#4hg';
$sth = $dbh->prepare('
SELECT
hash
FROM users
WHERE
username = :username
LIMIT 1
';
$sth->bindParam(':username', $username);
$sth->execute();
$user = $sth->fetch(PDO::FETCH_OBJ);
// Hashing the password with its hash as the salt returns the same hash
if ( crypt($password, $user->hash) == $user->hash ) {
// Ok!
}
Alles anzeigen
Erstmal glaub ich, dass hinter LIMIT 1' noch eine Klammer geschlossen gehört!
So .. da es jetzt also schonmal einen Typo in diesem Codeabschnitt gibt, bin ich schonmal verunsichert :-/
Geh ich richtig in folgender Annahme (hier verändert mit meinem eigenen Code):
// ich baue eine datenbankverbindung auf (was gut funktioniert)
$dbh = mysqli_connect($hostname,$username,$password,$database) or die("Error - can't open database!");
// dann will ich die daten auslesen
$sth = $dbh->prepare('
SELECT
Password /* Das Passwort-Feld aus meiner Usertable */
FROM ($usertable) /* der Name der Usertable in meiner Datenbank */
WHERE
User = :username /* Das Username-Feld aus meiner Usertable gefolgt von = :was?? */
LIMIT 1 /* Nur der erste Eintrag mit Username wird ausgegeben. */
';
$sth->bindParam(':username', $User);
$sth->execute();
$user = $sth->fetch(PDO::FETCH_OBJ);
// Hashing the password with its hash as the salt returns the same hash
if ( crypt($password, $user->hash) == $user->hash ) {
// Ok!
}
Alles anzeigen
Ich krieg immer ein "Fatal error: Call to a member function bindParam() on a non-object in". Und bei Überpüfung der Variablen $sth kommt raus, dass sie bool(false) ist. Somit kein Objekt, ok. Aber WARUM ist sie false?
Jemand ne Idee?