Die überprüfung der Login Daten mit bestehenden Datenbank-Benutzer (PHP)
Ich bin neu in PHP und ich versuche, erstellen Sie ein Login-system ohne Verwendung von template-code.
Das Anmeldeformular, dass ich mit dem folgenden code komplett funktioniert und gespeicherte Benutzer in meiner Datenbank ohne problem.
Nun, hier ist meine login-code. Ich habe mehrere Benutzer, dieses heraus zu testen mit meinem Anmeldeformular.
Das ist, was ich in PHP:
<?php
session_start();
include_once('classes/connection.php');
if(isset($_POST['username']))
{
if(!empty($_POST['username']) && !empty($_POST['password']))
{
$username = mysqli_real_escape_string($link, $_POST['username']);
$password = md5(mysqli_real_escape_string($link, $_POST['password']));
$checklogin = mysqli_query($link, "SELECT * FROM tblusers WHERE username = '".$username."' AND password = '".$password."'");
if(mysqli_num_rows($checklogin) == 1)
{
$row = mysqli_fetch_array($checklogin);
$username = $row['username'];
$email = $row['email'];
$name = $row['name'];
$surname = $row['surname'];
$_SESSION['Username'] = $username;
$_SESSION['Email'] = $email;
$_SESSION['Name'] = $name;
$_SESSION['Surname'] = $surname;
$_SESSION['LoggedIn'] = 1;
header('location: index.php');
}
else
{
$feedback= "<p>Your account was not found, please try again.</p>";
}
} else
{
$feedback= "<p>Please fill in all the blank areas.</p>";
}
}
?>
hier ist der HTML-damit verbunden:
<article>
<?php if(isset($feedback)): ?> <!-- BEGIN FEEDBACK -->
<div id="feedback">
<?php echo $feedback ?>
</div>
<?php endif; ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<h2>Login</h2>
<table><tr>
<td>Username:</td>
<td><input size="10%" id="username" class="form-text" name="username"type="text"/></td></tr>
<tr>
<td>Password:</td>
<td><input size="10%" id="password" class="form-text" name="password" type="password"/></td>
</tr>
<tr>
<td></td>
<td><input name="loginknop" type="submit" value="Login" />
<a href="register.php">No account? Click here!</a></td>
</tr></table>
</form>
</article>
Mir, das alles scheint richtig und wäre in der Lage zu funktionieren. Jedoch, jedes mal, wenn ich testen das login, z.B. mit: BENUTZERNAME: TEST und PASSWORT: TEST123 (ist schon in meiner Datenbank, die als potenzielle Nutzer), ich bekomme mein feedback sagen: "Dein account wurde nicht gefunden, bitte versuchen Sie es erneut."
Also meine Fragen:
1) Wie kann ich dieses Problem beheben? ich glaube, mein code ist korrekt, aber ich habe keine Ahnung, warum es immer wieder sagt mir mein Konto nicht existiert.
2) Anregungen, wie Sie zu verbessern oder verkürzen Sie diesen code geschätzt, wie auch, ich bin begierig zu erfahren,
mysqli_real_escape_string($link, md5($_POST['password']))
, aber es hängt davon ab, wie Sie speichern Sie das Kennwort in das Registrierungs-script.Ich glaube nicht, das ist was falsch, ich habe dies ausprobiert, aber es gibt das gleiche Ergebnis. Aber danke für euren input, ich weiß es zu schätzen.
Kann man das echo der Abfrage, bevor Sie ausgeführt wird, und versuchen Sie es dann von hand mit mysql oder phpMyAdmin?
In der Datenbank ist das Passwort "TEST123" oder "22b75d6007e06f4a959d1b1d69b4c4bd"? Was sagt ein var_dump von mysqli_fetch_array($checklogin) direkt nach "$checklogin = mysqli_query.." - show? Versuchen Sie, die SQL in phpmyadmin oder ähnlichen, um zu sehen, wenn somethign kommt.
ein var_dump wie Sie beschrieben zeigt absolut nichts. Wie ich schon sagte, ich bin noch neu in PHP, aber ich habe das bekommen, was Sie zu tun versuchen, obwohl, bekommen nichts zurück, ist kein gutes Zeichen, richtig?
InformationsquelleAutor CodeHigh | 2013-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie müssen nur fügen Sie einige debug-code-Zeilen in Ihre php-Datei, so können Sie herausfinden, wo das problem ist.
Beispiel:
Nach, dass Sie sehen können, was das problem ist. Wie ich jetzt sehe, könnte es sein:
P. S. Und Wenn es nicht hilft, bitte, poste hier die Ausgabe von alle diese echos, dass Sie gewonnen haben nach der Anmeldung versuchen!
Hier das Stück code, das SCHREIBEN von Benutzerdaten in einer Datenbank Registrierung dann passiert. Es ist offensichtlich, dass Ihr Passwort gespeichert im etwas anderen format, als Sie versuchen, es von der DB per SELECT.
InformationsquelleAutor MihanEntalpo
Diese Zeile:
nimmt die Daten, die Sie eingeben, in den Bildschirm
TEST123
und schafft eineMD5
hash.Es ist also so Aussehen:
Also, wenn, wie Sie sagen, Ihre Datenbank ein
Wenn Sie Ihre Abfrage
$password will = 22b75d6007e06f4a959d1b1d69b4c4bd
aber tabuser.Passwort = 'TEST123' daher wird die Zeile nicht ausgewählt werden!Sie nicht brauchen, um wieder regelmäßig das Kennwort, speichern regulären Passwort in der Datenbank ist eine schlechte Praxis, also, Sie haben, um schreiben Sie Ihre Registrierung zu machen, schreiben md5-Passwort, um die Basis, nicht das echte Passwort. Denke auch, über einige SALZ ' Ing sich Ihr Passwort, es wäre sicherer.
In der Tat können Sie nicht zurück einen md5-hash in seine ursprüngliche Daten-Wert, kann man nur vergleichen, ein re-hash, wie Sie tun, aber Sie müssen speichern, um die `md5('TEST123') in das Feld Passwort auf der Datenbank, wenn Sie den Benutzer erstellen.
Danke für Eure Antworten, ich habe den Fehler gefunden, ich update dieses Thema bald!
InformationsquelleAutor RiggsFolly