Bessere funktionierende Lösung.

topf

Mitglied
Also das übergebene Array $rec enthält eMailAdressen einer Anzahl zwischen 100-300.

Wie kann ich diesen Quellcode effizienter machen? Mir wurde der Operator IN im Query nachgelegt. Nur keine Ahnung was ich damit machen sollte.

PHP:
<?php
session_start();
include_once('config.php'); 
include 'include/email.php';	

$count = count($_SESSION['rec']); ?>
<link rel="stylesheet" type="text/css" href="style.css">
<table width="100%" border="0" cellpadding="1" cellspacing="1">
<tr><td><span class="norm-txt"><? echo $count; ?> Newsletter versendet an:</span></td></tr>	

<?

foreach ($_SESSION['rec'] as $singlerec)
{
	$u = "SELECT id, anrede, name, vorname, str, hsnr, plz, ort, tel, fax,  email FROM fgRecipients WHERE email = '".$singlerec."'";
	if($a = mysql_query($u)) 
	{
			$i = mysql_fetch_array($u);								
			$anrede = str_replace("\n","<br />", $c['persanr']);
			$anrede = str_replace("*Anrede*",$i['anrede'], $anrede);
			$anrede	= str_replace("*Name*",$i['name'], $anrede);
			$anrede = str_replace("*Vorname*",$i['vorname'], $anrede);
			$anrede = str_replace("*Straße*",$i['str'], $anrede);
			$anrede = str_replace("*Hausnr.*",$i['hsnr'], $anrede);
			$anrede = str_replace("*PLZ*",$i['plz'], $anrede);
			$anrede = str_replace("*Ort*",$i['ort'], $anrede);
			$anrede = str_replace("*Tel*",$i['tel'], $anrede);
			$anrede = str_replace("*Fax*",$i['fax'], $anrede);
			$anrede = str_replace("*email*",$i['email'], $anrede);
			$anr = $anrede;
	}
	else 
	{
	$anr = $c['unpersanr'];
	}
	
	$to  = "".$singlerec."" . ", ";
	$message = $top.$anr.$img1.$output.$bottom;
	mail($to, $subject,$message,$headers);																
	echo '<tr bgcolor="#E1E3EA"><td class="small-txt">&nbsp;&nbsp;'.$singlerec.'</td></tr>';

}
?>
</table>
 
Zuletzt bearbeitet:
Ich glaube, ich würde eine Abfrage abschicken, die die Daten aller Empfänger auswählt, anstatt für jeden eine eigene abzuschicken.
PHP:
<?php

	$query = '
		SELECT
		        `id`,
		        `anrede`,
		        `name`,
		        `vorname`,
		        `str`,
		        `hsnr`,
		        `plz`,
		        `ort`,
		        `tel`,
		        `fax`,
		        `email`
		  FROM
		        `fgRecipients`
		  WHERE
		        0
		';
	if( is_array($_SESSION['rec']) ) {
		$query .= ' OR `email` = "'.implode('" OR `email` = "', array_map('mysql_real_escape_string', $_SESSION['rec'])).'"';
	}
	$result = mysql_query($query);

	while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
		$replace = array(
			chr(0x0A)   => '<br />',
			'*Anrede*'  => $row['anrede'],
			'*Name*'    => $row['name'],
			'*Vorname*' => $row['vorname'],
			'*Straße*'  => $row['str'],
			'*Hausnr.*' => $row['hsnr'],
			'*PLZ*'     => $row['plz'],
			'*Ort*'     => $row['ort'],
			'*Tel*'     => $row['tel'],
			'*Fax*'     => $row['fax'],
			'*email*'   => $row['email']
		);
		$anr = strtr($c['persanr'], $replace);

		$message = $top.$anr.$img1.$output.$bottom;
		mail($row['email'], $subject, $message, $headers);
		echo '<tr bgcolor="#E1E3EA"><td class="small-txt">&nbsp;&nbsp;'.$row['email'].'</td></tr>';
	}

?>
 
Das ist schonmal super.Danke dafür. Hab das nach längerem Betrachten sogar verstanden. Wie handhabe ich das denn , wenn die email im array nicht in der db vorhanden ist?
 
Mein Vorschlag sendet nur zu den in der Datenbank vorhandenen E-Mail-Adressen eine E-Mail. Ob dies nun sinnvoll ist, beleibt deinem Urteilsvermögen überlassen.
 
Ich schenk dir folgende Frage:

Was soll ich damit anfangen können?

Wenn ich das mit einer foreach() Schleife mache, muss ich jede Abfrage doppelt machen.


Egal, ich hab jetzt eine Abfrage gemacht, wo das Vorhandensein geprüft wird:
PHP:
<?php
// Prüfen ob die eMailadresse vorhanden ist.
	$av = array();
    foreach ($rec as $mail) {
		$a = "SELECT `email` FROM `fgRecipients` WHERE `email` = '".$mail."'";
		$b = mysql_query($a);
			if(mysql_num_rows($b) == 0)
			{
				$anr = $c['unpersanr'];
				$message = $top.$anr.$img1.$output.$bottom;
				mail($mail, $subject, $message, $headers);
				echo '<tr bgcolor="#E1E3EA"><td class="small-txt">&nbsp;&nbsp;'.$mail.'</td></tr>';
			} 
			elseif(mysql_num_rows($b) > 0)
			{
				$d = mysql_fetch_array($b);
				$av[] = $d['email'];
			}
	}
    $query = '
				SELECT
                `id`,
                `anrede`,
                `name`,
                `vorname`,
                `str`,
                `hsnr`,
                `plz`,
                `ort`,
                `tel`,
                `fax`,
                `email`
          FROM
                `fgRecipients`
          WHERE
                0
        ';
		if(is_array($av) ) {
		$emailadr = implode('" OR `email` = "', array_map('mysql_real_escape_string', $av));
		}
        $query .= ' OR `email` = "'.$emailadr.'"';
	
	    $result = mysql_query($query);
	
	    while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
			$replace = array(
				chr(0x0A)   => '<br />',
				'*Anrede*'  => $row['anrede'],
				'*Name*'    => $row['name'],
				'*Vorname*' => $row['vorname'],
				'*Straße*'  => $row['str'],
				'*Hausnr.*' => $row['hsnr'],
				'*PLZ*'     => $row['plz'],
				'*Ort*'     => $row['ort'],
				'*Tel*'     => $row['tel'],
				'*Fax*'     => $row['fax'],
				'*email*'   => $row['email']
			);
			
			$anr = strtr($c['persanr'], $replace);
			$message = $top.$anr.$img1.$output.$bottom;
			mail($row['email'], $subject, $message, $headers);
			echo '<tr bgcolor="#E1E3EA"><td class="small-txt">&nbsp;&nbsp;'.$row['email'].'</td></tr>';
    		}
?>
 
Zuletzt bearbeitet:
Zurück