Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Не передается checkbox value при сохранении


REDDI

Recommended Posts

На странице есть checkbox.  Значение меняю через JS

$('.maintenanceStatus .customInputYesNo').click(function (event) {
	if ($(this).is(':checked')){
		$(this).prop('checked', true);
		$(this).val(1);
	} else {
		$(this).prop('checked', false);
		$(this).val(0);
	}
});

Через исходный код значение value меняется. При сохранении, если value = 1 - все ок.
Если value = 0 - ошибка, что $this->request->post['config_maintenance'] не существует. 

Как быть? Заранее благодарю за помощь)

Надіслати
Поділитися на інших сайтах


8 минут назад, REDDI сказал:

На странице есть checkbox.  Значение меняю через JS


$('.maintenanceStatus .customInputYesNo').click(function (event) {
	if ($(this).is(':checked')){
		$(this).prop('checked', true);
		$(this).val(1);
	} else {
		$(this).prop('checked', false);
		$(this).val(0);
	}
});

Через исходный код значение value меняется. При сохранении, если value = 1 - все ок.
Если value = 0 - ошибка, что $this->request->post['config_maintenance'] не существует. 

Как быть? Заранее благодарю за помощь)

поставить проверку

if( isset($this->request->post['config_maintenance']) ) {
     что то делаем
}

 

  • +1 1
Надіслати
Поділитися на інших сайтах

2 минуты назад, Venter сказал:

поставить проверку



if( isset($this->request->post['config_maintenance']) ) {
     что то делаем
}

 

Проверку-то поставить можно, но почему 0 не передается? Не могу понять)

Надіслати
Поділитися на інших сайтах


52 минуты назад, REDDI сказал:

Проверку-то поставить можно, но почему 0 не передается? Не могу понять)

неотмеченные чекбоксы не передаются на сервак.

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

  • +1 1
Надіслати
Поділитися на інших сайтах

13 часов назад, REDDI сказал:

Понял) Тогда буду использовать - что есть.

Смотри, можно в модель прописать отсутствие параметра.

Вот пример

 public function editSetting($key, $value, $path, $store_id=0)
     {
     if(!is_array($value))
       {
         $this->db->query("INSERT INTO `".DB_PREFIX."setting` SET `store_id`='".(int)$store_id."', `code`='supertools_seo', `key`='".$this->db->escape($key)."', `value`='".$this->db->escape(json_encode(array($value=>$path), true))."', serialized='0'");
       }
        else
       {
         $custom_tabs=json_decode($this->getParam('supertools_seo_custom_tabs'));
        foreach($custom_tabs as $_key=>$_val)
         {
           $params[]=array($_key=>$_val);
         }
         $params[]=array($value[0]=>$path);
         $this->db->query("UPDATE `".DB_PREFIX."setting` SET `value`='".$this->db->escape(json_encode($params))."' WHERE `key`='".$this->db->escape($key)."' AND store_id='".(int)$store_id."'");
       }
     }

Может не совсем удобно для понимания...

Поясню.

Ты передаешь в функцию форму, а она (функция) должна сделать разбор формы, то есть в запрос к БД включить только те поля, которые имеются. Но если в таблице предустановленно NOT NULL, тогда необходимо создать условие, что если параметр отсутствует, добавлять значение по-умолчанию. Или в таблице указать значение по-умолчанию.

  • +1 1
Надіслати
Поділитися на інших сайтах

В 25.11.2021 в 11:22, nikifalex сказал:

поставить input type hidden value 0 перед input type checkbox и будет вам ноль передаваться.

тогда их нужно назвать одинаково, а в обработчике возникнет конфликт по именам. значит нужно добавить js-код, чтобы записать в скрытый инпут значение. но зачем? все нужно сделать в обработчике формы.

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

protected static function UpdateCat($post){
    if(!$post['id'])
    return self::NewCat($post);    

$arr=array('title','description','alias','metadesc','metakey','shortdesc','parent');
        $db = JFactory::getDBo();
        $query = "UPDATE #__freelance_cat SET ";
            foreach($arr as $a){
                if(!empty($post['section'.$a])){
                if($a=='parent'){
                    $q['parent'] ="parent=".$post['sectionparent'];
                }
                else    
                $q[] =$a."='".$post['section'.$a]."'";
                
                }
        }
    $query .=implode(',',$q);
    $query .=" WHERE  cat_id=".$post['id'];
    
        $db->setQuery( $query );    
       
       if (!$result = $db->query())
        {
                return array('error',JText::_('JLIB_UPDATE_DB_PROBLEMS')) ;
        }
        return array('success',JText::_('JLIB_UPDATE_DB_OK'));
    }

и в запросе будет UPDATE #__freelance_cat SET и все поля присутствующие.

я не даю готового решения, так как не вижу сам код.

Надіслати
Поділитися на інших сайтах

1 час назад, esculapra сказал:
В 25.11.2021 в 12:22, nikifalex сказал:

поставить input type hidden value 0 перед input type checkbox и будет вам ноль передаваться.

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

Это стандартная общепринятая практика во многих фреймворках - вот так создавать чекбоксы - сразу со скрытым инпутом с name тем же, что и у чекбокса и value = 0. В частности, Yii так делает. Никаких конфликтов не возникает.

  • +1 1
Надіслати
Поділитися на інших сайтах

  • 2 weeks later...
В 25.11.2021 в 12:15, esculapra сказал:

Смотри, можно в модель прописать отсутствие параметра.

Вот пример

 public function editSetting($key, $value, $path, $store_id=0)
     {
     if(!is_array($value))
       {
         $this->db->query("INSERT INTO `".DB_PREFIX."setting` SET `store_id`='".(int)$store_id."', `code`='supertools_seo', `key`='".$this->db->escape($key)."', `value`='".$this->db->escape(json_encode(array($value=>$path), true))."', serialized='0'");
       }
        else
       {
         $custom_tabs=json_decode($this->getParam('supertools_seo_custom_tabs'));
        foreach($custom_tabs as $_key=>$_val)
         {
           $params[]=array($_key=>$_val);
         }
         $params[]=array($value[0]=>$path);
         $this->db->query("UPDATE `".DB_PREFIX."setting` SET `value`='".$this->db->escape(json_encode($params))."' WHERE `key`='".$this->db->escape($key)."' AND store_id='".(int)$store_id."'");
       }
     }

Может не совсем удобно для понимания...

Поясню.

Ты передаешь в функцию форму, а она (функция) должна сделать разбор формы, то есть в запрос к БД включить только те поля, которые имеются. Самые свежие новости и события из мира криптовалют и блокчейна  https://v-tagile.ru/obschestvo-noyabr-2021/budushchee-kriptovalyut-i-blokchejna. Но если в таблице предустановленно NOT NULL, тогда необходимо создать условие, что если параметр отсутствует, добавлять значение по-умолчанию. Или в таблице указать значение по-умолчанию.

Спасибо огромное за наводку, вроде бы получилось

Змінено користувачем rabohag
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.