Спасите, помогите... checkbox

x-mobi.ru
На сайте с 30.12.2007
Offline
88
4377

Дано:


<input type="checkbox" name="name[]" value="1" />
<input type="checkbox" name="name[]" value="1" checked />
<input type="checkbox" name="name[]" value="1" />

При отправке получаем:


array(
0 => 1
)

А нужно:


array(
0 => 0
1 => 1
2 => 0
)

Или:


array(
0 =>
1 => 1
2 =>
)

Суть в том, что не выделенный чекбокс не отправляет никаких данных... а нужно чтобы отправлялось хотя бы пустое значение. Ну вот почему разработчики html дали другим элементам формы эту возможность, а вот чекбокс обделили? :-\

Формат входных данных менять нельзя... можно, конечно, select'ом сделать, типа "да/нет", но лучше бы чекбоксом.

А, да, менять незья потому, что есть другие поля с именами в виде массивов (name1[], name2[]...), а ключи (номера элементов массивов) заранее не известны. Поэтому нужно чтобы отправленные данные были в равном друг другу количестве! (count(name1) = count(name2) = count(name3)). Чтобы я мог перебрать вот так все:

foreach(name as k => v) {

name1[k].....
name2[k].....
...
}

(Синтаксис чуток опустил...)

Спасите, помогите...:)

P.S. ну сам решение проблемы вижу в добавлении невидимого поля через JS, но это же бред %-)...

О_о
[Удален]
#1

в чем проблема?

<input type="checkbox" name="firstparam" value="1" />
<input type="checkbox" name="secondparam" value="1" checked />
<input type="checkbox" name="thirdparam" value="1" />

или так

<input type="checkbox" name="name[]" value="firstparam" />
<input type="checkbox" name="name[]" value="secondparam" checked />
<input type="checkbox" name="name[]" value="thirdparam" />
M
На сайте с 23.01.2009
Offline
12
#2

так попробуй, немного хитрости и все получится...


<form action = "" method = "post">
<input type="hidden" name="name[0]" value="0" />
<input type="checkbox" name="name[0]" value="1" />
<input type="hidden" name="name[1]" value="0" />
<input type="checkbox" name="name[1]" value="1" checked />
<input type="hidden" name="name[2]" value="0" />
<input type="checkbox" name="name[2]" value="1" />
<input type="submit">
</form>
написание скриптов... icq 377816882
x-mobi.ru
На сайте с 30.12.2007
Offline
88
#3

MOP1, перечитайте пост.

modobaks, спасибо, конечно, но вы тоже перечитайте пост :)

Входные данные менять нельзя еще вот почему. В разрабатываемом интерфейсе есть возможность ДОБАВЛЯТЬ дополнительные поля, т.е. из такого

<form action = "" method = "post">

<input type="checkbox" name="name[0]" value="1" />
<input type="checkbox" name="name[1]" value="1" checked />
<input type="checkbox" name="name[2]" value="1" />
<input type="submit">
</form>

Можно получить такое

<form action = "" method = "post">

<input type="checkbox" name="name[0]" value="1" />
<input type="checkbox" name="name[]" value="1" />
<input type="checkbox" name="name[1]" value="1" checked />
<input type="checkbox" name="name[2]" value="1" />
<input type="submit">
</form>

Сами догадаетесь, что получится? :)

M
На сайте с 23.01.2009
Offline
12
#4

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

Если немного пробежаться по функциям для массива в справочнике, то там уже готовые функции есть

x-mobi.ru
На сайте с 30.12.2007
Offline
88
#5

Конечно... можно было все поля (name, name1, name2...) объединить в fields[name], fields[name1], fields[name2]... и проблема бы отпала сама собой, т.е.:

foreach(fields as k => v) { 

if(isset(v[name]))... // вот тут как раз данные, идущие с чекбокса
v[name1]...
}

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

x-mobi.ru добавил 29.03.2009 в 17:48

modobaks:
Создай тогда заранее массив, наполни его нулями, а потом уже сливай воедино с массив переданный через post

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

Тем не менее непонятно почему чекбокс не отправляет пустых данных, что было бы логичнее.

UPD:

>> Создай тогда заранее массив, наполни его нулями, а потом уже сливай воедино с массив переданный через post

не, не получится... нумерация все равно не известна. Сливать нельзя

LEOnidUKG
На сайте с 25.11.2006
Offline
1725
#6

Что за бред?

Ну в классе подкрутите, чтобы отправлялись 0 и всё.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
bezludny
На сайте с 04.03.2009
Offline
42
#7
x-mobi.ru:
Дано:
А, да, менять незья потому, что есть другие поля с именами в виде массивов (name1[], name2[]...), а ключи (номера элементов массивов) заранее не известны. Поэтому нужно чтобы отправленные данные были в равном друг другу количестве! (count(name1) = count(name2) = count(name3)).

А что если попробовать привязаться к тем элементам, которые всегда присутствуют? В вашем случае name1, name2, name3...

и проверять, присутствует ли элемент с таким индексом в массиве значений от чекбокса??? Если не присутствует, значит, он не выбран (чекбокс в смысле...)

Например:



//значения присвоил для примера.
$index = 0;
$name[0] = 'Вася Пупкин';

if(!isset($_POST['checkbox_name']['index']))
$_POST['checkbox_name']['index'] = 0;

Конечно, это пример с одним значением... Но если идея сработает и будет Вам понятна, можно сделать цикл, в котором организовать такую конструкцию. Думаю, это сработает :)

x-mobi.ru
На сайте с 30.12.2007
Offline
88
#8
LEOnidUKG:
Что за бред?
Ну в классе подкрутите, чтобы отправлялись 0 и всё.

С удовольствием послушаю как :)

M
На сайте с 23.01.2009
Offline
12
#9

Типа этого.


// создаем массив
$a = array( 0, 0, 0, 0, ); // равное кол-ву чекбоксов
// затем полученный пост и все однерочки переписываем в массив $a
foreach( $_POST['name'] as $i => $v )
{
$a[$i] = $v;
}
x-mobi.ru
На сайте с 30.12.2007
Offline
88
#10
bezludny:
А что если попробовать привязаться к тем элементам, которые всегда присутствуют? В вашем случае name1, name2, name3...

А вот их еще можно удалить кнопочкой "Удалить поле" :) Не прокатит вариант.

x-mobi.ru добавил 29.03.2009 в 17:54

LEOnidUKG:
Что за бред?
Ну в классе подкрутите, чтобы отправлялись 0 и всё.

PHP-класс, кстати. Он обрабатывает ПРИШЕДШИЕ данные, а не отправляет их.

В общем не решаема задача в данной постановке :D

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий