Registrierung mit Aktivierungs-Mail

Zuletzt aktualisiert: Dienstag, 03. Januar 2017 Geschrieben von Jan Pionzewski

Um im einem Forum, einen Blog oder auf einer Webseite automatische Anmeldungen von so genannten "Spam-Bots" zu unterbinden, benutzen viele Seitenbetreiber die altbekannten Aktivierungs-Mails. Eine Aktivierungs-Mail wird bei der Registration eines Benutzers automatisch an die von ihm angegebene E-Mail-Adresse versandt. Der Benutzer, der sich auf der Seite anmelden möchte, muss nun nur noch seine E-Mails abrufen und in dieser Mail den Registrierungs-Link anklicken - schon wird er freigeschaltet.

An dieser Stelle möchte ich dir ein PHP-Script vorstellen, mit dem du unter Zuhilfenahme einer MySQL-Datenbank ein solches System selbst erstellen kannst.

 

Datenbank-Struktur erstellen

Zuerst einmal muss eine entsprechende Datenbank-Struktur erstellt werden. Diese legt man wie folgt an:

 

Code-Beispiel:

CREATE TABLE `Aktivierung` (
`ID` int(11) NOT NULL auto_increment,
`Aktivierungscode` varchar(10) NOT NULL default '',
`Erstellt` datetime NOT NULL default '0000-00-00 00:00:00',
`EMail` varchar(255) NOT NULL default '',
`Aktiviert` enum('Ja','Nein') NOT NULL default 'Ja',
PRIMARY KEY (`ID`)
) TYPE=MyISAM;

 

Registrierungs-Seite anlegen

Danach wird folgendes PHP-Script in die Seite aufgenommen, über die der Besucher deiner Webseite sich registrieren soll.

 

Code-Beispiel:

<?php

$DatabaseHost = "localhost";
$DatabaseUser = "user";
$DatabasePassword = "password";
$Database = "mydatabase";
$TableAktivierung = "Aktivierung";

$Absender = "name@ihre-domain.de";

if($_REQUEST['Send'])
{
    $DatabasePointer = mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword);
    mysql_select_db($Database, $DatabasePointer);

    $_REQUEST['Email'] = mysql_real_escape_string($_REQUEST['Email']);

    $Erstellt = date("Y-m-d H:i:s");
    $Aktivierungscode = rand(1, 99999999);

    mysql_query("INSERT INTO $TableAktivierung (Aktivierungscode, Erstellt, EMail, Aktiviert) VALUES ('$Aktivierungscode', '$Erstellt', '".$_REQUEST['EMail']."', 'Nein')", $DatabasePointer);

    $ID = mysql_insert_id();

    mail($_REQUEST['EMail'], "Registrierung abschließen", "Hallo,\n\num die Registrierung abzuschließen, klicken Sie bitte auf den folgenden Link:\n\nhttp://www.ihre-domain.de/reg-aktivieren.php?ID=$ID&Aktivierungscode=$Aktivierungscode", "FROM: $Absender");
    echo"Um die Registrierung abzuschließen, rufen Sie Ihr E-Mail-Postfach ab und klicken Sie auf den Aktivierungslink in der soeben an Sie versandten E-Mail.";
}
else
{
?>

<form action="" method="post">
eMail: <input maxlength="255" name="EMail" type="text"><br>
<input name="Send" type="submit" value="Absenden">
</form>

<?php
}
?>

 

Aktivierungs-Seite anlegen

Jetzt müssen nur noch die Seite erstellt werden, die beim Aufruf des Aktivierungs-Links den Benutzer in der Datenbank aktiviert. Füge dazu folgenden PHP-Code in diese Seite ein:

 

Code-Beispiel:

<?php

$DatabaseHost = "localhost";
$DatabaseUser = "user";
$DatabasePassword = "password";
$Database = "mydatabase";
$TableAktivierung = "Aktivierung";

if($_REQUEST['ID'] && $_REQUEST['Aktivierungscode'])
{
    $DatabasePointer = mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword);
    mysql_select_db($Database, $DatabasePointer);

    $_REQUEST['ID']               = mysql_real_escape_string($_REQUEST['ID']);
    $_REQUEST['Aktivierungscode'] = mysql_real_escape_string($_REQUEST['Aktivierungscode']);

    $ResultPointer = mysql_query("SELECT ID FROM $TableAktivierung WHERE ID = '".$_REQUEST['ID']."' AND Aktivierungscode = '".$_REQUEST['Aktivierungscode']."'", $DatabasePointer);

    if(mysql_num_rows($ResultPointer) > 0)
    {
        @mysql_query("UPDATE $TableAktivierung SET Aktiviert = 'Ja' WHERE ID = '".$_REQUEST['ID']."'", $DatabasePointer);
        echo"Vielen Dank für Ihre Registrierung. Der Aktivierungsprozess ist nun abgeschlossen.";
    }
}

?>

 

Hinweise

  • In beiden PHP-Schnipseln müssen die Einstellungen deiner Datenbank entsprechend abgeändert werden
  • Die Textausgaben des Scripts kannst du selbstverständlich nach eigenen Vorgaben gestalten
  • Der Seitenname der Aktivierungs-Seite muss nach strikter Befolgung des Beispiels reg-aktivieren.php heißen.

 

 

Kommentare  
Rexozz 2016-08-02 21:21
Was muss denn rechtlich in so einer Mail drin stehen?
Antworten | Antworten mit Zitat | Zitieren
Erweitern 2015-12-07 15:43
Wie kann ich in dem Script ein Passwort einfügen und überprüfen ob die eingegebene E-Mail schon gibt?

lG
Antworten | Antworten mit Zitat | Zitieren
Gert 2015-11-23 12:50
Danke erstmal für Alles, aber das mit der Datenbank geht nicht.
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'TYPE=MyISAM' at line 8
diese Meldung wird angezeigt, kann nichts damit anfangen.
bitte um Info
Danke Gert
Antworten | Antworten mit Zitat | Zitieren
nkn 2015-11-29 13:23
einfach das Type=MyISAM löschen da dein Server diese Storage Engine nicht mehr unterstützt
Antworten | Antworten mit Zitat | Zitieren
Gast 2016-12-13 01:35
Ersetze "TYPE=MyISAM" durch "ENGINE=MyISAM"
Antworten | Antworten mit Zitat | Zitieren
Bernd 2015-05-07 20:10
Vielen Dank für das kleine Tutorial! Beim Anlegen der Datenbank ist Aktiviert default Ja. Erwarten würde ich eigentlich Nein, da der Wert Ja erst bei der Aktivierungs-Se ite gesetzt wird, oder?
Antworten | Antworten mit Zitat | Zitieren
Christian 2014-08-10 02:24
Danke auch!!!
Antworten | Antworten mit Zitat | Zitieren
JoniX 2013-05-26 01:00
Vielen dank, funtkioniert einwandfrei! :-)
Antworten | Antworten mit Zitat | Zitieren
Kommentar schreiben