Membuat laporan detail bercabang dengan php
Kali ini saya ingin bahas tentang bagaimana membuat laporan detail bercabang dengan php. Maksud bercabang disini adalah sebuah laporan memiliki sub detail, dan didalam sub masih ada lagi laporan lagi sesuai sub yang dipilih. Saya beri contoh kasus informasi pada sebuah perguruan tinggi. Dalam sebuah universitas terdapat beberapa fakultas, dalam sebuah fakultas terdapat beberapa jurusan.
Dari contoh kasus diatas, sebenarnya kemungkinan sub laporanya masih ada misal dalam sebuah jurusan ada banyak kelas, dalam sebuah kelas ada banyak mahasiswa, tiap mahasiswa memiliki banyak mata kuliah atau nilai dst. Tapi saya tidak bahas sampai detail itu, cukup sampai ke level jurusan.
Berikut ini contoh desain tabel datanya (saya buat minimal dilarang protes) :
Nama database : db_univ (silahkan di create sendiri). Kemudian buat tabelnya :
tabel universitas
kode_univ int(11) primary auto number
nama_niv varchar(30)
tabel fakultas
kode_fak int(11) primary auto number
kode_univ int(11)
nama_fak varchar(30)
tabel jurusan
kode_jur int(11) primary auto number
kode_fak int(11)
nama_jur varchar(30)
Ini query create tabel dan datanya :
CREATE TABLE IF NOT EXISTS `tb_fak` ( `kode_fak` int(11) NOT NULL AUTO_INCREMENT, `kode_univ` int(11) NOT NULL, `nama_fak` varchar(30) NOT NULL, PRIMARY KEY (`kode_fak`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `tb_jur` ( `kode_jur` int(11) NOT NULL AUTO_INCREMENT, `kode_fak` int(11) NOT NULL, `nama_jur` varchar(30) NOT NULL, PRIMARY KEY (`kode_jur`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; CREATE TABLE IF NOT EXISTS `tb_univ` ( `kode_univ` int(11) NOT NULL AUTO_INCREMENT, `nama_univ` varchar(30) NOT NULL, PRIMARY KEY (`kode_univ`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; INSERT INTO `tb_fak` (`kode_fak`, `kode_univ`, `nama_fak`) VALUES (1, 1, 'Fak. Teknik'), (2, 2, 'Fak. Ekonomi'), (3, 1, 'Fak. Fisip'); INSERT INTO `tb_jur` (`kode_jur`, `kode_fak`, `nama_jur`) VALUES (1, 1, 'Tek. Informasi'), (2, 1, 'Tek. Mesin'); INSERT INTO `tb_univ` (`kode_univ`, `nama_univ`) VALUES (1, 'UNIV. JAYA'), (2, 'UNIV. MERDEKA');
Kita mulai membuat koneksi database (koneksi.php) dengan isi seperti berikut :
<?php $dbserver="localhost"; $dbusername="root"; $dbpassword=""; $dbname="db_univ"; mysql_connect($dbserver,$dbusername,$dbpassword) or die(mysql_error()); mysql_select_db($dbname) or die (mysql_error()); ?>
Kita mulai dari membuat laporan universitas, seperti kode berikut :
<?php include("koneksi.php"); ?> <html> <head> <title>Daftar Universitas</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <h2 align="center">Daftar Universitas</h2> <table width="400" border="1" align="center" cellpadding="3" cellspacing="0"> <tr> <td>Nama Universitas</td> </tr> <?php $myquery="select kode_univ,nama_univ from tb_univ"; $laporan=mysql_query($myquery) or die (mysql_error()); while($rec=mysql_fetch_object($laporan)) { ?> <tr> <td><a href="laporan-fak.php?kode_univ=<?php echo $rec->kode_univ?>"><?php echo $rec->nama_univ?></a></td> </tr> <?php } ?> </table> <div align="center"> <div align="center"><a href="javascript:history.back()">Kembali</a> </div> </body> </html>
Jika anda jalankan hasilnya seperti ini :
Dari laporan universitas, jika di klik salah satu nama universitas maka akan dihubungkan dengan daftar nama fakultas pada masing-masing universitas. Untuk laporan fakultas, hampir mirip dengan laporan universitas hanya sedikit dimodifikasi tampilan dan querynya. Lihat script berikut :
<?php include("koneksi.php"); ?> <html> <head> <title>Laporan Data Mahasiswa</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <h2 align="center">Daftar Fakultas</h2> <table width="400" border="1" align="center" cellpadding="3" cellspacing="0"> <tr> <td>Nama Fakultas</td> </tr> <?php $myquery="select kode_fak,nama_fak from tb_fak where kode_univ='".$_GET['kode_univ']."'"; $laporan=mysql_query($myquery) or die (mysql_error()); while($rec=mysql_fetch_object($laporan)) { ?> <tr> <td><a href="laporan-jur.php?kode_fak=<?php echo $rec->kode_fak?>"><?php echo $rec->nama_fak?></a></td> </tr> <?php } ?> </table> <div align="center"><a href="javascript:history.back()">Kembali</a> </div> </body> </html>
Jika universitas dipilih maka tampil halaman laporan fakultas seperti berikut :
Laporan diatas, adalah fakultas yang berada pada universitas yang sudah dipilih. Pada laporan fakutas, kita bisa memilih lagi fakultas mana yang akan kita lihat jurusanya. Laporan jurusan, juga tidak berbeda jauh dengan laporan universitas dan fakultas. Scripnya seperti ini :
<?php include("koneksi.php"); ?> <html> <head> <title>Laporan Data Mahasiswa</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <h2 align="center">Daftar Jurusan</h2> <table width="400" border="1" align="center" cellpadding="3" cellspacing="0"> <tr> <td>Nama Jurusan</td> </tr> <?php $myquery="select kode_jur,nama_jur from tb_jur where kode_fak='".$_GET['kode_fak']."'"; $laporan=mysql_query($myquery) or die (mysql_error()); while($rec=mysql_fetch_object($laporan)) { ?> <tr> <td><?php echo $rec->nama_jur?></td> </tr> <?php } ?> </table> <div align="center"><a href="javascript:history.back()">Kembali</a> </div> </body> </html>
Dan hasilnya jika anda pilih fakultas maka muncul laporan jurusan seperti ini :
Dari contoh-contoh script diatas, kita bisa buat sub lagi dibawah laporan jurusan. Misal dengan memilih jurusan, kita tampilkan nama mahasiswa, dari nama mahasiswa kita tampilkan nilai dst.
Mudahan ini bisa menginspirasi anda yang sedang galau dalam hal laporan detail yang bercabang.
Silahkan download contoh laporan detail bercabang dengan php ini.
Selamat mencoba dan semoga bisa diterapkan pada kasus-kasus lainnya
Zainal Hakim
** Bebas disunting dengan menyebutkan sumber **