Объединение сообществ программистов и системных администраторов

Здравствуйте, столкнулся с проблемой записи данных от checkbox'ов в бд, точнее - при значении checked - данные записываются в бд, а вот снять флажок не получается

$cheked = ($option_row_switch['value'] == 1 ? 'checked' : '');
   echo '<input type="checkbox" name="parameter_value1['.$option_row_switch['option_id'].']" '.$cheked.' />';

if (isset($_POST['parameter_value1']))
   {
    foreach($_POST['parameter_value1'] as $option_id => $value1)
    {
     $value1 = (isset($value1)) ? 1 : 0;
     mysqli_query ($dbc, "UPDATE options SET value = '$value1' WHERE switch = 1 AND option_id = '$option_id'");
    }
   }

задан 17 Мар '12 20:28

изменен 17 Мар '12 20:31

10|600 символов нужно символов осталось
2

В вашем случае разумней получить список чекбоксов, если я правильно понял id группы чекбоксов записывается в поле switch. и сравнивать с полученными полями с сайта. если значение не пришло значит апдейтим в 0 если пришло 1.

как вариант, пожалуй идеальный в вашем случае заменить строку:

 echo '<input type="checkbox" name="parameter_value1['.$option_row_switch['option_id'].']" '.$cheked.' />';

на

echo '<input type="hidden" value="0" name="parameter_value1['.$option_row_switch['option_id'].']"/><input type="checkbox" name="parameter_value1['.$option_row_switch['option_id'].']" '.$cheked.' />';

т.е. hidden input с тем же именем перед checkbox'ом и эту строчку

 $value1 = (isset($value1)) ? 1 : 0;

заменить на

$value1 = $value1 ? 1 : 0;
ссылка

отвечен 17 Мар '12 21:25

изменен 17 Мар '12 22:08

нет в switch записывается разница для input, это нужно для различения - type="text" или type="checkbox" т.е. это вообще к делу не относиться. Параметр checked заносится в value

(17 Мар '12 21:36) ANTiK

@ANTiK доплнил ответ.

(17 Мар '12 21:51) FLK

спасибо за помощь

(17 Мар '12 22:45) ANTiK
10|600 символов нужно символов осталось
0

Потому что данные передаются когда установлена галочка.

ссылка

отвечен 17 Мар '12 20:46

это я понял, а как в бд занести параметр 0 для конкретного option_id?

(17 Мар '12 20:51) ANTiK

Ничего не заносите, просто при выводе проверяйте если этот параметр.

(17 Мар '12 20:56) exec

прошу прощения, но ведь в этой строке и идет проверка при выводе $cheked = ($option_row_switch['value'] == 1 ? 'checked' : ''); но так как в бд стоит 1 - он само собой покажет флажок, как после этого мне убрать с нее флажок?

(17 Мар '12 21:07) ANTiK

Я ничего не понял.

(17 Мар '12 21:21) exec

если в строке value в бд прописана 1 - нам выдает checked для чекбокса, если 0 - соответственно - чекбокс остается пустым, так вот - каким образом поменять 1 на 0 в бд, учитывая что работать нужно не с одним чекбоксом а с несколькими

(17 Мар '12 21:34) ANTiK
10|600 символов нужно символов осталось
0

Вот этот фрагмент что-то не нравится:

...
if (isset($_POST['parameter_value1']))
   {
    foreach($_POST['parameter_value1'] as $option_id => $value1)
    {
    ...
    }

Что вы здесь пытаетесь сделать? Переменная "$_POST['parameter_value1']" содержит одно значение - "true" или "false". Что вы пытаетесь вытащить из переменной в цикле "foreach"?

ссылка

отвечен 17 Мар '12 21:28

там массив значений, checkbox'ов то несколько

(17 Мар '12 21:32) ANTiK

Вот это 1 чекбокс =)

$cheked = ($option_row_switch['value'] == 1 ? 'checked' : '');
echo '<input type="checkbox" name="parameter_value1['.$option_row_switch['option_id'].']"'.$cheked.' />';
(17 Мар '12 21:35) Asen

Просто вырезал из кода:

$options_query_switch = mysqli_query($dbc, "SELECT * FROM options WHERE switch = '1' ORDER BY option_id");
while ($option_row_switch = mysqli_fetch_array($options_query_switch))
{     
     $cheked = ($option_row_switch['value'] == 1 ? 'checked' : '');
     echo '<li>'.$option_row_switch['parameter'].' - <input type="checkbox" name="parameter_value1['.$option_row_switch['option_id'].']" '.$cheked.' /></li>';
}
(17 Мар '12 21:54) ANTiK
10|600 символов нужно символов осталось
Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

ХэшКод - это совместно редактируемый форум вопросов и ответов для начинающих и опытных программистов.

Присоединяйтесь!

отмечен:

×9,939
×3,042

задан
17 Мар '12 20:28

показан
1028 раз

обновлен
18 Мар '12 11:13

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Железный партнер
Рейтинг@Mail.ru