URL: https://www.overclockers.at/coding-stuff/php-mit-sql-emailversand-mit-fortlaufendem-bcc_229198/page_1 - zur Vollversion wechseln!
Hi,
ich versuche mich gerade im optimieren des Emailsversand bei einer Homepage.
Leider stecke ich fest. Dazu später mehr. Zuerst einmal der Code.
Code: PHPif (isset($_POST["sendmail2"])) { // Betreff $subject = 'News auf [url]www.xyz.net:[/url]'.$Headline; // Inhalt $text = $Content ."\r\n\r\nwww.xyz.net"; // Absender: $headers = "From: [email]xyz@xyz.net[/email]"; $headers .= "\r\n"; $headers = "BCC:".$empfaenger; $headers .= "\r\n"; // alle Kapitäne dieser saison mit mailadresse $query = "SELECT Mailadresse FROM tbl_Spieler, tbl_TeamSaison WHERE"; $query .= " tbl_Spieler.ID = tbl_TeamSaison.r_Kapitaen_ID"; $query .= " AND tbl_TeamSaison.r_Saison_ID = " . $Saison_ID; $result = mysql_query( $query, GetConnection() ) or die ( mysql_error() ); while( $result && list($empfaenger) = mysql_fetch_row($result) ) { mail("xyz@xyz.net", $subject, $text, $headers); } }
Code: PHP// alle Kapitäne dieser saison mit mailadresse $query = "SELECT Mailadresse FROM tbl_Spieler, tbl_TeamSaison WHERE"; $query .= " tbl_Spieler.ID = tbl_TeamSaison.r_Kapitaen_ID"; $query .= " AND tbl_TeamSaison.r_Saison_ID = " . $Saison_ID; $result = mysql_query( $query, GetConnection() ) or die ( mysql_error() ); while( $row = mysql_fetch_assoc($result) ) { $empfaenger[] = $row['Mailadresse']; } $empf_list = implode('; ', $empfaenger); // Betreff $subject = 'News auf [url]www.xyz.net:[/url]'.$Headline; // Inhalt $text = $Content ."\r\n\r\nwww.xyz.net"; // Absender: $headers = "From: [email]xyz@xyz[/email]"; $headers .= "\r\n"; $headers .= "BCC:".$empf_list; $headers .= "\r\n"; //echo $headers; mail("xyz@xyz.net", $subject, $text, $headers);
Na klar, du hast ja den eMail-Versand in der Schleife.
Du musst dir zuerst die Kapitäne aus der DB holen und dann in einen String verfrachten, durch Semikolons getrennt (Implode mit glue). Das ganze kommt dann in die Headers BCC. Du brauchst dann nur einen Versand per mail() machen.
Vor allem weißt du die Empfänger im Header noch vor der Schleife zu. In der Schleifer wird der header aber nicht mehr geändert.
Somit kann er also auf die ganze Schleife verzichtenZitat von kleinerChemikerVor allem weist du die Empfänger im Header noch vor der Schleife zu. In der Schleife wird der header aber nicht mehr geändert.
Zitat von ObermotzSomit kann er also auf die ganze Schleife verzichten
Und du schreibst brav den Absender in den Header um ihn anschließen mit den Empfängern zu überschreiben.
Und ich hoffe für die SeasonID kann nicht von außen gewählt werden, weil sonst schickt dir bald wer ein drop table mit. Informier dich über SQL Injection und besondern PHP biete viele Features um diese zu verhindern.
Danke für die Tipps.
Ich habe den Code jetzt soweit geändert. Wäre dies richtig?
Code: PHPif (isset($_POST["sendmail2"])) { // alle Kapitäne dieser saison mit mailadresse $query = "SELECT Mailadresse FROM tbl_Spieler, tbl_TeamSaison WHERE"; $query .= " tbl_Spieler.ID = tbl_TeamSaison.r_Kapitaen_ID"; $query .= " AND tbl_TeamSaison.r_Saison_ID = " . $Saison_ID; $result = mysql_query( $query, GetConnection() ) or die ( mysql_error() ); while( $empfaenger = mysql_fetch_row($result) ) $empf_list .= implode('; ',$empfaenger); // Betreff $subject = 'News auf [url]www.xyz.net:[/url]'.$Headline; // Inhalt $text = $Content ."\r\n\r\nwww.xyz.net"; // Absender: $headers = "From: [email]xyz@xyz.net[/email]"; $headers .= "\r\n"; $headers .= "BCC:".$empf_list; $headers .= "\r\n"; mail("xyz@xyz.net", $subject, $text, $headers); }
Folgende Änderungen bei while( $result && list($empfaenger) = mysql_fetch_row($result) )
die {} kannst du weglassen
du überschreibst dir $empfaenger bei jedem durchlauf -> $empfaenger[]
Woher kommt $Saison_ID? Aus einer Benutzereingabe?
Hi Chemiker,
hab bereits kleine Änderungen am Code gemacht.
Saison_ID kommt aus einer include Datei die immer mitgeladen wird sofern notwenig.
Bei der Implode() Funktion hackt es. Die Emailadressen werden in einer "Wurst" ausgegeben.
drum benutzt du ja implode, damit du alle in einem string hast.
Richtig, nur wollte ich ja die Semikolen mit einfügen. Das ignoriert er komplett.
Code ist derzeit so:
while( $result && list($empfaenger) = mysql_fetch_row($result) )
$empf_list .= implode('; ',$empfaenger);
So bekomm ich gar nix zurück.
Und so:
So bekomm ich eine Endloswurst jedoch nicht mit ; getrennt.
Irgendetwas übersehe ich...
[Edit]
So hab den Fehler gefunden:
while( $empfaenger = mysql_fetch_array($result) )
$empf_list .= implode('; ',$empfaenger);
ob mysql_fetch_row oder mysql_fetch_array macht keinen unterschied. Den Fehler hab ich dir oben schon geschrieben, du überschreibst dir $empfänger in der while Schleife mit jedem Durchlauf
Warum funktioniert es dann jetzt?
So ist es am verständlichsten und lesbarsten.Code: PHPwhile( $row = mysql_fetch_assoc($result) ) { $empfaenger[] = $row['Mailadresse']; } $empf_list = implode('; ', $empfaenger);
Zitat von Obermotzmysqli_fetch_assoc ist btw. am performantesten.
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025