funktionalität "email vergessen"
lima-city → Forum → Sonstiges → Spam und sonstiges Unvergütetes
aufgetreten versuchen
ausgabe
code
datei
datenbank
datensatz
email
erfolg
erneuerung
fehler
feld
funktion
holen
http
minute
paar
tabelle
unerwarteter fehler
url
verschicken
-
vorbereitung:
1. lege eine tabelle an um dir die verifizierungscodes merken zu können, zum beispiel mit diesen spalten:
[id] [userid] [verifizierungscode] [anfragezeit]
2. erstelle eine datei z.b. verifiziere.php die einen code als get-parameter erwartet.
wenn der besucher auf "passwort vergessen klickt":
1. einen genügend langen zufallscode generieren.
2. in die merk-tabelle einen datensatz mit userid, zufallscode und timestamp einfügen.
3. zugehörige emailadresse des nicknames aus der user-tabelle holen.
4. an diese emailadresse einen hinweistext und einen link der den zufallscode enthält schicken.
z.B.: http://tshaika.lima-city.de/verifiziere.php?code=ouj4t74gf35fgnb3q984nfgqjzehrth89jq3
wenn der besucher auf den link in der email klickt
1. die verifiziere.php nachschauen lassen ob es diesen code in deiner merktabelle gibt und ob das datum nicht zu alt ist.
2. wenn erfolgreich ein neues passwort generieren und für den user mit der userid aus der merktabelle eintragen.
3. die gerade nachgeschaute zeile aus der merk-tabelle löschen.
4. das gerade erstellte neue passwort wieder an die emailadresse schicken.
ich habe bein text nicht verstanden kannst du bisthen vereinfachen
hmm - ich glaube noch einfacher krieg ich das nicht hin...
...vielleicht schritt für schritt ?
lege in deiner datenbank als erstes eine weitere tabelle an, mit 4 spalten:
"id" als INT mit auto-increment
"userid" als INT
"verifizierungscode" als VARCHAR 32
"anfragezeit" als INT -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
doch neu tabelle
OK hab ich wie soll tabelle heißen ?
Passwort
Beitrag zuletzt geändert: 5.2.2013 11:51:21 von tshaika -
wie wärs mit: "verifizierungstokens"
-
hcms schrieb:
wie wärs mit: "verifizierungstokens"
OK verifizierungstokens
weiter Jetz PHP ?
neu seite verifiziere.php ?
Beitrag zuletzt geändert: 5.2.2013 12:27:20 von tshaika -
genau
die sollte in etwa so aussehen:
<?php if(isset($_GET['verifizierungscode'])) { // codelaufzeit festlegen $iCodelaufzeit = 60*60*24*2; // vorhandensein des codes überprüfen $cSql = 'SELECT userid, anfragezeit FROM verifizierungscodes WHERE verifizierungscode="'.mysql_real_escape_string($_GET['verifizierungscode']).'"'; $rSql = mysql_query($cSql) or die(mysql_error()); if(mysql_num_rows($rSql)==1) { $aSql = mysql_fetch_array($rSql, MYSQL_ASSOC); // alter des codes überprüfen if((int)$aSql['anfragezeit']+$iCodelaufzeit>=time()) { // user merken $iUserid = $aSql['userid']; // diesen code löschen $cSql = 'DELETE FROM verifizierungscodes WHERE verifizierungscode="'.mysql_real_escape_string($_GET['verifizierungscode']).'"'; mysql_query($cSql) or die(mysql_error()); // username und email holen $cSql = 'SELECT nickname, email FROM users WHERE userid="'.$iUserid.'"'; $rSql = mysql_query($cSql) or die(mysql_error()); $aSql = mysql_fetch_array($rSql, MYSQL_ASSOC); $cUsername = $aSql['nickname']; $cUseremail = $aSql['email']; // neues passwort generieren $cZeichen = '123456789abcdefghjkmnpqrstuvwxyz_-?!'; $cPasswort = substr(str_shuffle($cZeichen),0,8); $cPasswort = str_shuffle($cPasswort); // neues passwort eintragen $cSql = 'UPDATE users SET passwort="'.$cPasswort.'" WHERE id="'.$iUserid.'"'; mysql_query($cSql) or die(mysql_error()); // email verschicken $cNachricht = 'Hallo '.$cUsername.', Sie können sich nun mit Ihrem neuen Passwort einloggen: '.$cPasswort; $cBetreff = 'Passwort erneuerung'; $cEmpfaenger = $cUseremail; if(mail($cEmpfaenger, $cBetreff, $cNachricht)) { // erfolg ausgabe echo '<p>Es wurde Ihnen soeben ein neues Passwort erstellt und an Ihre emailadresse geschickt.</p>'; }else { // fehler ausgabe echo '<p>Ein unerwarteter Fehler ist aufgetreten. Versuchen Sie es in ein paar Minuten erneut.</p>'; } }else { // fehler ausgabe echo '<p>Dieser Verifizierungscode ist abgelaufen. Versuchen Sie es erneut.</p>'; } }else { // fehler ausgabe echo '<p>Ein unerwarteter Fehler ist aufgetreten. Versuchen Sie es erneut.</p>'; } }else { // fehler ausgabe echo '<p>Ein unerwarteter Fehler ist aufgetreten. Versuchen Sie es erneut.</p>'; } ?>
p.s. hab den code nicht getestet... du musst natürlich wie sonst auch vorher die verbindung zu deiner datenbank herstellen und eventuell die feldnamen der sql-statement anpassen -
hcms schrieb:
genau
die sollte in etwa so aussehen:
<?php if(isset($_GET['verifizierungscode'])) { // codelaufzeit festlegen $iCodelaufzeit = 60*60*24*2; // vorhandensein des codes überprüfen $cSql = 'SELECT userid, anfragezeit FROM verifizierungscodes WHERE verifizierungscode="'.mysql_real_escape_string($_GET['verifizierungscode']).'"'; $rSql = mysql_query($cSql) or die(mysql_error()); if(mysql_num_rows($rSql)==1) { $aSql = mysql_fetch_array($rSql, MYSQL_ASSOC); // alter des codes überprüfen if((int)$aSql['anfragezeit']+$iCodelaufzeit>=time()) { // user merken $iUserid = $aSql['userid']; // diesen code löschen $cSql = 'DELETE FROM verifizierungscodes WHERE verifizierungscode="'.mysql_real_escape_string($_GET['verifizierungscode']).'"'; mysql_query($cSql) or die(mysql_error()); // username und email holen $cSql = 'SELECT nickname, email FROM users WHERE userid="'.$iUserid.'"'; $rSql = mysql_query($cSql) or die(mysql_error()); $aSql = mysql_fetch_array($rSql, MYSQL_ASSOC); $cUsername = $aSql['nickname']; $cUseremail = $aSql['email']; // neues passwort generieren $cZeichen = '123456789abcdefghjkmnpqrstuvwxyz_-?!'; $cPasswort = substr(str_shuffle($cZeichen),0,8); $cPasswort = str_shuffle($cPasswort); // neues passwort eintragen $cSql = 'UPDATE users SET passwort="'.$cPasswort.'" WHERE id="'.$iUserid.'"'; mysql_query($cSql) or die(mysql_error()); // email verschicken $cNachricht = 'Hallo '.$cUsername.', Sie können sich nun mit Ihrem neuen Passwort einloggen: '.$cPasswort; $cBetreff = 'Passwort erneuerung'; $cEmpfaenger = $cUseremail; if(mail($cEmpfaenger, $cBetreff, $cNachricht)) { // erfolg ausgabe echo '<p>Es wurde Ihnen soeben ein neues Passwort erstellt und an Ihre emailadresse geschickt.</p>'; }else { // fehler ausgabe echo '<p>Ein unerwarteter Fehler ist aufgetreten. Versuchen Sie es in ein paar Minuten erneut.</p>'; } }else { // fehler ausgabe echo '<p>Dieser Verifizierungscode ist abgelaufen. Versuchen Sie es erneut.</p>'; } }else { // fehler ausgabe echo '<p>Ein unerwarteter Fehler ist aufgetreten. Versuchen Sie es erneut.</p>'; } }else { // fehler ausgabe echo '<p>Ein unerwarteter Fehler ist aufgetreten. Versuchen Sie es erneut.</p>'; } ?>
p.s. hab den code nicht getestet... du musst natürlich wie sonst auch vorher die verbindung zu deiner datenbank herstellen und eventuell die feldnamen der sql-statement anpassen
Ok hab ich
fehler
Ein unerwarteter Fehler ist aufgetreten. Versuchen Sie es erneut.
kann sein das ist bei Login.php und regeistrieren
groß geschriebe ID Login un so weiter
Beitrag zuletzt geändert: 5.2.2013 13:28:48 von tshaika -
ja, die feldnamen in deinen tabellen und in den mysql-statements müssen genau übereinstimmen... ändere die in verifizieren.php überall entsprechend um.
das eine fehlermeldung angezeigt wird ist soweit richtig, da dieses script ja einen übergebenen code erwartet der als datensatz in der tabelle sein muss...
also füge in die verifizierungscodes-tabelle einen datensatz zum testen ein, mit einer existierenden userid aus der user-tabelle und einem ausgedachten verifizierungscode (z.b.: "11111111111111111111111111111111") und einem timestamp als anfragezeit (z.b.: "1360068146").
dann rufe die datei verifiziere.php mit dem eben ausgedachten code als get-parameter auf, also z.b. so:
tshaika.lima-city.de/verifiziere.php?verifizierungscode=11111111111111111111111111111111
p.s.: ich hab grade gesehen das die tabelle doch verifizierungscodes heißen sollte und nicht verifizierungstokens
Beitrag zuletzt geändert: 5.2.2013 13:48:20 von hcms -
wie soll ich das machen
also füge in die verifizierungscodes-tabelle einen datensatz zum testen ein, mit einer existierenden userid aus der user-tabelle und einem ausgedachten verifizierungscode (z.b.: "11111111111111111111111111111111") und einem timestamp als anfragezeit (z.b.: "1360068146"). -
naja du benutz ja wahrscheinlich phpmyadmin oder ?
sonst findest du das auch hier:
http://mysql.lima-city.de/
http://www.lima-city.de/databases
wähle dort die datenbank aus.
wähle die tabelle aus.
klicke auf "Einfügen" und gib in die felder die besagten werte ein. das autoincrement-feld (id) bleibt dabei natürlich leer.
-
meinst du so
Spalte wert
id
userid 10 (id aus tabelle User)
verifizierungscode 11111111111111111111111111111111
anfragezeit 1360068146
und dann auf die seite
tshaika.lima-city.de/verifiziere.php?verifizierungscode=11111111111111111111111111111111
don kommt
Table 'db_268449_1.users' doesn't exist
Beitrag zuletzt geändert: 5.2.2013 14:52:16 von tshaika -
jaaaa
jetztr musst du in verifiziere.php noch das sql-statement wo "SELECT nickname, email FROM users ..." steht umändern, in "SELECT nickname, email FROM User ..." oder wie deine tabelle halt heisst - und ändere auch die feldnamen (nickname, email) dort falls die anders in der deiner User-tabelle sind
Beitrag zuletzt geändert: 5.2.2013 15:05:13 von hcms -
ja, wenn deine tabelle in der die userdaten stehen "User" heißt, und es dort die Spalten "nickname" und "email" gibt, ja...
-
Ja (meinst du regestrienung daten)
nur Nickname und Email
Jetz schreibt er
id userid verifizierungscode anfragezeit
Ein unerwarteter Fehler ist aufgetreten. Versuchen Sie es erneut.
Beitrag zuletzt geändert: 5.2.2013 15:18:47 von tshaika -
grrr...
post deine verifiziere.php am besten nochmal als .txt und sag mir wie die felder in deiner User-Tabelle heißen -
OK
User
ID Autologin IP SessionID Nickname Email Show_Email Passwort Registrierungsdatum Geburtsdatum Avatar Letzter_Login Letzte_Aktion
php verifiziere.php
http://tshaika.lima-city.de/new.txt
verifizierungscodes
id userid verifizierungscode anfragezeit
Beitrag zuletzt geändert: 5.2.2013 16:23:38 von tshaika -
ok, hab die feldnamen in den sql-statements angepasst:
http://hcms.lima-city.de/verifiziere.php.txt -
OK hab immer noch
Ein unerwarteter Fehler ist aufgetreten. Versuchen Sie es erneut.
wenn ich dann
tshaika schrieb:
meinst du so
Spalte wert
id
userid 10 (id aus tabelle User)
verifizierungscode 11111111111111111111111111111111
anfragezeit 1360068146
und dann auf die seite
tshaika.lima-city.de/verifiziere.php?verifizierungscode=11111111111111111111111111111111
don kommt
Table 'db_268449_1.users' doesn't exist
des mache dann macht
Es wurde Ihnen soeben ein neues Passwort erstellt und an Ihre emailadresse geschickt.
Beitrag zuletzt geändert: 5.2.2013 16:45:19 von tshaika -
ja perfekt - so soll ja auch sein...
-
und Jetzt
muß mal eingabe feld (email)
Beitrag zuletzt geändert: 5.2.2013 16:58:54 von tshaika -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage