Как узнать какие из чекбоксов были нажаты

Статус
В этой теме нельзя размещать новые ответы.

dandandan

Мой дом здесь!
Регистрация
7 Авг 2008
Сообщения
1.036
Реакции
292
Есть нескольео checkbox'oв. Их имена формируются согласно правилу:
name="umy_".$ids
На странице может быть разное количество чекбоксов. Например их 5 штук. Заранее не известно какие значения может принимать переменная ids
Например получилось 5 имен:
umy_1
umy_2
umy_322
umy_43
umy_65

Пользователь может отметить некоторые чекбоксы. После отправки формы с чекбоксами необходимо узнать какие из чекбоксов были нажаты. Как оптимальнее это проверить?

Сейчас делаю так. формирую скрытое поле. В это поле вписывают значения переменной ids через знак подчеркивания
1_2_322_43_65 . После передачи формы скрипту распарсиваю эту строку и проверяю существует ли эта переменная
if (isset($GET['umy_322']))

Думаю можно проще поступить. Жду ваших вариантов.

Такая же проблема возникает при передачи большого количество полей для ввода данных, имена которых генерируются по определенному закону.
 
Формировать чекбоксы так
Код:
name="umy[" . $ids . "]"
В итоге у тебя будет массив $_GET['umy'] с индексами отмеченных чекбоксов.
 
1) Способ первый:
PHP:
for($i=0; $i<100000; $i++)
  if (isset($GET['umy_' . $i]))

несмотря на очевидный тупизм работает просто мегабыстро, так что лично я бы дальше ничего и не искал. Но ты, видимо, эстет, поэтому продолжим

2)
PHP:
foreach($_GET as $k => $v) 
  if (preg_match('/^umy_(\d+)$/', $k) && $v)

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


3)
Код:
<input name="umi[]" value=21 type=checkbox>
<input name="umi[]" value=48 type=checkbox>
<input name="umi[]" value=11 type=checkbox>

Отмечаешь птичками нужные чекбоксы, в PHP получаешь массив с только
выбранными значениями. Например $_GET[umi] = array(21,11).
 
Код:
<input name="umi[]" value=21 type=checkbox>
<input name="umi[]" value=48 type=checkbox>
<input name="umi[]" value=11 type=checkbox>

Отмечаешь птичками нужные чекбоксы, в PHP получаешь массив с только
выбранными значениями. Например $_GET[umi] = array(21,11).

Последний способ понравился. Попробую. :)
 
  • Заблокирован
  • #5
эт все круто.. а если были отмечены и юзер их снял.. ;)
 
А **х это знать кому-то нужно? :D
действительно :D

Ну в качестве предположения - если знаем какие были нажаты чекбосы и знаем какие были вообще в форме, то разница между нажатыми и общими даст как раз именно ненажатые :) :yahoo:
 
Тогда так:

Код:
<input type=hidden name="chk[48]" value=0>
<input type=checkbox name="chk[48]" value=1>

<input type=hidden name="chk[51]" value=0>
<input type=checkbox name="chk[51]" value=1>

<input type=hidden name="chk[70]" value=0>
<input type=checkbox name="chk[70]" value=1>

После сабмита делаешь
PHP:
foreach($_REQUEST['chk'] as $id => $val)
   if ($val)  // чекбокс $id был нажат
   else  // чекбокс $id присутствовал в форме, 
          // но его отжали или не нажимали

Только важно, чтоб hidden шли в коде выше чем соответствующие им checkbox. Можно вообще в самый верх формы всех вынести.
 
О-о-о какой изврат :eek:
HTML:
<input type=checkbox name="chk[X]" value="Y" />
Нахрена хидены то? :D
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху