Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


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'] не суещёствует. 

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

Ссылка на комменирий
Погделиться на других сайих


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
Ссылка на комменирий
Погделиться на других сайих

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

какашки кидать в сторону того, кто придумывал хтмл

  • +1 2
Ссылка на комменирий
Погделиться на других сайих

В 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 и все поля присутствующие.

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

Ссылка на комменирий
Погделиться на других сайих

17 минут назад, esculapra сказал:

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

не курите потому чтольше эту траву. Лучше курите справочник html

Ссылка на комменирий
Погделиться на других сайих

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

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

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

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

  • +1 1
Ссылка на комменирий
Погделиться на других сайих

Лучше это сгделать через radio

пример

 

Ссылка на комменирий
Погделиться на других сайих

  • 2 негдели спустя...
В 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
Ссылка на комменирий
Погделиться на других сайих


Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.