如何在Code Igniter中更新多个条件的多行

时间:2017-04-07 11:32:32

标签: php html mysql codeigniter

我只是学习PHP并使用Codeigniter框架。 我在插入新数据时在控制器中使用此代码并且它正在工作。

//INSERT MULTI ROWS TABEL harga_inventori
    $kode_inventori = $_POST['kode_inventori'];
    $result = array();
    foreach($_POST['kode_kategori_pelanggan'] AS $key => $val){
        $result[] = array(
                "kode_kategori_pelanggan" => $_POST['kode_kategori_pelanggan'][$key],
                "kode_inventori"=>$kode_inventori,
                "harga" => $_POST['harga_jual'][$key],
                "diskon" => $_POST['diskon'][$key]
                );
    }
    $res = $this->db->insert_batch('harga_inventori', $result);
    redirect("inventori");

但是当我使用相同的模式进行更新时,它根本不起作用。

for($i = 0; $i < count($_POST['harga_jual'][$i]); $i++) {
    if($_POST['kode_kategori_pelanggan'][$i] != '') {
        $res[] = array(
                        'harga' => $_POST['harga_jual'][$i],
                        'diskon' => $_POST['diskon'][$i],   
                    );
        $this->db->where('kode_inventori',$_POST['kode_inventori']);
        $this->db->where('kode_kategori_pelanggan',$_POST['kode_kategori_pelanggan'][$i]);
        $this->db->update('harga_inventori',$res);
    }
}
redirect("inventori");

我正在尝试update_batch(),但我遇到了很多错误,因此我使用for循环并一次更新一行。

这可能是什么问题?

1 个答案:

答案 0 :(得分:0)

它只是一个错字。您应该传递数组$res而不是$data,并将$res[]更改为$res,因为不需要它。您还应该使用isset()进行检查,以防止出现未定义的错误:

for($i = 0; $i < count($_POST['harga_jual'][$i]); $i++) {
    if(isset($_POST['kode_kategori_pelanggan'][$i])) {
        $res = array(
                        'harga' => $_POST['harga_jual'][$i],
                        'diskon' => $_POST['diskon'][$i],   
                    );
        $this->db->where('kode_inventori',$_POST['kode_inventori']);
        $this->db->where('kode_kategori_pelanggan',$_POST['kode_kategori_pelanggan'][$i]);
        $this->db->update('harga_inventori',$res);
    }
}
redirect("inventori");

查看一些数据以了解您要执行的操作会有所帮助。在启动计数器$i的同时使用它作为for循环中的数组键似乎有点奇怪:for($i = 0; $i < count($_POST['harga_jual'][$i]); $i++)

了解$_POST中的数据结果会有所帮助。您可以尝试删除for循环中的[$i]。在使用它们之前,我还会检查它们设置的每个POST变量,例如:

for($i = 0; $i < count($_POST['harga_jual']); $i++) {

    if(isset($_POST['kode_kategori_pelanggan'][$i])) {

        // CHECK IF POST VARIABLES IS SET AND IF NOT SET A DEFAULT VALUE (IN THIS EXAMPLE AN EMPTY STRING):
        $harga_jual = isset($_POST['harga_jual'][$i]) ? $_POST['harga_jual'][$i] : ''; 
        $diskon = isset($_POST['diskon'][$i]) ? $_POST['diskon'][$i] : '';          
        $kode_inventori = isset($_POST['kode_inventori']) ? $_POST['kode_inventori'] : '';
        $kode_kategori_pelanggan = $_POST['kode_kategori_pelanggan'][$i]; // ALREADY CHECKED ISSET ABOVE...

        $data = array(
                    'harga' => $harga_jual,
                    'diskon' => $diskon,   
                    );

        $this->db->where('kode_inventori',$kode_inventori);
        $this->db->where('kode_kategori_pelanggan', $kode_kategori_pelanggan);
        $this->db->update('harga_inventori', $data);
    }
}
redirect("inventori");