Как вставить и обновить несколько выбранных значений с помощью codeigniter? - PullRequest
0 голосов
/ 01 января 2019

Итак, у меня проблема со многими отношениями.В настоящее время у меня есть таблицы surat и surat_user.Как вставить данные в surat и одновременно вставить несколько значений из select2 нескольких форм в таблицу surat_user и как получить данные, чтобы я мог их обновить.

ОБНОВЛЕНИЕ : я решаю проблему вставки, см. Ответ ниже

Но теперь я не знаю , как обновить эти значения .Например,

surat_user

id_surat | id_user
    1    |  1
    1    |  2

Как обновить surat_user (в контроллере и модели), если я хочу удалить один из id_user, где 'id_surat = 1`

На данный момент я не знаю, как получить несколько значений в форме выбора select2, поэтому вот неполные коды:

Контроллер

public function edit_sm($id_surat){
    $this->load->view('template/header');       
    $this->load->view('template/sidebar');
    $where = array('id_surat' => $id_surat);
    //$data=array('id_status'=> $this->M_sm->get_option()); 
    $data['surat'] = $this->M_sm->edit_sm($where,'surat')->result();
    $this->load->view('v_edit_surat',$data);
    $this->load->view('template/footer');
}

public function edit_sm_proses() {
    $data = array(
        'id_surat'=>$this->input->post('id_surat'),
        'no_surat'=>$this->input->post('no_surat'),
        'id_status'=>$this->input->post('id_status'),
        'id_user'=>$this->input->post('id_user')
        );
    $where = array(
    'id_surat' => $id_surat
);

    $this->M_sm->edit_sm_proses($where,$data,'surat');
    redirect('SuratMasuk');
}

Модель:

public function edit_sm($where,$table){     
    $this->db->join('status_surat', 'status_surat.id_status = surat.id_status');
    return $this->db->get_where($table,$where);
}

public function edit_sm_proses($where,$data,$table){
    $this->db->where($where);
    $this->db->update($table,$data);
}

Просмотр

<section class="content">
    <div class="row">
      <div class="col-xs-12">
        <div class="box box-solid box-primary"">
          <div class="box-header with-border">
          <h3 class="box-title">Default Box Example</h3>
          </div>
          <!-- /.box-header -->
          <div class="box-body">
            <?php foreach ($surat as $key) { ?>
            <form method="post" action="<?php echo base_url()."SuratMasuk/edit_sm_proses" ?>" enctype="multipart/form-data" />
            <input type="hidden" name="id_surat" value="<?=$key->id_surat?>">


        <div class="form-group">
          <label class="control-label col-lg-2">No Surat</label>
          <div class="col-lg-5">
            <input type="text" name="no_surat" class="form-control no_surat" placeholder="Masukkan Nomor Surat" value="<?=$key->no_surat?>">
            <span class="help-block"></span>
          </div>
        </div>
        <br>
        <br>
        <div class="form-body">
        <div class="form-group">
          <label class="control-label col-lg-2">Status</label>
          <div class="col-lg-5">
            <select class="form-control select2 id_status" name="id_status" style="width: 100%;">
                <option value="<?=$key->id_status;?>" selected="<?=$key->id_status;?>"><?php echo $key->status;?></option>
                <?php foreach ($id_status as $row) { ?>
                <option value="<?php echo $row->id_status; ?>"> <?php echo $row->status; ?></option>

                <?php } ?>
                </select>
           <span class="help-block"></span>
          </div>
        </div>
      </div>
      <br>
      <br>
      <div class="form-body">
        <div class="form-group">
          <label class="control-label col-lg-2">Disposisi</label>
          <div class="col-lg-5">
            <select class="form-control select2 id_user" name="id_user[]" style="width: 100%;">
                <option value="<?=$key->id_user;?>" selected="<?=$key->id_user;?>"><?php echo $key->nama;?></option>
                <?php foreach ($id_user as $row) { ?>
                <option value="<?php echo $row->id_user; ?>"> <?php echo $row->nama; ?></option>

                <?php } ?>
                </select>
           <span class="help-block"></span>
          </div>
        </div>
      </div>  
          </div>
          <!-- /.box-body -->
          <div class="box-footer">
           <button class="btn btn-danger" type="reset" value="reset">Reset</button>
           <button class="btn btn-info">Update</button><br>
           <a href="<?php echo base_url(); ?>SuratMasuk/">Kembali</a>
          </form>
           <?php  
                }
                ?>
          </div>
          <!-- box-footer -->
          </div>
          <!-- /.box -->
    </div>
    <!-- /.col -->
  </div>
  <!-- /.row -->

</section>
<!-- /.content -->

Текущий результат: результат из кодов выше

Ответы [ 3 ]

0 голосов
/ 02 января 2019

Решить проблему самостоятельно.

Я меняю свой контроллер на это:

public function add_sm_proses(){
    $data = array(
        'no_surat'=>$this->input->post('no_surat'),
        'id_status'=>$this->input->post('id_status')    
    );
    $insert = $this->M_sm->trans_surat_user($data);
    if($insert=1){
        redirect('SuratMasuk');
    }   else {
        echo "<h2>Gagal menambahkan data</h2>";

    }
}

меняю мою модель наэто:

public function trans_surat_user($data){
    $this->db->trans_start();
    $this->db->insert('surat', $data);
    $id_surat = $this->db->query('SELECT surat.id_surat FROM surat ORDER BY id_surat DESC limit 1');
    foreach ($id_surat->result() as $row) {
        $id_surat_result = $row->id_surat;
    }
    $id_user = $_POST['id_user'];
    foreach ($id_user as $data2) {
        array_push($id_user, $data2);
        $this->db->query('INSERT INTO surat_user (id_surat,id_user) VALUES ('.$id_surat_result.','.$data2.')');

    }
    $this->db->trans_complete();
}
0 голосов
/ 02 января 2019

Во-первых, Показать все записи из БД и для каждой записи добавить кнопку для редактирования записи.

Примечание: - Не использовать <form> внутри цикла

<a class="btn btn-warning btn-sm" href="<?= base_url('SuratMasuk/edit_sm/'.$row->id_surat)?>"><i class="fa fa-pencil-square-o" aria-hidden="true"></i>Edit</a>

Контроллер для редактирования

Я просто добавляю код бэкэнда сюда

, где и таблица зарезервированное слово для БД.Лучше не использовать его или использовать по-другому.

public function edit_sm($id_surat){ 
    $condition_array = array('id_surat' => $id_surat);
    $data['surat'] = $this->M_sm->edit_sm($condition_array ,'surat');
}

Модель для редактирования

Получить запись для редактирования

Эта функция получает только одну запись из БД, поэтому используйте row()

public function edit_sm($condition_array ,$record_in){     
    $this->db->join('status_surat', 'status_surat.id_status = surat.id_status');
    return $this->db->get_where($record_in, $condition_array )->row();
}

Теперь будет показана форма для с заполненными в ней данными.

Получение обновленных данных из контроллера

public function edit_sm_proses() {
    $data = array(
        'id_surat'=> $this->input->post('id_surat'),
        'no_surat'=>$this->input->post('no_surat'),
        'id_status'=>$this->input->post('id_status'),
        'id_user'=>$this->input->post('id_user')
        );
    $condition_array = array(
    'id_surat' => $this->input->post('id_surat')
);

    $this->M_sm->edit_sm_proses($condition_array, $data, 'surat');
    redirect('SuratMasuk');
}

Обновление данных в модели

public function edit_sm_proses($condition_array, $data, $record_in){
    $this->db->where($condition_array);
    return $this->db->update($record_in, $data);
}
0 голосов
/ 02 января 2019
class SuratMasuk extends CI_Controller {
    public function add_sm_proses(){
    $data = array(
                'no_surat'=>$this->input->post('no_surat'),
                'id_status'=>$this->input->post('id_status'),   
        );

Выберите MAX ID из таблицы, подобной этой

    $id_surat = $this->db->query('SELECT MAX(surat.id_surat) AS maxid FROM surat')->row()->maxid;

Обновление: - $id_surat даст MAX ID присутствует в таблице.Не используйте для следующей записи.Сначала увеличьте его на значение 1, а затем используйте его

$id_surat = $id_surat + 1;
$id_user = $this->input->post('id_user') ? $this->input->post('id_user') : array();

Сначала проверьте, имеют ли $id_user значения или нет, иначе цикл foreach выдаст ошибку e

    if(count($id_user) > 0){
        foreach ($id_user as $u){
            $data_values = array('id_surat' => $id_surat, 'id_user' => $u);
            $this->db->insert('surat_user', $data_values);
        }
    }
    $insert = $this->M_sm->add_sm($data);

$insertне всегда вернет 1.Таким образом, только проверьте, существует ли значение

    if($insert){
            redirect('SuratMasuk');
        }   else {
            echo "<h2>Gagal menambahkan data</h2>";

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...