InternInhaltsverzeichnisGlossarBausteineLinklisteTutorialsKommentare

Thema: Anmeldescript mit Bestätigungslink Artikel anzeigen

divo schrieb am Sonntag, den 13 Februar 2022 #11
können Sie hier noch ein Passwort vergessen php hinzufügen? wäre super. Danke
Eric schrieb am Montag, den 25 April 2022 #12
Hallo Werner,

Ich habe beim register.php mehr Zeilen hinzugefügt und das Problem ist wen ich auf registrieren klicke kommt nur eine leere Seite und ich finde den
Fehler nicht.

Darum Bitte ich um Rat/Hilfe

Mit Freundlichen Grüße
Eric

Diesen Beitrag vollständig anzeigen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<?php
// Variablen setzen
$ausgabe '';
$benutzerVorname $_POST["vorname"] ?? "";
$benutzerNachname $_POST["nachname"] ?? "";
$benutzerTelefonnummer $_POST["telefonnummer"] ?? "";
$benutzerStrasse $_POST["strasse"] ?? "";
$benutzerOrt $_POST["ort"] ?? "";
$benutzerPLZ $_POST["plz"] ?? "";
$benutzerAnzeigename $_POST["anzeigename"] ?? "";
$benutzerBenutzername $_POST["benutzername"] ?? "";
$benutzerEmail $_POST["email"] ?? "";
$benutzerPass $_POST["passwort"] ?? "";
$korrektur "";

$benutzereingabe = [
  
"vorname" => "",
  
"nachname" => "",
  
"telefonnummer" => "",
  
"strasse" => "",
  
"ort" => "",
  
"plz" => "",
  
"anzeigename" => "",
  
"benutzername" => "",
  
"email" => "",
  
"passwort" => "",
];

if (
$_SERVER["REQUEST_METHOD"] == "POST") {

  
// Benutzername überprüfen ob dieser bereits vorhanden ist
  
$select $db->prepare("SELECT `benutzername`, `email`
                                       FROM `" $TBL_NAME "`
                                       WHERE `benutzername` = :name
                                       OR `email` = :email");
  
$select->execute([
    
':name' => $benutzerBenutzername,
    
':email' => $benutzerEmail
  
]);
  
$benutzer $select->fetch();

  
// Benutzereingaben (Pflichtfelder) überprüfen
  
$benutzereingabe["benutzername"] = (strlen($benutzerBenutzername) < 5) ? '<br>Der Name ist zu kurz!' '';
  
$benutzereingabe["benutzername"] = ($select->rowCount() > 0) ? '<br>Der Name ist bereits vorhanden!' $benutzereingabe["name"];

  
$benutzereingabe["email"] = (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL))  ? '<br>Die E-Mail-Adresse ist fehlerhaft!' '';
  
$benutzereingabe["email"] = ($select->rowCount() > 0) ? '<br>Die E-Mail-Adresse ist bereits vorhanden!' $benutzereingabe["email"];

  
$benutzereingabe["passwort"] = (strlen($benutzerPass) < 8) ? '<br>Das Passwort ist zu kurz!' '';

  if (!empty(
implode(""$benutzereingabe))) {
    
$korrektur '<h3 class="markierung">&#10008; Bitte korrigieren Sie Ihre Eingaben!</h3>';
  }
}

// Formular erstellen
$formular $korrektur '
<form action="registrieren.php" method="post" accept-charset="UTF-8">

<p><label>Vorname: 
<span class="markierung">&#10034; ' $benutzereingabe["vorname"] . '</span> <br>
<input type="text" name="vorname" value="' $benutzerVorname '" size="35" required="required" placeholder="Vorname"></label>
</p>

<p><label>Nachname: 
<span class="markierung">&#10034; ' $benutzereingabe["nachname"] . '</span> <br>
<input type="text" name="nachname" value="' $benutzerNachname '" size="35" required="required" placeholder="Nachname"></label>
</p>

<p><label>Telefonnummer: 
<span class="markierung">&#10034; ' $benutzereingabe["telefonnummer"] . '</span> <br>
<input type="text" name="telefonnummer" value="' $benutzerTelefonnummer '" size="35" required="required" placeholder="Telefonnummer"></label>
</p>

<p><label>Adresse: 
<span class="markierung">&#10034; ' $benutzereingabe["strasse"] . '</span> <br>
<input type="text" name="strasse" value="' $benutzerStrasse '" size="35" required="required" placeholder="Adresse"></label>
</p>

<p><label>Ort: 
<span class="markierung">&#10034; ' $benutzereingabe["ort"] . '</span> <br>
<input type="text" name="ort" value="' $benutzerOrt '" size="35" required="required" placeholder="Ort"></label>
</p>

<p><label>PLZ: 
<span class="markierung">&#10034; ' $benutzereingabe["plz"] . '</span> <br>
<input type="text" name="plz" value="' $benutzerPLZ '" size="35" required="required" placeholder="PLZ"></label>
</p>

<p><label>Anzeigename: 
<span class="markierung">&#10034; ' $benutzereingabe["anzeigename"] . '</span> <br>
<input type="text" name="anzeigename" value="' $benutzerAnzeigename '" size="35" required="required" placeholder="Anzeigename"></label>
</p>

<p><label>Benutzername: 
<span class="markierung">&#10034; ' $benutzereingabe["benutzername"] . '</span> <br>
<input type="text" name="benutzername" value="' $benutzerBenutzername '" size="35" required="required" placeholder="Benutzername"></label>
</p>

<p><label>E-Mail: 
<span class="markierung">&#10034; ' $benutzereingabe["email"] . '</span> <br>
<input type="email" name="email" value="' $benutzerEmail '" size="35" required="required" placeholder="E-Mail"></label>
</p>

<p><label>Passwort: 
<span class="markierung">&#10034; ' $benutzereingabe["passwort"] . '</span> <br>
<input type="password" name="passwort" value="' $benutzerPass '" size="35" minlength="8" required="required" placeholder="Mind. 8 Zeichen"></label>
</p>

<p>
 <input type="submit" value="Absenden">
</p>

</form>
';


if (
$_SERVER["REQUEST_METHOD"] == "POST") {

  if (empty(
implode(""$benutzereingabe))) {
    
// Zeitstempel erzeugen
    
$zeitstempel time();

    
// Passwort verschlüsseln
    
$passwort password_hash($_POST["passwort"], PASSWORD_DEFAULT);

    
// Benutzer in die DB eintragen
    
$insert $db->prepare("INSERT INTO `" $TBL_NAME "`
  SET
    `vorname` = :vorname,
    `nachname` = :nachname,
    `telefonnummer` = :telefonnummer,
    `strasse` = :strasse,
    `ort` = :ort,
    `plz` = :plz,
    `anzeigename` = :anzeigename,
    `benutzername` = :name,
    `email` = :email,
    `register` = :register,
    `passwort` = :passwort,
    `datum` = NOW()");
    if (
$insert->execute([
      
":vorname" => $benutzerVorname,
      
":nachname" => $benutzerNachname,
      
":telefonnummer" => $benutzerTelefonnummer,
      
":strasse" => $benutzerStrasse,
      
":ort" => $benutzerOrt,
      
":plz" => $benutzerPLZ,
      
":anzeigename" => $benutzerAnzeigename,
      
":name" => $benutzerBenutzername,
      
":email" => $benutzerEmail,
      
":register" => $zeitstempel,
      
":passwort" => $passwort
    
])) {
?>
Werner schrieb am Dienstag, den 26 April 2022 #13
Hallo Eric,

eine leere Seite deutet fast immer auf einen PHP-Fehler hin.
Wenn man so ein PHP-Script erstellt oder bearbeitet, sollte immer die PHP-Fehlermeldungen aktiviert werden.
Setze an den Anfang eines jeden PHP-Scripts folgendes:

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);


Es muss sich aber nicht um einen PHP-Fehler handeln, da hier auch MySQL verwendet wird, kann es sein das es einen Fehler in der DB-Tabelle gibt. Passen zb. die Namen der Spalten in der DB-Tabelle, mit den Daten, die eingefügt werden überein?
So eine fehlerhafte MySQL-Syntax, kann im End-Effekt auch einen PHP-Fehler verursachen.

Verwende einen lokalen Webserver auf deinem PC, um die Skripte zu testen. Hier eignet sich XAMPP hervorragend dafür.
Rudolf Knut schrieb am Donnerstag, den 28 April 2022 #14
Hallo Werner
ich habe das script auf meinem webserver installiert.

Habe zwei neue Benutzer angelegt. Er wird keine Bestätigungsmail gesendet. Im Admin Bereich sind die zwei Benutzer angelegt.

Ich kann mich mit beiden neuen Benutzer nicht anmelden. Es taucht eine Fehlermeldung auf.

Fehlerhafte Eingabe.

???

wo liegt der Fehler?

Gruß Knut
Werner schrieb am Samstag, den 30 April 2022 #15
Hallo Rudolf,

das kann verschiedene Ursachen haben. Wurden alle Dateien mit der Zeichenkodierung UTF-8 (ohne BOM) gespeichert? Das ist wichtig, ansonsten werden Passwörter fehlerhaft in der Datenbank gespeichert. Zeichenkodierung - Schriftzeichen r[…]darstellen
Zitat von Rudolf Knut:
Er wird keine Bestätigungsmail gesendet.
Verwende eine E-Mail-Adresse, die bei deinem Provider registriert ist, ansonsten wird das Versenden vom Provider blockiert.

// E-Mail
// Eine beim Provider registrierte E-Mail Adresse!
$EMAIL = "email@example.com";
Eric schrieb am Montag, den 2 Mai 2022 #16
Hallo Werner,

Ich habe nochmal alles kontrolliert und mit

session_start();
error_reporting(-1);
ini_set('display_errors','On');

nochmal angeschaut auf das habe ich komplett vergessen das auch mit dem Fehler sehen kann >.<

Bin dann drauf gekommen das was in der Datenbank falsch ist.

Ich habe auf dem PHP Dokument die variable telefonnummer und auf der Datenbank telefonnumer stehen gehabt habe ein m vergessen ^^

Danke für deine Hilfe einen Lösung zu finden.

Vielen Dank Werner!

Mit Freundlichen Grüße
Eric
Fabian schrieb am Montag, den 9 Januar 2023 #17
Hallo

Bei Mir geht der register.php nicht, es kommt der Fehler Double Quotet String....

Was mache ich falsch
Werner schrieb am Montag, den 9 Januar 2023 #18
Hallo,

Bei der Fehlermeldung stand sicherlich auch eine Zeilennummer dabei.
Von dort hätte ich gerne einen (großzügigen) Ausschnitt, um weiterhelfen zu können.
Rainer schrieb am Sonntag, den 12 März 2023 #19
Hallo,
möchte gern in diese Anmeldeformular ein Captcha einbauen. Das ist mir auch soweit schon gelungen, nur mit der Abfrage klappt es noch nicht. Es wird immer ohne Prüfung gesendet.
Diese Code-Teile müssten da mit eingebaut werden, was mir aber leider nicht geling:
if ($_POST['captcha_code'] == $_SESSION['captcha_spam']) {
// Das Captcha wurde korrekt ausgefüllt //
} else {
// Captcha wurde falsch ausgefüllt, Fehler ausgeben. //
echo 'Du hast den Captcha-Code falsch eingegeben!';
}
Würde mich über eine Lösung recht herzlich bedanken.

Mit freundlichen Grüßen
Rainer
Werner schrieb am Montag, den 13 März 2023 #20
Hallo Rainer,
Anstatt des Captcha (Captchas nerven😉),
habe ich eine Rechenaufgabe im Registrierungsformular hinzugefügt.
Diesen Beitrag vollständig anzeigen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
<?php
/*
 * Registrierung - Anmeldescript mit Bestätigungslink
 * werner-zenk.de
 */


include "konfig.php";

// Variablen setzen
$ausgabe '';
$benutzerName $_POST["name"] ?? "";
$benutzerEmail $_POST["email"] ?? "";
$benutzerPass $_POST["passwort"] ?? "";
$korrektur "";

  
// Sicherheitsabfrage
  
$Z0 = [mt_rand(19), mt_rand(19)];
  
$Z1 max($Z0);
  
$Z2 min($Z0);
  
$Spam $Z1 " &#43; &#" . (48 $Z2) . ";";
  
$Schutz md5($Z1 $Z2);

$benutzereingabe = [
  
"name" => "",
  
"email" => "",
  
"passwort" => "",
  
"spam" => "",
];

if (
$_SERVER["REQUEST_METHOD"] == "POST") {

  
// Benutzername überprüfen ob dieser bereits vorhanden ist
  
$select $db->prepare("SELECT `name`, `email`
                                       FROM `" $TBL_NAME "`
                                       WHERE `name` = :name
                                       OR `email` = :email");
  
$select->execute([
    
':name' => $benutzerName,
    
':email' => $benutzerEmail
  
]);
  
$benutzer $select->fetch();

  
// Benutzereingaben (Pflichtfelder) überprüfen
  
$benutzereingabe["name"] = (strlen($benutzerName) < 5) ? '<br>Der Name ist zu kurz!' '';
  
$benutzereingabe["name"] = ($select->rowCount() > 0) ? '<br>Der Name ist bereits vorhanden!' $benutzereingabe["name"];

  
$benutzereingabe["email"] = (!filter_var($_POST["email"], FILTER_VALIDATE_EMAIL))  ? '<br>Die E-Mail-Adresse ist fehlerhaft!' '';
  
$benutzereingabe["email"] = ($select->rowCount() > 0) ? '<br>Die E-Mail-Adresse ist bereits vorhanden!' $benutzereingabe["email"];

  
$benutzereingabe["passwort"] = (strlen($benutzerPass) < 8) ? '<br>Das Passwort ist zu kurz!' '';

  
// Spamschutz überprüfen
  
$benutzereingabe["spam"] = (md5($_POST["zip"]) != $_POST["zip2"])  ? '<br>Die Sicherheitsabfrage ist leider falsch!' '';


  if (!empty(
implode(""$benutzereingabe))) {
    
$korrektur '<h3 class="markierung">&#10008; Bitte korrigieren Sie Ihre Eingaben!</h3>';
  }
}

// Formular erstellen
$formular $korrektur '
<form action="register.php" method="post" accept-charset="UTF-8">

<p><label>Name: 
<span class="markierung">&#10034; ' $benutzereingabe["name"] . '</span> <br>
<input type="text" name="name" value="' $benutzerName '" size="35" required="required"></label>
</p>

<p><label>E-Mail: 
<span class="markierung">&#10034; ' $benutzereingabe["email"] . '</span> <br>
<input type="email" name="email" value="' $benutzerEmail '" size="35" required="required"></label>
</p>

<p><label>Passwort: 
<span class="markierung">&#10034; ' $benutzereingabe["passwort"] . '</span> <br>
<input type="password" name="passwort" value="' $benutzerPass '" size="35" minlength="8" required="required" placeholder="Mind. 8 Zeichen"></label>
</p>

<p>
  <label><u>S</u>icherheitsabfrage:
  <span class="markierung">&#10034; ' $benutzereingabe["spam"] . '</span> <br>
  <em>' $Spam '</em> &#61; 
  <input type="text" name="zip" id="zip" size="5" autocomplete="off" required="required" placeholder="?" accesskey="s">
  <input type="hidden" name="zip2" value="' $Schutz '">
  </label><br>
  <span class="hilfetext"> Lösen Sie die Rechenaufgabe. </span>
 </p>

<p>
 <button type="submit">Registrieren</button>
</p>
</form>
';

if (
$_SERVER["REQUEST_METHOD"] == "POST") {

  if (empty(
implode(""$benutzereingabe))) {
    
// Zeitstempel erzeugen
    
$zeitstempel time();

    
// Einen Passwort-Hash erstellen
    
$passwort password_hash($_POST["passwort"], PASSWORD_DEFAULT);

    
// Benutzer in die DB eintragen
    
$insert $db->prepare("INSERT INTO `" $TBL_NAME "`
  SET
    `name`      = :name,
    `email`      = :email,
    `register`   = :register,
    `passwort`     = :passwort,
    `datum`     = NOW()");
    if (
$insert->execute([
      
":name" => $benutzerName,
      
":email" => $benutzerEmail,
      
":register" => $zeitstempel,
      
":passwort" => $passwort
    
])) {

      
// Nachricht an den Benutzer (Platzhalter ersetzen)
      
$NACHRICHT strtr(
        
$NACHRICHT,
        [
          
"{:HOMEPAGE:}" => $HOMEPAGE_NAME,
          
"{:DATUM:}" => date("d.m.Y \u\m H:i"$zeitstempel) . " Uhr",
          
"{:REGISTER:}" => $PFAD "/register_ok.php?uid=" $zeitstempel,
          
"{:FREISCHALTTAGE:}" => $FREISCHALTTAGE
        
]
      );

      
// E-Mail an den Benutzer versenden
      // Besser wäre es, hier den PHPMailer zu verwenden!
      
mb_internal_encoding("UTF-8");
      
$BETREFF mb_encode_mimeheader($BETREFF"UTF-8""Q");
      
$KOPFZEILE "MIME-Version: 1.0;\nFrom: " mb_encode_mimeheader($EMAILNAME"UTF-8""Q") .
        
"<" $EMAIL ">" "\nContent-Type: text/plain; Charset=UTF-8;\n";

      if (
mail($benutzerEmail$BETREFF$NACHRICHT$KOPFZEILE)) {

        
// Nachricht ausgeben
        
$ausgabe '<h2>Vielen Dank für die Registrierung!</h2>
      <p>
       &#10004; Wir haben eine E-Mail gesendet an: ' htmlspecialchars($benutzerEmail) . '. <br>
       Bitte klicken Sie auf den Link in der E-Mail, um Ihr Konto zu bestätigen.
      </p>
      <p>
       Bestätigen Sie innerhalb von <strong>' $FREISCHALTTAGE ' Tagen</strong> <br>
       dann ist die Registrierung abgeschlossen.
      </p>
      <p>
       Wenn Sie die E-Mail innerhalb von 24 Stunden noch immer nicht erhalten haben,<br>
       stellen Sie bitte sicher, dass Sie Ihren Junk-E-Mail-Ordner überprüft haben.
      </p>';

        
// E-Mail an den Administrator versenden
        
mb_internal_encoding("UTF-8");
        
$BETREFF_ADMIN mb_encode_mimeheader($BETREFF_ADMIN"UTF-8""Q");
        
$KOPFZEILE "MIME-Version: 1.0;\nFrom: " mb_encode_mimeheader($benutzerName"UTF-8""Q") .
          
"<" $benutzerEmail ">" "\nContent-Type: text/plain; Charset=UTF-8;\n";
        
mail($EMAIL$BETREFF_ADMIN$NACHRICHT_ADMIN$KOPFZEILE);
      }
    }
  } else {

    
// Eingabefehler und Formular anzeigen
    
$ausgabe $formular;
  }
} else {

  
// Formular anzeigen
  
$ausgabe $formular;
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width,initial-scale=1">
  <title>Registrierung</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>

  <article>
    <h1>Registrierung</h1>

    <?= $ausgabe?>

    <p>
     <a href="index.php">Zur Startseite</a>
    </p>
  </article>

</body>
</html>

Einen "fertigen" Webseitenschutz mit Registrierung findest du im Archiv unter:
MySQL-Webseitenschutz