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
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:
/edit.php?id=2
.
Sehingga di baris 15 - $idProduk = (int) $_GET['id']; - $idProduk
akan berisi nilai 2value="<?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).
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).
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;
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