2012-03-16 173 views
1

我有一个窗体显示文本框中的联系人电子邮件地址,并下拉选择这些相应的电子邮件的标题。虽然循环只执行一次

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

我通常会评论人们关于他们缺乏凹痕的问题。你先生设法做相反的事。 – 2012-03-16 20:05:47

+0

另外,你的查询是什么? – 2012-03-16 20:07:58

+0

缺少'<?php some_statement:?> ... <?php endsome_statement; “让婴儿Skeet哭泣。 – prodigitalson 2012-03-16 20:12:14

回答

8

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

是否是foreach循环执行此操作的最佳方式? – ini 2012-03-16 20:14:37

+0

'foreach'循环是迭代数组的一种简单方法,是的。 – Amber 2012-03-16 20:14:53

+0

好吧,所以使用foreach将title_list放入一个数组,然后在While循环中使用Contact_list来获取正确的输出? – ini 2012-03-16 20:18:00

0

你应该把排在一个变量和回声while循环之后。

0

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

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

+0

更好的是,他应该使用PDO并结束这些愚蠢的功能。 – 2012-03-16 20:15:42

+0

是的,但显然OP是刚刚开始与php和mysql的细微差别 – redDevil 2012-03-16 20:17:13

+1

准确地说。开始时,人们应该学习正确的方式(如果不是最初的MySQLi的PDO),而不是学习有关mysql的知识。 – 2012-03-16 20:18:19