PHP Newsletter Script
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
adresse
anzahl
betreff
code
domain
email
erfolgreichen versand
falsch code
fehlerfall
helfen
info
problem
re
schleife
sorgen
text
type
versand
verschicken
zeile
-
Hallo !
Ich bin gerade dabei ein Newsletter Script zu programmieren. Das Eingabeformular wird auch angezeigt, nur werden nach dem Klick auf Senden, keine Emails verschickt. Was mache ich falsch?
<? require("./global.php"); if($_GET['action'] == "verschicken") { $sql = mysql_query("SELECT email FROM userdaten"); $anzahl = mysql_num_rows($sql); } $text = $_POST['text']; $betreff= $_POST['betreff']; while($anzahl) { $addy = mysql_result($sql,$x,"email"); $from = "From: Newsletter <info@domain.de>\n"; $from .= "Reply-To: info@domain.de\n"; $from .= "Content-Type: text/html\n"; $mailtext = " Newslettertest \n"; mail("$addy","$betreff","$mailtext","$from"); } ?>
Könnt Ihr mir helfen ?
Mfg -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo,
ja, die haben alle einen Inhalt.
Ist vielleicht an der While Schleife was falsch, weil da war ich mir nicht sicher? -
@davy
...Was mache ich falsch?
<? require("./global.php"); if($_GET['action'] == "verschicken") { $sql = mysql_query("SELECT email FROM userdaten"); $anzahl = mysql_num_rows($sql); } $text = $_POST['text']; $betreff= $_POST['betreff']; while($anzahl) { $addy = mysql_result($sql,$x,"email"); $from = "From: Newsletter <info@domain.de>\n"; $from .= "Reply-To: info@domain.de\n"; $from .= "Content-Type: text/html\n"; $mailtext = " Newslettertest \n"; mail("$addy","$betreff","$mailtext","$from"); } ?>
Könnt Ihr mir helfen ?
Mfg
1. verwende nicht '<?' sondern '<?php' und zwar überall.
2. bist du sicher, dass '$sql = mysql_query("SELECT email FROM userdaten");' ohne fehler durchgeht? mysql_query liefert im fehlerfall false. sollte ausgewertet werden! unbedingt!
3. wozu ermittelst '$anzahl' wenn du nichts damit anfängst?
4. was ist in $x in der zeile '$addy = mysql_result($sql,$x,"email");'?
5. 'mysql_result' ???? warum das? siehe de.php.net:Empfohlene, leistungsfähigere Alternativen: mysql_fetch_row(), mysql_fetch_array(), mysql_fetch_assoc() und mysql_fetch_object().
also auf deine frage (oben) kann man sagen: so einiges.
Beitrag zuletzt geändert: 16.2.2010 22:45:22 von czibere -
czibere schrieb:
@davy...Was mache ich falsch?
<? require("./global.php"); if($_GET['action'] == "verschicken") { $sql = mysql_query("SELECT email FROM userdaten"); $anzahl = mysql_num_rows($sql); } $text = $_POST['text']; $betreff= $_POST['betreff']; while($anzahl) { $addy = mysql_result($sql,$x,"email"); $from = "From: Newsletter <info@domain.de>\n"; $from .= "Reply-To: info@domain.de\n"; $from .= "Content-Type: text/html\n"; $mailtext = " Newslettertest \n"; mail("$addy","$betreff","$mailtext","$from"); } ?>
Könnt Ihr mir helfen ?
Mfg
1. verwende nicht '<?' sondern '<?php' und zwar überall.
2. bist du sicher, dass '$sql = mysql_query("SELECT email FROM userdaten");' ohne fehler durchgeht? mysql_query liefert im fehlerfall false. sollte ausgewertet werden! unbedingt!
3. wozu ermittelst '$anzahl' wenn du nichts damit anfängst?
4. was ist in $x in der zeile '$addy = mysql_result($sql,$x,"email");'?
5. 'mysql_result' ???? warum das? siehe de.php.net:Empfohlene, leistungsfähigere Alternativen: mysql_fetch_row(), mysql_fetch_array(), mysql_fetch_assoc() und mysql_fetch_object().
also auf deine frage (oben) kann man sagen: so einiges.
Ich habe mein Script mal überarbeitet:
<?php require("./global.php"); if($_GET['action'] == "verschicken") { $sql = mysql_query("SELECT email FROM userdaten"); $text = mysql_real_escape_string($_POST['text']); $betreff= mysql_real_escape_string($_POST['betreff']); while($anzahl) { $addy = mysql_fetch_array($sql,"email"); $from = "From: Newsletter <info@domain.de>\n"; $from .= "Reply-To: info@domain.de\n"; $from .= "Content-Type: text/html\n"; $mailtext = " text \n"; mail("$addy","$betreff","$mailtext","$from"); } } ?>
-
Hast du vorne ein Formular oder nen Link dran gehängt?
$_GET['action']
Schau ob 'action' einen Wert hat wenn der keinen hat kann er die if bedingung nicht erfüllen und die email wird nicht versand -
@davy
... Ich habe mein Script mal überarbeitet...
ok. aber was macht jetzt der code? geht er?? -
hast du schon getestet ob du überhaupt mails verschicken kannst? meiner meinung nach müsstest du einen mail-server einrichten.
-
@davy
Ich habe mein Script mal überarbeitet
noch einmal.
dein kode kann noch immer nicht gehen. ich würde das so machen (vorsicht! ungeprüft! kann tippfehler haben):
<?php require("./global.php"); if ( $_GET['action'] === "verschicken" ) { // if - else sollte so belassen werden (siehe noch else unten)! if ( false !== ($res = mysql_query ("SELECT email FROM userdaten")) ) { // wenn query das ergebnis gebracht hat: while ( $address = mysql_fetch_array ($res, MYSQL_ASSOC) ) { // vorausgesetzt, du hast für die richtigkeit der POST-variablen gesorgt. mail ( $address['email'], // to $betreff = mysql_real_escape_string ($_POST['betreff']), // subject $text = mysql_real_escape_string ($_POST['text']), // message // add. headers: From/Reply-To/Content-Type // wobei: ich halte NICHTS vom hardkodierung!!!! // das ist hardkodiert und muss da raus!!!!!!!!! "From: Newsletter <info@domain.de> Reply-To: info@domain.de Content-Type: text/html\n"; ); } } else { // hier musst du für den fehlerfall sorgen! UNBEDINGT! // nächste zeile ist nur im entwicklungsfalle! exit ("<h4>ERROR #:</h4><pre style=\"color:#f00;\"" . mysql_errno () . "\n" . mysql_error); } } ?>
Beitrag zuletzt geändert: 17.2.2010 7:12:00 von czibere -
czibere schrieb:
@davyIch habe mein Script mal überarbeitet
noch einmal.
dein kode kann noch immer nicht gehen. ich würde das so machen (vorsicht! ungeprüft! kann tippfehler haben):
<?php require("./global.php"); if ( $_GET['action'] === "verschicken" ) { // if - else sollte so belassen werden (siehe noch else unten)! if ( false !== ($res = mysql_query ("SELECT email FROM userdaten")) ) { // wenn query das ergebnis gebracht hat: while ( $address = mysql_fetch_array ($res, MYSQL_ASSOC) ) { // vorausgesetzt, du hast für die richtigkeit der POST-variablen gesorgt. mail ( $address['email'], // to $betreff = mysql_real_escape_string ($_POST['betreff']), // subject $text = mysql_real_escape_string ($_POST['text']), // message // add. headers: From/Reply-To/Content-Type // wobei: ich halte NICHTS vom hardkodierung!!!! // das ist hardkodiert und muss da raus!!!!!!!!! "From: Newsletter <info@domain.de> Reply-To: info@domain.de Content-Type: text/html\n"; ); } } else { // hier musst du für den fehlerfall sorgen! UNBEDINGT! // nächste zeile ist nur im entwicklungsfalle! exit ("<h4>ERROR #:</h4><pre style=\"color:#f00;\"" . mysql_errno () . "\n" . mysql_error); } } ?>
Hallo !
Ich habe es mal ein bisschen angepasst und jetzt funktionierts.
<?php require("./global.php"); if ( $_GET['action'] === "verschicken" ) { if ( false !== ($res = mysql_query ("SELECT email FROM userdaten")) ) { while ( $address = mysql_fetch_array ($res, MYSQL_ASSOC) ) { $text = nl2br($_POST['text']); $addy = $address['email']; $betreff = mysql_real_escape_string ($_POST['betreff']); $mailtext = " text und html code \n"; $from = "From: Newsletter <info@domain.de>\n"; $from .= "Reply-To: info@domain.de\n"; $from .= "Content-Type: text/html\n"; mail ("$addy","$betreff","$mailtext","$from"); } } else { // hier musst du für den fehlerfall sorgen! UNBEDINGT! // nächste zeile ist nur im entwicklungsfalle! exit ("<h4>ERROR #:</h4><pre style=\"color:#f00;\"" . mysql_errno () . "\n" . mysql_error); } } ?>
Ist es vielleicht noch möglich, nach dem erfolgreichen Versand aller Newsletter, ein Text auszugeben (z.B. Erfolgreich )?
Wenn ich in die while Schleife ein echo einfüge, kommt der Text so oft wie Newsletter versendet wurden.
Mfg
Beitrag zuletzt geändert: 17.2.2010 10:23:05 von davy -
@davy
Ist es vielleicht noch möglich, nach dem erfolgreichen Versand aller Newsletter, ein Text auszugeben (z.B. Erfolgreich )?
Wenn ich in die while Schleife ein echo einfüge, kommt der Text so oft wie Newsletter versendet wurden.
ja, wenn du's nicht vergisst, dass auch mail false zurückgeben kann und alle zurückgegebene falses - egal von welchem befehl - extra behandelt werden müssen. und das geht wieder so (es ist echt immer das selbe, richtig faaaaaad!):
<?php require("./global.php"); if ( $_GET['action'] === "verschicken" ) { if ( false !== ($res = mysql_query ("SELECT email FROM userdaten")) ) { while ( $address = mysql_fetch_array ($res, MYSQL_ASSOC) ) { $text = nl2br($_POST['text']); $addy = $address['email']; $betreff = mysql_real_escape_string ($_POST['betreff']); $mailtext = " text und html code \n"; $from = "From: Newsletter <info@domain.de>\n"; $from .= "Reply-To: info@domain.de\n"; $from .= "Content-Type: text/html\n"; if ( false !== mail ($addy, $betreff, $mailtext, $from) ) { echo "Versand an $addy ist erfolgreich."; } else { echo "Versand an $addy ist nicht erfolgreich."; } } } else { // hier musst du für den fehlerfall sorgen! UNBEDINGT! // nächste zeile ist nur im entwicklungsfalle! exit ("<h4>ERROR #:</h4><pre style=\"color:#f00;\"" . mysql_errno () . "\n" . mysql_error); } } ?>
Beitrag zuletzt geändert: 17.2.2010 13:27:45 von czibere -
czibere schrieb:
@davyIst es vielleicht noch möglich, nach dem erfolgreichen Versand aller Newsletter, ein Text auszugeben (z.B. Erfolgreich )?
Wenn ich in die while Schleife ein echo einfüge, kommt der Text so oft wie Newsletter versendet wurden.
ja, wenn du nicht vergisst, dass auch mail false zurückgeben kann und alle zurückgegebene falses - egal von welchem befehl - extra behandelt werden müssen. und das geht wieder so (es ist echt immer das selbe, richtig faaaaaad!):
<?php require("./global.php"); if ( $_GET['action'] === "verschicken" ) { if ( false !== ($res = mysql_query ("SELECT email FROM userdaten")) ) { while ( $address = mysql_fetch_array ($res, MYSQL_ASSOC) ) { $text = nl2br($_POST['text']); $addy = $address['email']; $betreff = mysql_real_escape_string ($_POST['betreff']); $mailtext = " text und html code \n"; $from = "From: Newsletter <info@domain.de>\n"; $from .= "Reply-To: info@domain.de\n"; $from .= "Content-Type: text/html\n"; if ( false !== mail ($addy, $betreff, $mailtext, $from) ) { echo "Versand an $addy ist erfolgreich."; } else { echo "Versand an $addy ist nicht erfolgreich."; } } } else { // hier musst du für den fehlerfall sorgen! UNBEDINGT! // nächste zeile ist nur im entwicklungsfalle! exit ("<h4>ERROR #:</h4><pre style=\"color:#f00;\"" . mysql_errno () . "\n" . mysql_error); } } ?>
Aber da gibt es noch ein Problem
$adress[email] ist ja nicht nur eine Adresse, sondern alle Adressen meiner User
Durch die While Schleife werden ja ganz viele Mails verschickt.
Darum wird das nicht funktionieren
echo "Versand an $addy ist erfolgreich.";
Kann dann da vielleicht stehen, an wieviele User die Mail verschickt wurde?
Mfg -
@davy
Aber da gibt es noch ein Problem
soweit ich das überblicken kann, die weil-schleife wandert einzeln über allen adressen. (ausprobiert hast ja noch nicht)
$adress[email] ist ja nicht nur eine Adresse, sondern alle Adressen meiner User
Durch die While Schleife werden ja ganz viele Mails verschickt.
Darum wird das nicht funktionieren
echo "Versand an $addy ist erfolgreich.";
Kann dann da vielleicht stehen, an wieviele User die Mail verschickt wurde? -
Ersetze
durchif ( false !== mail ($addy, $betreff, $mailtext, $from) ) { echo "Versand an $addy ist erfolgreich."; } else { echo "Versand an $addy ist nicht erfolgreich."; }
und füge das nach der Schleife ein:if(mail($addy, $betreff, $mailtext, $from)) { $erfolgreiche_mails++; } $mails_insgesamt++;
echo 'Mails insgesamt: '.$mails_insgesamt.'<br>Mails erfolgreich: '.$erfolgreiche_mails;
-
drafed-map schrieb:
Ersetze
durchif ( false !== mail ($addy, $betreff, $mailtext, $from) ) { echo "Versand an $addy ist erfolgreich."; } else { echo "Versand an $addy ist nicht erfolgreich."; }
und füge das nach der Schleife ein:if(mail($addy, $betreff, $mailtext, $from)) { $erfolgreiche_mails++; } $mails_insgesamt++;
echo 'Mails insgesamt: '.$mails_insgesamt.'<br>Mails erfolgreich: '.$erfolgreiche_mails;
Danke !
Das klappt zwar, allerdings bekomme ich den Newsletter jetzt 2x.
Die Ausgabe ist
Mails insgesamt: 2
Mails erfolgreich: 2 -
Vielleicht ist die eine E-Mail noch von letztem mal, oder du hast 2 mal deine E-Mail Adresse eingetragen, immerhin steht da auch, dass 2 E-Mails versandt wurden.
-
drafed-map schrieb:
Vielleicht ist die eine E-Mail noch von letztem mal, oder du hast 2 mal deine E-Mail Adresse eingetragen, immerhin steht da auch, dass 2 E-Mails versandt wurden.
Nein, es sind 2, weil mein Freund auch noch eingetragen ist.
Ich habe es nochmal probiert, der Newsletter kommt schon wieder 2x.
Mfg -
Davy hat mir jetzt den Code per PN zugeschickt, so wie er momentan in der Datei steht. Nachdem ich ihn korrekt eingerückt hatte, habe ich gesehen, wo das Problem lag.
Ich weis nicht, wo der Code-Schnipsel her kommt, auf jeden Fall muss er raus, dann tut das ganz Auch. Entferne den Code
Der steht allein in der Zeile, direkt über dem Code, den ich dir geschickt habe.mail ("$addy","$betreff","$mailtext","$from");
-
drafed-map schrieb:
Davy hat mir jetzt den Code per PN zugeschickt, so wie er momentan in der Datei steht. Nachdem ich ihn korrekt eingerückt hatte, habe ich gesehen, wo das Problem lag.
Ich weis nicht, wo der Code-Schnipsel her kommt, auf jeden Fall muss er raus, dann tut das ganz Auch. Entferne den Code
Der steht allein in der Zeile, direkt über dem Code, den ich dir geschickt habe.mail ("$addy","$betreff","$mailtext","$from");
Danke ! Jetzt funktioniert alles ! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage