如何使用codeigniter插入和更新多个所选值?

时间:2019-01-01 18:38:15

标签: mysql codeigniter

所以我对多对多关系有疑问。 目前,我有suratsurat_user表。 如何将数据插入surat并同时将来自select2多个表单的多个值插入surat_user表中,以及如何获取数据以便更新它。

更新: 我解决了插入问题,请参见下面的答案

但是现在我不知道如何更新这些值。 例如

surat_user

id_surat | id_user
    1    |  1
    1    |  2

如果我要删除其中{id_surat = 1`的surat_user中的一个,如何更新id_user(在控制器和模型中)

此刻,我不知道如何将多个值提取到select2表单编辑中,所以这里是mu不完整的代码:

控制器

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 -->

当前结果: result from codes above

3 个答案:

答案 0 :(得分:0)

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>";

        }
    }
}

答案 1 :(得分:0)

设法自己解决问题。

我将我的控制器更改为此:

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();
}

答案 2 :(得分:0)

首先,显示数据库中的所有记录,并为每个记录添加一个按钮以编辑记录。

注意:-请勿在循环内使用<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();
}

现在,Form for将显示其中填充的数据。

从Controller获取更新的数据

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);
}