Ввод Codeigniter в базу данных с условием

#php #mysql #codeigniter #crud

#php #mysql #codeigniter #crud

Вопрос:

я новичок в codeigniter, у меня проблема, когда я хочу добавить некоторые данные с помощью ввода. В моем случае на первой странице он получит данные из базы данных пользователя, которые по умолчанию отображают информацию о доставке, этот ввод можно отредактировать, и если я нажму отправить, он сохранится в базе данных доставки. Первая проблема, когда я нажимаю отправить данные, они не могут сохраниться в базе данных. Как это исправить?. Во втором случае я хочу указать некоторое условие, если флажок установлен, данные ввода будут сохранены в базе данных пользователя по умолчанию и будут сохранены в базе данных доставки.

это моя модель (M_checkout) :

 public function get_user_by_id($customer_id)
{
    $data = $this->db->select('*')
        ->from('user')
        ->where('user_id', $customer_id)
        ->get()
        ->row();
    return $data;
}
public function add_delivery()
{
    $data = array();
    $customer_id = $this->input->post('user_id');
    $this->db->where('user_id', $customer_id);
    $data['user_id'] = $customer_id;
    $data['user_nama'] = $this->input->post('user_nama');
    $data['user_email'] = $this->input->post('user_email');
    $data['user_phone'] = $this->input->post('user_phone');
    $data['user_wa'] = $this->input->post('user_wa');
    $data['user_alamat'] = $this->input->post('user_alamat');
    $data['user_kota'] = $this->input->post('user_kota');
    $data['user_provinsi'] = $this->input->post('user_provinsi');
    $data['user_zip'] = $this->input->post('user_zip');
    $this->db->insert('delivery', $data);
    $customer_deliv_id = $this->db->insert_id();
    $sdata = array();
    $sdata['delivery_id'] = $customer_deliv_id;
    $this->session->set_userdata($sdata);
}
  

это мой контроллер (проверка):

  public function add_delivery_to_db()
{
    $this->form_validation->set_rules('user_nama', 'Nama', 'trim|required');
    $this->form_validation->set_rules('user_email', 'Email', 'trim|required');
    $this->form_validation->set_rules('user_phone', 'Nomer Telpon', 'trim|required|min_length[10]|max_length[12]');
    $this->form_validation->set_rules('user_wa', 'Nomer WA', 'trim|required|min_length[10]|max_length[12]');
    $this->form_validation->set_rules('user_alamat', 'Nomer Alamat', 'trim|required');
    $this->form_validation->set_rules('user_kota', 'Nomer Kota', 'trim|required');
    $this->form_validation->set_rules('user_provinsi', 'Nomer Provinsi', 'trim|required');
    $this->form_validation->set_rules('user_zip', 'Nomer Zip', 'trim|required|min_length[5]|max_length[5]');

    if ($this->form_validation->run()) {
        $delivery_post_id = $this->M_checkout->add_delivery(); 

        redirect('payment', 'refresh');
    } else {

        redirect('delivery', 'refresh');
    }
}
  

это мой взгляд (доставка) :

 <div class="columns">
    <p>

    </p>
    <div class="column is-3"></div>
    <div class="column is-6 has-addons-fullwidth">
        <form class="" action="<?= base_url() ?>add_deliv" method="POST">
            <section class="mt-2">
                <input class="input is-medium" type="text" placeholder="Nama" name="user_nama" value="<?= $user_info->user_nama ?>" disabled>
            </section>
            <section class="mt-2">
                <input class="input is-medium" type="email" placeholder="Email" name="user_email" value="<?= $user_info->user_email ?>" disabled>
            </section>
            <section class="mt-2">
                <input class="input is-medium" type="text" placeholder="No. Telepon" name="user_phone" value="<?= $user_info->user_phone ?>">
            </section>
            <section class="mt-2">
                <input class="input is-medium" type="text" placeholder="Whatapp" name="user_wa" value="<?= $user_info->user_wa ?>">
            </section>
            <section class="mt-2">
                <input class="input is-medium" type="text" placeholder="Alamat" name="user_alamat" value="<?= $user_info->user_alamat ?>">
            </section>
            <section class="mt-2">
                <input class="input is-medium" type="text" placeholder="Kota" name="user_kota" value="<?= $user_info->user_kota ?>">
            </section>
            <section class="mt-2">
                <input class="input is-medium" type="text" placeholder="Provinsi" name="user_provinsi" value="<?= $user_info->user_provinsi ?>">
            </section>
            <section class="mt-2">
                <input class="input is-medium" type="text" placeholder="Kode Pos" name="user_zip" value="<?= $user_info->user_zip ?>">
            </section>
            <section class="columns mt-4">
                <div class="column">
                    <p class="has-text-white has-text-weight-semibold">
                        Simpan sebagai default
                    </p>
                </div>
                <div class="column">
                    <input class="checkbox is-white" type="checkbox" name="delivery_checkbox" value="on">
                </div>
            </section>


            <section class="columns">
                <div class="column"></div>
                <div class="column">
                    <button class="button is-danger is-medium">
                        Simpan amp; Lanjut
                    </button>
                </div>
                <div class="column"></div>

            </section>
        </form>
    </div>
    <div class="column is-3"></div>
</div>
  

это моя база данных доставки:доставка
это моя пользовательская база данных:user

это изображение представления доставкиdelivery.php

Извините за мой плохой английский. Пожалуйста, помогите мне. Я ценю каждый ответ.

Ответ №1:

INSERT операторы не должны содержать WHERE предложение. where Предложение никогда не будет выполнено и, следовательно, вставка никогда не будет выполнена.

where Предложение имело бы смысл при обновлении или замене записей (потому что это сузило бы существующие записи, которые вы фактически обновляете)

Удалите $this->db->where('user_id', $customer_id); инструкцию из вашего add_delivery метода, и вставки будут работать.

Что касается вставки только в том случае, если флажок установлен, есть много вариантов. Проще всего было бы:

 if ($this->form_validation->run()) {
    if ($this->input->post('delivery_checkbox') === 'on')
    {
       // only do the insert if the checkbox is actually ticked
       $delivery_post_id = $this->M_checkout->add_delivery();
    }


    redirect('payment', 'refresh');
}