kostenloser Webspace werbefrei: lima-city


PHP Newsletter Script

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Lass dir doch mal per echo die Variabelen mail $addy $betreff $mailtext $from ausgeben und schau, ob die alle einen Inhalt haben!
  4. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    Hallo,

    ja, die haben alle einen Inhalt.

    Ist vielleicht an der While Schleife was falsch, weil da war ich mir nicht sicher?
  5. @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
  6. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    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");
    } }
    
    ?>
  7. industry-giant

    industry-giant hat kostenlosen Webspace.

    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
  8. @davy
    ... Ich habe mein Script mal überarbeitet...
    ok. aber was macht jetzt der code? geht er??
  9. hast du schon getestet ob du überhaupt mails verschicken kannst? meiner meinung nach müsstest du einen mail-server einrichten.
  10. @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
  11. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    czibere schrieb:
    @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);
      }
    }
    
    ?>



    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
  12. @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
  13. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    czibere schrieb:
    @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 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
  14. @davy
    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?
    soweit ich das überblicken kann, die weil-schleife wandert einzeln über allen adressen. (ausprobiert hast ja noch nicht)
  15. Ersetze
    if ( false !== mail ($addy, $betreff, $mailtext, $from) ) {
            echo "Versand an $addy ist erfolgreich.";
          } else {
            echo "Versand an $addy ist nicht erfolgreich.";
          }
    durch
    if(mail($addy, $betreff, $mailtext, $from)) {
    $erfolgreiche_mails++;
    }
    $mails_insgesamt++;
    und füge das nach der Schleife ein:
    echo 'Mails insgesamt: '.$mails_insgesamt.'<br>Mails erfolgreich: '.$erfolgreiche_mails;
  16. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    drafed-map schrieb:
    Ersetze
    if ( false !== mail ($addy, $betreff, $mailtext, $from) ) {
            echo "Versand an $addy ist erfolgreich.";
          } else {
            echo "Versand an $addy ist nicht erfolgreich.";
          }
    durch
    if(mail($addy, $betreff, $mailtext, $from)) {
    $erfolgreiche_mails++;
    }
    $mails_insgesamt++;
    und füge das nach der Schleife ein:
    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
  17. 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.
  18. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    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
  19. 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
    mail ("$addy","$betreff","$mailtext","$from");
    Der steht allein in der Zeile, direkt über dem Code, den ich dir geschickt habe.
  20. Autor dieses Themas

    davy

    Kostenloser Webspace von davy

    davy hat kostenlosen Webspace.

    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
    mail ("$addy","$betreff","$mailtext","$from");
    Der steht allein in der Zeile, direkt über dem Code, den ich dir geschickt habe.


    Danke ! Jetzt funktioniert alles !
  21. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!