За последние 24 часа нас посетили 22929 программистов и 1726 роботов. Сейчас ищут 2060 программистов ...

список (предварительный выбор элементов)

Тема в разделе "Прочие вопросы по PHP", создана пользователем Danilevsky, 15 июн 2006.

  1. Danilevsky

    Danilevsky Активный пользователь

    С нами с:
    12 фев 2006
    Сообщения:
    286
    Симпатии:
    0
    Адрес:
    Киев
    Приветствую всех, кто это читает!
    Вот написал функцию, которая загружает в список (<option value="значение">элемент</option>) элементы и их значения из базы данных MySQL. Список с возможностью выбора нескольких элементов. Вот собственно функция:
    PHP:
    1. function dmultmenu($table, $value, $label, $sort) {
    2.  $query = mysql_query("SELECT $value, $label FROM $table ORDER BY $sort");
    3.  $row_query = mysql_fetch_array($query);
    4.  do {
    5.   echo '<option value="'.$row_query[$value].'"';
    6.   echo '>'.$row_query[$label].'</option>';
    7.  } while ($row_query = mysql_fetch_array($query));
    8.  mysql_free_result($query);
    9. }
    Функция функционирует нормально.
    Затем захотелось сделать так, что-бы при перезагрузке сценария (перезагрузке страницы) выбранные элементы оставались выбранными. Для этого в HTML вставил следующий код:
    PHP:
    1. <select name="select[]" size="3" multiple="multiple">
    2.   <option value="1"<?php if (isset($_POST['select']) && in_array("1", $_POST['select'])) {
    3.    echo ' selected="selected"';
    4.   } ?>>1</option>
    5.   <option value="2"<?php if (isset($_POST['select']) && in_array("2", $_POST['select'])) {
    6.    echo ' selected="selected"';
    7.   } ?>>2</option>
    8.   <option value="3"<?php if (isset($_POST['select']) && in_array("3", $_POST['select'])) {
    9.    echo ' selected="selected"';
    10.   } ?>>3</option>
    11. </select>
    Опять же код функционировал нормально.
    На радостях я изменил функцию добавлением в нее следующего кода (кода предварительного выбора):
    PHP:
    1. function dmultmenu($table, $value, $label, $sort, $selectname) {
    2.  $query = mysql_query("SELECT $value, $label FROM $table ORDER BY $sort");
    3.  $row_query = mysql_fetch_array($query);
    4.  do {
    5.   echo '<option value="'.$row_query[$value].'"';
    6.  
    7.  
    8.  
    9.   if (isset($_POST[$selectname]) && in_array($value, $_POST[$selectname])) {
    10.    echo ' selected="selected"';
    11.   }
    12.  
    13.  
    14.  
    15.   echo '>'.$row_query[$label].'</option>';
    16.  } while ($row_query = mysql_fetch_array($query));
    17.  mysql_free_result($query);
    18. }
    Вот тут то и получилась проблема - предварительный вывод не работает. Я уж подумал где-то в коде ошибка, проверял - нет. По отдельности код работает и все выбирается, а функция не пашет. Все указывает на то, что in_array не работает, поэтому selected="selected" не вставляется и элементы не выбираются. Я пробовал заменять in_array на array_key_exists, пробовал вручную переберать массив for - не выполняется условие хоть убей. Подскажите в чем проблемма. Удивительно то, что писал подобную функцию для выпадающего списка (она практически идентична) и все работало... :(
     
  2. Danilevsky

    Danilevsky Активный пользователь

    С нами с:
    12 фев 2006
    Сообщения:
    286
    Симпатии:
    0
    Адрес:
    Киев
    Все решено...
    PHP:
    1.  
    2.   if (isset($_POST[$selectname])) {
    3.    for($i=0; $i < count($_POST[$selectname]); $i++) {
    4.     if ($row_query[$value] == $_POST[$selectname][$i]) {
    5.      echo ' selected="selected"';
    6.     }
    7.    }
    8.   }
    9.