2012-03-16 5 views
1

У меня есть форма, отображающая контактные адреса электронной почты в текстовых полях и выпадающие варианты для заголовков для соответствующих писем.Пока цикл выполняется только один раз

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

Обычно я комментирую людей об их недостатке. Вам сэр удалось сделать обратное. –

+0

Также, что у вас есть? –

+0

Отсутствие ' ... 'сделай ребёнка. Скейт-крик. – prodigitalson

ответ

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

+0

Цикл foreach - это простой способ перебора массива, да. – Amber

+0

ok, поэтому используйте foreach, чтобы поместить заголовок в массив, затем используйте это внутри цикла While для Contact_list, чтобы получить правильный вывод? – ini

0

вы должны поместить строки в переменной и эхо, что после цикла.

0

как только внутренний цикл while будет выполняться один раз полностью, вы не получите больше значений в этом mysql_fetch_array. Поскольку курсор достиг конца строк.

Вы должны хранить результаты внутреннего цикла while в php-массиве, а затем итерации через этот массив каждый раз во внутреннем цикле while.

+0

Еще лучше, он должен использовать PDO и быть с этими глупыми функциями. –

+0

Да, но ясно, что ОП только начинается с нюансов php и mysql – redDevil

+1

Точно. Вместо того, чтобы изучать mysql, люди должны учиться правильному пути (если не PDO, чем AT LEAST MySQLi). –