Хранение и отображение нескольких выбранных элементов

Я использую поле множественного выбора, как показано ниже:

<select multiple="pages" id="pages" name="pages[]">
    <option value="Home Page">Home Page</option>
    <option value="Contact Us">Contact Us</option>
    <option value="Support">Support</option>
</select>

Список страниц генерируется из другой таблицы в базе данных.

На данный момент я взрываю $_POST['pages'] и сохраняю строку в базе данных. Каков более эффективный метод хранения выбранных значений?

И, наконец, как я могу по-прежнему отображать все страницы (полученные из другой таблицы в базе данных) и выбирать страницы, выбранные пользователем, в этом поле множественного выбора.

Например. Пользователь выбрал «Свяжитесь с нами» — при отображении всех страниц на странице редактирования запись «Свяжитесь с нами» выделяется (выбирается).


person Hammo    schedule 23.08.2012    source источник


Ответы (2)



Нет более эффективного способа хранения $_POST['pages'] в базе данных, кроме превращения атрибута value в местоположения массива.

$type = array("Home Page","Contact Us","Support");

Для сохранения выбранных элементов (для POST) идеально подходит массив. Например:

if(isset($_POST['submit'])){
    echo "<select name=\"pages\" id=\"pages\" names=\"pages[]\">";
    foreach($t as $loc=>$type)
        echo "<option value=\"$loc\">$type</option>";
    echo "</select>";
}else{
    echo "<select name=\"pages\" id=\"pages\" names=\"pages[]\">";
     foreach($t as $loc=>$type)
        if($_POST['pages'] == $loc) //select that item
            echo "<option value=\"$loc\" selected=\"selected\">$type</option>";
        else
            echo "<option value=\"$loc\">$type</option>";
    echo "</select>":
}

При выборе элементов на основе данных из базы данных просто замените в операторе if в строке 9 $loc расположением массива, которое вы сохранили в базе данных.

person Glenn Dayton    schedule 24.08.2012
comment
Для максимальной переносимости используйте только selected, а не selected="selected". - person Barmar; 24.08.2012
comment
Да, я обычно так и делаю, но это неправильный HTML - person Glenn Dayton; 24.08.2012
comment
Да, это так. Спецификация HTML называет это минимизированной формой и упоминает, что многие пользовательские агенты распознают только эту форму. См. w3.org/TR/html4/intro/sgmltut. .html#h-3.3.4.2. - person Barmar; 24.08.2012
comment
Я не могу заставить его работать. Страницы хранятся в базе данных в таком формате Home Page,Contact Us,Support - я не знаю, как их поместить в массив $loc - person Hammo; 24.08.2012
comment
@Hammo $loc ссылается на индекс, вы бы не поместили их в этот массив. - person Glenn Dayton; 24.08.2012