在mysql codeigniter中的一个查询中插入和更新

时间:2016-08-03 11:01:30

标签: php jquery html mysql codeigniter

我是codeigniter的新手,我正在做以下事情,但我没有得到解决方案。

以下是一个接一个的事情。

  1. 首先,我从数据库中获取数据,并通过foreach循环以表格格式显示。

    <?php
    

    $ attributes = array('class'=&gt;'form-horizo​​ntal','id'=&gt;'update_form'); echo form_open('emp_hodm_update / update_hodm',$ attributes); ?&GT;

      日期   工作   伙伴   导向器   时间   任务   状态   行动                 date;?&gt;“class =”“/&gt;                 工作;?&gt;“class =”“/&gt;                 合作伙伴;?&gt;“class =”“/&gt;                 导演;?&gt;“class =”“/&gt;                 时间;?&gt;“class =”“/&gt;                 任务;?&GT;                 状态;?&GT;                 删除            

     
  2. 通过单击“添加”按钮,它会创建新行,因此我想更新旧数据以及通过添加按钮创建的新行数据以插入表格。

  3. 但我不知道该怎么做。

  4. 控制器:

    public function update_hodm(){
    
    /* Checking the all validation of task form*/
    //$this->form_validation->set_rules('date', 'Date', 'required');
    $this->form_validation->set_rules('work[]', 'Types of Work', 'required');
    //$this->form_validation->set_rules('partner[]', 'Worked With', 'required');
    $this->form_validation->set_rules('director[]', 'Director', 'required');
    $this->form_validation->set_rules('time[]', 'No Of Hours', 'required');
    $this->form_validation->set_rules('task[]', 'Task Details', 'required');
    $this->form_validation->set_rules('status[]', 'Task Status', 'required');
    
    if ($this->form_validation->run()) {
        /* Taking the data from form*/
        $todayDate = date('Y-m-d');
        $work=$this->input->post('work');
        $partner=$this->input->post('partner');
        $director=$this->input->post('director');
        $time=$this->input->post('time');
        $task=$this->input->post('task');
        $status=$this->input->post('status');
    
        $count=count($this->input->post('work'));
        $data =array();
        for($i=0; $i<$count; $i++) {
        $data[$i] = array(
            'name'       =>$this->session->userdata('emp_name'),
            'date'       =>$todayDate,
            'work'       =>$work[$i],
            'partner'    =>$partner[$i],
            'director'   =>$director[$i],
            'time'       =>$time[$i],
            'task'       =>$task[$i],
            'status'     =>$status[$i]
            );
            }
            $add=$this->update->update_hodm($data,$todayDate);
            /* Display Success message if data updated successfully in database*/
    
                if($add){
                    $this->session->set_flashdata('hodm_form',"All HODM Data Inserted Successfully.");
                    $this->session->set_flashdata('hodm_form_class','alert-success');
                }else{
                    /* Displaying the error message*/
                    $this->session->set_flashdata('hodm_form',"failed to add, Please Try again");
                    $this->session->set_flashdata('hodm_form_class','alert-danger');
                }
            return redirect('home');
    } else {
        $this->load->view('public/digital_hodm_view');
    }
    }
    

    型号:

    public function update_hodm($data,$todayDate){
            $this->db->where('date',$todaydate);
            $this->db->update_batch('task_form', $data,'date');//date is my table column name 
            return true;
        }
    
    1. 请帮我找到解决方案。
    2. 提前致谢

3 个答案:

答案 0 :(得分:0)

如果该表中有唯一/主键,请为每个数据添加密钥。假设密钥为task_id,请更新控制器中的代码:

    ...
    ...
    ...
    'task'       =>$task[$i],
    'status'     =>$status[$i]
    );  
    if(!empty($task_id[$i]))$data[$i]['task_id'] = $task_id[$i]; //Add task ids for old data
   }
   $add=$this->update->update_hodm($data,$todayDate);

在您的模型中,使用以下代码更新函数:

foreach($data as $array)
{
  $query = 'INSERT INTO `table` SET ';
  $sep = $setvalues = '';
  foreach($array as $key=>$value) {
    $setvalues .=  $sep.$key.' = "'.$value.'"';
    $sep = ',';
  }
  $query .= $setvalues.' ON DUPLICATE KEY UPDATE '.$setvalues.';';      
  $this->db->query($query);
}

答案 1 :(得分:0)

查看:

<?php
$attributes = array(
    'class' => 'form-horizontal',
    'id' => 'update_form'
);
echo form_open('emp_hodm_update/update_hodm', $attributes);
?>
<table class="table table-striped table-hover table-responsive">
<thead>
<tr class="">
  <th>date</th>
  <th>Work</th>
  <th>Partner</th>
  <th>Director</th>
  <th>Time</th>
  <th>Task</th>
  <th>Status</th>
  <th>Action</th>
</tr>
</thead>
<tbody>
<?php

foreach($result as $row)
    { ?>
    <tr>
    <td>
      <input class="form-control" type="hidden" name="form_id[]" value="<?php
    echo $row->form_id; ?>" class="" />
      <input class="form-control" type="text" name="date[]" value="<?php
    echo $row->date; ?>" class="" />
    </td>
    <td>
      <input class="form-control" type="text" name="work[]" value="<?php
    echo $row->work; ?>" class="" />
    </td>
    <td>
      <input class="form-control" type="text" name="partner[]" value="<?php
    echo $row->partner; ?>" class="" />
    </td>
    <td>
      <input class="form-control" type="text" name="director[]" value="<?php
    echo $row->director; ?>" class="" />
    </td>
    <td>
      <input class="form-control" type="text" name="time[]" value="<?php
    echo $row->time; ?>" class="" />
    </td>
    <td>
      <textarea class="form-control" name="task[]" rows="2" id=""><?php
    echo $row->task; ?></textarea>
    </td>
    <td>
      <textarea class="form-control" name="status[]" rows="2" id=""><?php
    echo $row->status; ?></textarea>
    </td>
    <td>
      <a href="" class="btn btn-danger">Delete</a>
    </td>
    </tr>
    <!--
    start :if extra row is add on the button click 
    -->
    <tr>
        <td>
            <input class="form-control" type="text" name="date[]" value="" class="" />
            <!--
            make sure at time of addition value of form_id[] should be empty
            -->
            <input class="form-control" type="hidden" name="form_id[]" value="" class="" />
        </td>
        <td>
            <input class="form-control" type="text" name="work[]" value="" class="" />
        </td>
        <td>
            <input class="form-control" type="text" name="partner[]" value="" class="" />
        </td>
        <td>
            <input class="form-control" type="text" name="director[]" value="" class="" />
        </td>
        <td>
            <input class="form-control" type="text" name="time[]" value="" class="" />
        </td>
        <td>
            <textarea class="form-control" name="task[]" rows="2" id=""></textarea>
        </td>
        <td>
            <textarea class="form-control" name="status[]" rows="2" id=""></textarea>
        </td>
        <td>
            <a href="" class="btn btn-danger">Delete</a>
        </td>
    </tr>
    <!--
    end :
    -->
<?php
    } ?>
</tbody>
</table> 
<input class="btn btn-primary" type="submit" name="submit" value="submit">
<input class="btn btn-primary" type="submit" name="submit" value="add">
<?php
echo form_close();
?>

<强>控制器:

public function update_hodm(){
    /* Checking the all validation of task form*/

    // $this->form_validation->set_rules('date', 'Date', 'required');

    $this->form_validation->set_rules('work[]', 'Types of Work', 'required');

    // $this->form_validation->set_rules('partner[]', 'Worked With', 'required');

    $this->form_validation->set_rules('director[]', 'Director', 'required');
    $this->form_validation->set_rules('time[]', 'No Of Hours', 'required');
    $this->form_validation->set_rules('task[]', 'Task Details', 'required');
    $this->form_validation->set_rules('status[]', 'Task Status', 'required');
    if ($this->form_validation->run()) {
        foreach($_POST['form_id'] as $key => $value) {
            $data = array(
                'name' => 'aman',
                'date' => $_POST['date'][$key],
                'work' => $_POST['work'][$key],
                'partner' => $_POST['partner'][$key],
                'director' => $_POST['director'][$key],
                'time' => $_POST['time'][$key],
                'task' => $_POST['task'][$key],
                'status' => $_POST['status'][$key]
            );
            if (!empty($value)) {

                // update

                $this->update->update_hodm($data, $value);
            }
            else {

                // insert

                $this->update->insert_hodm($data);
            }
        }
    }
    else {
        $this->load->view('public/digital_hodm_view');
    }
}

型号:

public function update_hodm($data,$form_id){
        $this->db->where('form_id',$form_id);
        $this->db->update_batch('task_form', $data,'date');//date is my table column name 
        return true;
}

public function insert_hodm($data){
      $this->db->insert('task_form', $data);name 
      return true;
}

答案 2 :(得分:0)

使用以下代码查看 再添加一列updated_at

查看:

<?php
        $attributes = array('class' => 'form-horizontal','id'=>'update_form');
        echo form_open('emp_hodm_update/update_hodm', $attributes);
        ?>
        <table class="table table-striped table-hover table-responsive">
        <thead>
        <tr class="">
          <th>date</th>
          <th>Work</th>
          <th>Partner</th>
          <th>Director</th>
          <th>Time</th>
          <th>Task</th>
          <th>Status</th>
          <th>Action</th>
        </tr>
        </thead>
        <tbody>
        <?php foreach($result as $row) { ?>
            <tr>
            <td>
              <input class="form-control" type="text" name="date[]" value="<?php echo $row->date;?>" class="" />
            </td>
            <td>
              <input class="form-control" type="text" name="work[]" value="<?php echo $row->work;?>" class="" />
            </td>
            <td>
              <input class="form-control" type="text" name="partner[]" value="<?php echo $row->partner;?>" class="" />
            </td>
            <td>
              <input class="form-control" type="text" name="director[]" value="<?php echo $row->director;?>" class="" />
            </td>
            <td>
              <input class="form-control" type="text" name="time[]" value="<?php echo $row->time;?>" class="" />
            </td>
            <td>
              <textarea class="form-control" name="task[]" rows="2" id=""><?php echo $row->task;?></textarea>
            </td>
            <td>
              <textarea class="form-control" name="status[]" rows="2" id=""><?php echo $row->status;?></textarea>
            </td>
            <td>
              <a href="" class="btn btn-danger">Delete</a>

    <!-- Add This -->
              <input class="form-control" type="hidden" name="form_id_hidden[]" value="<?php echo $row->form_id;?>"

            </td>
            </tr>
        <?php } ?>
        </tbody>
        </table> 
        <input class="btn btn-primary" type="submit" name="submit" value="submit">
        <input class="btn btn-primary" type="submit" name="submit" value="add">
        <?php 
        echo form_close();
        ?> 

控制器:

    public function update_hodm(){

    /* Checking the all validation of task form*/
    //$this->form_validation->set_rules('date', 'Date', 'required');
    $this->form_validation->set_rules('work[]', 'Types of Work', 'required');
    //$this->form_validation->set_rules('partner[]', 'Worked With', 'required');
    $this->form_validation->set_rules('director[]', 'Director', 'required');
    $this->form_validation->set_rules('time[]', 'No Of Hours', 'required');
    $this->form_validation->set_rules('task[]', 'Task Details', 'required');
    $this->form_validation->set_rules('status[]', 'Task Status', 'required');

    if ($this->form_validation->run()) {
      /* Taking the data from form*/
                $todayDate = date('Y-m-d'); 

                <!-- Add This -->
                $updatedDate = date('Y-m-d H:i:s'); // if not used H:i:s and there is no chnage in data update will return false

                $work=$this->input->post('work');
                $partner=$this->input->post('partner');
                $director=$this->input->post('director');
                $time=$this->input->post('time');
                $task=$this->input->post('task');
                $status=$this->input->post('status');

                <!-- Add This -->
                $form_id=$this->input->post('form_id_hidden');

                $count=count($this->input->post('work'));

                <!-- Add This -->
                $data = $new_data = array();
                $old_ids = array();

                for($i=0; $i<$count; $i++) {

                    <!-- Add This -->

                    if(!in_array($form_id[$i],$old_ids)){
                      $old_ids[] = $form_id[$i];

                $data[$i] = array(
                    'name'       =>$this->session->userdata('emp_name'),
                    'date'       =>$todayDate,
                    'work'       =>$work[$i],
                    'partner'    =>$partner[$i],
                    'director'   =>$director[$i],
                    'time'       =>$time[$i],
                    'task'       =>$task[$i],
                    'status'     =>$status[$i],
                    'form_id'    =>$form_id[$i],
                    'updated_at' =>$updatedDate,
                    );
                 }else{
                    $new_data[$i] = array(
                    'name'       =>$this->session->userdata('emp_name'),
                    'date'       =>$todayDate,
                    'work'       =>$work[$i],
                    'partner'    =>$partner[$i],
                    'director'   =>$director[$i],
                    'time'       =>$time[$i],
                    'task'       =>$task[$i],
                    'status'     =>$status[$i],
                    );
                 }
            }

            <!-- Add This -->

           $update=$this->update->update_hodm($data,'form_id');
           $add = $this->update->addnew_hodm($new_data);
            /* Display Success message if data updated successfully in database*/

                    if($update && $add){   <!-- Add This -->
                            $this->session->set_flashdata('hodm_form',"All HODM Data  Updated  and Inserted Successfully.");
                            $this->session->set_flashdata('hodm_form_class','alert-success');

                       }else if($update){  <!-- Add This -->
                            $this->session->set_flashdata('hodm_form',"All HODM Data Updated Successfully.");
                            $this->session->set_flashdata('hodm_form_class','alert-success');
                        }
                        else if($add){   
                            $this->session->set_flashdata('hodm_form',"All HODM Data Inserted Successfully.");
                            $this->session->set_flashdata('hodm_form_class','alert-success');
                        }else{
                            /* Displaying the error message*/
                            $this->session->set_flashdata('hodm_form',"failed to add, Please Try again");
                            $this->session->set_flashdata('hodm_form_class','alert-danger');
                        }
            return redirect('home');
    } else {
        $this->load->view('public/digital_hodm_view');
    }
    }

Model :

<!-- Add This --> 
    public function addnew_hodm($data){
        if(empty($data)){
            return false;
        }
        $this->db->insert_batch('task_form', $data); 
        return ($this->db->affected_rows()>0?TRUE:FALSE);
    }

    <!-- Add This -->
    public function update_hodm($data,$where){
        if(empty($data)){
            return false;
        }
        $this->db->update_batch('task_form', $data,$where); 
        return ($this->db->affected_rows()?TRUE:FALSE);
    }