Membuat Script PHP untuk Hapus Data dengan Multi Selection

Pernahkah Anda membuat script untuk menghapus data dengan konsep multi selection? Untuk menghapus sebuah data sih.. saya kira mudah untuk membuatnya.

Tapi… bagaimana bila data yang akan dihapus lebih dari satu sekaligus? Rumit gak ya membuat scriptnya? Hmm… nggak rumit kok, cuman sedikit memusingkan saja he.. he.. he :-) nggak ding, becanda… mudah-mudahan artikel yang saya sajikan ini tidak membuat Anda pusing.
OK… konsep menghapus data dengan multi selection ini biasanya menggunakan bantuan komponen checkbox. Mengapa checkbox? ya.. karena komponen checkbox memungkinkan kita bisa memilih pilihan lebih dari satu.

Data yang akan dihapus terlebih dahulu dipilih dengan memberi tanda check pada checkbox yang ada di depan setiap data. Perhatikan contoh tampilan berikut ini:
Photobucket
Nah… kita akan membuat script PHP untuk menghapus data dengan konsep multi selection seperti gambaran di atas.
Untuk studi kasus yang diambil, lagi-lagi kita mengambil kasus tentang data mahasiswa :-) Huh… mentang-mentang yang buat artikel ini seorang dosen kali ya :-)
Misalkan kita punya tabel dan data sbb:

1.CREATE TABLE mhs (2.nim varchar(10),3.namamhs varchar(30),4.PRIMARY KEY (nim)5.)

1.INSERT INTO mhs VALUES ('M0197001', 'ROSIHAN ARI YUANA');2.INSERT INTO mhs VALUES ('M0197002', 'DWI AMALIA FITRIANI');3.INSERT INTO mhs VALUES ('M0197003', 'FAZA FAUZAN KH.');4.INSERT INTO mhs VALUES ('M0197004', 'NADA HASANAH');5.INSERT INTO mhs VALUES ('M0197005', 'MUH. AHSANI TAQWIM');
Langkah pertama dalam membuat script penghapusan data ini, terlebih dahulu kita siapkan script untuk menampilkan semua datanya. Untuk setiap data nantinya kita letakkan sebuah checkbox di depannya yang digunakan untuk memilih data mana saja yang akan dihapus.
data.php

01.<html>02.<head>03.<title>Hapus data mahasiswa</title>04.</head>05.<body>06.<h1>Hapus Data Mahasiswa</h1>07.<?php08. 09.// koneksi mysql10. 11.mysql_connect("dbhost", "dbuser", "dbpass");12.mysql_select_db("dbname");13. 14.// query SQL untuk menampilkan semua data15. 16.$query = "SELECT * FROM mhs";17.$hasil = mysql_query($query);18. 19.// membuat form penghapusan data20. 21.echo "<form name='myform' method='post' action='".$_SERVER['PHP_SELF']."?action=del'>";22.echo "<table border='1'>";23.echo "<tr><td></td><td><b>NIM</b></td><td><b>Nama Mahasiswa</b></td></tr>";24.$i = 0;25.while($data = mysql_fetch_array($hasil))26.{27.echo "<tr><td><input type='checkbox' name='nim".$i."' value='".$data['nim']."' /></td><td>".$data['nim']."</td><td>".$data['namamhs']."</td></tr>";28.$i++;29.}30.echo "</table>";31.echo "<input type='hidden' name='n' value='".$i."' />";32.echo "<p><input type='submit' value='Hapus' name='submit'> <input type='reset' value='Batal' name='reset'></p>";33.echo "</form>";34.?>35. 36.</body>37.</html>
Perhatikan script di atas! Form nantinya akan diarahkan ke script itu sendiri (menggunakan $_SERVER['PHP_SELF']) namun dengan parameter ‘?action=del’. Anda boleh arahkan pemrosesan formnya ke script lain. It’s up to you.
Selain itu perhatikan pula bahwa untuk setiap komponen checkbox diberikan name yang berbeda. Di sini diberikan name berbentuk ‘nim0′, ‘nim1′, ‘nim2′, … dst (perhatikan bagian name=’nim”.$i.”‘).
Kemudian, terdapat pula komponen hidden value (name=’n') yang bernilai sama dengan jumlah data total atau dalam hal ini adalah $i. Komponen ini nantinya akan sangat penting ketika memproses form terutama pada saat membaca komponen checkbox yang dipilih.
Selanjutnya untuk pemanis, misalkan kita ingin membuat fasilitas SELECT ALL untuk memilih semua data sekaligus. OK Bagaimana caranya? Ya.. kita gunakan Javascript. Oya… jangan lupa berikan sebuah checkbox tambahan untuk memberikan fasilitas ini. Begitu checkbox ini dipilih, maka semua checkbox yang ada di depan data akan terpilih. Untuk hal ini, kita berikan event onclick() pada checkbox tsb. Mmm… sebaiknya checkbox ini diletakkan di dalam header tabel saja ya.
data.php

01.<html>02.<head>03.<title>Hapus data mahasiswa</title>04.<script type="text/javascript">05. 06.function pilihan()07.{08.// membaca jumlah komponen dalam form bernama 'myform'09.var jumKomponen = document.myform.length;10. 11.// jika checkbox 'Pilih Semua' dipilih12.if (document.myform[0].checked == true)13.{14.// semua checkbox pada data akan terpilih15.for (i=1; i<=jumKomponen; i++)16.{17.if (document.myform[i].type == "checkbox") document.myform[i].checked = true;18.}19.}20.// jika checkbox 'Pilih Semua' tidak dipilih21.else if (document.myform[0].checked == false)22.{23.// semua checkbox pada data tidak dipilih24.for (i=1; i<=jumKomponen; i++)25.{26.if (document.myform[i].type == "checkbox") document.myform[i].checked = false;27.}28.}29.}30. 31.</script>32.</head>33.<body>34.<h1>Hapus Data Mahasiswa</h1>35.<?php36. 37.// koneksi mysql38. 39.mysql_connect("dbhost", "dbuser", "dbpass");40.mysql_select_db("dbname");41. 42.// query SQL untuk menampilkan semua data43. 44.$query = "SELECT * FROM mhs";45.$hasil = mysql_query($query);46. 47.// membuat form penghapusan data48. 49.echo "<form name='myform' method='post' action='".$_SERVER['PHP_SELF']."?action=del'>";50.echo "<table border='1'>";51.echo "<tr><td><input type='checkbox' name='pilih' onclick='pilihan()' /> Pilih semua</td><td><b>NIM</b></td><td><b>Nama Mahasiswa</b></td></tr>";52.$i = 0;53.while($data = mysql_fetch_array($hasil))54.{55.echo "<tr><td><input type='checkbox' name='nim".$i."' value='".$data['nim']."' /></td><td>".$data['nim']."</td><td>".$data['namamhs']."</td></tr>";56.$i++;57.}58.echo "</table>";59.echo "<input type='hidden' name='n' value='".$i."' />";60.echo "<p><input type='submit' value='Hapus' name='submit'> <input type='reset' value='Batal' name='reset'></p>";61.echo "</form>";62.?>63. 64.</body>65.</html>
Nah… selanjutnya, kita bisa membuat bagian untuk memproses formnya atau membuat script untuk proses penghapusan datanya.
Trus… bagaimana konsep membaca data mana saja yang akan dihapus sesuai pilihan checkboxnya? Untuk membaca data mana yang akan dihapus, kita gunakan bantuan looping. Berapa jumlah loopingnya? Jumlah loopingnya sesuai jumlah komponen checkboxnya. Nah… di sinilah pentingnya penggunaan komponen hidden value <input type=’hidden’ name=’n’ value=’”.$i.”‘ /> Dalam contoh ini nilai n=5.
Selanjutnya isi dalam loopingnya bagaimana? ya… kita cek saja apakah komponen checkbox dengan name=’nim0′ dipilih tidak? jika ya, maka baca NIM mahasiswa terkait dengan komponen tersebut, lalu jalankan query SQL untuk menghapus data mahasiswanya. Trus… komponen checkbox dengan name=’nim1′ dicek apakah dipilih atau tidak. Jika ya, maka baca NIM mahasiswa terkait dengan komponen tersebut, lalu hapus dengan query SQL. Proses ini diulang sebanyak 5 kali untuk kasus di atas, yaitu mulai dari komponen checkbox dengan name=’nim0′ sampai dengan name=’nim4′.
Lantas yang menjadi masalah adalah, bagaimana cara kita mendeteksi bahwa komponen checkbox dengan name tertentu itu dipilih atau tidak? caranya adalah kita gunakan statement IF seperti di bawah ini

1.if (isset($_POST['nim'.$i]))2.{3....4.}
dengan $i = 0, 1, …, n-1.
Jika suatu komponen checkbox itu dipilih, maka perintah isset($_POST['nim'.$i]) akan menghasilkan nilai TRUE. Sedangkan FALSE jika tidak dipilih.
Dengan demikian, script untuk menghapus data dengan multi selection ini adalah sbb:
data.php
01.<html>02.<head>03.<title>Hapus data mahasiswa</title>04.<script type="text/javascript">05. 06.function pilihan()07.{08.// membaca jumlah komponen dalam form bernama 'myform'09.var jumKomponen = document.myform.length;10. 11.// jika checkbox 'Pilih Semua' dipilih12.if (document.myform[0].checked == true)13.{14.// semua checkbox pada data akan terpilih15.for (i=1; i<=jumKomponen; i++)16.{17.if (document.myform[i].type == "checkbox") document.myform[i].checked = true;18.}19.}20.// jika checkbox 'Pilih Semua' tidak dipilih21.else if (document.myform[0].checked == false)22.{23.// semua checkbox pada data tidak dipilih24.for (i=1; i<=jumKomponen; i++)25.{26.if (document.myform[i].type == "checkbox") document.myform[i].checked = false;27.}28.}29.}30. 31.</script>32.</head>33.<body>34.<h1>Hapus Data Mahasiswa</h1>35.<?php36. 37.// koneksi mysql38. 39.mysql_connect("dbhost", "dbuser", "dbpass");40.mysql_select_db("dbname");41. 42.// bagian script untuk menghapus data43. 44.if ($_GET['action'] == "del")45.{46.// membaca nilai n dari hidden value47.$n = $_POST['n'];48. 49.for ($i=0; $i<=$n-1; $i++)50.{51.if (isset($_POST['nim'.$i]))52.{53.$nim = $_POST['nim'.$i];54.$query = "DELETE FROM mhs WHERE nim = '$nim'";55.mysql_query($query);56.}57.}58.}59. 60.// query SQL untuk menampilkan semua data61. 62.$query = "SELECT * FROM mhs";63.$hasil = mysql_query($query);64. 65.// membuat form penghapusan data66. 67.echo "<form name='myform' method='post' action='".$_SERVER['PHP_SELF']."?action=del'>";68.echo "<table border='1'>";69.echo "<tr><td><input type='checkbox' name='pilih' onclick='pilihan()' /> Pilih semua</td><td><b>NIM</b></td><td><b>Nama Mahasiswa</b></td></tr>";70.$i = 0;71.while($data = mysql_fetch_array($hasil))72.{73.echo "<tr><td><input type='checkbox' name='nim".$i."' value='".$data['nim']."' /></td><td>".$data['nim']."</td><td>".$data['namamhs']."</td></tr>";74.$i++;75.}76.echo "</table>";77.echo "<input type='hidden' name='n' value='".$i."' />";78.echo "<p><input type='submit' value='Hapus' name='submit'> <input type='reset' value='Batal' name='reset'></p>";79.echo "</form>";80. 81.?>82. 83.</body>84.</html>

Selamat mencoba...