[РЕШЕНО] Передача значений checkbox в базу данных Opencart/OcStore 3.x

Тема в разделе "Общие вопросы", создана пользователем Иван Николаев, 23 ноя 2022.

  1. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Там только 1 ошибка. больше ничего
     
  2. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    743
    Симпатии:
    100
    Ну и вот эта строчка:

    result_checkbox = '" . $this->db->escape($data['result_checkbox']) . "'

    Вы уверены, что там в $data['result_checkbox'] то значение, которое вы установили тут
    $data['result_checkbox'] = implode(',', $this->request->post['result_checkbox']);
    ?
     
    Иван Николаев нравится это.
  3. Blast

    Blast Продвинутый пользователь

    Сообщения:
    212
    Симпатии:
    74
    как метод модели вызываете в контроллере? небось массив post туда просто передаете
    тогда от такой обработки в контроллере толку нет
     
  4. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    БД: result_checkbox - varchar(255)
     
  5. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Да, я же выше код прислал. Сейчас еще раз кеш почищу.
     
  6. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    743
    Симпатии:
    100
    Модификаторы чистили? Может у вас контроллер еще модификаторами корректируется
     
  7. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Ну у меня просто передаются данные как указал выше. Больше ничего в контроллер не добавлено. Если честно смотрел вариант с вывода текста.
     
  8. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    в самом модификаторе код такой же.
     
  9. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    743
    Симпатии:
    100
    Пришлите хотя бы строчку, в которой вызывается модель, тогда хоть понятнее станет. А лучше полностью методы контроллера и модели (если это не что-то секретное), а то так можно долго воду палкой разгонять.
     
  10. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    модель
    Код:
    $this->db->query("INSERT INTO " . DB_PREFIX . "customer SET firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', result_checkbox = '" . $this->db->escape($data['result_checkbox']) . "', date_added = NOW()");
     
    Последнее редактирование: 23 ноя 2022
  11. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    743
    Симпатии:
    100
    Не сильно изменило ситуацию. Плюс SQL некорректный, так как таблица не указана
     
  12. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Исправил.
     
  13. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Вообще переделываю регистрацию, а кастомные поля там использовать не удобно, т.к. потом нужно подключать туда много модулей сторонних. Решил сделать вот таким образом, но не получается.
     
  14. Ravilr

    Ravilr Специалист

    Сообщения:
    3.878
    Симпатии:
    1.064
    В моделе, перед запросом, сначала делаете так
    PHP:
    $result_checkbox implode(',',$data['result_checkbox']);
    Потом в запросе пишите так
    PHP:
    $this->db->escape($result_checkbox)
     
    Иван Николаев нравится это.
  15. Blast

    Blast Продвинутый пользователь

    Сообщения:
    212
    Симпатии:
    74
    ставлю на то, что там тупо вызывается модель $this->model_customer_customer->addCustomer($this->request->post)
     
  16. Иван Николаев

    Иван Николаев Пользователь

    Сообщения:
    108
    Симпатии:
    7
    Решился вопрос в модели как подсказал @Ravilr. Большое спасибо за помощь @Blast и @devimirochnik.

    Подскажите еще пожалуйста, как сделать проверку на нажатие checkbox? Я имею ввиду, чтобы пока не выбрали какой-нибудь вариант регистрация не прошла.

    controller
    Код:
            if (isset($this->error['result_checkbox'])) {
                $data['error_result_checkbox'] = $this->error['result_checkbox'];
            } else {
                $data['error_result_checkbox'] = '';
            }
    twig
    Код:
    {% if error_result_checkbox %}
                  <div class="text-danger">{{ error_result_checkbox }}</div>
                  {% endif %} 
    Вот так валидация должна быть?
    Код:
            if (isset($this->request->post['result_checkbox'])) {
                $this->error['result_checkbox'] = $this->language->get('error_result_checkbox');
            }    
     
    Последнее редактирование: 23 ноя 2022
  17. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    743
    Симпатии:
    100
    Вместо
    if (isset($this->request->post['result_checkbox'])) {

    Должно быть
    if ( !isset($this->request->post['result_checkbox']) ) {
     
    Иван Николаев нравится это.