2016-08-01 3 views
1

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.

+0

@ 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. –

+1

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

+0

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. –

Antwort

1

Ich habe Ihren Code nicht getestet, aber ich denke, es liegt daran, dass die Sitzung noch nicht gestartet wurde, wenn Sie sich angemeldet haben. Versuchen Sie, session_start(); in der ersten Zeile Ihres ersten Codes hinzuzufügen.

+1

Nun, ich denke, das Problem ist der von mysqli_insert_id zurückgegebene Wert. Gemäß den manuellen PHP-Zuständen gibt _it die in der letzten Abfrage verwendete automatisch generierte ID zurück. Bitte überprüfen Sie andere Abfragen, die nach dem Einfügen der Daten in die Datenbank ausgeführt wurden. – someone

+1

Bitte lesen [diese] (http://stackoverflow.com/questions/15332250/why-is-mysqli-insert-id-always-returning-0) auch. – someone

+0

Ich habe den vollständigen Registrierungscode veröffentlicht. Es scheint, als ob ich die ID auf die Sitzung gesetzt habe, direkt nachdem ich das Passwort des Benutzers in einer Update-Anweisung hashed habe. Ich habe keine Probleme mit der ersten insert_id, aber die zweite funktioniert nicht. –

Verwandte Themen