在下面的代码部分中。我正在检查我的$email_count
并输出两件事中的一件。这很好用。问题出在while循环中。它与第一张唱片不相呼应。
// Get existing emails in system
$email_data = mysql_query("SELECT * FROM `massmail`");
$row2 =mysql_fetch_array($email_data);
$email_count = mysql_num_rows($email_data);
// Get the campaign name for existing emails
$latest_campaign = $row2['campaign_id'];
$latest_data = mysql_query("SELECT * FROM campaign WHERE `id`='$latest_campaign'");
$latest_row = mysql_fetch_array($latest_data);
$latest_name= $latest_row['name'];
// Display Options depending on availability of emails,
if($email_count ==0){
echo "upload new file";
}else{
echo "<span class='"text_1'">The following <strong>".$email_count."</strong> emails are in the system for <strong>".$latest_name."</strong> campaign.<br><br>";
echo "<div class='"rounded-corners1'" id='"latest_emails'" align='"left'" style='"overflow: auto; height: 200px; width:250px; '" >";
// THIS IS WHERE I OUTPUT TO SCREEN BUT THE FIRST RECORD DOESN'T OUTPUT.
while($row2 = mysql_fetch_array($email_data)){
echo $row2['email'].'<br/>';
}
echo "<br/></span></div><br/>";
?>
<table width="600" border="0" cellspacing="10" cellpadding="10">
<tr>
<td width="50%" align="center" valign="top" bgcolor="#336699" class="rounded-corners1" ><span class="white_text">Delete Existing Emails and Upload New File for<br />
<strong><br />
<?php echo $campaign_selected; ?></strong></span><br />
<br />
<form id="form1" name="form1" method="post" action='<?php echo $_SERVER['PHP_SELF']; ?>'>
<input type="hidden" name="campaign_id" id="campaign_id" value='<?php echo $campaign_id; ?>' />
<input type="submit" name="submit" id="submit" onclick="return confirm('Are you sure you want to delete the existing list?');" value="Continue >>" />
<br />
</form>
</td>
<td align="center" valign="top" bgcolor="#336666" class="rounded-corners1" >
<form id="form1" name="form1" method="post" action="mm_send_main_3.php">
<span class="white_text">Re-Send Message to<br />
the above list for<br />
<strong><br /><?php echo $latest_name; ?></strong></span><br />
<br />
<input type="hidden" name="campaign_id" id="campaign_id" value='<?php echo $latest_campaign; ?>' />
<input type="submit" name="button2" id="button2" onclick="return confirm('Are you sure you want to process the existing list?');" value="Continue >>" />
<br />
</form>
</td>
</tr>
</table>
<?php
};
?>
您有:
$email_data = mysql_query("SELECT * FROM `massmail`");
$row2 =mysql_fetch_array($email_data);
... lots of code ...
while($row2 = mysql_fetch_array($email_data)){
运行查询后的第一个fetch
调用将获取结果的第一行。一旦到达while()
调用,第一个$row2
结果就会被销毁并丢失。
正如下面eleazan所指出的,您可以将循环反转为do { ... } while()
。
$row2 = mysql_fetch_array($email_data);
... do stuff
do {
start output here
while ($row2 = msyql_fetch_array($email_data));
这将为循环的第一次迭代"保留"第一行数据。
尝试在while循环之前添加此项
mysql_data_seek($row2,0);
每次调用像mysql_fetch_array
这样的函数时,都会在MySQL结果中移动内部行指针。正如您已经调用mysql_fetch_array
一样,它已经移动了指针,因此不会返回循环中的第一行
这是您的问题:
$latest_data = mysql_query("SELECT * FROM campaign WHERE `id`='$latest_campaign'");
$latest_row = mysql_fetch_array($latest_data);
....
while($row2 = mysql_fetch_array($email_data)){
您在查询后立即调用mysql_fetch_array;这将加载第一条记录,并将指针移到下一条记录。
在循环中,您将再次调用它,由于指针当前指向第二条记录,它将从那里开始输出。