Re: problem with for loop
[email protected] (Peter Ford)
| Newsgroups | php.general |
|---|---|
| Message-ID | <[email protected]> |
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 ="[email protected]"; > $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