繁体   English   中英

While循环仅执行一次

[英]While loop only executing once

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

TitleSelect1电子邮件1 TitleSelect2电子邮件2 ....

电子邮件中设置了title_id,然后选择列表选择现有的Title。 这对于第一个联系人来说效果很好,但其余联系人仅显示电子邮件地址,标题下拉列表为空。

<?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循环后回显。

一旦内部while循环完全执行一次,您就不会再在该mysql_fetch_array调用中获得任何更多的值。 由于光标到达了行尾。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM