Edit & Delete Data Tabel Yang Berelasi

Mar 11, 2012 by MyPHPtutorials Level: Pemula Komentar Print

Tutorial PHP Edit & Delete Data Tabel Yang Berelasi adalah kelanjutan dari tutorial Menampilkan Data Beberapa Tabel . Seperti dijelaskan di tutorial sebelumnya Menyimpan Data & Menampilkan Beberapa Tabel, relasi antar tabel bisa dari satu-ke-satu, satu-ke-banyak dan banyak-ke-banyak. Di tutorial Menampilkan Data Beberapa Tabel telah dijelaskan pula cara menampilkan data dari masing masing relasi tersebut. Di tutorial sekarang ini akan dijelaskan cara mengedit & menghapus data dari table yang berelasi, baik itu yang berelasi satu-ke-satu,satu-ke-banyak ataupun banyak-ke-banyak.

Catatan: Sebelum membaca tutorial ini Anda perlu membaca terlebih dahulu tutorial Menyimpan Data & Menampilkan Beberapa Tabel dan Menampilkan Data Beberapa Tabel

Edit & Delete Data Tabel Berelasi Satu-ke-satu

Hal pertama yang perlu dilakukan adalah mengubah kode yang digunakan untuk menampilkan data dari tabel yang berelasi satu ke satu di tutorial Menampilkan Data Beberapa Tabel dengan menambahkan link edit dan delete, seperti:

<?php
$conn = mysql_connect("localhost","root","blah");
mysql_select_db("test",$conn);
$sql = "select * from product p inner join buku b on p.id_produk=b.id_produk";
$result = mysql_query($sql);
?>
<table cellpadding="5" cellspacing="0" border="1">
    <tr>
        <th>Nama</th>
        <th>Harga</th>
        <th>Penulis</th>
        <th>Penerbit</th>
        <th>ISBN</th>
        <th>Tanggal Terbit</th>
        <th>Aksi</th>
    </tr>
    <?php while($buku = mysql_fetch_array($result)){?>
    <tr>
        <td><?php echo $buku['nama'];?></td>
        <td><?php echo $buku['harga'];?></td>
        <td><?php echo $buku['penulis'];?></td>
        <td><?php echo $buku['penerbit'];?></td>
        <td><?php echo $buku['isbn'];?></td>
        <td><?php echo $buku['tgl_terbit'];?></td>
        <!-- tambah link edit & delete -->
        <td>
            <a href="edit.php?id=<?php echo $buku['id_produk'];?>">Edit</a> | 
            <a href="delete.php?id=<?php echo $buku['id_produk'];?>">Delete</a>
        </td>
    </tr>
    <?php }?>
</table>

Kemudian buat file edit.php seperti di bawah:

<?php
$conn = mysql_connect("localhost","root","blah");
mysql_select_db("test",$conn);
if($_POST){// jika tombol update ditekan
    //update data di tabel product
    $sql = "update product set nama='{$_POST['nama']}',harga='{$_POST['harga']}' 
    where id_produk='{$_POST['id_produk']}'";
    mysql_query($sql);
    //update data di tabel buku
    $sql = "update buku set penulis='{$_POST['penulis']}',penerbit='{$_POST['penerbit']}',
    isbn='{$_POST['isbn']}',tgl_terbit='{$_POST['tgl_terbit']}' where id_produk='{$_POST['id_produk']}'";
    mysql_query($sql);
    echo "Data telah di edit";
}
$idProduk = (int) $_GET['id'];
$sql = "select * from product p inner join buku b on p.id_produk=b.id_produk where p.id_produk='$idProduk'";
$result = mysql_query($sql);
$product = mysql_fetch_array($result);
?>
<form name="form1" action="" method="post">
    <dl>
        <dt>Nama</dt>
        <dd><input type="text" name="nama" value="<?php echo $product['nama'];?>"/></dd>
        <dt>Harga</dt>
        <dd><input type="text" name="harga" value="<?php echo $product['harga'];?>"/></dd>
        <dt>Jenis</dt>
        <dd>
            <select name="jenis" disabled="disabled">
                <option value="BUKU" <?php echo $product['jenis'] == "BUKU" ? 'selected="selected"' : '';?>>Buku</option>
            </select>
        </dd>
        <dt>Penulis</dt>
        <dd><input type="text" name="penulis" value="<?php echo $product['penulis'];?>"/></dd>
        <dt>Penerbit</dt>
        <dd><input type="text" name="penerbit" value="<?php echo $product['penerbit'];?>"/></dd>
        <dt>ISBN</dt>
        <dd><input type="text" name="isbn" value="<?php echo $product['isbn'];?>"/></dd>
        <dt>Tanggal Terbit</dt>
        <dd><input type="text" name="tgl_terbit" value="<?php echo $product['tgl_terbit'];?>"/></dd>
        <dt></dt>
        <dd><input type="submit" value="Update"/></dd>
    </dl>
    <input type="hidden" name="id_produk" value="<?php echo $product['id_produk'];?>"/>
</form>

Penjelasan kode di atas sebagai berikut:

  1. Baris ke-2 sampai 3 melakukan koneksi ke database
  2. Baris ke-4 sampai 14 menyimpan perubahan data saat pengguna menekan tombol update.
    • Baris 6,7,8 untuk mengupdate data di tabel product
    • Baris 10,11,12 mengupdate data di tabel buku
  3. Selanjutnya baris ke-15 sampai 18 membaca/mencari data yang mau diedit menggunakan sql join. Data yang mau diedit didapat dari parameter id url, seperti /edit.php?id=2. Sehingga di baris 15 - $idProduk = (int) $_GET['id']; - $idProduk akan berisi nilai 2
  4. Terakhir baris ke-20 sampai 44 menampilkan data yang diedit pada form, dengan menambahkan attribute value pada masing masing input text, seperti value="<?php echo $product['nama'];?>".

Langkah ketiga membuah file delete.php di bawah:

<?php
$idProduk = (int) $_GET['id'];
if($idProduk){
    $conn = mysql_connect("localhost","root","blah");
    mysql_select_db("test",$conn);
    //delete data buku terlebih dahulu
    mysql_query("delete from buku where id_produk='{$idProduk}'");
    //delte data produk
    mysql_query("delete from product where id_produk='{$idProduk}'");
}
//kembali ke halaman tampil.php
header("Location: tampil.php");
exit;

Pada saat menghapus data dari tabel berelasi satu-ke-satu, pertama-tama hapus data tabel anak (tabel buku) kemudian hapus data tabel induk (tabel product).

Edit & Delete Data Tabel Berelasi Satu-ke-banyak

Sama seperti Edit & Delete Data Table Berelasi Satu-ke-satu di atas, pertama ubah kode yang digunakan untuk menampilkan data dari table yang berelasi satu ke banyak di tutorial Menampilkan Data Beberapa Tabel dengan menambahkan link edit dan delete, seperti:

<?php
$conn = mysql_connect("localhost","root","blah");
mysql_select_db("test",$conn);
$sql = "select * from album";
$result = mysql_query($sql);
?>
<table cellpadding="5" cellspacing="0" border="1">
    <tr>
        <th>Judul</th>
        <th>Artis</th>
        <th>Aksi</th>
    </tr>
    <?php while($album = mysql_fetch_array($result)){?>
    <tr>
        <td><?php echo $album['judul'];?></td>
        <td><?php echo $album['artis'];?></td>
        <!-- tambah link edit & delete -->
        <td>
            <a href="edit-album.php?id=<?php echo $album['id']?>">Edit</a> | 
            <a href="delete-album.php?id=<?php echo $album['id']?>">Delete</a>
        </td>
    </tr>
    <tr>
        <td colspan="3">
        <strong>Lagu: </strong>
        <table cellspacing="0" cellpadding="3" width="100%">
            <tr>
                <td style="border-bottom:1px solid #000;">No Track</td>
                <td style="border-bottom:1px solid #000">Judul</td>
                <td style="border-bottom:1px solid #000">Durasi</td>
            </tr>
            <?php
            $rowset = mysql_query("select * from lagu where id_album='".$album['id']."'");
            while($lagu = mysql_fetch_array($rowset)){
            ?>
            <tr>
                <td style="border-bottom:1px solid #000; border-right:1px solid #000"><?php echo $lagu['no_track'];?></td>
                <td style="border-bottom:1px solid #000; border-right:1px solid #000"><?php echo $lagu['judul'];?></td>
                <td style="border-bottom:1px solid #000"><?php echo $lagu['durasi'];?></td>
            </tr>
            <?php }?>
        </table>
        </td>
    </tr>
    <?php }?>
</table>

Langkah kedua buat file edit-album.php sebagai berikut:

<?php
$conn = mysql_connect("localhost","root","blah");
mysql_select_db("test",$conn);
if($_POST){ // jika tombol update di tekan
    //update data album
    mysql_query("update album set judul='{$_POST['judul']}',artis='{$_POST['artis']}' 
    where id='{$_POST['id']}'");
    //delete data lagu album yang sedang diedit
    mysql_query("delete from lagu where id_album='{$_POST['id']}'");
    //kemudian simpan kembali data lagu
    foreach($_POST['judul_lagu'] as $key => $judul){
        if(!$judul){
            continue;
        }
        $sql = "insert into lagu(id_album, no_track,judul,durasi) 
        values ('{$_POST['id']}','{$_POST['no_track'][$key]}','{$judul}','{$_POST['durasi'][$key]}')";
        mysql_query($sql);
    }
}
$id = (int) $_GET['id'];
$sql = "select * from album where id='$id'";
$result = mysql_query($sql);
$album = mysql_fetch_array($result);
?>
<form name="formalbum" action="" method="post">
Judul Album: <input type="text" name="judul" value="<?php echo $album['judul'];?>"/> 
Nama Artis: <input type="text" name="artis" value="<?php echo $album['artis'];?>"/>
<table id="tabel-lagu" cellspacing="0" border="1" cellpadding="3">
    <tr>
        <td>NO. Track</td>
        <td>Judul</td>
        <td>Durasi</td>
        <td>Delete</td>
    </tr>
    <?php
    $i = 0;
    $rowset = mysql_query("select * from lagu where id_album='".$album['id']."'");
    while($lagu = mysql_fetch_array($rowset)){
    ?>
    <tr>
        <td><input type="text" name="no_track[<?php echo $i?>]" value="<?php echo $lagu['no_track'];?>"/></td>
        <td><input type="text" name="judul_lagu[<?php echo $i?>]" value="<?php echo $lagu['judul'];?>"/></td>
        <td><input type="text" name="durasi[<?php echo $i?>]" value="<?php echo $lagu['durasi'];?>"/></td>
        <td><button type="button" class="del">Del</button></td>
    </tr>
    <?php $i++; }?>
    <tr id="last">
        <td colspan="4" align="right"><button type="button" id="addRow">Add</button></td>
    </tr>
</table>
<input type="hidden" name="id" value="<?php echo $album['id']?>"/>
<input type="submit" value="Update"/>
</form>
<script type="text/javascript" src=" https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">
var i = <?php echo $i?>;
$(function(){
    $("#addRow").click(function(){
        row = '<tr>'+
        '<td><input type="text" name="no_track['+i+']"/></td>'+
        '<td><input type="text" name="judul_lagu['+i+']"/></td>'+
        '<td><input type="text" name="durasi['+i+']"/></td>'+
        '<td><button type="button" class="del">Del</button></td>'+
        '</tr>';
        $(row).insertBefore("#last");
        i++;
        });
    });
    $(".del").live('click', function(){
        $(this).parent().parent().remove();
        });
</script> 

Kode di atas mirip dengan kode untuk menyimpan data tabel berelasi satu ke banyak di tutorial Menyimpan Data & Menampilkan Beberapa Tabel . Pada saat mengedit data tabel berelasi satu-ke-banyak, pertama edit data induk (tabel album), kemudian delete data terkait di tabel anak (tabel lagu), dan simpan kembali data tabel anak (beserta perubahan data dan inputan yang baru).

  1. Baris 2,3 membuat koneksi ke database.
  2. Baris ke-4 sampai 19 mengupdate data pada saat pengguna menekan tombol update:
    • baris 6,7 mengupdate data tabel album (tabel induk),
    • baris 9 menghapus data di tabel lagu yang id_album-nya sama dengan id album yang sedang diedit,
    • baris ke-11 sampai 18 menyimpan kembali data lagu beserta perubahannya.
  3. Baris 20-23 membaca/mencari data yang akan diedit.
  4. Baris 25-53 menampilkan data album dan lagu yang diedit pada form.
  5. Baris 54-72 javascript untuk menambah atau mengurangi lagu.

Untuk delete data tabel berelasi satu-ke-banyak sama seperti tabel berelasi satu-ke-satu. Pertama delete data tabel anak (tabel lagu) kemudian tabel hapus data tabel index (tabel album).

<?php
$id = (int)$_GET['id']; 
if($id){
    $conn = mysql_connect("localhost","root","blah");
    mysql_select_db("test",$conn);
    //delete data di tabel lagu
    mysql_query("delete from lagu where id_album='{$id}'");
    //delete data album
    mysql_query("delete from album where id='{$id}'");
}
header("Location: tampil.php");
exit;

Edit & Delete Data Tabel Berelasi Banyak-ke-banyak

Berbeda dengan tabel berelasi satu-ke-satu dan satu-ke-banyak dimana proses edit dilakukan secara bersamaan pada kedua tabel. Pada relasi banyak-ke-banyak proses edit dilakukan terpisah. Untuk lebih jelas, akan diambil contoh dari tutorial sebelumnya Menyimpan Data & Menampilkan Beberapa Tabel . Relasi banyak-ke-banyak antar tabel mahasiswa dan mata_kuliah yang dihubungkan dengan tabel mahasiswa_mk . Data mahasiswa dan mata_kuliah diedit secara terpisah, sama dengan mengedit data satu tabel .

Demikian pula dengan proses delete data, proses hapus dilakukan terpisah. Jika menghapus data mahasiswa maka terlebih dahulu hapus data mahasiswa_mk yang kolom nim-nya sama dengan nim mahasiswa yang dihapus. Jika menghapus data mata_kuliah maka hapus lebih dulu data mahasiswa_mk yang kolom id_mk-nya sama dengan id mata_kuliah yang dihapus.

<?php
// delete mata_kuliah
$id =(int) $_GET['id'];
if($id){
    $conn = mysql_connect("localhost","root","blah");
    mysql_select_db("test",$conn);
    //delete data mahasiswa_mk
    mysql_query("delete from mahasiswa_mk where id_mk='{$id}'");
    //kemudian delete data mata kuliah
    mysql_query("delete from mata_kuliah where id='{$id}'");
}
header("Location: list_mk.php");

// ----------------------------------- //

//delete mahasiswa
$nim = $_GET['nim'];
if($nim){
    $conn = mysql_connect("localhost","root","blah");
    mysql_select_db("test",$conn);
    //delete data mahasiswa_mk
    mysql_query("delete from mahasiswa_mk where nim='".mysql_real_escape_string($nim)."'");
    //kemudian delete data mahasiswa
    mysql_query("delete from mahasiswa where nim='".mysql_real_escape_string($nim)."'");
}
header("Location: list-mahasiswa.php"); 

Lalu bagaimana jika ingin mengurangi data mata kuliah dari seorang mahasiswa? Salah satu caranya adalah dengan menghapus data tabel mahasiswa_mk yang kolom nim-nya sama dengan mahasiswa bersangkutan dan kolom id_mk-nya sama dengan mata kuliah yang dikurangkan. Pertama edit kode untuk menampilkan data dari tabel berelasi banyak-ke-banyak, file list-mahasiswa.php yang telah dibuat di tutorial Menampilkan Data Beberapa Tabel, dan tambahkan link delete mahasiswa_mk seperti:

<?php
$conn = mysql_connect("localhost","root","blah");
mysql_select_db("test",$conn);
$sql = "select * from mahasiswa";
$result = mysql_query($sql);
?>
<table cellspacing="0" cellpadding="5" border="1">
    <tr>
        <td>NIM</td>
        <td>Nama</td>
        <td>Jurusan</td>
        <td>Aksi</td>
    </tr>
    <?php while($mhs = mysql_fetch_array($result)){?>
    <tr>
        <td><?php echo $mhs['nim'];?></td>
        <td><?php echo $mhs['nama'];?></td>
        <td><?php echo $mhs['jurusan'];?></td>
        <td>
            <a href="mahasiswa_mk.php?nim=<?php echo $mhs['nim'];?>">Tambah Mata Kuliah</a> | 
            <a href="delete_mhs.php?nim=<?php echo $mhs['nim'];?>">Delete Mahasiswa</a>
        </td>
    </tr>
    <tr>
        <td colspan="4">
            <strong>Mata Kuliah:</strong>
            <table cellspacing="0" cellpadding="5" width="100%">
                <tr>
                    <td style="border-bottom:1px solid #000;">Kode MK</td>
                    <td style="border-bottom:1px solid #000;">Nama MK</td>
                    <td style="border-bottom:1px solid #000;"></td>
                </tr>
                <?php 
                $rowset = mysql_query("select * from mahasiswa_mk m inner join 
                mata_kuliah m1 on m.id_mk=m1.id where nim='".$mhs['nim']."'");
                while($mk = mysql_fetch_array($rowset)){
                ?>
                <tr>
                    <td style="border-bottom:1px solid #000;border-right:1px solid #000"><?php echo $mk['kode'];?></td>
                    <td style="border-bottom:1px solid #000;border-right:1px solid #000"><?php echo $mk['nama'];?></td>
                    <!-- tambah link delete -->
                    <td style="border-bottom:1px solid #000;">
                        <a href="delete_mhs_mk.php?nim=<?php echo $mhs['nim'];?>&id_mk=<?php echo $mk['id']?>">Delete</a>
                    </td>
                </tr>
                <?php }?>
            </table>
        </td>
    </tr>
    <?php }?>
</table>

Kemudian buat file delete_mhs_mk.php

<?php
$nim = $_GET['nim'];
$id_mk = (int) $_GET['id_mk'];
if($nim && $id_mk){
    $conn = mysql_connect("localhost","root","blah");
    mysql_select_db("test",$conn);
    mysql_query("delete from mahasiswa_mk where nim='".mysql_real_escape_string($nim)."' and id_mk='{$id_mk}'");
}
header("Location: list-mahasiswa.php");

Selamat Mencoba


Silahkan login atau register sebelum meninggalkan komentar.