WebImpressionen
Für die pwforget.php brauchen wir ein Formular.
das formular
  • <!DOCTYPE html>
  • <html lang="de"><head>
  • <meta charset="UTF-8">
  • <meta name="viewport" content="width=device-width,initial-scale=1.0">
  • <title>Passwort vergessen</title>
  • <meta name="dcterms.rights" content="locomputing">
  • <meta name="description" content="Beschreibung der Website">
  • <meta name="keywords" content="Keywords">
  • <!-- Dieses Stylesheet kann unter Downloads auch runtergeladen werden! -->
  • <link rel="stylesheet" href="https://locomputing.de/mustercss/formular_style.css">

  • </head>
  • <body>

  • <h4>Passwort vergessen?</h4>
  • <p>Bitte geben Sie Ihre Daten ein.</p>

  • <fieldset>

  • <p class="fehler"><?php echo $errror;?></p>
  1. <form method="post">

    • <!-- Beschriftung, Eingabefeld und Fehlermeldung für User-Name -->
  2. <div class="form-face">
  3. <label for="uname">User-Name:<span>*</span></label>
  4. <span class="fehler"> <?php echo $names_err;?></span>
  5. <input pattern="[A-Z][a-zA-Z0-9_-]{4,29}" required="required" placeholder="User-Name" title="User-Name" type="text" id="uname" name="benutzer" maxlength="32" class="form-control">
  6. </div>

    • <!-- Beschriftung, Eingabefeld und Fehlermeldung für eMail -->
  7. <div class="form-face">
  8. <label for="email">User-Mail:<span>*</span></label>
  9. <span class="fehler"> <?php echo $emails_err;?></span>
  10. <input pattern="^[\w]{1,}[\w.+-]{0,}@[\w-]{2,30}([.][a-z]{2,3}|[.][\w-]{2,}[.][a-zA-Z]{2,})$" required="required" placeholder="User-Mail" title="User-Mail" type="email" id="email" name="usemail" maxlength="78" class="form-control">
  11. </div>

    • <!-- Sende-Button -->
  12. <div class="form-face">
  13. <label><span>*</span> Felder sind Pflicht!</label>
  14. <input type="submit" class="butt button-red" name="passen" value="Passwortholen">
    <input class="butt button-red" type="reset" value="Reset">
  15. </div>

  16. <!-- form beenden -->
  17. </form>
    <!-- fieldset beenden -->
  • </fieldset>

  • <p>Passwort vorhanden <a href="login.php">Login hier</a></p>

  • </body>
  • </html>

pwforget.php
<?php
  • // Datenbank verbindung einfügen
  • if(file_exists('connect.php')==true){require('connect.php');}
    • // Sitzung starten
  1. session_start();
    • // Prüfen ob User eingeloggt ist
  2. if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true)
  3. {
  4. header("Location: welcome.php");exit;
  5. }

    • // eMail-Absender für Zeile 73 unbedingt ändern!
      $mail_absender = "POSTMASTER-DOMAIN.DE";

    • // Variablen definieren und auf leere Werte setzen
  6. $names = $emails = $errror = "";
  7. $names_err = $emails_err = "";

    • // Formulardaten werden verarbeitet, wenn das Formular gesendet wird
  8. if (isset($_POST['passen']) && $_POST['passen'] == 'Passwortholen')
  9. {
    • // POST für Username prüfen
  10. $postname = isset($_POST['benutzer']) ? $_POST['benutzer'] : "";
  11. if (empty(trim($postname)))
  12. {
  13. $names_err = 'Fehler User-Name!';
  14. }
  15. elseif((strlen(trim($postname)) < 5)||(strlen(trim($postname))) > 30)
  16. {
  17. $names_err = 'Fehler User-Name!';
  18. }
  19. else
  20. {
  21. $names = htmlspecialchars($postname);
  22. if (!preg_match("/^[A-Z]+[a-zA-Z0-9-_']*$/",$names))
  23. {
  24. $names_err = 'Fehler User-Name!';
  25. }
  26. if ($names === false)
  27. {
  28. $names_err = 'Fehler User-Name!';
  29. }
  30. } // Ende Zeile 20

    • // POST für eMail prüfen
  31. $postmail = isset($_POST['usemail']) ? $_POST['usemail'] : "";
  32. if(empty(trim($postmail)))
  33. {
  34. $emails_err = 'Fehler User-Mail!';
  35. }
  36. else
  37. {
  38. $emails = filter_var(htmlspecialchars($postmail), FILTER_VALIDATE_EMAIL);
  39. if(!preg_match("/^([a-z0-9\+_\-]+)*@([a-z0-9\-]{2,30}+\.)+[a-z]{2,3}$/ix",$emails))
  40. {
  41. $emails_err = 'Fehler User-Mail!';
  42. }
  43. if ($emails === false)
  44. {
  45. $emails_err = 'Fehler User-Mail!';
  46. }
  47. } // Ende Zeile 37

    • // Keine Fehler Inhalt zwischen Zeile 9 und 47 ausführen
  48. if(empty($names_err) && empty($emails_err))
  49. {
    • // Prüfen ob User-Name und User-Mail vorhanden ist
  50. $stmt = $connect->prepare("SELECT username,usermail FROM usertable WHERE username = ? and active = 1 and usermail = ?");
  51. $user = htmlspecialchars($names);
  52. $email = htmlspecialchars($emails);
  53. $stmt->bind_param('ss', $user,$email);
  54. $result = $stmt->execute();
  55. $stmt->store_result();
  56. if ($stmt->num_rows > 0)
  57. {
    • // Passwort String erstellen
  58. function PasswString($length = 16)
  59. {
  60. return substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)) )),1,$length);
  61. }
    • // Passwort String als Variable
  62. $psw = PasswString();
    • // User-Name und User-Mail für eMailversand auswählen
  63. $stmt = $connect->prepare('SELECT id, username, usermail FROM usertable WHERE username = ? and active = 1 LIMIT 1');
  64. $name = htmlspecialchars($names);
  65. $email = trim(filter_var($email, FILTER_VALIDATE_EMAIL));
  66. $stmt -> bind_param('s', $name);
  67. $stmt -> execute();
  68. $result = $stmt->get_result();
  69. while ($ul = $result->fetch_assoc())
  70. {
    • // Daten für text/eMail versand sortieren
  71. $empfaenger = trim($email);
  72. $betreff = "Passwort vergessen\r\n";
  73. $from = "From: ".$mail_absender."\r\n";
  74. $text = "Hallo: ".$names."\r\n";
  75. $text .= "Dein Passwort: ".$psw."\r\n";
    • // Formulareingaben versenden
  76. mail($empfaenger, $betreff, $text, $from);
    • // Passwort-String hashen
  77. $passw = password_hash($psw, PASSWORD_DEFAULT);
    • // Passwort-String Speichern
  78. $stmt = $connect->prepare('UPDATE usertable SET userpass = ? WHERE id = ? LIMIT 1');
  79. $password = $connect->real_escape_string($passw);
  80. $id = IntVal($ul['id']);
  81. $stmt->bind_param('si', $password, $id);
  82. $stmt->execute();
  83. } // Ende Zeile 70
    • // Erfolgs-Meldung ausgeben
  84. echo'<p>Die Daten wurden an die eingetragene eMail-Adresse versand.<br/>zum <a href="login.php">Login</a></p>';exit;
  85. } // Ende Zeile 57
  86. else
  87. {
  88. $errror = 'ERROR! Daten Fehler';
  89. }
  90. } // Ende Zeile 49
  91. } // Ende Zeile 9
?>
Hier wird das formular eingefügt.