while循环只执行一次

时间:2012-03-16 20:04:21

标签: php mysql html

我有一个表格,在文本框中显示联系电子邮件地址,并下拉相应电子邮件的标题选择。

TitleSelect1 Email1 TitleSelect2 Email2 ....

电子邮件设置了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++;
} 

3 个答案:

答案 0 :(得分:9)

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
    }
}

答案 1 :(得分:0)

你应该把行放在变量中,然后在while循环后回显。

答案 2 :(得分:0)

一旦内部while循环完全执行一次,你将不再在mysql_fetch_array调用中获得更多值。由于光标到达行的末尾。

你应该将内部while循环的结果存储到php数组中,然后每次在内部while循环中迭代遍历这个数组。