webForumDet fria alternativet
Logga in / Bli medlem

Anpassa WHILE och optimera coden

PHP

1 svar · 187 visningar · startad av mall

Medlem sedan jan. 2001135 inlägg
Trådstart#1

Jag skickar mail till medlemmar ur DB.
JAg har ganskamanga ooch vill att majlen skall skickas om 20 i taget och sedan visas hur manga % sam ar klart

Kan nan hjalpa mig forendra denna kden sa att det bli sa?

$result = mysql_query("SELECT user_mail FROM mail_db WHERE mail_list_ID='$mail_list_ID' AND customer_ID='$customer_id'",$db);
		$rows = mysql_num_rows($result);
		$mail_num = 1;
		
		while ($myrow = mysql_fetch_array($result))
			{
				$email = $myrow["user_mail"];
			    mail($email, $subject, $mail_text_send, $headers);
				echo "$mail_num. ".$email."<br>";
				$mail_num++;
			}
				print ("<br><br><strong>Nu &auml;r det klart!<br>Mailen har nu skickats till  $rows e-postadresser som finns i maillistan.</strong>");
Medlem sedan mars 20034 471 inlägg
#2

Re: Anpassa WHILE och optimera coden

Först: Jag tror du rapporterar skickandet av ett mail för mycket! Det borde nog vara $mail_num = 0; före while-slingan. (Då har du ju inte skickat något.) Om du också byter plats på utskriften och uppräkningsraden enligt nedan så funkar det.

Huruvida detta blir en optimal lösning vill jag inte gå in på, men... som en första ansats.

$sql = "SELECT user_mail FROM mail_db 
   WHERE mail_list_ID='$mail_list_ID' AND 
   customer_ID='$customer_id'";
$result = mysql_query("$sql",$db);
$rows = mysql_num_rows($result);
$mail_num = 0;

$curr_chunk = 1;
while ($mail_num <= $rows) {
   $stop = 20 * $curr_chunk;
   while (mail_num < $stopp && $myrow = mysql_fetch_array($result)) {
      $email = $myrow["user_mail"];
      mail($email, $subject, $mail_text_send, $headers);
      $mail_num++;
      echo "$mail_num. ".$email."<br>";
   }
   $curr_chunk++; //<-- Redigerat in glömd rad!!!
   $proc = round($mail_num / $rows * 100, 2); //För två decimaler
   echo "Nu är $proc % klara!"
}
print ("<br><br><strong>Nu &auml;r det klart!<br>
   Mailen har nu skickats till  $rows e-postadresser som finns i maillistan.</strong>");

RED: Glömd rad, se koden

257 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)