2017-04-07 2 views
0

나는 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

'$의 res' ==''[update_batch] (HTTPS에 대한 $ data' – RiggsFolly

+0

: //www.codeigniter. com/user_guide/database/query_builder.html? highlight = update_batch # CI_DB_query_builder :: update_batch) '쿼리에서'where'를 사용할 수 없습니다. 세 번째 매개 변수에 열 이름을 전달하기 만하면 name 매개 변수가 update 배열에 있어야합니다. – Gaurav

+0

@ RiggsFolly는 여전히 작동하지 않습니다. 나는 이미 그것을 바꾼다. – Kelpie

답변

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"); 
그것은 당신이 뭘 하려는지 알고 일부 데이터를보고 도움이 될

. 그것은 당신의 $_POST의 데이터가 보이는 방법을 알고 도움이 될 for($i = 0; $i < count($_POST['harga_jual'][$i]); $i++)

: 당신이이 같은 for 루프에서 배열 키로 사용하는 동시에 카운터 $i을 시작하는 조금 이상한 것 같다. 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"); 
+0

이미 그 부분을 바로 잡았고, 여전히 효과가 없다. – Kelpie

+0

현재 작동하지 않는 코드로 질문을 업데이트하십시오. –

+0

지연된 응답을 드려 죄송합니다. 지난 주말에 아팠어. 코드를 변경하기 만하면됩니다. – Kelpie