Re: problem with for loop

From: Date: Fri, 02 May 2008 11:24:56 +0000
Subject: Re: problem with for loop
References: 1  Groups: php.general 
Request: Send a blank email to php-general+get-273801@lists.php.net to get a copy of this message
Richard Kurth wrote:
Way does my for loop not complete the task if there are 4 emails it only process 3 emails through the foreach loop if there is 3 it only process 2
    #  Connect up
    $host ="domain.com";
    $port ="110";
    $mailtype = "pop3";
    $mailbox ="INBOX";
    $username ="bounce@domain.com";
    $password ="boat1234";
       $conn = @imap_open("{" . $host . ":" . $port . "/" . $mailtype . "/notls}" . $mailbox, $username, $password);
$number=imap_num_msg($conn); for($i = 1; $i <= $number; $i++) { $file="C:\web\bouncehandler\eml\em$i"; imap_savebody($conn,$file,$i); $file=file_get_contents("C:\web\bouncehandler\eml\em$i"); $multiArray = Bouncehandler::get_the_facts($file); $EMAIL = $the['recipient']; foreach($multiArray as $the){
       switch($the['action']){
       case 'failed':
       $sql="UPDATE contacts SET emailstatus = 'Fatal-Bounced' WHERE emailaddress = '$EMAIL'";
       mysql_query($sql) or die("Invalid query: " . mysql_error());           break;
       case 'transient':
       $sql="UPDATE contacts SET emailstatus = 'Bounced' WHERE emailaddress = '$EMAIL'";
       mysql_query($sql) or die("Invalid query: " . mysql_error());
       break;
       case 'autoreply':
       $sql="UPDATE contacts SET emailstatus = 'Bounced' WHERE emailaddress = '$EMAIL'";
       mysql_query($sql) or die("Invalid query: " . mysql_error());
       break;
       default:
       //don't do anything
       break;
       }
} }
I think you need to check the boundary conditions on your loop. As you write it, for($i = 1; $i <= $number; $i++) if $number is 4 then $i will have the values 1,2,3,4. Perhaps message list is zero-based, and you actually need to count from zero: for($i = 0; $i < $number; $i++) so you would get $i to read 0,1,2,3 The manual page doesn't explicitly say the the message number is one-based, and most real programming languages these days use zero-based arrays... -- Peter Ford phone: 01580 893333 Developer fax: 01580 893399 Justcroft International Ltd., Staplehurst, Kent

« previous php.general (#273801) next »