Codeigniter Dasar – Membuat Edit Data

Sekali lagi Perhatian, ini hanya ditujukan kepada Newbie seperti saya, kalo yang sudah jago ya kayanya ga perlu lagi baca :D. Juga wajib mengikuti tuorial sebelumnya yaitu

Edit data, setelah beberapa waktu lalu selesai dengan memasukkan data dan menampilkan serta menghapus data, kemudian ada seseorang yg menanyakan tentang cara mengedit data.

Secara algoritma MVC nya, Edit data dilakukan dengan Memanggil fungsi edit pada controller, fungsi ini akan memanggil data yang akan di edit (menggunakan parameter id) melalui Model, kemudian data tersebut ditampilkan kedalam view. Setelah data tersebut di edit, kemudian memanggil fungsi submit pada controller untuk menentukan proses update data yg dilakukan pada model. Kemudian di redirect ke halaman index untuk melihat hasil data yg telah di edit tadi. Secara gambarannya seperti berikut :

So, daripada bingung, langsung saja di praktekkan 🙂

Pada file view.show.php ubah menjadi seperti di bawah ini

<script type="text/javascript">
$(document).ready(function() {
 $(".delbutton").click(function(){
 var element = $(this);
 var del_id = element.attr("id");
 var info = 'id=' + del_id;
 if(confirm("Anda yakin akan menghapus?")){
 $.ajax({
 type: "POST",
 url : "<?php echo site_url('daily/delete')?>",
 data: info,
 success: function(){
 }
 });

 $(this).parents(".record").animate({ opacity: "hide" }, "slow");
 }

 return false;
 });

})
</script>
<b>Daily Notes</b>
<table style="width:600px; border:1px solid;">
 <tr>
 <th style="border:1px solid;">No</th>
 <th style="border:1px solid;">Date</th>
 <th style="border:1px solid;">Name</th>
 <th style="border:1px solid;">Amount</th>
 <th style="border:1px solid;">Edit</th>
 <th style="border:1px solid;">Delete</th>
 </tr>
 <?
 $i=0;
 foreach ($query as $row){
 $i++;
 echo "<tr class=\"record\">";
 echo    "<td style=\"border:1px solid;\">$i</td>";
 echo    "<td style=\"border:1px solid;\">$row->date</td>";
 echo    "<td style=\"border:1px solid;\">$row->name</td>";
 echo    "<td style=\"border:1px solid;\">$row->amount</td>";
 echo    "<td style=\"border:1px solid;\">".anchor("daily/edit/$row->id",'Edit')."</td>";
 echo    "<td style=\"border:1px solid;\"><a class=\"delbutton\" id=\"$row->id\" href=\"#\" >Delete</a></td>";
 echo  "</tr>";
 }
 ?>
</table>

Buat controller fungsi edit pada controller daily

function edit($id){
 $query          = $this->MDaily->get($id);
 $data['fid']    = $query['id'];
 $data['fdate']  = $query['date'];
 $data['fname']  = $query['name'];
 $data['famount']= $query['amount'];
 $this->load->view('daily/edit',$data);
 }

Kemudian pada Model buat fungsi get untuk mengambil data/ record yang akan di edit

function get($id){
 $query = $this->db->getwhere('daily',array('id'=>$id));
 return $query->row_array();
 }

Lanjutnya buat file edit.php pada direktory views/daily/edit.php

<!DOCTYPE HTML>
<html lang="en-US">
 <head>
 <title>Daily Notes</title>
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
 <meta charset="UTF-8">
 </head>
 <body>
 <h2 >Daily Notes</h2>
 <div id="form_input">
 <table>
 <?php echo form_open('daily/submit'); ?>
 <?php echo form_hidden('id',$fid); ?>
 <tr>
 <td> <?php echo form_label('Date : '); ?></td>
 <td> <?php echo form_input('date',$fdate,'id="date"'); ?></td>
 </tr>
 <tr>
 <td> <?php echo form_label('Name : ');?> </td>
 <td> <?php echo form_input('name',$fname,'id="name"'); ?></td>
 </tr>
 <tr>
 <td> <?php echo form_label('Amount : ');?> </td>
 <td> <?php echo form_input('amount',$famount,'id="amount"'); ?></td>
 </tr>
 <tr>
 <td> <?php    echo form_submit('submit','Submit','id="submit"'); echo form_close(); ?> </td>
 </tr>
 </table>
 </div>
 </body>
</html>

Ubah pada fungsi submit pada controller daily sehingga menjai seperti berikut :

function submit(){
 if ($this->input->post('ajax')){
 $this->MDaily->save();
 $data['query'] = $this->MDaily->getAll();
 $this->load->view('daily/show',$data);
 }else{
 if ($this->input->post('submit')){
 if ($this->input->post('id')){
 $this->MDaily->update();
 redirect('daily/index');
 }else{
 $this->MDaily->save();
 redirect('daily/index');
 }
 }
 }
 }

Maksud dari kode di atas adalah, jika kita submit memiliki $id maka akan memanggil function update pada model, apabila $id masih kosong, maka akan menambahkan data,

Untuk model ditambahkan function update sebagai berikut :

function update()
{
$id	 = $this->input->post('id');
$date = $this->input->post('date');
$name = $this->input->post('name');
$amount=$this->input->post('amount');
$data = array(
'date'=>$date,
'name'=>$name,
'amount'=>$amount
);
$this->db->where('id', $id);
$this->db->update('daily',$data);
}

OK sekarang kita coba edit datanya..

Bagi yang belum paham bisa kirim komentar ya 🙂 piss saya juga masih belajar..

  • Harry

    nice tutorial suhu *nyembah2*

    • “Sekali lagi Perhatian, ini hanya ditujukan kepada Newbie seperti saya, kalo yang sudah jago ya kayanya ga perlu lagi baca ” 😛

  • nice tutorial, thx atas share ilmunya

    • sama-sama 🙂

  • mas, saya mau tanya
    apakah fungsi konstruktor (yang namanya sama dengan class) berjalan di PHP 5?

    Sebaiknya pakai __construct() atau yang namanya sma??

    Thanks 🙂

    Nice info, gan.. 😀

    • Fungsi konstruktor yang ada pada PHP4 (nama konstruktor = nama fungsi) secara langsung dapat digunakan pada PHP5

      Karena sebaiknya pake PHP yang baru (yaitu PHP 5) ya lebih baik pake yang __construct() aja, kan lebih mudah mengingat __construct daripada mengingat setiap nama fungsinya (mungkin 🙂 )

      sama-sama..

  • Mas, saya membuat update data.Ada satu combobox dan valunya mengambil dari table lain.Pada saat ingin diupdate value combobox defaultnya adalah current value dari data tsb.

    Mohon bantuannya,

    Terima Kasih 🙂

    • combo box itu maksudnya drop down ya??

      kalo dropdown di CI value nya di letakkan di segment ke 3

      echo form_dropdown('name', $options_list, $selected_value);
  • Untuk kali ini saya masih pakai html biasa..egak pakai CI dropdown.

    table golongan
    id nama
    1 golonganA
    2 golonganB

    Masalahnya…misal ada itemA yang punya golonganB. ItemA itu saya edit,..dan dropdown menampilkan golonganB(selected).

    • saya juga belum tau cara yang tepat kalo pake html biasa. Tapi dulu saya cuma asal-asalan aja pake if. jadi pas perulangan ngambil option nya, di cek kalo sama dengan value nya, dikasih “selected”. ga efektif memang 😀

  • ayhu

    kak saya masih blum paham,maklum newbie,
    gini kak saya kan buat form untuk mengedit dan saya sudah buat script php nya,tapi blum bisa tampil,tampilannya itu cuma kolom kosong tanpa isi,jadi kira2 script untuk menampilkan nya itu apa kak,n lbih jelas nya saya kirim dech script yg saya buat
    di bwh ini script yg saya buat untuk mengedit data:
    file edit.php :

    Data Yang Akan Di Edit

    <?
    $conn=mysql_connect("localhost","root","admin");
    mysql_select_db("supportform");
    $sql = "select * from user where nomor_sf='$nomor_sf' ";
    $hasil= mysql_query($sql,$conn);
    $row=mysql_fetch_row($hasil);
    do
    {
    list($nomor_sf,$tanggal,$nama,$jumlah,$keluhan)=$row;
    echo "Nomor_sf “;
    echo “Tanggal “;
    echo “Nama “;
    echo “Departement “;
    echo “”;

    }
    while ($row=mysql_fetch_row($hasil));
    echo ”;
    echo ”.$row[‘nomor_sf1’].”;
    echo ”.$row[‘tanggal1’].”;
    echo ”.$row[‘nama1’].”;
    echo ”.$row[‘departement1’].”;
    echo ”.$row[‘keluhan1’].”;
    ?>

    dan ini file proses_edit_user.php :

    tolong ya kak,pencerahan nya,
    thx

  • kayaknya ada yang kurang (sok tau gw)
    function update yang di model mdaily.php nya belum ada.
    saya buatnya kira2 seperti ini

    function update()
    {
    $id = $this->input->post(‘id’);
    $date = $this->input->post(‘date’);
    $name = $this->input->post(‘name’);
    $amount=$this->input->post(‘amount’);
    $data = array(
    ‘date’=>$date,
    ‘name’=>$name,
    ‘amount’=>$amount
    );
    $this->db->where(‘id’, $id);
    $this->db->insert(‘daily’,$data);
    }

    • betul- betul betul.. thx koreksinya 🙂

      sebenernya ada banyak perubahan, tetapi belum sempa saya lengkapi..

  • dede iin

    mas mo tanya…
    pungsi edit dah jalan..
    tapi ko pas d submit..
    hasilnya ko malah nambah data nya..

    bukan nimpah file yg d editnya…

    mohon bantuannya….

    • mungkin di model belum ada function update nya. Coba di cek pale firebug, post ke alamat mana?

  • andri

    koreksi fungsi update di model.php

    $this->db->insert(‘daily’,$data);
    yang insert harusnya update… CMWII

    $this->db->update(‘daily’,$data);

    • thx koreksinya.. 🙂

  • asep

    Fatal error: Call to undefined method CI_DB_mysql_driver::getwhere() in C:\xampp\htdocs\CodeIgniter\application\models\Mcoba.php on line 23
    ini salah apanya yua

    • Pake CI versi berapa?

      kalo versi 1.7.2

      Note: get_where() was formerly known as getwhere(), which has been deprecated

      Jadi coba query nya di sesuaikan lagi Misalnya jadi $this->db->where();

    • dean

      klo pake CI 2.0
      $this->db->get_where();

  • delie

    ka,kenapa yah,punya saya setelah di tambahkan edit malah yang delete nya g b’fungsi?

    • mungkin ada syntax yang salah ketik

  • Hatur nuhun kang …. terimakasih tutorialnya.
    saya baru mulai belajar HMVC + jQuery ….. mohon bimbingannya….

  • Qha

    kang kalau buat fungsi tambah data gimana yah

    • di artikel insert data kan ada 🙂 artikel sebelumnya

  • mas edit nya berhasil, tapi deletenya kok engga ya?
    mohon pencerahan!!!

    • ada error? apa?

      • bukan bang, tapi fungsi delete nya nggak jalan, trus maksud script javascript di file view/show.php, itu kan buat delete?

        $(document).ready(function() {
        $(“.delbutton”).click(function(){
        var element = $(this);
        var del_id = element.attr(“id”);
        var info = ‘id=’ + del_id;
        if(confirm(“Anda yakin akan menghapus?”)){
        $.ajax({
        type: “POST”,
        url : “”,
        data: info,
        success: function(){
        }
        });

        $(this).parents(“.record”).animate({ opacity: “hide” }, “slow”);
        }

        return false;
        });

        })

        • iya, fungsi tersebut untuk menghapus data dengan ajax. Jadi ketika di klik, baris yang di klik akan hilang dan data akan terhapus dari tabel. Kalo mosal tidak jalan,bisa di trace errornya pake firebug

          • ngeliat scriptnya, berarti akan ada konfirmasi dulu kan, sebelum datanya benar2 hilang,

          • ya 🙂

  • error sich tidak bang, hanya ketika dijalanin/atau di klik, delete, dia larinya ke #, bukan ke fungsi javascipt nya

    lari kesini
    echo “id\” href=\”#\” >Delete

    harusnya kan kesini

    if(confirm(“Anda yakin akan menghapus?”)){

    salahnya dimana ya?

    • memang seperti itu harusnya, karena pake jquery 🙂 jadi ada return false di fungsinya. Harusnya ketika di klik akan keluar fungsi confirm tersebut. Apakah jquerynya sudah di load? apakah Anda terhubung dengan internet? soalnya saya mengakses jquery langsung dari internet, tidak saya simpan dalam aplikasi saya

      • jadi nanti ketika diklik delete, URI yang muncul di adrees bar seperti apa?

        • tidak berubah ke halaman lain, hanya ditambahkan #

  • ginus

    keren, nambah lagi om tutor CI-nya … ane juga lagi bladjar CI, seru karena ada dokumentasi yang bagus banget dan lengkap banget …

    ane masih gbingung tentang library cart di CI, kalo mo bladjar langsung bisa g om?

  • mas ada tutorial membuat web ecomerce dengan ci gak??
    mohon infonya…..

    • maaf belum ada 🙂

  • wira

    Mas, saya mau tanya beberapa hal yang saya bingung, karena saya sudah kebiasaan memakai php tanpa ada framework:
    1. Bagaimana cara melakukan pengecekan apabila data tersebut sudah ada di database? Apakah dengan mengisi array data di fungsi index dengan sebuah variabel flag sehingga dari sana bisa diketahui data tersebut kembar atau tidak (misal, kalau flag berisi 0, berarti data tidak kembar, tapi apabila flag berisi 1 berarti data kembar), atau apakah ada cara lain dari code igniter ini sendiri?
    2. Untuk form validation, apakah ada cara lain untuk mengatasi selain memakai cara di atas?
    3. Apabila saya tambahkan fitur search di tutorial mas dudu, dan saya ingin apabila setelah user melakukan search, ketika refresh, hasil search itu tetap ada, bagaimana caranya?

    Trima kasih mas dudu..maaf kalo pertanyaannya panjang..penasaran soalnya..
    hehehe..
    sekali lagi trima kasih banyak mas..:)

  • Numpang belajar mas..
    Da kendala ni, Pada Model buat fungsi get untuk mengambil data/ record yang akan di edit..
    function get($id){
    $query = $this->db->getwhere(‘daily’,array(‘id’=>$id));
    return $query->row_array();
    }

    getwhere(), error,, tidak terdapat fungsikatanya,.
    punya solusi mas??

  • Dinnu Shobirin

    maknyuss.. broo 🙂 tutorial