bambooS
OC Addicted
|
Hi, ich versuche mich gerade im optimieren des Emailsversand bei einer Homepage. Leider stecke ich fest. Dazu später mehr. Zuerst einmal der Code. if (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);
}
}
Ziel ist es aus eine Email an protected zu versenden, wobei die anderen Emailempfänger in BCC stehen sollen. Die anderen sind jene aus der SQL Query. Wenn der Code von mir nicht komplett falsch ist, habe irgendwo einen Wurm drinnen, da ich bei 9 Kapitänen, 9 Emails auf die protected bekomme. Ziel wäre es aber eine Email, wo alle Kaptiäne in BCC stehen. Wie könnte ich das realisieren? Bis jetzt konnte mir Mr. Google nicht helfen. Und ja ich bin Newbie was SQL und PHP angeht. Ich habe das Ganze geerbt und darf mich nun daran erfreuen... Danke für eure Mithilfe. lg bam [Edit] die Lösung: // 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);
Bearbeitet von bambooS am 13.03.2012, 15:01
|
Obermotz
Fünfzylindernazi
|
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.
Bearbeitet von Obermotz am 13.03.2012, 10:58
|
kleinerChemiker
Here to stay
|
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.
|
Obermotz
Fünfzylindernazi
|
Vor allem weist du die Empfänger im Header noch vor der Schleife zu. In der Schleife wird der header aber nicht mehr geändert. Somit kann er also auf die ganze Schleife verzichten
|
kleinerChemiker
Here to stay
|
Somit kann er also auf die ganze Schleife verzichten Nein, er brauch die Schleife um alle Zeilen von der DB auszuwerten, aber die Schleife müßte eben am Anfang stehen und dannach erst die Empfänger zugewiesen werden.
|
quilty
Ich schau nur
|
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.
|
bambooS
OC Addicted
|
Danke für die Tipps. Ich habe den Code jetzt soweit geändert. Wäre dies richtig? if (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);
}
Dies funktioniert schon fast. Leider schreibt er mir nicht die Semikolon bei implode() rein...
Bearbeitet von bambooS am 13.03.2012, 13:44
|
kleinerChemiker
Here to stay
|
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?
|
bambooS
OC Addicted
|
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.
|
kleinerChemiker
Here to stay
|
drum benutzt du ja implode, damit du alle in einem string hast.
|
bambooS
OC Addicted
|
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);
Bearbeitet von bambooS am 13.03.2012, 13:38
|
kleinerChemiker
Here to stay
|
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
|
bambooS
OC Addicted
|
Warum funktioniert es dann jetzt?
|
Obermotz
Fünfzylindernazi
|
while( $row = mysql_fetch_assoc($result) )
{
$empfaenger[] = $row['Mailadresse'];
}
$empf_list = implode('; ', $empfaenger);
So ist es am verständlichsten und lesbarsten. Wie Chemiker schon sagt.. die Brackets [] machen hier den großen Unterschied. Du fügst dem Array mit jedem Schleifendurchlauf die aktuelle Adresse hinzu. mysqli_fetch_assoc ist btw. am performantesten.
|
kleinerChemiker
Here to stay
|
mysqli_fetch_assoc ist btw. am performantesten. http://at2.php.net/manual/de/functi...fetch-assoc.php : Hinweis: Performance Zu betonen ist, dass der Gebrauch von mysql_fetch_array() nicht signifikant langsamer ist als mysql_fetch_row(), obwohl die Funktion einen sichtlichen Mehrwert bietet.
|