Anzeige
Tutorialbeschreibung

Newsletter mit Datenbank

Newsletter mit Datenbank

Einfacher PHP-Newsletter mit folgenden Funktionen:
* Eintragen / Austragen
* Eintragen des Namen & der E-Mailadresse
* Name kann durch {NAME} beim Versenden eines Newsletters benutzt werden
* 3 Dateien (Config, Admin und Benutzer)
* Datenbankverwendung


Schritt 1

Zuerst müssen wir eine Tabelle mit dem Namen "newsletter" in der Datenbank erstellen:

Bilder



Folgender SQL-Befehl sollte verwendet werden:

CREATE TABLE `newsletter` (
 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
 `name` VARCHAR( 255 ) NOT NULL ,
 `mail` VARCHAR( 255 ) NOT NULL
 )


Wir erstellen also eine Tabelle mit dem Namen "newsletter". Diese Tabelle hat drei Zeilen:

id - diese Zeile wird automatisch ausgefüllt und sorgt dafür, dass jeder Abonnent seine eigene ID hat
name - hier wird der Name des Abonnenten eingetragen
mail - hier wird die E-Mailadresse des Abonnenten eingetragen


Schritt 2

Jetzt bitte die erste Datei mit dem Namen "config.php" erstellen. Hier kommen alle Einstellungen hinein.

Der Inhalt der Datei sollte folgender sein (Bitte die Datenbank und E-Mail-Einstellung ändern):

 <?php

 error_reporting(E_NONE); //Sorgt für Unterdrückung der Fehlermeldungen

 $config = array();
 /*
 * Datenbankeinstellungen
 */
 $config['db']['host'] = 'localhost'; //Host der Datenbank (meistens localhost)
$config['db']['user'] = 'user'; //Benutzername für die Datenbank
$config['db']['pw'] = ''; //Passwort für die Datenbank
$config['db']['database'] = 'newsletter'; //Datenbankname
 /*
 * E-Maileinstellung
 */
 $config['abs']['name'] = 'Peter Fischer'; //Name des Absenders der E-Mails
 $config['abs']['mail'] = 'peter.fischer@fischer.de'; //E-Mail des Absenders der E-Mails


 /*
 * Verbindung zur Datenbank
 * NICHTS VERÄNDERN
 */
 $link = mysql_connect($config['db']['host'], $config['db']['user'], $config['db']['pw']);
 mysql_select_db($config['db']['database'], $link) or die('Verbindung zur Datenbank fehlgeschlagen');

 ?>
 
 

Schritt 3

Jetzt erstellen wir die Datei "newsletter.php". Hier kann der User sich ein- und austragen.

 <?php

 /* 
 * Einfügen der Konfigdatei und der Datenbankverbindung
 */
 include('config.php');

 /*
 * Hier wird die Aktion, die in der $_GET variable 'action' gespeichert ist, überprüft
 * Wenn sie leer ist, wird als Standard 'form' für Formular gesetzt
 */
 if(!isset($_GET['action']))$_GET['action'] = 'form';
 /*
 * Hier wird geschaut, was gemacht werden soll (ob 
 	form => das Formular angezeigt werden soll 
 	oder 
 	check => das Formular abgesendet wurde
  */
switch($_GET['action'])
 {
 	case'form':
	 	/*
	 	* Falls das Formular angezeigt werden soll
	 	*/
		
	 	/*
	 	* Formular
	 	*	- Name
	 	*	- E-Mail
	 	*/
	 	?>
	 	<html>
		 	<form action="newsletter.php?action=check" method="POST">
				 Name: <input type="text" name="name"><br />
				 E-Mail: <input type="text" name="mail"><br />
				 <input type="submit" value="Eintrag/Austragen">
			 </form>
		 </html>
		 <?php
	 break;
	 case'check':	
		 /*
		 * Falls hier die Daten des abgesendeten Formulars verarbeitet werden sollen
		 */
		
		 /*
		 * Hier wird überprüft, ob eine gültige E-Mailadresse angegeben wurde
		 */
		 if(preg_match('/^[^x00-x20()<>@,;:".[]x7f-xff]+(?:.[^x00-x20()<>@,;:".[]x7f-xff]+)*@[^x00- x20()<>@,;:".[]x7f-xff]+(?:.[^x00-x20()<>@,;:".[]x7f-xff]+)+$/i', $_POST['mail']))
		 {
			 $select = mysql_fetch_assoc(mysql_query("SELECT * FROM `newsletter` WHERE `mail` =  '".htmlspecialchars($_POST['mail'])."'"));
			 /* 
			 * Hier wird geschaut, ob die E-Mailadresse schon in der Datenbank vorhanden ist
			 */
			 if($select['id'] != ''){
			 	/* 
				 * Wenn sie vorhanden ist, wird sie ausgetragen und eine Meldung ausgegeben
				 */
				 mysql_query("DELETE FROM `newsletter` WHERE `mail` =  '".htmlspecialchars($_POST['mail'])."'");
			 	echo 'Die E-Mailadresse wurde erfolgreich ausgetragen';
			 }
			 else
			 {
			 	/* 
			 	* Wenn sie nicht vorhanden ist, wird sie eingetragen und eine Meldung ausgegeben
			 	*/
			 	mysql_query("INSERT INTO `newsletter` SET `mail` =  '".htmlspecialchars($_POST['mail'])."', `name` =  '".htmlspecialchars($_POST['name'])."'");			
				 echo 'Die E-Mailadresse wurde erfolgreich eingetragen';
			 }
		 }
		 else
		 {
			 /*
			 * Falls keine gültige E-Mailadresse angegeben wurde, wird Folgendes ausgegeben:
			 */
			 echo 'Bitte gib eine g&uuml;ltige E-Mailadresse an<br /><a href="?action=form"& gt;zur&uuml;ck</a>';
		 }
				
	 break;
 }

 ?>


 

Schritt 4

So, jetzt muss die Datei "admin.php" erstellt werden, in der man einen neuen Newsletter erstellen kann.

 
Wichtig: Man sollte diese Datei mit einem Passwort sichern (Login-System oder htaccess-Schutz).

 <?php

 include('config.php'); //Wieder Konfigurationsdatei und DB-Verbindung einlesen.

 if(!isset($_GET['action']))$_GET['action'] = 'form';//Falls keine Aktion gewählt ist, wird als Standardaktion 'form'  für Formular gewählt.
 switch($_GET['action'])//Hier werden die verschiedenen Aktionen gewählt.
 {
 	case'form'://Falls Aktion gleich form (Formular ist).
	
		 /*
		 * Formular
		 */
		 ?>
		 <html>
			 <form action="?action=send" method="POST">
			 	Betreff: <input type="text" name="betreff"><br />
			 	<textarea name="text">
			 	</textarea><br />
			 	<i>&uuml;ber {NAME} kann man den angegebenen Namen verwenden</i>
			 	<p>&nbsp;</p>
			 	<input type="submit" value="Verschicken">
			 </form>
		 </html>
		 <?php
	 break;
	 case'send'://Falls Aktion gleich Senden ist		
		 $query = mysql_query("SELECT * FROM `newsletter`"); //Alle Newsletter-Abonnenten holen
		 $i = 0; //Zählen der Abonnenten
		 while($ds = mysql_fetch_assoc($query))//Alle Abonnenten durchgehen
		 {
			 $_POST['text'] = str_replace("{NAME}", $ds['name'], $_POST['text']); //{NAME} zu den Namen des Abonnenten ersetzen		
			 mail($ds['mail'], $_POST['betreff'], $_POST['text'], "From: ".$config['abs']['name']."  <".$config['abs']['mail'].">");//E-Mail abschicken
			 $i++;
		 }
		 echo 'Es wurden '.$i.' E-Mails erfolgreich verschickt'; //Erfolgsmeldung
				
	 break;
 }
 ?>


Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von DjRay1987
  • 27.08.2011 - 12:19

Irgendwie will er im Admin keine Mails verschicken. Es kommt keine Naricht das was weggeschickt wurde und keine Fehler Meldung an was könnte das liegen?

Portrait von PitPanda
  • 14.07.2011 - 20:54

Dürftige Beschreibung, aber regt an zu schauen was einzelne Funktionen bedeuten.

Portrait von bapf
  • 27.03.2011 - 11:36

Das Tutorial ist für Anfänger ideal. Leider hat die Email preg_match nicht funktioniert.

Portrait von Proweb
  • 10.03.2011 - 11:12

Bei mir nimmt das Script immer noch keine Email Adresse an. An was leigt das jetzt?

Portrait von nereos
  • 11.03.2011 - 13:53

du musst die zeile unterhalb des kommentars:
Hier wird überprüft, ob eine gültige E-Mailadresse angegeben wurde
anpassen.
ich habe folgendes pregmatch verwendet:
if(preg_match("/^[0-9a-zA-Z._\\-]+@[0-9a-zA-Z._\\-]{2,}\\.[a-zA-Z]{2,4}\$/", $_POST['mail']))

Portrait von Proweb
  • 12.03.2011 - 15:11

Vielen Dank.

hat geklappt. Endlich hab ich ein Newsletter Script =)

Portrait von nereos
  • 30.01.2011 - 01:04

Super Tutorial, echt klasse, nur habe ich leider ein Problem damit. Wenn ich die Newsletter verschicken will, nimmt er mir nur den allerersten Namen aus der Tabelle und fügt den in jede Email ein. ????

Portrait von kingernie
  • 15.01.2011 - 16:52

Das eintragen klappt gut, nur das löschen bei doppelten Emailadressen funktioniert nicht. Da macht er immer einen neuen Eintrag. Vielleicht kann mir ja jemand helfen.

Portrait von wahke
  • 25.12.2010 - 23:51

Sehr gutes Tutorial. Vielen Dank

Portrait von wahke
  • 26.12.2010 - 01:05

mhh naja es ist zimlich gut erklärt aber irgendwie will er die email adresse nicht :S

Portrait von kingernie
  • 16.11.2010 - 16:47

Leider das gleiche Problem wie Anonymous. Bitte um Hilfe!!!

Portrait von m_c
m_c
  • 16.11.2010 - 00:14

varchar 255 ist viel zu viel

Portrait von WebDiver_09
Portrait von mfgleo
  • 15.11.2010 - 06:35

Danke für das Tutorial. Es ist meiner Meinung nach, aber nur als Einstieg zu betrachten.

Portrait von luks2com
  • 14.11.2010 - 13:20

Fehler behoben

Portrait von gingin
  • 14.11.2010 - 11:53

Hallo.

wie Zahnerer ja bereits geschrieben hat:
in Code-Zeilen 55-69 wurden die Kommentare (in /* */) INSERT / DELETE vertauscht

Portrait von HansNepomuk
  • 13.11.2010 - 00:19

na endlich, das war genau das wonach ich gesucht habe...vielen Dank.

Portrait von marcusb
  • 12.11.2010 - 21:16

Sehr gutes Tutorial.
Vielen Dank

Portrait von Zahnerer
  • 12.11.2010 - 10:52

Hallo, das Script ist ganz gut. Könnte es sein, dass der Kommentar oder Meldung Eingetragen/Ausgetragen aus Versehen verkehrt herum ist? (Ich habe es allerdings nicht ausprobiert...) Sinnvoll wäre es, das Script mit zwei verschiedenen Ein- und Austragen Buttons zu versehen und danach im Echo eventuell eine Bestätigung des Vorgangs anzufordern. Außerdem sollte man in der Datenbank nicht eine "Double Opt-In" Funktion integrieren? Praktisch ist die Funktion, mit der der Newsletter automatisch versendet werden kann.

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 12.11.2010 - 09:19

Hallo,

bei mir kommt immer die Nachricht wegen der ungültigen Email Adresse ?!?!

HILFE HILFE :-((

x
×
×