Трабл с чекбоксами

Coder.ua

Guest
Но, я так сначала и делал! Но это не универсально! Я хочу чтобы на одной странице можно было как делать доступными для просмотра, так и наоборот запрещать просмотр....!

-~{}~ 10.08.05 19:17:

Вобщем, мне нужно одновременно обработать отмеченные и неотмеченные....
 

Денч

Новичок
Сделай так: отмечен флажок, значит, запрещай просмотр соответствующего текста.

Таким образом, тебе надо только собрать все отмеченные флажки, и запретить просмотр их текстов.
 

IntenT

SkyDiver
Денч
а как предлагаешь разрешать просмотр?

Coder.ua
объясню на пальцах, видимо ты просто не подумал как следует

допустим у тебя есть 3 элемента в списке чег-то там (назовем это статьей)
каждая из статей имеет флаг активности. Флаги активности должны изменяться через список, причем как устанавливаться так и сниматься.

id | Флаг активности |
-----------------------------
1 | [ ] |
2 | [х] |
3 | [ ] |
-----------------------------
[ПРИМЕНИТЬ]


рассмотрим одну строку подробнее. что мы имеем?
id статьи, и элемент формы checkbox
как уже говорилось раньше, невыбранные чекбоксы не передаются в запрос.
значит, чтобы узнать какие не были выбраны, надо знать какие вообще были в списке, и какие из них выбраны.

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

чтобы узнать, какие были не выбраны, надо знать какие id вообще есть на этой странице.
нет ничего проще. в каждую строку добавим hidden, сделаем из него массив, и передадим для каждой строки в соответствующий hidden значение id статьи из этой строки.

итого будем иметь:

id | Флаг активности
----------------------------------------------------------------------------------
<hidden name="id[]" value="1"> 1 | <checkbox name="active[1]" value=1>
<hidden name="id[]" value="2"> 2 | <checkbox name="active[2]" value=1 selected>
<hidden name="id[]" value="3> 3 | <checkbox name="active[3]" value=1>


Что делать дальше?
получаем $all = $_POST["id"]
получаем $active = array_keys($_POST['active'])
получаем $not_active = array_diff($all, $active);

что дальше делать, думаю объяснять не надо?
 

SelenIT

IT-лунатик :)
Эх, как все усложнили...

Почему бы не сделать два простых апдейта:
PHP:
"UPDATE ... SET t_enable = 1 WHERE t_id IN('".implode("','",$_POST["id"])."')"
"UPDATE ... SET t_enable = 0 WHERE t_id NOT IN('".implode("','",$_POST["id"])."')"
и потом выводить форму как всегда, ориентируясь лишь на исправленные записи в базе?
 

IntenT

SkyDiver
SelenIT
чудак-человек, а вариант, когда на странице только часть статей, мы не рассматриваем?
про постраничную навигацию не слышали?
 

SelenIT

IT-лунатик :)
в данном примере не рассматриваем ;)
в общем случае можно запомнить крайние значения параметра сортировки и добавить к условию соответствующий between, например.
 

IntenT

SkyDiver
SelenIT
тебе смоделировать ситуацию, когда твой алгоритм слажает? или сам додумаешь?

не пиши больше глупостей
 

Coder.ua

Guest
Сначала я воспользовался методом SelenIT поскольку он самый простой и логичный. И он мне почти подошел! Но когда я его удачно реализовал, то понял, что у меня немного другая ситуация. Тогда я воспользовался методом который предложит IntenT. Метод с двумя массивами. Немного гиморойный, но теперь с успехом применяю...
В общем, я свою проблему решил. Больщое всем спасибо за помошь!
Удачи!
 
Сверху