php - 如何在 Codeigniter 中更新具有多个条件的多行

标签 php html mysql codeigniter

我刚刚学习 PHP 并使用 Codeigniter 框架。 当插入新数据时,我在 Controller 中使用此代码并且它正在工作。

//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 循环并一次更新一行。

这可能是什么问题?

最佳答案

这只是一个错字。您应该传递数组 $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 中的数据如何好像。您可以尝试删除 [$i]在你的 for 循环中。我还会检查每个 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");

关于php - 如何在 Codeigniter 中更新具有多个条件的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43277069/

相关文章:

php - mysqli_real_escape_string,我应该使用它吗?

php - Laravel - 通过其他访问关系

PHP system() - 返回状态始终为 0

php - 如何防止 PHP 中的 SQL 注入(inject)?

java - PHP 中方法重写的用例

javascript - 在 url 中查找字符串位置并替换 url

javascript - 如何仅在选择控件上显示箭头

html - 如何更改具体化日期时间选择器的默认主体颜色?

mysql - Ubuntu 18.04 无root权限启动mysql

MySQL 基本查询耗时特别长 - 解释计划看起来不错