Per E-Mail freischalten

Memfis

Erfahrenes Mitglied
Morgen Tutorial.de ;-)

Wie schreibe ich ein Script, das nach einer Registrierung eine E-Mail mit Freischaltlink versendet? E-Mail senden habe ich hinbekommen, aber ich habe keinerlei Ahnung, wie ich einen Freischaltlink einbauen kann. Hilfe?
 
Fehlt es dir an der Logik, also wie das ganze funktioniert/funktionieren soll,
oder hast du schon konkrete Vorstellungen, die du nur nicht umsetzen kannst?
 
Üblicherweise macht man das so:

Bei der Anmeldung wird ein eindeutiger Code erzeugt. Das kannst du zum Beispiel mit der PHP-Funktion md5() machen. Beispielsweise indem du den aktuellen timestamp benutzt:

PHP:
$code = md5(time());

Diesen code speicherst du dann mit der Anmeldung in der Datenbank.

Nun schickst du die E-Mail mit den passenden Link:
http://www.example.com/aktivieren.php?code=c8fecc4382d1fefd25bdb0a75b918d31

Die lange Zeichenkette hinter "code=" ist der von dir erzeugte md5-Code. Wenn der User nun diesen Link anklickt, kannst du den Code mit der Variablen $_GET['code'] auslesen und mit dem gespeicherten Code in der Datenbank vergleichen.

Also eigentlich ganz einfach, oder?

Gruß Marian
 
Ich denke es fehlt ein Stück weit von beidem :-(

Funktionieren soll das ganze wie folgt (nach meiner Vorstellung), dass ich beim Registrieren ein verstecktes Feld im Formular mache, dass "gesperrt" heißt. In der DB befindet sich ebenfalls eine solche Spalte. Beim Eintragen des Benutzers wird eine 1 in die entsprechende Spalte geschrieben, also gesperrt. Jetzt muss der Spieler diese 1 in eine 0 umändern, damit er nicht mehr gesperrt ist. Bleibt die Frage, wie man das ganze absichert, dass man sich nicht durch URL-Manipulation oder ähnlichem selber freischalten kann, ohne eine korrekte E-Mail angegeben zu haben oder ein Spaßvogel einen bereits freigeschalteten Spieler wieder sperrt. Daher behaupte ich, dass ich eine Teilvorstellung davon habe, wie es funktionieren soll, aber keine Idee, wie ich einen Schutz vor Manipulationen einbaue. Abgesehen davon, dass ich weis wie ich die Mail verschicken kann, habe ich keine Ahnung, wie ich den entsprechenden Freischaltlink einbauen kann.

Edit: @heddesheimer: Vom Verständnis her einfach. Von der Codeierung her hab ich es nicht verstanden, also wie der Code aussehen soll.
 
Zuletzt bearbeitet:
Memfis hat gesagt.:
dass ich beim Registrieren ein verstecktes Feld im Formular mache, dass "gesperrt" heißt.

Warum ein verstecktes Feld? Das lässt sich leicht manipulieren. Setze doch einfach automatisch den neu registrierten Benutzer auf "gesperrt". Ansonsten ist der Ansatz soweit gut und korrekt. Als Datentyp für das Feld in der Datenbank würde sich hier ein ENUM anbieten.

Edit: @heddesheimer: Vom Verständnis her einfach. Von der Codeierung her hab ich es nicht verstanden, also wie der Code aussehen soll.

Dann wäre es an der Zeit, mal in die Grundlagen von PHP und MySQL hineinzuschauen ;)

Sorry, aber ohne ein gewisses Grundlagenwissen solltest du solche großen Projekte wie Benutzer-Registrierung noch nicht anfangen. Besser: Erst mal mit einem einfachen Gästebuch oder Counter-Skript starten.

Gruß Marian
 
Das wurde missverstanden. Grundkenntnisse habe ich. Das mit dem Link habe ich auch hinbekommen und auch der entsprechende Bereich im Script geht auf. (Manchmal mache ich mir die Dinge auch komplizierter als sie sind) Mein Problem ist jetzt aber diese Zeichenkette einem bestimmten Benutzer zuzuorden; dass ich der Punkt an dem ich hänge. Außerdem frage ich mich was passiert, wenn sich mal zwei oder mehr Personen zur exakt der gleichen Zeit anmelden (also rein theoretisch)

Soe sieht mein Maillink aus:
PHP:
.. DB auslesen ...
mail($mailaddy, "Betreff", "Du hast dich soebenen registriert. Um die Registrierung zu vervollständigen klicke noch folgenden Link an: http://www.blubber.de?frei=$regdata[6] .", "From:Blubber <mailer@blubber>");

Den entsprechenden Bereich im Script rufe ich dann so auf:
PHP:
if($frei){}
 
Memfis hat gesagt.:
diese Zeichenkette einem bestimmten Benutzer zuzuorden
Für den einfachsten Fall erstellst du deine Zeichenkette, speicherst sie in der Datenbank unter dem User ab und schickst diesen String an dem Link, den er klicken soll mit.
PHP:
<?php
    $derString = md5(microtime());
    mysql_query('UPDATE user_tabelle SET 
                    pruefstring="'.$derString.'" 
                    WHERE 
                    user_id='.$user_id.'
                    ;');

    $mailtext = '
             Hallo, hier dein Link:
             http://www.deineurl.de/deinedatei.php?pruefstring='.$derString;
// mail() usw.
Die Auslese machst du dann mit dem String.
PHP:
<?php
// Auf Manipulation ueberpruefen
    $getString = htmlentities($_GET['pruefstring']);
    $query = mysql_query('SELECT uid FROM 
                    usertabelle 
                    WHERE 
                    prufstring="'.mysql_real_escape_string($getString).'"
                    ;');
    $rows = mysql_num_rows($query);

// Zugriff erlaubt oder nicht
    if($rows != 1) {
        echo('Kein User gefunden');
    } else {
        // Alles ok
        doit();
    }
?>
 
Zuletzt bearbeitet:
Zurück