kostenloser Webspace werbefrei: lima-city


funktionalität "email vergessen"

lima-cityForumSonstigesSpam und sonstiges Unvergütetes

  1. Autor dieses Themas

    h**s

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. doch neu tabelle

    OK hab ich wie soll tabelle heißen ?

    Passwort


    Beitrag zuletzt geändert: 5.2.2013 11:51:21 von tshaika
  4. Autor dieses Themas

    h**s

    wie wärs mit: "verifizierungstokens"
  5. 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
  6. Autor dieses Themas

    h**s

    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
  7. 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
  8. Autor dieses Themas

    h**s

    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
  9. 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").
  10. Autor dieses Themas

    h**s

    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.
  11. 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
  12. Autor dieses Themas

    h**s

    jaaaa :prost:

    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
  13. so?

    $cSql = 'SELECT nickname, email FROM User WHERE userid="'.$iUserid.'"'
  14. Autor dieses Themas

    h**s

    ja, wenn deine tabelle in der die userdaten stehen "User" heißt, und es dort die Spalten "nickname" und "email" gibt, ja...
  15. 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
  16. Autor dieses Themas

    h**s

    grrr...

    post deine verifiziere.php am besten nochmal als .txt und sag mir wie die felder in deiner User-Tabelle heißen
  17. 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
  18. Autor dieses Themas

    h**s

    ok, hab die feldnamen in den sql-statements angepasst:
    http://hcms.lima-city.de/verifiziere.php.txt
  19. 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
  20. Autor dieses Themas

    h**s

    ja perfekt - so soll ja auch sein... :thumb:
  21. und Jetzt :confused:


    muß mal eingabe feld (email)

    Beitrag zuletzt geändert: 5.2.2013 16:58:54 von tshaika
  22. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!