Не изменяется значение в базе данных при изменении формы

#php #codeigniter

#php #codeigniter

Вопрос:

Когда я нажимаю сохранить значение обслуживания, если я нажимаю да, изменения сохраняются в db 1 и и 0 для no.

Но теперь он по какой-то причине застрял на 1 и не изменит значение строки обслуживания конфигурации с 1 на 0

Контроллер

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Setting extends MX_Controller {

    public function __construct(){
      parent::__construct();
      $this->load->library('user');
      $this->load->library('form_validation');
      $this->lang->load('english', 'english');
        $this->lang->load('setting/setting', 'english');
        $this->load->model('setting/model_setting');
        if($this->session->userdata('logged_in') == FALSE) {
         redirect('/');
      }
    }

    public function index() {

        $data['title'] = $this->lang->line('heading_title');

        if (($this->input->server('REQUEST_METHOD') == 'POST') amp;amp; $this->validate()) {

            $this->model_setting->editSetting('config', $this->input->post());

            redirect('store');
        }

        $data['heading_title'] = $this->lang->line('heading_title');

        $data['text_yes'] = $this->lang->line('text_yes');
        $data['text_no'] = $this->lang->line('text_no');

        $data['entry_maintenance'] = $this->lang->line('entry_maintenance');

        $data['help_maintenance'] = $this->lang->line('help_maintenance');

        $data['button_save'] = $this->lang->line('button_save');
        $data['button_cancel'] = $this->lang->line('button_cancel');

        $data['tab_general'] = $this->lang->line('tab_general');
        $data['tab_server'] = $this->lang->line('tab_server');

        $data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => $this->lang->line('text_home'),
            'href' => site_url('dashboard')
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->lang->line('heading_title'),
            'href' => site_url('setting')
        );

        $data['action'] = site_url('setting');

        if (null !==($this->input->post('config_maintenance'))) {
            $data['config_maintenance'] = $this->input->post('config_maintenance');
        } else {
            $data['config_maintenance'] = $this->input->get('config_maintenance');
        }

        $this->load->view('setting/setting', $data);
    }

    public function validate() {

    }
}
  

Модель

 <?php 
class Model_setting extends CI_Model {

    public function getSetting($group, $store_id = 0) {
        $data = array(); 

        $query = $this->db->query("SELECT * FROM " . $this->db->dbprefix . "setting 
            WHERE store_id = '" . (int)$store_id . "' AND `group` = " . $this->db->escape($group) . "
        ");

        foreach ($query->row() as $result) {
            if (!$result['serialized']) {
                $data[$result['key']] = $result['value'];
            } else {
                $data[$result['key']] = unserialize($result['value']);
            }
        }

        return $data;
    }

    public function editSetting($group, $data, $store_id = 0) {
        $this->db->query("DELETE FROM " . $this->db->dbprefix . "setting 
            WHERE store_id = '" . (int)$store_id . "' AND `group` = " . $this->db->escape($group) . "
        ");

        foreach ($data as $key => $value) {
            if (!is_array($value)) {
                $this->db->query("INSERT INTO " . $this->db->dbprefix . "setting 
                    SET store_id = '" . (int)$store_id . "', 
                    `group` = " . $this->db->escape($group) . ", 
                    `key` = " . $this->db->escape($key) . ", 
                    `value` = " . $this->db->escape($value) . "
            ");
            } else {
                $this->db->query("INSERT INTO " . $this->db->dbprefix . "setting 
                    SET store_id = '" . (int)$store_id . "', 
                    `group` = " . $this->db->escape($group) . ", 
                    `key` = " . $this->db->escape($key) .", 
                    `value` = " . $this->db->escape(serialize($value)) . ", 
                    serialized = '1'
                ");
            }
        }
    }

    public function editSettingValue($group = '', $key = '', $value = '', $store_id = 0) {
        if (!is_array($value)) {
            $this->db->query("UPDATE " . $this->db->dbprefix . "setting SET `
                value` = ". $this->db->escape($value) ." 
                WHERE `group` = " . $this->db->escape($group) . " 
                AND `key` = " . $this->db->escape($key) . " AND store_id = '" . (int)$store_id . "'");
        } else {
            $this->db->query("UPDATE " . $this->db->dbprefix . "setting SET `
                value` = ". $this->db->escape(serialize($value)) ." 
                WHERE `group` = ". $this->db->escape($group) ." 
                AND `key` = " . $this->db->escape($key) . " AND store_id = '" . (int)$store_id . "' 
                AND serialized = '1'");
        }
    }   

}
  

Ответ №1:

Я не буду утверждать наверняка, но похоже, что у вас нет никаких проверок при вызове вашей функции editSettings:

if($this->input->server('REQUEST_METHOD') == 'POST')

Возможно, вам следует добавить переменную URL или «удалить»? Установите флажок, чтобы убедиться, что оно установлено как соответствие, которое вы хотите что-то удалить. При вызове этой функции каждый раз, когда форма отправляется, независимо от каких-либо значений в форме, вызывается эта функция editSettings, которая удаляет объекты.

Комментарии:

1. Мне не нужно проверять, это не обязательно

2. ну, тогда я не уверен в вашей проблеме. Вы заявили, что строки удалялись из таблицы при отправке, и это была проблема, основанная на вашем единственном DELETE FROM заявлении, которое можно было бы ожидать, и я хотел бы отметить, что я считаю грубым с вашей стороны -1 ваш первый и все еще единственный ответ только потому, что вопрос был неправильно понят, время все еще ушло на попытку ответить на ваш вопрос.

3. Я изменил if (($this-> input-> server(‘REQUEST_METHOD’) == ‘POST’) amp;amp; $this-> validate()) и прекратил удаление строк. но когда я нажимаю на кнопку сохранения, значение config_maintenance не изменяется с 1 на 0 ноль, что означает отключение обслуживания

4. Итак, проверка устранила первоначальную проблему, но вызвала другую проблему?

5. ДА. Не изменяет значение с 1 на 0 и не перенаправляет после сохранения. обслуживание конфигурации не требует каких-либо проверок проверки, я создал функцию под индексом с именем public function validate()