SlametBudiSantoso
1
ModulmatakuliahPemrogramanWeb2,AkademiKomunitasNganjuk,semester3,TA2014/2015
2
Contohkasusdengancontohskripdisertakan
Database
Basisdatayangdigunakandiberinamaphpbayardenganstrukturtabeldantipedatanyasebagai
berikut:
StrukturTabel
Disarankanuntukpenamaandatabase,tabel,dankolommenggunakannamayangmudah.Selainitu,
gunakanhurufkecilsemuauntukmempermudahpenulisandalamskrip,danhindaripenamaan
menggunakanduakatakecualidisambungmenjadisatukesatuanataudenganbantuanunderscore(
dua_kata).
Jumlahtabeldankolomsangatbergantungpadakompleksitasaplikasiyangdibuat.
Sitemap
Sitemapataupetasitusdigunakanuntukmemberikangambaransecaraumumstrukturdokumendalam
aplikasiwebyangdibuat.Petasitusyangdirancangdenganbaikmempermudahprosespembuatan
aplikasi.
Penjelasan
Halamanpertamayangditampilkanadalahindex.php,didalamnyaterdapatsebuahformlogin
berikutprosesloginnya.
Jikaloginberhasil,penggunadiarahkanpadahalamanadmin.phpyangmerupakanberanda
untukkeperluanadministrasipembayaran.Padahalamaninidisediakanmenuyangdapat
diaksespengguna,baiksebagaiadministratormaupunsebagaiuserbiasa(kasir).
Halamanmaster.phpmerupakantempatmelakukanberbagaimacammanajemen(create,read,
update,delete)datainduk,diantaranya:
o ManajemenUser
o Jurusan
o Siswa
o Kelas
o JenisPembayaran(hakakses:admin)
Halamanuser.phpdigunakanuntukmenampilkanprofilpenggunadanfasilitasuntukmerubah
password.
Halamanpembayaran.phpmerupakanhalamanyangdigunakanuntukmemprosespembayaran
yangdilakukanolehsiswa.Hakaksespadahalamaninidibatasi,untukkasirhanyadapat
melakukanentripembayaran.EditdanHapusadalahhakaksesadmin.
Halamanlaporan.phpdigunakanuntukkeperluanpencetakanlaporanpembayaranyang
meliputi:
o Rekappembayaran,baiksecaraharianataurentangwaktutertentu.
o Tagihanpembayaran
Login
Halamanloginadalahhalamanpertamayangditampilkansaataplikasiinidibukamelaluialamat:
http://localhost/phpbayar.Tampilanformlogintampaksepertigambarberikut.
HalamanLogin
Letakkanskripsession_start() diawalfile.
<?php
session_start();
?>
Skripuntukmemprosesloginadalahsebagaiberikut:
<div class="container">
<?php
include "koneksi.php";
$_SESSION['iduser'] = $iduser;
$_SESSION['username'] = $username;
$_SESSION['admin'] = $admin;
$_SESSION['fullname'] = $fullname;
header("Location: ./admin.php");
die();
} else {
Layout
Tataletakhalamanadministrasidibuatsederhanasepertitampakpadagambarberikut.Tataletak
halamandibagimenjadi2(dua)bagian:menuaplikasidankontenaplikasi.
Menuaplikasiadalahbagianatashalamanyangberisitautan/linkmenujuhalamanhalamanlaindi
dalamaplikasiphpBayarini.Tautanmenuberisi:
Home,untukmenampilkanberanda/awalhalamanadministrasiphpBayar.
Pembayaran,merupakanhalamanuntukmemprosestransaksipembayaranuangsekolah.Agar
halamaninidapatberfungsisebagaimanamestinya,datadataindukharusdimasukkanterlebih
dahulu.
Laporan,menuuntukmenampilkanhalaman:
o RekapPembayaran,menampilkanrekapitulasipembayaranpadarentangwaktu
tertentu.
o CetakTagihan,untukkeperluanmenampilkandaftarsiswayangbelummelakukan
pembayaranuangsekolah.
DataMaster,berisimenuuntukCRUD(Create,Read,Update,Delete)datadataindukseperti:
o Jurusan,dataindukyangberisinamanamajurusan/programstudiyangada(SMK)
o Siswa,dataindukidentitassiswayangadadisekolah
o Kelas,berisinamakelasbesertanamanamasiswadidalamnya
o JenisBayar,berisidatanominalpembayaranpertingkatan.Hanyaadmin.
o User,berisidatauseryangadadalamaplikasi.Hanyaadmin.
NamaUser,dalamgambartertampilnamaAdministratorberisimenuuntukmenampilkan:
o Profil,menampilkandatadatauseryangsedanglogin
o GantiPassword,fasilitasuntukusermenggantipasswordnya
o Logout,tautuntukmengakhiriaksespadaaplikasiphpBayarini.
LayoutHalaman
Skripuntuklayoututamaadalahsebagaiberikut:
<?php
session_start();
if( empty( $_SESSION['iduser'] ) ){
//session_destroy();
$_SESSION['err'] = '<strong>ERROR!</strong> Anda harus login terlebih dahulu.';
header('Location: ./');
die();
} else {
include "koneksi.php";
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<title>phpBayar</title>
<style type="text/css">
body {
min-height: 2000px;
padding-top: 70px;
}
</style>
</head>
<body>
<div class="container">
<!-- Bootstrap core JavaScript, Placed at the end of the document so the pages
load faster -->
<script src="js/jquery.min.js"></script>
<script src="js/bootstrap.min.js"></script>
<script type="text/javascript">
$(".force-logout").alert().delay(3000).slideUp('slow', function(){
window.location = "./logout.php";
});
</script>
</body>
</html>
<?php
}
?>
Sedangkanskripuntukmenampilkanhalamanhalamanyanglainmenggunakanswitch caseseperti
berikut:
<div class="container">
<?php
if( isset($_REQUEST['hlm'] )){
$hlm = $_REQUEST['hlm'];
switch( $hlm ){
case 'bayar':
include "pembayaran.php";
break;
case 'laporan':
include "laporan.php";
break;
case 'master':
include "master.php";
break;
case 'user':
include "profil.php";
break;
}
} else {
?>
<!-- Main component for a primary marketing message or call to action -->
<div class="jumbotron">
<h2>Selamat Datang di phpBayar</h2>
<p>Anda login sebagai <strong><?php echo $_SESSION['fullname']; ?></strong>
dengan hak akses yang terbatas.</p>
</div>
<?php
}
?>
</div> <!-- /container -->
Dannilai$hlmatau$_REQUEST[hlm]diperolehdaritautanyangterdapatdalamfilemenu.php.Skrip
bagianmenuadalahsebagaiberikut:
<?php
if( !empty( $_SESSION['iduser'] ) ){
?>
<!-- Fixed navbar -->
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-
target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">
<span class="glyphicon glyphicon-fire"></span> phpBayar
</a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="./admin.php">Home</a></li>
<li><a href="./admin.php?hlm=bayar">Pembayaran</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Laporan <b
class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="./admin.php?hlm=laporan">Rekap Pembayaran</a></li>
<li><a href="./admin.php?hlm=laporan&sub=tagihan">Cetak
Tagihan</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Data Master
<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="./admin.php?hlm=master&sub=jurusan">Jurusan</a></li>
<li><a href="./admin.php?hlm=master&sub=siswa">Siswa</a></li>
<li><a href="./admin.php?hlm=master&sub=kelas">Kelas</a></li>
<?php
if( $_SESSION['admin'] == 1 ){
?>
<li class="divider"></li>
<li><a href="./admin.php?hlm=master&sub=jenis">Jenis
Bayar</a></li>
<li><a href="./admin.php?hlm=master">User</a></li>
<li class="divider"></li>
<li><a href="./admin.php?hlm=master&sub=tapel">Tahun
Pelajaran</a></li>
<?php
}
?>
</ul>
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown active">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<?php echo $_SESSION['fullname']; ?> <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="./admin.php?hlm=user">Profil</a></li>
<li><a href="./admin.php?hlm=user&sub=pass">Ganti
Password</a></li>
<li class="divider"></li>
<li><a href="logout.php">Logout</a></li>
</ul>
</li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
<?php
} else {
header("Location: ./");
die();
}
?>
DataMaster
Datamastermerupakandataindukyangakandigunakandalamtransaksipembayaranuangsekolah.
SecaraumumdatamastermerupakanprosesCRUD:Create,Read,Update,andDeleteke/darisebuah
tabel.Sehinggacukupdibuatkan4(empat)prosestersebut.
READ
DimulaidenganREADuntukmenampilkanisitabel.Berikutinitampilansaattabelkosong(belumada
data)dantabelterisidata.
Belumadadata
Terisidata
BagianutamadariskripyangmengaturprosesCRUDdalamdatamasteradalahsebagaiberikut:
//jurusan.php
if( isset( $_REQUEST['aksi'] )){
//proses INSERT, UPDATE, dan DELETE
$aksi = $_REQUEST['aksi'];
switch($aksi){
case 'baru':
include 'jurusan_baru.php';
break;
case 'edit':
include 'jurusan_edit.php';
break;
case 'hapus':
include 'jurusan_hapus.php';
break;
}
} else {
//menampilkan isi data dalam tabel
$sql = mysql_query("SELECT * FROM prodi ORDER BY idprodi");
echo '<h2>Daftar Program Studi</h2><hr>';
echo '<div class="col-md-9"><table class="table table-bordered">';
echo '<tr><th>#</th><th width="100">Kode Prodi</th><th>Program Studi</th>';
echo '<th width="200"><a href="./admin.php?hlm=master&sub=jurusan&aksi=baru"
class="btn btn-default btn-xs">Tambah Data</a></th></tr>';
echo '</table></div>';
}
Skriptersebutmerupakanpenggalanutamafilejurusan.phpdenganfungsiutamauntukmenampilkan
isitabeldanmengaturprosesprosesselanjutnya(denganmemanggilfilefileyangbersangkutan).
CREATE
Prosesmemasukkan/insertdataidenticdenganpembuatan/createdata.Dibutuhkansuatuformuntuk
menampungdatayangakandisimpandalamdatabase.Tampilanformnyasepertiberikut:
FormCREATE
Forminidisimpandalamfile:jurusan_baru.phpdenganskripintisebagaiberikut:
if( isset( $_REQUEST['submit'] )){
//proses simpan ke dalam tabel
$idprodi = $_REQUEST['idprodi'];
$prodi = $_REQUEST['prodi'];
Skriptersebutmemiliki2(dua)bagianpenting:menampilkanformuntukmemasukkandatadanskrip
prosesINSERTkedalamtabel.
UPDATE
HalamanUPDATEmemilikikesamaandenganhalamanCREATEyangberisiform.Bedanya,pada
halamanini,formtelahterisidatayangakandiupdate;sepertitampakpadagambar.
FormUPDATE
Filejurusan_edit.phpjugadibagimenjadi2(dua)bagian:formeditdanprosesupdatekedalam
database.Berikutinipotonganskripnya:
if( isset( $_REQUEST['submit'] )){
//proses update ke dalam database
$idprodi = $_REQUEST['idprodi'];
$prodi = $_REQUEST['prodi'];
DELETE
Proseshapussebuahdataharusmelaluitahapankonfirmasiuntukmenghindariterhapussecaratidak
sengaja.
KonfirmasiHapusData
Skripdalamjurusan_hapus.phpadalahsebagaiberikut:
if( isset( $_REQUEST['submit'] )){
//hapus data dari tabel
$idprodi = $_REQUEST['idprodi'];
$sql = mysql_query("DELETE FROM prodi WHERE idprodi='$idprodi'");
if($sql > 0){
header('Location: ./admin.php?hlm=master&sub=jurusan');
die();
} else {
echo 'ada ERROR dengan query';
}
} else {
//tampilkan konfirmasi untuk memastikan data memang sengaja dihapus
$idprodi = $_REQUEST['idprodi'];
$sql = mysql_query("SELECT * FROM prodi WHERE idprodi='$idprodi'");
list($idprodi,$prodi) = mysql_fetch_array($sql);
Untukdatamasteryanglain,memilikiprinsipyangsama.
kelas_baru.php
Bagianpembuatankelasyangmemilikiprosesberbedadengandatamasteryanglain.Halinidisebabkan
karenadatakelasdansiswadimasukkandalamsebuahtabel.
Prosespembuatankelaspadadasarnyamerupakanprosesmenampilkankelasyangakandiisisiswa.
Proseseditkelasdidesainuntukmelakukanperubahanisikelas(hapussiswa)saja,tidakmengganti
namakelas.
if( isset( $_REQUEST['submit'] )){
//variabel session ditransfer ke variabel lokal yg lebih mudah diingat penamaannya
$submit = $_REQUEST['submit'];
$kelas = $_REQUEST['kelas'];
$tapel = $_REQUEST['tapel'];
$idprodi = $_REQUEST['idprodi'];
Sedangkanuntukproseshapusdalamkelas_hapus.phpberartimenghapuskelasbesertaseluruhsiswa
dalamkelastersebut.
Contohskripbisadilihatdalamfileyangdisertakan
TUGAS1
Buatlahhalamanuntukmenampilkanprofiluseryangsedangaktif(login)besertafasilitasuntuk
menggantipasswordnya.
Transaksi
PembayaranuangsekolahdalamaplikasiinidiawalidenganmemasukkanNomorIndukSiswa(NIS)yang
melakukanpembayaranpadaformyangditampilkansaatmenuPembayarandiklik.
MasukkanNomorIndukSiswa
Aplikasiakanmenampilkansiswayangbersangkutanbesertasejarahpembayaranyangpernah
dilakukannyadanjikabelumadapembayaransamasekaliakanditampilkansepertiberikut.
FormPembayaran
Untukpencatatanpembayarannya,pilihkelas(bergunajikasiswatelahsampaipadatingkat2atau3,
danmemilikitanggunganpembayaran),kemudianpilihbulanyangakandibayarbesertajumlah
pembayarannya.
Skripuntukmemprosespembayaranadalahsebagaiberikut:
<?php
if( empty( $_SESSION['iduser'] ) ){
$_SESSION['err'] = '<strong>ERROR!</strong> Anda harus login terlebih dahulu.';
header('Location: ./');
die();
} else {
/* tahapan pembayaran SPP
1. masukkan nis
2. tampilkan histori pembayaran (jika ada) dan form pembayaran
3. proses pembayaran, kembali ke nomor 2
*/
echo '<h2>Pembayaran SPP</h2><hr>';
if(isset($_REQUEST['submit'])){
//proses pembayaran secara bertahap
$submit = $_REQUEST['submit'];
$nis = $_REQUEST['nis'];
if( $_SESSION['admin'] == 1 ){
echo '<a
href="./admin.php?hlm=bayar&submit=hapus&kls='.$kelas.'&nis='.$nis.'&bln='.$bulan.'"
class="btn btn-danger btn-xs">Hapus</a>';
}
echo '</td></tr>';
$no++;
}
} else {
echo '<tr><td colspan="6"><em>Belum ada data!</em></td></tr>';
}
echo '</table></div>';
} else {
?>
<!-- form input nomor induk siswa -->
<form class="form-horizontal" role="form" method="post"
action="./admin.php?hlm=bayar">
<div class="form-group">
<label for="nis" class="col-sm-2 control-label">Nomor Induk Siswa</label>
<div class="col-sm-3">
<input type="text" class="form-control" id="nis" name="nis" placeholder="Nomor
Induk Siswa" required autofocus>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-3">
<button type="submit" name="submit" class="btn btn-default">Lanjut</button>
</div>
</div>
</form>
<?php
}
}
?>
TUGAS2
Inputjumlahpembayaranmasihbersifatmanualdanberpotensiterjadikesalahandalampenulisannya.
Tugasmahasiswaadalah:
TemukancarauntukmenampilkansecaraotomatisjumlahyangharusdibayarSESUAIdengandata
padatabeljenis_bayar.
Temukancaraagardropdownpilihanbulanmenampilkanbulansesuaikalenderkomputer.
Temukanideataucarauntukmembuatprosescetakbuktitransaksi.
Laporan
Laporansecaraumumdigunakansebagaimediauntukmenyampaikaninformasidaridatadata
(termasukdatatransaksiyangtelahdilaksanakan).
REKAPPEMBAYARAN
Filelaporanpertamayangdibuatadalahrekappembayaran(laporan.php).Halamaninimenampilkan
rekapitulasipenerimaanuangsekolahpadahariaktif(sesuaikalenderkomputer).Dilengkapifasilitas
untukmenampilkanrekapitulasipenerimaanpadarentangtanggaltertentu.
TampilanHalamanRekapPembayaran
Sepertihalamanhalamanyanglain,filelaporan.phpdibagimenjadibeberapabagian,yaitu:
Menampilkanrekapitulasiharian.
Menampilkanrekapitulasiuntukrentangtanggaltertentu.
Memuathalamanlaporan_tagihan.phpuntukditampilkandandicetak.
<?php
if( empty( $_SESSION['iduser'] ) ){
$_SESSION['err'] = '<strong>ERROR!</strong> Anda harus login terlebih dahulu.';
header('Location: ./');
die();
} else {
if( isset( $_REQUEST['sub'] )){
//bagian ini digunakan untuk me-load file lain yang di-request sub
//dapat ditambahkan halaman lain yang dibutuhkan dg menambahkan SWITCH .. CASE
$sub = $_REQUEST['sub'];
include "laporan_tagihan.php";
} else {
if(isset($_REQUEST['submit'])){
//digunakan untuk menampilkan rekapitulasi pd rentang tanggal tertentu
$submit = $_REQUEST['submit'];
$tgl1 = $_REQUEST['tgl1'];
$tgl2 = $_REQUEST['tgl2'];
//echo $tgl1.'-'.$tgl2;
$q = "SELECT kelas,sum(jumlah) FROM pembayaran WHERE tgl_bayar BETWEEN
'$tgl1' AND '$tgl2' GROUP BY kelas";
$sql = mysql_query($q);
$total = 0;
$no=1;
while(list($kls,$jml) = mysql_fetch_array($sql)){
echo '<tr><td>'.$no.'</td><td>'.$kls.'</td><td><span class="pull-
right">'.$jml.'</span></td></tr>';
$total += $jml;
$no++;
}
CETAKTAGIHAN
Tagihanpadaumumnyadiberikanperkelassebagaiprasyaratuntukmengikutiujianataumenerima
raport.Bentuksederhananyasepertipadagambarberikut:
HalamanCetakTagihan
HalamantagihanmerupakanLEFTJOINantaratabelsiswadantabelpembayaranuntukmemperoleh
dataseluruhsiswabaikyangsudahmelunasikewajibannyamaupunyangbelum.SkripSQLnyaseperti
berikut:
SELECT s.nis,s.nama,k.kelas,p.bulan,p.jumlah
FROM (siswa s INNER JOIN kelas k ON s.nis = k.nis)
LEFT JOIN pembayaran p ON s.nis = p.nis
ORDER BY k.kelas, s.nis
Padaskriptersebut,terdapat2(dua)buahJOIN,yangpertamauntukmenampilkanNIS,NamaSiswa,
danKelasnya.SedangkanJOINyangkeduadigunakanuntukmenampilkandatapembayaranyangtelah
dilakukan.
Skripkeseluruhanuntukmenampilkanhalamaniniadalahsebagaiberikut:
<?php
if( empty( $_SESSION['iduser'] ) ){
$_SESSION['err'] = '<strong>ERROR!</strong> Anda harus login terlebih dahulu.';
header('Location: ./');
die();
} else {
echo '<h2>Tagihan Pembayaran</h2><hr>';
$sql = mysql_query("SELECT s.nis,s.nama,k.kelas,p.bulan,p.jumlah FROM (siswa s
INNER JOIN kelas k ON s.nis = k.nis) LEFT JOIN pembayaran p ON s.nis = p.nis ORDER BY
k.kelas, s.nis");
$no=1;
while(list($nis,$nama,$kls,$bln,$jml)=mysql_fetch_array($sql)){
echo '<tr><td>'.$no.'</td><td>'.$nis.'</td><td>'.$nama.'</td><td>'.$kls.'</td>';
if(empty($bln) AND empty($jml)){
echo '<td>--</td><td>BL</td></tr>';
} else {
echo '<td>'.$bln.'</td><td>LUNAS</td></tr>';
}
$no++;
}
echo '</table></div></div>';
}
?>
TUGAS3
Padacontohtersebut,cetaktagihanmenampilkandatasecaramenyeluruhdalam1(satu)halaman.
Tugasmahasiswaadalah:
Temukancarauntukmenampilkandataperkelas.
Temukancarauntukmenampilkantagihanpersemesterataupertahun.