【问题标题】:Can't update data using Mysql and Codeigniter无法使用 Mysql 和 Codeigniter 更新数据
【发布时间】:2016-11-06 22:27:51
【问题描述】:

我想从表 monitordata 更新我的数组数据,但数据不会更新我不知道问题出在哪里。这段代码也没有错误:(

这是我的控制器

public function ubah($id) {


    $data_lama = $this->monitor_m->get($id); 
    $this->data->tglmonitor = $data_lama->tglmonitor;

    $this->data->detail = $this->monitor_m->get_record(array('monitor_data.idMonitor'=>$id),true);


    $this->template->set_judul('SMIB | Monitoring')
         ->render('monitor_edit',$this->data);  
}

public function ubahku($id) {
    $id = $this->input->post('idMonitor_data'); 

    if($this->input->post('idinven')!=NULL){
            $idMonitor = $this->input->post('idMonitor');
            $kondisi = $this->input->post('kondisi');
            $nobrg = $this->input->post('nobrg');
            $keterangan = $this->input->post('keterangan');
            $kdinven = $this->input->post('kdinven');
            $idinven = $_POST['idinven'];

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

            $data_detail = array( 
                        'idMonitor' => $this->input->post('idMonitor'),
                        'idinven'=> $idinven[$i],
                        'kdinven'=> $kdinven[$i],
                        'nobrg'=> $nobrg[$i],
                        'kondisi'=> $kondisi[$i],
                        'keterangan' => $keterangan[$i]);
            //print_r($data_detail);
            $where = array('idMonitor_data' => $id);
            $this->monitordata_m->update_by($where,$data_detail);

            }
        }                  redirect('monitorcoba');  
}

这是我的模型 monitordata_m

class Monitordata_m extends MY_Model {

public function __construct(){
    parent::__construct();
    parent::set_table('monitor_data','idMonitor_data');
}

这是我放在核心文件夹中的 MY_Model 模型。

public function update_by($where = array(), $data = array()) {
    $this->db->where($where);
    if ($this->db->update($this->table,$data)){
        return true;
    }
    return false;
}

这是我的观点

<?php echo form_open(site_url("monitorcoba/ubahku"),'data-ajax="false"'); ?>
<input data-theme="e" style="float: right;" data-mini="true" data-inline="false" data-icon="check" data-iconpos="right" value="Simpan" type="submit" />

<div data-role="collapsible-set" data-mini="true">
<?php foreach ($detail as $items): ?>    
<div data-role="collapsible">
<?php echo form_hidden('idMonitor_data', $items['idMonitor_data'] ); ?>

<?php echo form_hidden('idMonitor', $items['idMonitor'] ); ?>
    <h4><?php echo '[ '.$items['kdinven'].' ] '.$items['namabrg'] ?> </h4>
    <?php echo form_hidden('kdinven', $items['kdinven'] ); ?>
   <?php echo form_hidden('idinven', $items['idinven'] ); ?>     
    <div data-role="controlgroup">
    <?php echo form_label ('Kondisi : ');
        echo " <select name='kondisi' data-mini='true'>

 <option value=".$items['kondisi'].">".$items['kondisi']."</option>
                    <option value=''>--Pilih--</option>
                    <option value='Baik'>Baik</option>
                    <option value='Rusak'>Rusak</option>
                    <option value='Hilang'>Hilang</option>";    
              echo "</select>";



          echo form_input('keterangan',@$keterangan,'placeholder="Masukan Keterangan Tambahan"','class="input-text"');
 ?>         
   <?php echo form_close(); ?>

即使我使用 update_by 它也不起作用。已经 2 周了,我不知道 :( 我已经尝试了我在谷歌找到的所有答案,但仍然......所以请帮助我。

这是方法 ubahku 的 DATABASE 结果和 POST_DATA

【问题讨论】:

  • 您是否尝试过启用分析器以便查看正在运行的 SQL 语句?
  • @colonelclick 是的,我有。但我不知道出了什么问题,因为我无法理解报告._。对不起
  • 首先调试流程。在控制器中打印 id 的值,然后在模型中检查其值是否正确
  • 你能添加分析器数据库部分的输出吗?
  • 肯定还有更多我们看不到的代码。在您的更新 SQL 中,我们可以看到第一个参数试图设置 idMonitor_data = 48,但我们在您的 PHP 中的任何地方都看不到。我们还看到您的函数 ubahku 在 URL 中需要一个 id 参数,但您的表单似乎没有传递一个,这应该会显示一个错误。这是您向我们展示的当前代码吗?

标签: php mysql database codeigniter


【解决方案1】:

您已经定义了一个名为update_by 的方法,但您正在调用$this-&gt;monitordata_m-&gt;update($id,$data_detail);。绝对不应该工作。请从您的控制器拨打$this-&gt;monitordata_m-&gt;update_by($id,$data_detail); 并检查会发生什么。

【讨论】:

    【解决方案2】:

    首先,请将$this-&gt;monitordata_m-&gt;update($id,$data_detail); 更正为$this-&gt;monitordata_m-&gt;update_by($id,$data_detail);,因为在您的monitordata_m 模型中,您的函数名称是update_by

    其次,在您的 monitordata_m 模型 update_by 函数中有 2 个参数,例如 $where = array() $data = array()$wherearray,但您仅在控制器中调用 $id。您的 $id 不是数组。 $where 就是这样$where = array('id' =&gt; $id) //id is where field name from db table

    所以,您的控制器中的ubahku($id) 方法在update_by 函数中调用$where

    $where = array('id' => $id); // 'id' means "where field name"
    $this->monitordata_m->update_by($where,$data_detail);
    

    【讨论】:

    • 仍然无法正常工作,我知道这很奇怪。但是当我在控制器的另一个函数中使用 update_by 函数时,它工作正常。
    • 我看到了你的 html 表单。您已使用表单操作monitorcoba/coba。你的控制器名称是monitorcoba,方法名称是coba。对吗?
    • 并且您在ubahku 方法中使用了您的控制器if($this-&gt;input-&gt;post('idinven')!=NULL){ 中的条件。请告诉我您的 html 表单中的 idinven 字段在哪里?
    • 抱歉,这是我的错字,应该是 monitorcoba/ubahku。哦,我的上帝,非常感谢你,我忘了在我的 html 表单中添加 idinven
    • 现在它可以工作了,但是在我添加它之后,我遇到了另一个问题,我也在尝试更新数据 1(这是第一个)的数据,但结果是数据 1 没有改变,它的数据 5(这是最后一个数据)确实改变了它的怪异。我正在尝试更新数据 1 而不是数据 5。:(
    【解决方案3】:

    所以,非常感谢所有回答我问题的人。所以问题是当我更新数据时,系统只检测"kondisi[]""keterangan[]"作为一个数组,因为我对这两个都使用了"[]",所以我只需要在每个@的末尾添加"[]" 987654325@ 以 html 形式/视图。因此系统会将每个输入检测为一个数组。我希望你明白我在说什么,对不起我的英语不好。谢谢你这个案子已经结了:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多