虽然循环只执行一次
我有一个窗体显示文本框中的联系人电子邮件地址,并下拉选择这些相应的电子邮件的标题。虽然循环只执行一次
TitleSelect1 EMAIL1 TitleSelect2电子邮件2 ....
的电子邮件有title_id的设置,并选择列表中选择现有的标题。这适用于第一次联系,但其余的只会显示电子邮件地址,标题下拉列表为空。
<?php
while ($row2 = mysql_fetch_array($Contact_list)) {
?>
<tr>
<td align="right"><select id="Contacts_title" name="Contacts_title[]">
<?
while ($row3 = mysql_fetch_array($title_list)) { //put the contact titles into an array
if ($row3['title_id'] == $row2['title_id']) {
?>
<option value="<? echo $row3['title_id'] ?>" selected="true"><? echo $row3['title'] ?>!</option>';
<?
}
else {
?>
<option value="<? echo $row3['title_id'] ?>"><? echo $row3['title'] ?> </option>';
<?
}
}
?>
</select>
</td>
<td align="left"><input type="text" id="Contacts" name="Contacts[]" value="<? echo $row2['email'] ?>"/></td>
</tr>
<?
$count++;
}
mysql_fetch_array()
只会经过给定查询的结果一次。由于每次通过联系人列表循环都不执行title_list查询,因此当您在第一次迭代之后开始每次迭代时,它仍然处于查询结果的末尾。
你需要做的是从你的title_list查询中取出所有的结果,把它们放到一个数组中,然后遍历对于你的每个联系人。
这里是你如何做到这一点的一般示例(与无关位修剪出):
$contact_list = //some query
$title_list = //some query
$titles = array();
while($title_ar = mysql_fetch_array($title_list)) {
$titles[] = $title_ar;
}
while($contact_ar = mysql_fetch_array($contact_list)) {
// some stuff
foreach($titles as $title) {
// do something with each title
}
}
你应该把排在一个变量和回声while循环之后。
一旦inner while循环执行完一次,您将不会在该mysql_fetch_array
再次调用中获得更多值。由于光标到达行的末尾。
您应该将inner while循环的结果存储到php数组中,然后每次在inner while循环内遍历该数组。
更好的是,他应该使用PDO并结束这些愚蠢的功能。 – 2012-03-16 20:15:42
是的,但显然OP是刚刚开始与php和mysql的细微差别 – redDevil 2012-03-16 20:17:13
准确地说。开始时,人们应该学习正确的方式(如果不是最初的MySQLi的PDO),而不是学习有关mysql的知识。 – 2012-03-16 20:18:19
我通常会评论人们关于他们缺乏凹痕的问题。你先生设法做相反的事。 – 2012-03-16 20:05:47
另外,你的查询是什么? – 2012-03-16 20:07:58
缺少' ... prodigitalson 2012-03-16 20:12:14