Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Checkbox, как обработать n-ое их количество 
:(
    Опции темы
MakNik
Дата 17.1.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 5.4.2006

Репутация: нет
Всего: 0



Есть множество свойств которые добавляются пользователем, и каждое из которых имеет свой уникальный ID, признак будет ли оно использоваться (Checkbox) и значение. 
Необходимо дать пользователю возможность на одной странице редактировать все свойства одновренменно либо по 10, 20, 50, 100 и т.д. свойств одновременно, т.е. выводить список состоящий из перечня свойств и дать возможность пользователю проставить "птички" будет ли свойство использоваться  и задать их значения. Далее, нажатием кнопки, все значения сохраняются и переходим к следующим значениям.
Все, что касается вывода я реализовал (Создается форма, в нее последовательно вывожу все свойства (Checkbox) и их значения). Как реализовать постраничное отображение тоже знаю, а вот как сохранить эти значения? Предпологаю, что нужно правильно проименовать эти значения, но как их обрабатывать?
Подскажите, пожалуйста, как можно реализовать такой механизм?
PM   Вверх
Sunvas
Дата 17.1.2008, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Как мне кажется, проще всего завести массив чекбоксов со значениями твоих этих свойств:
Код

<form name="form" action="test.php" method="post">

<input name="prop[]" type="checkbox" value="value1">
<input name="prop[]" type="checkbox" value="value2">
<input name="prop[]" type="checkbox" value="value3">

<input type="submit" value="Send">
</form>


Когда PHP скрипт получит значения формы, то в $_POST["prop"] будет находиться массив с выбранными (отмечеными) своствами - невыбраные свойства в этот массив не попадут. Соответственно, все, что нужно будет сделать - это проверить, находиться ли нужное свойство в этом массиве. Например так:
Код

  $props=$_POST["prop"];
  if (is_array($props))
  {
    if (in_array("value1", $props)) echo "1";
    if (in_array("value2", $props)) echo "2";
    if (in_array("value3", $props)) echo "3";
  }


Хранить значение в базе можно в текстовом поле, выполнив serialize($props). Когда нам нужно будет добыть значения из базы, нужно выполнить serialize() строки, полученой из базы. А потом if (in_array([имя параметра],$props)) .... Ну и т.д.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
GeneralElectric
Дата 17.1.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



Хранить в БД данные в сериализованном виде - это совсем неправильно. Тот, кому приходит такое в голову, должен задуматься - понимает ли он, что такое реляционная база данных, для чего она нужна, и чем отличается от плоского текстового файла.

Благо, у автора вопроса не должно возникнуть таких идей, поскольку параметр хранится в одной строке со значением.
PM MAIL   Вверх
Sunvas
Дата 17.1.2008, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(GeneralElectric @  17.1.2008,  12:16 Найти цитируемый пост)
Хранить в БД данные в сериализованном виде - это совсем неправильно.

Аргументы?

Добавлено через 1 минуту и 19 секунд
Сериализованый вид очень удобен тем, что без труда можно добавить или убрать какое-то значение. Не все базы одинаково полезны. К тому же, не в разделе БД мы.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
MakNik
Дата 17.1.2008, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 5.4.2006

Репутация: нет
Всего: 0



... а как передать не выбранные свойства?
PM   Вверх
GeneralElectric
Дата 17.1.2008, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



MakNik, они тебе не нужны. вполне достаточно отсутствия. у тебя же не одни чекбоксы, а еще и текстовые инпуты, которые придут все. Вот их и перебирай.



PM MAIL   Вверх
Sunvas
Дата 17.1.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(MakNik @  17.1.2008,  12:34 Найти цитируемый пост)
... а как передать не выбранные свойства?

А зачем? У тебя есть массив отмеченых! Когда в коде будешь проверять включено ли нужное свойство - достаточно будет делать in_array() и все. И не надо страдать хренью.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
MakNik
Дата 17.1.2008, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 5.4.2006

Репутация: нет
Всего: 0



... что-то не получается... мало опыта у меня...
Приведите, пожалуйста, пример  smile 
Допустим у меня генерируется такая форма:
Код

<form name="form" action="test.php" method="post">

Свойство 8<input type='Checkbox' name=chb[8] id=8 value='select' checked>
<select name='select[8]'>
<OPTION value='-1'>***
<OPTION  value='133'>133
<OPTION  value='160'>160
</select>
<input type='hidden' name='catn[8]' value='8'>
<br>

Свойство 10<input type='Checkbox' name=chb[10] id=10 value='select' >
<select name='select[10]'>
<OPTION value='-1'>***
<OPTION  value='20'>20
<OPTION  value='15'>15
</select>
<input type='hidden' name='catn[10]' value='10'>
<br>

Свойство 15<input type='Checkbox' name=chb[15] id=15 value='select' checked>
<select name='select[15]'>
<OPTION value='-1'>***
<OPTION  value='323'>323
<OPTION  value='10'>10
</select>
<input type='hidden' name='catn[15]' value='15'>
<br>

<input type="submit" value="Send">
</form>


как обработать в PHP эту форму?

PM   Вверх
GeneralElectric
Дата 17.1.2008, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



Для начала сделай print_r($_POST)
чтобы глазами посмотреть, что у тебя в переменных. это вообще очень важно - представлять себе, что лежит в переменных.

Там ты увидишь три массива. в частности - массив $_POST['select']
Его можно перебирать в цикле, получая пары ключ - значение. Ключ совпадает с ключом других массивов - следовательно, легко проверить их существование.

а вот поле catn в форме передавать бессмысленно
PM MAIL   Вверх
Sunvas
Дата 17.1.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



MakNik, во-первых, реальных пример я тебе уже дал, нужно проявить хоть немного внимательности к теме.
Во-вторых (по сабжу):
Так неправильно. Даже синтаксически неверено.
Код

<input type='Checkbox' name=chb[10] id=10 value='select' >

Я же писал, что должны отличаться ЗНАЧЕНИЯ чекбоксов, а не их имена. Т.е. в твоем случае надо так:

Код

<input type='Checkbox' name="chb[]" id="10" value="10">



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
SelenIT
Дата 17.1.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Sunvas @  17.1.2008,  14:25 Найти цитируемый пост)
Так неправильно. Даже синтаксически неверено.

Так тоже можно, на самом деле. PHP и это преобразует в массив. Хотя брать значения атрибутов HTML в кавычки желательно всегда - хотя бы во избежание сюрпризов из-за шального пробела.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Sunvas
Дата 17.1.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 8
Всего: 89



Цитата(SelenIT @  17.1.2008,  14:39 Найти цитируемый пост)
Так тоже можно, на самом деле. PHP и это преобразует в массив.

Неправильно!=не будет работать. Работать этот вариант, безусловно будет. Вот только интересно, зачем в даном случае для 1го, 2го, 3го и т.д. прописывать идентификаторы? По-моиму это лишнее телодвижения. А то, что в кавычки нужно брать - так это элементарные правила хорошего тона.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
SelenIT
Дата 17.1.2008, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Sunvas @  17.1.2008,  14:44 Найти цитируемый пост)
Вот только интересно, зачем в даном случае для 1го, 2го, 3го и т.д. прописывать идентификаторы?

В данном случае, пожалуй, незачем. Но бывают (хоть и редко) задачи, когда удобнее передавать одновременно и id, и значение - например, при уточнении уже отфильтрованного по каким-то критериям диапазона. А "синтаксически неверно" - имхо, это как раз "не работает" (а-ля Parse Error).

Цитата(Sunvas @  17.1.2008,  14:44 Найти цитируемый пост)
А то, что в кавычки нужно брать - так это элементарные правила хорошего тона.

Не только хорошего тона, но и страховки от сюрпризов.

Это сообщение отредактировал(а) SelenIT - 17.1.2008, 15:00


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
GeneralElectric
Дата 17.1.2008, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 797
Регистрация: 11.1.2008

Репутация: 13
Всего: 16



В данном случае, как раз, есть, зачем - проверять через empty, а не array_search
PM MAIL   Вверх
MakNik
Дата 17.1.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 5.4.2006

Репутация: нет
Всего: 0



Вот что получилось:
Код

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<form name="form" action="test.php" method="post">

Свойство 8<input type='Checkbox' name='chb[8]' id='8' value='select' checked>
<select name='select[8]'>
<OPTION value='-1'>***
<OPTION  value='133'>133
<OPTION  value='160'>160
</select>
<input type='hidden' name='catn[8]' value='8'>
<br>

Свойство 10<input type='Checkbox' name='chb[10]' id='10' value='select' >
<select name='select[10]'>
<OPTION value='-1'>***
<OPTION  value='20'>20
<OPTION  value='15'>15
</select>
<input type='hidden' name='catn[10]' value='10'>
<br>

Свойство 15<input type='Checkbox' name='chb[15]' id='15' value='select' checked>
<select name='select[15]'>
<OPTION value='-1'>***
<OPTION  value='323'>323
<OPTION  value='10'>10
</select>
<input type='hidden' name='catn[15]' value='15'>
<br>

<input type="submit" value="Send">
</form>

<?
   print_r($_POST);

foreach ($catn as $select_val) {
   Print "<br>Свойство $select_val, значение $select[$select_val]";
if ( isset( $chb[$select_val] ) ) 
  {
      print ", Используется";
   } else 
  {
      print ", НЕ используется";
   };
}

?>


Я правильно сделал или есть еще подводные камни?
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3065 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.