Разработчику. Сборник рецептов PHP
Задавайте вопросы

Использование элементов формы
с несколькими вариантами значений

Вернуться назад

Задача

Есть элемент с несколькими значениями, такой как checkbox или select, но PHP видит только одно значение.

Решение

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

<input type="checkbox" name="boroughs[]" value="bronx"> The Bronx
<input type="checkbox" name="boroughs[]" value="brooklyn"> Brooklyn
<input type="checkbox" name="boroughs[]" value="manhattan"> Manhattan
<input type="checkbox" name="boroughs[]" value="queens"> Queens
<input type="checkbox" name="boroughs[]" value="statenisland"> Staten Island

В тексте программы рассматривайте эту переменную как массив:

print 'I love ' . join(' and ', $boroughs) . '!';

Обсуждение

Размещение квадратных скобок после имени переменной приказывает PHP считать переменную массивом, а не скалярной переменной. Когда PHP видит, что этой переменной присваивается другое значение, он автоматически увеличивает размер массива и размещает новое значение в конце этого массива. Выбор первых трех пунктов в разделе «Решение» был бы эквивалентен следующему коду в начале сценария:

$boroughs[] = "bronx";
$boroughs[] = "brooklyn";
$boroughs[] = "manhattan";

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

foreach ($_GET['boroughs'] as $b) {
$boroughs[] = strtr($dbh->quote($b),array('_' => '\_', '%' => '\%'));
}
$locations = join(',', $boroughs);

$dbh->query("SELECT address FROM locations WHERE borough IN ($locations)");

Этот синтаксис работает также с многомерными массивами:

<input type="checkbox" name="population[NY][NYC]" value="8008278">New York...

Если элемент отмечен, то он устанавливает элемент массива $population['NY']['NYC'] в 8008278.

Размещение квадратных скобок [] после имени переменной может вызвать проблемы в JavaScript при попытке обратиться к элементам. Вместо обращения к элементам по имени используйте числовой идентификатор. Можно также поместить имя элемента в одинарные кавычки. Другой путь состоит в том, чтобы присвоить элементу идентификатор; можно взять имя без квадратных скобок [], а затем использовать этот идентификатор. Дано:

<form>
<input type="checkbox" name="myName[]" value="myValue" id="myName">
</form>

следующие три конструкции относятся к одному и тому же элементу формы:

document.forms[0].elements[0]; // использование числового
               идентификатора
document.forms[0].elements['myName[]']; // использование имени
          в кавычках
document.forms[0].elements['myName']; // использование идентификатора,
          назначенного вами

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ