| bambooS
      OC Addicted   | Bearbeitet von bambooS am 13.03.2012, 15:01
         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);
 | 
  | Obermotz
      Fünfzylindernazi   | 
         Na klar, du hast ja den eMail-Versand in der Schleife.Bearbeitet von Obermotz am 13.03.2012, 10:58Du 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.
 | 
  | 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   | Bearbeitet von bambooS am 13.03.2012, 13:44
         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...
     | 
  | 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.Bearbeitet von bambooS am 13.03.2012, 13:38
 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);
 | 
  | 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.
     |