2012-03-16 124 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