Ich habe kürzlich gelernt, wie man Login-Systeme mit PHP und MySQL zu machen. Ich entschied mich, einen für meine Seite zu machen. Der Benutzer meldet sich mit E-Mail, Passwort, Vorname und Nachname an. Ich wollte einen Gruß sagen "Meine Grüße" und dann ihren Namen. Ich könnte die Namen in einer Sitzung speichern, aber ich frage mich, warum meine Methode nicht vollständig funktioniert. Es funktioniert jedes Mal, AUSSERDEM unmittelbar nach der Registrierung. Dies ist der komplette Anmeldecode:Warum gibt die Datenbank nach der Registrierung keine Daten über den Benutzer zurück?
$error = "";
include("loginsession.php");
if(array_key_exists("id", $_SESSION)){
header("Location: index.php");
}
if(array_key_exists("submit", $_POST)){
include("connection.php");//database connection
$email = $_POST['email'];
$password = $_POST['password'];
$firstName = $_POST['firstname'];
$lastName = $_POST['lastname'];
$query = "SELECT * FROM users WHERE email='".mysqli_real_escape_string($link, $email)."'";
$result = mysqli_query($link, $query);
if(mysqli_num_rows($result) > 0){
$error = "<div class='alert alert-danger' role='alert'><strong>Error:<br><br></strong>This email already exists.<hr></div>";
}else{
$query = "INSERT INTO users(firstname, lastname, email, password) VALUES('".mysqli_real_escape_string($link, $firstName)."', '".mysqli_real_escape_string($link, $lastName)."', '".mysqli_real_escape_string($link, $email)."', '".mysqli_real_escape_string($link, $password)."')";
mysqli_query($link, $query);
$query = "UPDATE users SET password = '".md5(md5(mysqli_insert_id($link)).$password)."' WHERE id=".mysqli_insert_id($link)."";
mysqli_query($link, $query);
$_SESSION['id'] = mysqli_insert_id($link);//where the issue originates
if(isset($_POST['check']) && $_POST['check']=='true'){
setcookie("id", mysqli_insert_id($link), time() + 60*60*24*365);
}
header("Location: index.php");
}
}
auf der Indexseite, das ist, was ich tue:
session_start();
if(array_key_exists('id', $_COOKIE)){
$_SESSION['id'] = $_COOKIE['id'];
}
$greeting = "";
if(array_key_exists('id', $_SESSION)){
include("connection.php");//just the login to the database
$query = "SELECT * FROM users WHERE id = ".$_SESSION['id'];
$results = mysqli_query($link, $query);
$row = mysqli_fetch_array($results);
$greeting = "My greetings, ".$row['firstname']." ".$row['lastname'];//add name to greeting variable
}
später im Code:
<p id="greeting">
<?php echo $greeting; ?>
</p>
Der richtige Name erscheint nach Einloggen, aber nie nach der Anmeldung, auch wenn ich die Seite neu lade. Was statt "Meine Grüße, Vorname Nachname" angezeigt wird, ist "Meine Grüße". Es ist, als ob die Datenbank keinen Namen für diese bestimmte ID gefunden hätte.
Wie kann ich direkt nach der Registrierung das richtige Ergebnis erhalten? Wenn Sie einen anderen Code aus dem Anmelde- oder Anmeldeprozess benötigen, sagen Sie es mir bitte und ich werde es veröffentlichen. Wenn jemand das für sich selbst ausprobieren möchte, ist meine Website here.
@ chris85 Tut mysqli_insert_id es nicht? Korrigiere mich, wenn ich falsch liege - Es speichert die ID des zuletzt hinzugefügten Benutzers. Ich speichere die letzte ID in der Sitzung. Ich könnte auch Sitzungen für den Namen machen, wenn das, was ich gerade mache, nicht funktioniert. –
Ja, verpasste die Art, wie dieser Code beim ersten Lesen strukturiert wurde. Ich bin mir immer noch nicht sicher, ob ich alles verstanden habe. Dies ist jedoch für SQL-Injektionen offen. Alles in Cookies kann vom Benutzer geändert werden. – chris85
Was ist der Wert, der in db eingefügt wurde und verglichen mit dem, was Sie in Ihrem ersten Code-Code, den Sie gepostet haben, verglichen haben, was ist dann der Wert für das Session-Array für den anderen? poste die var_dump für beide, überprüfe auf Fehler über Fehlerberichte und möglicherweise auch MySQL. –