【问题标题】:How do i update multiple rows with multiple condition in Code Igniter如何在 Codeigniter 中使用多个条件更新多行
【发布时间】:2017-09-02 18:37:40
【问题描述】:

我只是在学习 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 循环并一次更新一行。

这可能是什么问题?

【问题讨论】:

  • $res !== $data
  • 查询中的[update_batch](https://www.codeigniter.com/user_guide/database/query_builder.html?highlight=update_batch#CI_DB_query_builder::update_batch)' you can't use where`。您只需要在第三个参数中传递列名,并且该名称参数应该存在于更新数组中。
  • @RiggsFolly ,仍然无法正常工作。我已经改了

标签: php html mysql codeigniter


【解决方案1】:

这只是一个错字。您应该传递数组$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 &lt; 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");

【讨论】:

  • 请用您当前不起作用的代码更新您的问题。
  • 抱歉延迟回复。我上周末生病了。我只是更改代码。
猜你喜欢
  • 1970-01-01
  • 2015-09-25
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 2012-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多