А как можно сохранять значения checkbox'ов если их имена = массив[]

kif0rt

Новичок
А как можно сохранять значения checkbox'ов если их имена = массив[]

Знаю, тема сто раз обсуждалась. Я знаю как сохранить значение чекбокса в общем случае :

PHP:
<input type="checkbox" name="cb" value="something" <?php if (isset($cb)) { echo 'checked'; } ?>>
Но как сохранять значения если много чекбоксов их имена в массиве ? т.е. :

<input type="checkbox" name="cb[]" value="something">
<input type="checkbox" name="cb[]" value="something2">
<input type="checkbox" name="cb[]" value="something3"> и т.д.

Мне на ум приходило два варианта :

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

2. Пытался проерять с помощью isset. Получился изврат типа этого ... к тому же и не работает :
PHP:
<input type="checkbox" name=cb[] value="id1" <? if (isset($cb[count($cb)-1])) echo "checked";   ?>>
<input type="checkbox" name=cb[] value="id2" <? if (isset($cb[count($cb)-1])) echo "checked";   ?>>
<input type="checkbox" name=cb[] value="id3" <? if (isset($cb[count($cb)-1])) echo "checked";   ?>>


Форум внимательно читал, поэтому на 99% уверен что такого решения нет ... Если упостил что-то, извините.
 

tf

крылья рулят
Форум внимательно читал, поэтому на 99% уверен что такого решения нет ... Если упостил что-то, извините.
а какая разница?

-~{}~ 18.01.07 00:48:

А как можно сохранять значения checkbox'ов если их имена = массив[]
можно в базу можно в файл
 

GemVit

Новичок
Ответ на вопрос "как сохранять" напрямую зависит от того, куда сохранять.
Почему обязательно cb[], а не, например, cb[id2]...
Конкретно по 2ому варианту:
PHP:
<? if (!isset($cb) || !is_array($cb)) $cb = array();?>
<input type="checkbox" name="cb[]" value="id1"<?=(in_array('id1', $cb) ? ' checked' : '')?>>
<input type="checkbox" name="cb[]" value="id2"<?=(in_array('id2', $cb) ? ' checked' : '')?>> 
...
 

kif0rt

Новичок
Я наверное не совсем корректно выразился ... Под "сохранять" я имел в виду сохранять значения флажков при нажатии кнопки submit например .. т.е. отметил флажки --> нажал submit, а они отсались на месте ...
 

Фанат

oncle terrible
Команда форума
странные ответы. вроде бы, толком хотел ответить GemVit, но куда-то в сторону его унесло.
kif0rt
1. писать чекбоксы можно не в массив и строками - ch1,ch2,ch3
и в скрипте разбирать в цикле переменную $_POST['ch'.$i]
2. тебе сказал GemVit - подставлять индекс массива в квадратные скобки. по этому же индексу и определять, отмечен чекбокс, или нет.
Форум внимательно читал, поэтому на 99% уверен что такого решения нет ... Если упостил что-то, извините.
ню-ню
 

GemVit

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

kif0rt

Новичок
Вообщем ясно. Нужно использовать индексы. Спасибо всем и Фанату в частности.

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


PHP:
<? if (isset($cb[count($cb)-1])) echo "checked";   ?>
 

Фанат

oncle terrible
Команда форума
"по логике правильные коды" надо отлаживать, чтобы найти в них ошибку.
отладка подразумевает многократный запуск скрипта.
чего читатели форума в браузере сделать не могут
 

Gorynych

Посетитель PHP-Клуба
kif0rt

мне кажется, что "проблема" провери в том, что при задании поля ввода в виде:
PHP:
<input type="checkbox" name="cb[]" ... >
просто порождает массив, нумеруемый автоматически, а отправка данных пересылает только отмеченные значения (т.е. размерность полученного массива зависит от количества отмеченных checkbox'ов).

лично мне кажется более правильным и надежным способом инициализировать значения индексов:
PHP:
<input type="checkbox" name="cb[0]" ... >
<input type="checkbox" name="cb[1]" ... >
...
<input type="checkbox" name="cb[N]" ... >
и, помимо существования в присланных данных самого массива, проверять существование элемента с нужным индексом.
 

kif0rt

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