burunduk, ну-у-у-у... тут JS... я не спорю, что можно))) обойти все чекбоксы, проверить на выделение, да добавить невидимые поля... впрочем, наверное так и сделаю, ибо проще)
p.s. но опять же, вдруг у юзера отключены ява-скрипты... хотя таких по сути мало
Ну, перечитайте мой пост.
Просто мой php-класс может брать значения из одноуровневых массивов принятых из формы, с заранее не не известными ключами... но только одноуровневых, вот нужно сделать рекурсивную проверку любой вложенности. Данные то приходят в таком виде $_POST['name'][0], а имя поля то name[] - ключа нету, приходится в каждый запуск метода, выводящего такой элемент, делать инкремент счетчика, получая при этом номер ячейки. С многоуровневыми массивами нужно делать рекурсию...
Но это уже не проблема. А вот то, что чекбокс стандартно не отправляет пустые данные - это проблема)
А так не охото везде костыли подставлять...) Ладн, всем спасибо, парочка решений проблемы наметилась.
В неуниверсальности :) Такие решения тяжелые и требующие доработки любого интерфейса, когда как сделав 1 раз все правильно, можно использовать и более. Чем я и займусь.
Не известен порядковый номер... это редактор характеристик товаров, можно добавлять, удалять, сортировать данные и т.п., но кол-во заранее не известно.
x-mobi.ru добавил 29.03.2009 в 18:03
В данном случае нерешаема, более менее постоянных нет. В общем нужно объединить поля, которые должны быть в равном количестве, в 1 массив, поля - 1 уровень, данные полей - 2 уровень. Иначе чексбокс сведет сума.
p.s. убедился, что я и никто другой данную проблему не решит, тогда пойду менять...)
p.p.s. а, да, если использовать порядковые номера, можно было бы их обновлять у каждого поля при каждом удалении/обновлении полей, но это опять же JS и костыль.
А вот их еще можно удалить кнопочкой "Удалить поле" :) Не прокатит вариант.
x-mobi.ru добавил 29.03.2009 в 17:54
PHP-класс, кстати. Он обрабатывает ПРИШЕДШИЕ данные, а не отправляет их.
В общем не решаема задача в данной постановке :D
С удовольствием послушаю как :)
Конечно... можно было все поля (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
Кстати идея, не подумал (но тут тоже непонятно сколько нужно наполнить, число полей заранее не известно)... не люблю просто я костылями пользоваться, а приходится. Да можно изменить на самом деле, просто уже другие места править нужно.
Тем не менее непонятно почему чекбокс не отправляет пустых данных, что было бы логичнее.
UPD:
>> Создай тогда заранее массив, наполни его нулями, а потом уже сливай воедино с массив переданный через post
не, не получится... нумерация все равно не известна. Сливать нельзя
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>
Сами догадаетесь, что получится? :)
А Садовский говорит еще, что они научились... что делать? А ничего, у меня таже проблема, отписываются шаблонами, потом говорят с сайтом все ОК, скоро вернется и... и все, тишина. На диалог идти никто не хочет