PHP Login erweitern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PHP Login erweitern

    Hallo,

    ich würde gerne meinen Login mit PHP erweitern. Allerdings sind meine Erfahrung wie wir alles wissen nicht sogut in PHP.
    Nun mal folgender Code

    PHP-Quellcode

    1. <?php
    2. session_start();
    3. include ("db.php");
    4. if(isset($_GET['login'])) {
    5. $email = $_POST['email'];
    6. $passwort = $_POST['passwort'];
    7. $statement = $pdo->prepare("SELECT * FROM users WHERE email = :email");
    8. $result = $statement->execute(array('email' => $email));
    9. $user = $statement->fetch();
    10. //Überprüfung des Passworts
    11. if ($user !== false && password_verify($passwort, $user['passwort'])) {
    12. $_SESSION['userid'] = $user['vorname'];
    13. die('Login erfolgreich. Weiter zu @@a03dffc24b58558f202478e73fe6e5f8ffeb5775@@');
    14. } else {
    15. $errorMessage = "E-Mail oder Passwort war ungültig<br>";
    16. }
    17. }
    18. ?>
    Alles anzeigen

    Der Vorname kann bisher Erfolgreich ausgelesen werden. Nun soll allerdings noch der Nachname ausgelesen werden können.


    Wie stelle ich das am besten an ?

    Beitrag von BreadScript ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: fehler gefunden ().
  • Gibt es die Möglichkeit das ein Umlaut wie das scharfe S auch richtig in der Datenbank angezeigt wird ?

    PHP-Quellcode

    1. if(!$error) {
    2. $passwort_hash = password_hash($passwort, PASSWORD_DEFAULT);
    3. $statement = $pdo->prepare("INSERT INTO users (email, passwort, vorname, nachname, adress, plz_ort) VALUES (:email, :passwort, :vorname, :nachname, :adress, :plz_ort)");
    4. $result = $statement->execute(array('email' => $email, 'passwort' => $passwort_hash, 'vorname' => $vorname, 'nachname' => $nachname, 'adress' => $adress , 'plz_ort' => $plz_ort));
    5. if($result) {
    6. $Message = "Erfolgreich registriert.";
    7. $showFormular = false;
    8. } else {
    9. $Message = "Es ist ein Fehler beim erstellen unterlaufen";
    10. }
    11. }
    Alles anzeigen
  • IPrototypeI schrieb:

    Benutze das charset utf-8 beim verbindungsaufbau kannst du das auch setzen


    "mysql:host=$host;dbname=$db;charset=utf8

    Vielen dank das hat schonmal geklappt. Nun hab ich aber ein kleines Problem nebenbei, ich würde gerne den Benutzernamen in meinem Design anzeigen lassen. Sobald ich nun einen neuen Benutzer über das PHP Formular erstelle (MYSQL) wird mir der neue Benutzer angezeigt und nicht der eigentliche der wirklich angemeldet ist.

    Ich arbeite hierbei mit SESSIONS. Ich hoffe Ihr könnt mir da weiter helfen oder mir gegebenenfalls ein paar Tipps geben.

    PHP-Quellcode

    1. if(isset($_GET['login'])) {
    2. $email = $_POST['email'];
    3. $passwort = $_POST['passwort'];
    4. $statement = $pdo->prepare("SELECT * FROM users WHERE email = :email");
    5. $result = $statement->execute(array('email' => $email));
    6. $user = $statement->fetch();
    7. //Überprüfung des Passworts
    8. if ($user !== false && password_verify($passwort, $user['passwort'])) {
    9. $_SESSION['userid'] = $user['vorname'];
    10. $_SESSION['nachname'] = $user['nachname'];
    11. $_SESSION['adduser'] = $user['adduser'];
    12. $_SESSION['delluser'] = $user['delluser'];
    13. die(
    14. header("Location: index.php")
    15. );
    16. } else {
    17. $errorMessage = "E-Mail oder Passwort falsch";
    18. }
    19. }
    Alles anzeigen
  • Ich konnte soeben einen Fehler funden der mich etwas stutzig machte. Es werden keine Daten für die SESSION gespeichert. Nun bekomme ich für den u.a Code nur die id in die Sessions gespeichert und leider nichts weiteres. Habt Ihr da einen Tipp für mich was ich falsch gemacht habe ? Erst beim Login werden die Sessions gesetzt

    PHP-Quellcode

    1. if(isset($_GET['login'])) {
    2. $username = $_POST['username'];
    3. $passwort = $_POST['passwort'];
    4. $statement = $pdo->prepare("SELECT * FROM users WHERE username = :username");
    5. $result = $statement->execute(array('username' => $username));
    6. $user = $statement->fetch();
    7. //Überprüfung des Passworts
    8. if ($user !== false && password_verify($passwort, $user['passwort'])) {
    9. $_SESSION['userid'] = $user['username'];
    10. die(
    11. header("Location: index.php")
    12. );
    13. } else {
    14. $errorMessage = "E-Mail oder Passwort war ungültig<br>";
    15. }
    16. }
    Alles anzeigen
    Bilder
    • kl.png

      153,72 kB, 1.280×1.024, 18 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von BreadScript ()


  • IPrototypeI schrieb:

    Sessions kannst du verwenden sobald du globale variablen für den Besucher benötigst.

    Jedoch sollte man keine passwörter in einer Session halten, da diese geklaut und ausgelesen werden können durch session hijacking
    Stopped! Die Aussage das man keine Passwörter in einer Session halten sollte stimmt. Das sie geklaut werden kann auch, nicht aber das sie ausgelesen werden kann. (Zumindest nicht wenn es keine Ausgabe der Sessioninhalte gibt). Session Hijacking bezieht sich ja auch nur auf das Ändern des Session Cookies.
    Mit freundlichen Grüßen
    Developer
    Senior Webdeveloper | Fachinformatiker Anwendungsentwicklung
  • Developer schrieb:

    IPrototypeI schrieb:

    Sessions kannst du verwenden sobald du globale variablen für den Besucher benötigst.

    Jedoch sollte man keine passwörter in einer Session halten, da diese geklaut und ausgelesen werden können durch session hijacking
    Stopped! Die Aussage das man keine Passwörter in einer Session halten sollte stimmt. Das sie geklaut werden kann auch, nicht aber das sie ausgelesen werden kann. (Zumindest nicht wenn es keine Ausgabe der Sessioninhalte gibt). Session Hijacking bezieht sich ja auch nur auf das Ändern des Session Cookies.
    Um das noch ein wenig zu erweitern zum Verständnis. Eine Session wird auf dem Server gespeichert, aber zur Identifikation gibt es eine ID auf dem Client (also in deinem Browser), also ein Session Cookie. Deshalb kann man so ohne weiteres keine Daten aus einer Session auslesen, da diese auf dem Server gespeichert ist. Möchtest du also sowas wie einen Usernamen oder eine UserID andauernd abfragen, z.B. um zu prüfen ob der Benutzer eingeloggt ist benutzt du eine Session. Passwörter speicherst du gar nicht Clientseitig ab. Das einzige was du mit Passwörtern machen solltest ist sie zu hashen (kein MD5, alles ab Sha256) und dann in einer Datenbank abzuspeichern.
    Daten, die ruhig verändert werden können und nicht nochmal von dir ausgelesen werden kannst du in einem Cookie speichern (dieser wird auf dem Client gespeichert). Wenn der Benutzer diesen also verändert ist das im Prinzip egal, da du damit dann nicht mehr rumhantierst.
    So. Möchtest du aber aus verschiedensten Gründen deine Daten in einem Cookie abspeichern, dann solltest du IMMER mit Authentification Tokens arbeiten. Bedeutet, dass dann immer ein bestimmter Wert verschlüsselt und entschlüsselt wird und nachher auf dem Server verglichen wird. Hier ist es wichtig, dass die Verschlüsselung stark genug ist, denn knack der Benutzer die Verschlüsselung kann er diesen an den Server senden und wird von diesem authentifiziert.
    Das ist aber noch deutlich komplizierter und dazu kannst du dir gerne mal etwas durchlesen:
    stackoverflow.com/questions/29…for-accessing-the-website

    Man kann mich hier gerne verbessern, falls ich was falsch dargestellt habe.
  • Vielen dank für eure Hilfreichen Antworten die mich Persönlich ein Stück weiter gebracht haben. Nun habe ich noch eine Frage, ich würde gerne auf jeder Seite alle Daten des Benutzer´s Abfragen. Ich habe mir dazu gedacht eine PHP Datei zu erstellen. Nennen wir diese mal Eigenschaften. Diese sollte folgenden Inhalt dann haben

    PHP-Quellcode

    1. $sql = "SELECT * FROM users WHERE id = '$userid'";
    2. foreach ($pdo->query($sql) as $row) {
    3. $edit = $row['edituser'];
    4. $editlinie = $row['editlinie'];
    5. }
    6. ?>

    Nun würde ich gerne den $edit und den $editline in einer anderen Datei z.b dashboard.php abfragen und ausgeben können. Leider sind meine Ansätze dabei scheinbar falsch so das ich nicht vorran komme. Über Lösungvorschläge jeglicher Art (andere Methoden) würde ich mich sehr freuen.
  • Auch wenn es grundsätzlich ein Bad Practice ist globale Variablen zu deklarieren, gucke dir einmal "global" an. Ich würde dir aber ehr empfehlen, einmal ein Objekt (Statisch) zu haben welches dir die Daten gibt.
    Mit freundlichen Grüßen
    Developer
    Senior Webdeveloper | Fachinformatiker Anwendungsentwicklung
  • BreadScript schrieb:

    Vielen dank für eure Hilfreichen Antworten die mich Persönlich ein Stück weiter gebracht haben. Nun habe ich noch eine Frage, ich würde gerne auf jeder Seite alle Daten des Benutzer´s Abfragen. Ich habe mir dazu gedacht eine PHP Datei zu erstellen. Nennen wir diese mal Eigenschaften. Diese sollte folgenden Inhalt dann haben

    PHP-Quellcode

    1. $sql = "SELECT * FROM users WHERE id = '$userid'";
    2. foreach ($pdo->query($sql) as $row) {
    3. $edit = $row['edituser'];
    4. $editlinie = $row['editlinie'];
    5. }
    6. ?>
    Nun würde ich gerne den $edit und den $editline in einer anderen Datei z.b dashboard.php abfragen und ausgeben können. Leider sind meine Ansätze dabei scheinbar falsch so das ich nicht vorran komme. Über Lösungvorschläge jeglicher Art (andere Methoden) würde ich mich sehr freuen.
    Wie sieht denn dein Vorgang bisher aus? Dann können wir da direkt vielleicht berichtigen

    Beitrag von BreadScript ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Einfach nur ein denkfehler ().