Erstellen einer Newsletter-Anmeldung mit einem “Double-Opt-In” und einer Abmeldung mit einem “Double-Opt-Out”. Eine Kombination aus dem Typo3-PlugIn “PositionIT” und selbstgeschriebenen PHP Dateien.
HINWEIS: Das Plugin “PositionIT” kann nur EINMAL auf einer Seite eingebunden werden, da sonst ein Typo3 Fehler entsteht. Dies ist auch der Grund, warum in diesem Fall eine Kombination genutzt wurde.
+++++ DOUBLE-OPT-IN +++++
1.) Wir verweisen aus “PositionIT” auf die PHP Datei - “Newsletter”.
Diese enthält folgendes Script:
- newsletter.php
<?php class newsletter{ /* Hier wird das individuelle Passwort generiert! */ public function pw_gen () { $len = 32; $password = ''; for($i=0; $i<$len; $i++) { $password .= chr(rand(0, 25) + ord('a')); } return $password; } public function writeuserdb($processId, $cur_stepid, $sessiondata, $mailparams) { /* IP-ADRESSE wird ausgelesen */ $ip = getenv ("REMOTE_ADDR"); /* Passwort wird eingeladen */ $password = $this->pw_gen(); /* TIMESTAMP-Anmeldung wird gesetzt */ $timestamp = time(); /* Da wir in der E-Mail einen Link inkl. unseren Passwort mitschicken wollen, müssen wir die Standard-Einstellung von PositionIT verändern */ $bodyText = $mailparams['body']; /* replace the IP marker */ $bodyText = preg_replace('/###IP###/', $_SERVER['REMOTE_ADDR'], $bodyText); // replace the Date marker $currentDate = date('j.F Y'); $bodyText = preg_replace('/###DATE###/', $currentDate, $bodyText); // set the new body text $mailparams['body'] = $bodyText."<a href='http://www.rheinisches-revier.de/fileadmin/php/bestaetigung.php?pw=".$password."'>Zur Newsletteranmeldung bitte hier klicken!</a>"; // use the replaceMailParams command $command = array(); $command['mail']['replaceMailParams'] = $mailparams; //$password = $this->pw_gen(); /* Will man sich das Array ausgeben lassen um die Struktur zu erkennen ist dies folgendermaßen möglich: echo "<pre>"; print_r($sessiondata); echo "</pre>"; */ /* Hier werden die Daten in ein Array geschrieben. INFO: Die Bezeichnung der Felder in PositionIT werden durch "$sessiondata["Erstes Array"]["Zweites Array"]["Feldname, bzw. Inhalt"]" angesprochen. */ $sql_data = array(); $sql_data['firma'] = $sessiondata[1][1][6]; $sql_data['branche'] = $sessiondata[1][1][15]; $sql_data['anrede'] = $sessiondata[1][1][Anrede]; $sql_data['titel'] = $sessiondata[1][1][21]; $sql_data['nachname'] = $sessiondata[1][1][45]; $sql_data['vorname'] = $sessiondata[1][1][44]; $sql_data['strasse'] = $sessiondata[1][1][49]; $sql_data['plz'] = $sessiondata[1][1][50]; $sql_data['ort'] = $sessiondata[1][1][51]; $sql_data['email'] = $sessiondata[1][1][46]; $sql_data['abonniert'] = 0; $sql_data['ip'] = $ip; $sql_data['time_formular_abgeschickt'] = $timestamp; $sql_data['hashcode'] = $password; /* Hier werden die Daten in die Typo3 Datenbank geschrieben, in die Tabelle "fe_users_newsletter", die händisch angelegt wurde und nicht Teil der standard Datenbank ist. */ $GLOBALS['TYPO3_DB']->exec_INSERTquery('fe_users_newsletter', $sql_data); /* Mit dieser Abfrage wird sichergestellt, dass jeder Eintrag nur einmal vorhanden ist. Sollte sich doch jemand doppelt anmelden, wird er auf eine Seite weitergeleitet. */ if ($GLOBALS['TYPO3_DB']->sql_errno() == 1062) { header('Location: http://rheinisches-revier.de/index.php?id=64'); die(); } /* finally, return the command */ return array($command); } } /* Weiterleitung auf eine Anmelden erfolgreich Seite.*/ header('Location: http://rheinisches-revier.de/index.php?id=61'); ?>
Nun haben wir die Daten in der Datenbank und der Abonnent erhält eine E-Mail mit einem Bestätigungslink, welchen er klicken muss um die Newsletter-Anmeldung abzuschließen.
2.) Nach dem Klick auf den Link, bestätigt der Abonnent die Newsletter-Anmeldung und stellt den Wert “abonniert” in der Datenbank von “0 = noch nicht bestätigt”, auf “1 = bestätigt.”
- bestaetigen.php
<? header('Location: http://rheinisches-revier.de/index.php?id=60'); // passwort aus Link lesen $pw = $_GET["pw"]; $timestamp = time(); // Datenbank zugriff. $db = mysql_connect('localhost','rheinrevier','SH5EXusq8bJaQfDA') or die("Database error"); mysql_select_db('rheinrevier', $db); // Datenbank nach mitgeschicktem Passwort durchsuchen und in dieser Spalte die Daten anpassen. $sql = "SELECT * FROM fe_users_newsletter WHERE hashcode='".$pw."'"; $result = mysql_query($sql); if (mysql_num_rows($result)>0) { //...wenn ein Datensatz mit diesem Nicknamen gefunden wurde: $sql = mysql_query("UPDATE `rheinrevier`.`fe_users_newsletter` SET `abonniert` = '1',`time_formular_bestaetigt` = '$timestamp' WHERE `fe_users_newsletter`.`hashcode` = '$pw'"); } ?>
+++++ DOUBLE-OPT-OUT +++++
Möchte sich der Newsletter-Abonnent nun wieder abmelden, geschieht dies über eine “Double-Opt-Out” Abfrage.
1.) Der Abonnent gibt einfach seine E-Mail Adresse in ein vordefiniertes Feld, welches die E-Mail Adresse an folgende Datei schickt.
- abmelde_anfrage.php
<? $email = $_POST['email']; header('Location: http://rheinisches-revier.de/index.php?id=62'); // Datenbank auslesen um E-Mail zu vergleichen und Nachnamen ausgeben. // $db = mysql_connect('localhost','rheinrevier','SH5EXusq8bJaQfDA') or die("Database error"); mysql_select_db('rheinrevier', $db); $sql = "SELECT * FROM fe_users_newsletter WHERE email='".$email."'"; $result = mysql_query($sql); while ($sql = mysql_fetch_array($result)){ $anrede = $sql[anrede]; $name = $sql[nachname]; $code = $sql[hashcode]; } // ################################################################## // // E-MAIL verschicken // $sender = "Rheinisches Revier [info@rheinisches-revier.de]"; $empfaenger = $email; $betreff = "IRR Newsletter-Abmeldung"; if ($anrede == "Herr") { $mailtext = "Sehr geehrter Herr $name,<br /><br /> wenn Sie wirklich den Newsletter abbestellen möchten, klicken Sie bitte auf folgenden Link.<br /><br /> <a href='http://www.rheinisches-revier.de/fileadmin/php/abmelden.php?pw=$code'>Ich möchte den Newsletter abbestellen!</a>"; } else { $mailtext = "Sehr geehrte Frau $name,<br /><br /> wenn Sie wirklich den Newsletter abbestellen möchten, klicken Sie bitte auf folgenden Link.<br /><br /> <a href='http://www.rheinisches-revier.de/fileadmin/php/abmelden.php?pw=$code'>Ich möchte den Newsletter abbestellen!</a>"; } mail($empfaenger, $betreff, $mailtext, "From: $sender\n" . "Content-Type: text/html; charset=iso-8859-1\n"); // ################# // ?>
2.) Der Abonnent erhält nun eine E-Mail mit einem Bestätigungslink, der nun auch wieder das eindeutige Passwort aus der Datenbank enthält um den User zu identifizieren.
3.) Bestätigt nun der Abonnent den mitgeschickten Link, gehen die Daten an folgende Datei:
- abmelden.php
<? // Passwort wird aus Mail gelesen. $pw = $_GET["pw"]; header('Location: http://rheinisches-revier.de/index.php?id=63'); $timestamp = time(); // Datenbank zugriff erfolgt. $db = mysql_connect('localhost','rheinrevier','SH5EXusq8bJaQfDA') or die("Database error"); mysql_select_db('rheinrevier', $db); // Das mitgelieferte Passwort wird mit dem Eintrag in der Datenbank verglichen. $sql = "SELECT * FROM fe_users_newsletter WHERE hashcode='".$pw."'"; $result = mysql_query($sql); if (mysql_num_rows($result)>0) { //...wenn ein Datensatz mit diesem Nicknamen gefunden wurde: // Die kompletten Daten werden in eine Backup-Datenbank geschrieben. $sql = mysql_query ("INSERT INTO `rheinrevier`.`fe_users_newsletter_alt` SELECT * FROM `rheinrevier`.`fe_users_newsletter` WHERE `fe_users_newsletter`.`hashcode` = '$pw'"); // Nun wird der Eintrag in der Newsletter-Datenbank anhand des "Passwortes -> Hashcode" herausgesucht und der gesamte Eintrag gelöscht. $sql = mysql_query ("DELETE FROM `rheinrevier`.`fe_users_newsletter` WHERE `fe_users_newsletter`.`hashcode` = '$pw'"); // Zuletzt wird der "abonniert" Zustand in der Backup-Datenbank von "1 = abonniert", wieder auf "0 = noch nicht bestätigt" gesetzt. $sql = mysql_query ("UPDATE `rheinrevier`.`fe_users_newsletter_alt` SET `abonniert` = '0',`time_newsletter_abgemeldet` = '$timestamp' WHERE `fe_users_newsletter_alt`.`hashcode` = '$pw'"); } ?>