Создание динамического поля выбора формы из массива и запроса MySQL - PullRequest
1 голос
/ 12 декабря 2011

У меня есть форма, содержащая поле выбора формы. Опции поля генерируются динамически запросом mySQL и php echo: -

    <select name="students" size="10" multiple="multiple">
    <?php
    do {  
    ?>
    <option value="<?php echo $row_rsStudents['student_id']?>"><?php echo     $row_rsStudents['student_sname1']?> <?php echo $row_rsStudents['student_sname2']?> <?php     echo $row_rsStudents['student_fname']?>: "</option>
    <?php
    } while ($row_rsStudents = mysql_fetch_assoc($rsStudents));
  $rows = mysql_num_rows($rsStudents);
  if($rows > 0) {
      mysql_data_seek($rsStudents, 0);
      $row_rsStudents = mysql_fetch_assoc($rsStudents);
  }
    ?>
    </select>

У меня также есть массив, который я разобрал и зациклил: -

    <?php
    $studentsids = $row_rsClasses['class_students']; 
    $students = explode(":", $studentsids);
    for($i = 0; $i < count($students); $i++){
    echo "$students[$i]";
    }
    ?>

Но я хочу, чтобы соответствующие записи отображались как выбранные в поле выбора. Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 16 декабря 2011

Если я правильно понял, у вас есть список студентов, который будет выделен во втором фрагменте кода в переменной $students?

А у вас есть другой набор всех учеников, который читается в вашем первом фрагменте кода в цикле while?

Чтобы отобразить, находится ли конкретный пользователь в массиве $students, вам просто нужно проверить, находится ли идентификатор пользователя в этом массиве.

if (in_array($row_rsStudents['student_id'], $studentsids)) {
    echo 'selected="selected"';
}

Это может быть встроено в код формы для вставки выбранного атрибута, если конкретный студент находится в вашем массиве.

Учитывая, что ваш второй фрагмент кода выполняется первым:

<?php
$studentsids = $row_rsClasses['class_students']; 
// I assume this array contains all IDs that shall be highlighted
$students = explode(":", $studentsids);
?>

И тогда ваш первый фрагмент кода показывает всех студентов:

<select name="students" size="10" multiple="multiple">
<?php
// why have you used do while? Do you have an existing row before?
// using while(): ... endwhile; is just another style, I prefer it in HTML templates
while ($row_rsStudents = mysql_fetch_assoc($rsStudents):
?>
<option value="<?php echo $row_rsStudents['student_id']?>" <?php if (in_array($row_rsStudents['student_id'], $studentsids)) echo 'selected="selected"' ?> >
    <?php echo $row_rsStudents['student_sname1']?>
    <?php echo $row_rsStudents['student_sname2']?>
    <?php echo $row_rsStudents['student_fname']?>
</option>
<?php endwhile; ?>

<?php
// what was this intended to do?
//
//$rows = mysql_num_rows($rsStudents);
//if($rows > 0) {
//    mysql_data_seek($rsStudents, 0);
//    $row_rsStudents = mysql_fetch_assoc($rsStudents);
//}
?>
</select>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...