About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • Javascript
  • /
  • Membuat Script PHP untuk Hapus Data dengan Multi Selection

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. Pembahasan tentang hal ini telah saya kupas tuntas di artikel sebelumnya.

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:

CREATE TABLE mhs (
  nim varchar(10),
  namamhs varchar(30),
  PRIMARY KEY (nim)
)

INSERT INTO mhs VALUES ('M0197001', 'ROSIHAN ARI YUANA');
INSERT INTO mhs VALUES ('M0197002', 'DWI AMALIA FITRIANI');
INSERT INTO mhs VALUES ('M0197003', 'FAZA FAUZAN KH.');
INSERT INTO mhs VALUES ('M0197004', 'NADA HASANAH');
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

<html>
<head>
  <title>Hapus data mahasiswa</title>
</head>
<body>
<h1>Hapus Data Mahasiswa</h1>
<?php

// koneksi mysql

mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

// query SQL untuk menampilkan semua data

$query = "SELECT * FROM mhs";
$hasil = mysql_query($query);

// membuat form penghapusan data

echo "<form name='myform' method='post' action='".$_SERVER['PHP_SELF']."?action=del'>";
echo "<table border='1'>";
echo "<tr><td></td><td><b>NIM</b></td><td><b>Nama Mahasiswa</b></td></tr>";
$i = 0;
while($data = mysql_fetch_array($hasil))
{
  echo "<tr><td><input type='checkbox' name='nim".$i."' value='".$data['nim']."' /></td><td>".$data['nim']."</td><td>".$data['namamhs']."</td></tr>";
  $i++;
}
echo "</table>";
echo "<input type='hidden' name='n' value='".$i."' />";
echo "<p><input type='submit' value='Hapus' name='submit'> <input type='reset' value='Batal' name='reset'></p>";
echo "</form>";
?>

</body>
</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

<html>
<head>
  <title>Hapus data mahasiswa</title>
  <script type="text/javascript">

  function pilihan()
  {
     // membaca jumlah komponen dalam form bernama 'myform'
     var jumKomponen = document.myform.length;

     // jika checkbox 'Pilih Semua' dipilih   
     if (document.myform[0].checked == true)
     {
        // semua checkbox pada data akan terpilih
        for (i=1; i<=jumKomponen; i++)
        {
            if (document.myform[i].type == "checkbox") document.myform[i].checked = true;
        }
     }
     // jika checkbox 'Pilih Semua' tidak dipilih
     else if (document.myform[0].checked == false)
        {
            // semua checkbox pada data tidak dipilih
            for (i=1; i<=jumKomponen; i++)
            {
               if (document.myform[i].type == "checkbox") document.myform[i].checked = false;
            } 
        }
  }

  </script>
</head>
<body>
<h1>Hapus Data Mahasiswa</h1>
<?php

// koneksi mysql

mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

// query SQL untuk menampilkan semua data

$query = "SELECT * FROM mhs";
$hasil = mysql_query($query);

// membuat form penghapusan data

echo "<form name='myform' method='post' action='".$_SERVER['PHP_SELF']."?action=del'>";
echo "<table border='1'>";
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>";
$i = 0;
while($data = mysql_fetch_array($hasil))
{
  echo "<tr><td><input type='checkbox' name='nim".$i."' value='".$data['nim']."' /></td><td>".$data['nim']."</td><td>".$data['namamhs']."</td></tr>";
  $i++;
}
echo "</table>";
echo "<input type='hidden' name='n' value='".$i."' />";
echo "<p><input type='submit' value='Hapus' name='submit'> <input type='reset' value='Batal' name='reset'></p>";
echo "</form>";
?>

</body>
</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

if (isset($_POST['nim'.$i]))
{
   ...
}

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

<html>
<head>
  <title>Hapus data mahasiswa</title>
  <script type="text/javascript">

  function pilihan()
  {
     // membaca jumlah komponen dalam form bernama 'myform'
     var jumKomponen = document.myform.length;

     // jika checkbox 'Pilih Semua' dipilih   
     if (document.myform[0].checked == true)
     {
        // semua checkbox pada data akan terpilih
        for (i=1; i<=jumKomponen; i++)
        {
            if (document.myform[i].type == "checkbox") document.myform[i].checked = true;
        }
     }
     // jika checkbox 'Pilih Semua' tidak dipilih
     else if (document.myform[0].checked == false)
        {
            // semua checkbox pada data tidak dipilih
            for (i=1; i<=jumKomponen; i++)
            {
               if (document.myform[i].type == "checkbox") document.myform[i].checked = false;
            } 
        }
  }

</script>
</head>
<body>
<h1>Hapus Data Mahasiswa</h1>
<?php

// koneksi mysql

mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

// bagian script untuk menghapus data

if ($_GET['action'] == "del")
{
   // membaca nilai n dari hidden value
   $n = $_POST['n'];

   for ($i=0; $i<=$n-1; $i++)
   {
     if (isset($_POST['nim'.$i]))
     {
       $nim = $_POST['nim'.$i]; 
       $query = "DELETE FROM mhs WHERE nim = '$nim'";
       mysql_query($query);
     }
   }
}

// query SQL untuk menampilkan semua data

$query = "SELECT * FROM mhs";
$hasil = mysql_query($query);

// membuat form penghapusan data

echo "<form name='myform' method='post' action='".$_SERVER['PHP_SELF']."?action=del'>";
echo "<table border='1'>";
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>";
$i = 0;
while($data = mysql_fetch_array($hasil))
{
  echo "<tr><td><input type='checkbox' name='nim".$i."' value='".$data['nim']."' /></td><td>".$data['nim']."</td><td>".$data['namamhs']."</td></tr>";
  $i++;
}
echo "</table>";
echo "<input type='hidden' name='n' value='".$i."' />";
echo "<p><input type='submit' value='Hapus' name='submit'> <input type='reset' value='Batal' name='reset'></p>";
echo "</form>";

?>

</body>
</html>

Gimana mudah bukan membuatnya? selamat mencoba ya… Jangan lupa kritik dan sarannya tentang artikel ini dan juga blog ini secara keseluruhan. Bila ada kendala, silakan tulis di komentar di bawah ini dan kita akan diskusikan. Okay?

 

Saya seorang dosen dan peneliti di Universitas Sebelas Maret. Bidang penelitian saya tentang: adaptive learning, datascience, dan computer aided learning. Selain itu saya juga seorang blogger, serta penulis buku tentang pemrograman, dan matematika.

Leave a Reply