Anda di halaman 1dari 14

LAPORAN PRAKTIKUM

PEMOGRAMAN WEB
MODUL 11

DISUSUN OLEH :
ELISABETH OKMINOP ALIM
135610116

SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN


KOMPUTER
AKAKOM YOGYAKARTA
2015
A. TUJUAN
Mampu membuat aplikasi untuk transaksi (master detail)

B. DASAR TEORI
Master-Detail adalah fitur aplikasi input data yang memiliki dua buah block
yang keduanya direlasikan dalam hubungan Master dan Detail. Didalam aplikasi
untuk transaksi (master-detail) akan menggunakan fitur SQL Transaksi yang lazim
digunakan ketika akan memproses data-data yang penting didalam sistem, dimana
digunakan untuk proses querry lebih dari satu buah tabel yang
berhubungan/berelasi.
Form Master - Detail adalah form yang memiliki dua buah block yang
keduanya direlasikan dalam hubungan Master dan Detail. Dalam ER-Diagram, relasi
Master-Detail ini sama dengan relasi “One to Many”, artinya pada desain database
secara fisik, satu record tunggal dalam table Master memiliki referensi satu atau lebih
record yang ada pada table Detail.

Konsep Master - Detail atau One to Many ini biasanya digunakan saat
membuat form transaksi seperti pada form tansaksi penjualan, pembelian,
peminjaman buku dan lain - lain. Sekarang kita akan mencoba untuk membuat
aplikasi sederhana yang menerapkan konsep tersebut. Sebagai contoh anggap saja
kita akan membuat sebuah form transaksi dimana dalam form tersebut terdapat 3
tabel yang saling berhubungan, field dan relasi tabel tersebut ditunjukkan dengan
gambar di bawah ini.

Logika untuk melakukan penyimpanan pada form transaksi yang


menggunakan konsep Master - Detail atau One to Many dengan contoh seperti
gambar di atas, berbeda jika dibandingkan bila kita membuat form master atau di
dalam form hanya menggunakan satu table. Salah satu konsep logika yang bisa
digunakan untuk melakukan penyimpanan data dengan konsep Master - Detail atau
One to Many ini adalah :
1. Saat form dijalankan secara otomatis membuat table temporary, bisa menggunakan
Cursor atau Table biasa. Struktur dari table temporary ini intinya harus ada Field
kunci dari tabel master, dalam contoh di atas adalah KdBrg yang merupakan kunci
dari table barang, dan selanjutnya bisa ditambahkan field - field informasi mengenai
data dari table master yang digunakan dalam contoh seperti harga dan nama
barang. Selain field dari table barang dalam contoh, harus di tambahkan juga salah
satu field dari table detail yaitu jumlah jual yang berguna untuk mendapatkan
informasi subtotal dari jumlah penjualan barang tertentu per transaksi. Contoh
struktur dari table temporary adalah seperti yang ditampilkan di grid pada gambar
diatas.

2. Saat melakukan operasi penambahan barang, yang berfungsi adalah table


temporary tersebut.

3. Setelah penambahan barang selesai dan dilakukan penyimpanan, maka data yang
ada disimpan ke table penjualan dan khusus untuk table detail akan diisi dengan
data yang ada di table temporary atau dengan kata lain saat melakukan simpan ini
data yg ada di table temporary di salin ke dalam table detail. Jadi dalam satu
penyimpanan ada kemungkinan record yang bertambah di dalam table detail bisa
lebih dari satu data sedangkan record yang masuk di table penjualan tetap satu data,
Inilah makanya dinamai juga dengan One to Many.

C. PEMBAHASAN
barang_tersedia.php
<?php
$barang_pilih = 0;
if (isset($_COOKIE['keranjang'])) {
$barang_pilih = $_COOKIE['keranjang']; }
if (isset($_GET['idbarang'])) {
$idbarang = $_GET['idbarang'];
$barang_pilih = $barang_pilih .",".$idbarang;
setcookie('keranjang',$barang_pilih,time()+3600); }
include"koneksi.php";
$sql = "select * from barang where idbarang not in (".$barang_pilih.")
and stok > 0 order by idbarang desc ";
$hasil = mysqli_query($kon, $sql);
if (!$hasil)
die ("Gagal qurey..".mysqli_error() );
?>

<h2> DAFTAR BARANG TERSEDIA </h2>


<table border="1">
<tr>
<th>Foto</th>
<th>Nama Barang</th>
<th>Harga Jual</th>
<th>Stok</th>
<th>Operasi</th>
</tr>
<?php
$no= 0;
while ($row = mysqli_fetch_assoc($hasil)) {
echo " <tr> ";
echo " <td> <a href='pict/".$row['foto']." ' />
<img src='thumb/t_".$row['foto']." ' width='100' />
</a> </td>";
echo " <td> ".$row['nama']."</td>";
echo " <td> ".$row['harga']."</td>";
echo " <td> ".$row['stok']."</td>";
echo " <td> ";
echo " <a href='".$_SERVER['PHP_SELF']."?idbarang=".$row['idbarang']."' > BELI </a>" ;
echo " </td> ";
echo " </tr>"; }
?>
</table>

Script diatas adalah script yang digunakan untuk menampilkan daftar barang
yang tersedia. Script diatas juga pada saat kita menjalankan programnya dan
mengklik BELI, maka hal yang terjadi adalah barang yang kita pilih untuk dibeli,
secara otomatis akan hilang dari daftar barang yang tersedia, dan url di browser
akan tampak seperti ini :
http://localhost/modul11/barang_tersedia.php?menu=pilih&idbarang=80 hal
tersebut dikarenakan, terdapat script dalam program yaitu sebuah link seperti pada
gambar dibawah, yaitu pada line 36 tepatnya.

Keranjang_belanja.php
<?php
$barang_pilih = 0;
if (isset($_COOKIE['keranjang'])) {
$barang_pilih = $_COOKIE['keranjang']; }
if (isset($_GET['idbarang'])) {
$idbarang = $_GET['idbarang'];
$barang_pilih = str_replace((",".$idbarang),"",$barang_pilih) ;
setcookie('keranjang',$barang_pilih,time()+3600); }
include"koneksi.php";
$sql = "select * from barang where idbarang in (".$barang_pilih.")
order by idbarang desc ";
$hasil = mysqli_query($kon, $sql);
if (!$hasil)
die ("Gagal qurey..".mysqli_error() );

?>
<h2>KERANJANG BELANJA</h2>
<table border="1">
<tr>
<th>Foto</th>
<th>Nama Barang</th>
<th>Harga Jual</th>
<th>Stok</th>
<th>Operasi</th>
</tr>
<?php
$no = 0;
while ($row = mysqli_fetch_assoc($hasil)) {
echo " <tr> ";
echo " <td> <a href='pict/".$row['foto']." ' />
<img src='thumb/t_".$row['foto']." ' width='100' />
</a> </td>";
echo " <td> ".$row['nama']."</td>";
echo " <td> ".$row['harga']."</td>";
echo " <td> ".$row['stok']."</td>";
echo " <td> ";
echo " <a href='".$_SERVER['PHP_SELF']."?idbarang=".$row
['idbarang']."'> BATAL </a>" ;
echo " </td> ";
echo " </tr>"; }
?>
</table>

Script diatas digunakan untuk menampilkan keranjang belanja yan dipilih.


Dimana pada script ketika kita menjalankan programnya dan mengklik BATAL, maka
hal yang terjadi adalah barang yang sudah kita klik beli pada script
programbarang_tersedia.php tadi tidak jadi kita beli, karena mengklik BATAL, dan
pada url di browser juga akan tampak keluarannya, beserta dengan no idnya.
Perbedaanya, hanya pada script programnya antara barang_tersedia.php
dan barang_keranjang.php dimana pada line ke 36. Pada script
barang_tersedia.php, diline 36, merupakan perintah untuk memilih barang barang
yang sudah tersedia pada menu yang tampak di browser, sedangkan pada script
barang_keranjang.php diline 36 dijelaskan bahwa saat kita mengkilik batal, maka
pada keranjang dan idbarang secara otomatis akan tampak pada url dibrowser.

beli.php
<h2>DATA PEMBELIAN BARANG</h2>
<form action='simpan_beli.php' method="POST">
<table border="0">
<tr>
<td>Nama</td>
<td>: <input type="text" name="namacust" /> </td>
</tr>
<tr>
<td>Email</td>
<td>: <input type="email" name="email" /> </td>
</tr>
<tr>
<td>No. Telp</td>
<td>: <input type="text" name="notelp" /> </td>
</tr>
<tr>
<td colspan="2" align="right">
<input type="submit" value="Simpan" /> </td>
</tr>
</table>
</form>
<?php
include_once("keranjang_belanja.php");
?>

Script diatas merupakan form untuk melakukan pengisian pembelian dengan


atribut Nama, Email, No. Telp. Sehingga saat kita mengklik buttom Simpan maka
data yang diisi akan tersimpan pada database yang sudah kita buat diawal dan
tampilannya dapat dilihat pada gambar diatas.

Koneksi.php
<?php
error_reporting (E_ALL ^ E_DEPRECATED);
$host = "localhost";
$user = "root";
$pass = "";
$dbName = "toko_ol";
$kon = mysqli_connect ($host, $user, $pass);
if (!$kon)
die ("Gagal Koneksi...");

$hasil = mysqli_select_db ($kon, $dbName);


if (!$hasil) {
$hasil = mysqli_query ($kon, "CREATE DATABASE $dbName");
if (!$hasil)
die ("Gagal Buat Database");
else
$hasil = mysqli_select_db ($kon, $dbName);
if (!$hasil)
die ("Gagal Konek database");
}
$sqlTabelBarang = "create table if not exists barang (
idbarang int auto_increment not null primary key,
nama varchar (40) not null,
harga int not null default 0,
stok int not null default 0,
foto varchar (70) not null default '',
KEY (nama))";
mysqli_query ($kon, $sqlTabelBarang) or die ("Gagal Buat Tabel Barang ");

$sqlTabelHjual = "create table if not exists hjual (


idhjual int auto_increment not null primary key,
tanggal date not null,
namacust varchar (40) not null,
email varchar (50) not null default '',
notelp varchar (20) not null default '' )";

mysqli_query ($kon, $sqlTabelHjual) or die ("Gagal Buat Tabel Header Jual ");

$sqlTabelDjual = "create table if not exists djual (


iddjual int auto_increment not null primary key,
idhjual int not null,
idbarang int not null,
qty int not null,
harga int not null )";

mysqli_query ($kon, $sqlTabelDjual) or die ("Gagal Buat Tabel Detail Jual");


echo "Tabel Siap <hr/>" ;
?>

Script diatas merupakan koneksi yang kita buat agar terhubung kedatabase
toko_ol. Dimana ketika koneksi dan database yang kita buat telah jadi maka ketika
kita membuak database toko_ol akan tampil tabel hjual dan djual sesuai pada script
yang telah dibuat. Dan saat melakukan uji konekasi maka akan tampil Tabel Siap.
simpan_beli.php
<?php
$namacust = $_POST['namacust'];
$email = $_POST['email'];
$notelp = $_POST['notelp'];
$tanggal = date("Y-m-d");
$barang_pilih = '' ;
$qty =1;

$dataValid = "YA";
if (strlen(trim($namacust)) == 0 ) {
echo "Nama Harus Diisi...<br/>";
$dataValid="TIDAK";
}
if (strlen(trim($notelp))==0) {
echo "No. Telp Harus Diisi... </br>";
$dataValid = "TIDAK";
}
if (isset($_COOKIE['keranjang'])) {
$barang_pilih = $_COOKIE['keranjang'] ;
$dataValid = "TIDAK";
}else{
echo "Keranjang Belanja Kosong <br/>" ;
$dataValid="TIDAK";
}
if ($dataValid == "TIDAK") {
echo "Masih Ada Kesalahan, Silahkan Perbaiki! </br>";
echo "<input type = 'button' value = 'Kembali'
onClick = 'self.history.back()'>";
exit;
}
echo "Data Siap disimpan.";
setcookie('keranjang',$barang_pilih,time()-3600);
?>
Scipt diatas merupakan script sambungan dari scrip beli.php, di mana saat
kita mengklik buttom simpan maka hasil keluarannya akan tampak pada gambar di
bawah ini.
Kenapa tampilannya seperti diatas, hal tersebut dikarenakan, pada
barang_keranjang.php belum terisi sehinggan tampilannya seperti pada gambar di
atas. Dan ketika barang yang dipilih dan dibeli, sudah ada pada kerangjang, maka
akan tampak tampilan seperti pada gambar dibawah ini :

D. TUGAS

koneksi.php
<?php
$host = "localhost";
$user = "root";
$pass = "";
$dbName = "toko_buku";

$kon = mysql_connect ($host, $user, $pass);


if (!$kon)
die ("Gagal Koneksi...");

$hasil = mysql_select_db ($dbName);


if (!$hasil) {
$hasil = mysql_query ("CREATE DATABASE $dbName");
if (!$hasil)
die ("Gagal Buat Database");
else
$hasil = mysql_select_db ($dbName);
if (!$hasil) die ("Gagal Konek database"); }

$sqlTabelBuku = "create table if not exists buku (


kodebuku int auto_increment not null primary key,
judul varchar (40) not null,
pengarang varchar (40) not null,
penerbit varchar (40) not null,
foto varchar (40) not null default '',
KEY (kodebuku) )";
$sqlTabelDpinjam = "create table if not exists dpinjam (
idDpinjam int auto_increment not null primary key,
tanggal date not null,
namacust varchar (40) not null,
email varchar (50) not null default '',
notelp varchar (20) not null default '' )";

$sqlTabelPinjam = "create table if not exists pinjam (


idpinjam int auto_increment not null primary key,
iddpinjam int not null,
kodebuku int not null,
qty int not null )";

mysql_query ($sqlTabelBuku) or die ("Gagal Buat Tabel Buku ");


mysql_query ($sqlTabelDpinjam) or die ("Gagal Buat Tabel Haeder Buku ");
mysql_query ($sqlTabelPinjam) or die ("Gagal Buat Tabel Detail Buku ");
?>
Hal pertama yang perlu kita lakukan untuk membuat aplikasi database adalah
membuat koneksi kedatabase. Script diatas untuk membuat koneksi ke database
toko_buku. Dan kemudian membuat tabel buku, tabel dpinjam dan tabel pinjam.
buku_tersedia.php
<?php
$buku_pilih = 0;
if (isset($_COOKIE['keranjang'])) {
$buku_pilih = $_COOKIE['keranjang']; }
if (isset($_GET['kodebuku'])) {
$kodebuku = $_GET['kodebuku'];
$buku_pilih = $buku_pilih .",".$kodebuku;
setcookie('keranjang',$buku_pilih,time()+3600); }
include"koneksi.php";
$sql = "select * from buku where kodebuku not in (".$buku_pilih.")
order by kodebuku desc ";
$hasil = mysql_query($sql);
if (!$hasil)
die ("Gagal qurey..".myqsl_error() );
?>
<h2> DAFTAR BUKU TERSEDIA </h2>
<table border="1">
<tr>
<th>Foto</th>
<th>Judul Buku</th>
<th>Pengarang</th>
<th>Operasi</th>
</tr>
<?php
$no= 0;
while ($row = mysql_fetch_assoc($hasil)) {
echo " <tr> ";
echo " <td> <a href='pict/".$row['foto']." ' />
<img src='thumb/t_".$row['foto']." ' width='100' />
</a> </td>";
echo " <td> ".$row['judul']."</td>";
echo " <td> ".$row['pengarang']."</td>";
echo " <td> ";
echo " <a href='".$_SERVER['PHP_SELF']."?menu=pilih&kodebuku=".$row['kodebuku']."' > PINJAM </a>" ;
echo " </td> ";
echo " </tr>"; }
?>
</table>
Script diatas adalah script untuk melihat daftar buku yang tersedia pada
toko_buku dalam bentuk tabel. Dimana terdapat foto, judul buku, pengarang dan
operasi pada operasi terdapat link pinjam.
peminjaman_buku.php
<a href="peminjaman_buku.php?menu=pilih">PILIH BUKU</a>
&nbsp;&nbsp;&nbsp;
<a href="peminjaman_buku.php?menu=keranjang">KERANJANG PEMINJAMAN</a>
&nbsp;&nbsp;&nbsp;
<a href="peminjaman_buku.php?menu=pinjam">PEMINJAMAN</a>
<hr/>
<?php
$menu= isset($_GET["menu"]) ? $_GET["menu"] : "pilih";
if($menu == "pilih") {
include("buku_tersedia.php");
}elseif($menu == "keranjang") {
include("buku_keranjang.php");
}elseif($menu == "pinjam") {
include("pinjam.php");
}
?>
buku_keranjang.php
<?php
$buku_pilih = 0;
if (isset($_COOKIE['keranjang'])) {
$buku_pilih = $_COOKIE['keranjang']; }
if (isset($_GET['kodebuku'])) {
$kodebuku = $_GET['kodebuku'];
$buku_pilih = str_replace((",".$kodebuku),"",$buku_pilih) ;
setcookie('keranjang',$buku_pilih,time()+3600); }
include"koneksi.php";
$sql = "select * from buku where kodebuku in (".$buku_pilih.")
order by kodebuku desc ";
$hasil = mysql_query($sql);
if (!$hasil)
die ("Gagal qurey..".myqsl_error() );
?>
<h2>KERANJANG PEMINJAMAN</h2>
<table border="1">
<tr>
<th>Foto</th>
<th>Judul Buku</th>
<th>Pengarang</th>
<th class="noprint noprint_sc">Operasi</th>
</tr>
<?php
$no = 0;
while ($row = mysql_fetch_assoc($hasil)) {
echo " <tr> ";
echo " <td> <a href='pict/".$row['foto']." ' />
<img src='thumb/t_".$row['foto']." ' width='100' />
</a> </td>";
echo " <td> ".$row['judul']."</td>";
echo " <td> ".$row['pengarang']."</td>";
echo " <td class='noprint noprint_sc'> ";
echo " <a href='".$_SERVER['PHP_SELF']."?menu=keranjang&kodebuku=".$row['kodebuku']."'> BATAL
</a>" ;
echo " </td> ";
echo " </tr>"; }
?>
</table>

simpan_pinjam.php
<style>
/* buat class noprint, agar tampil di screen
tapi tidak muncul saat cetak */
@media print {
.noprint {
display:none; }
}
@media screen {
.noprint_sc {
display:none; }
}
</style>

<?php
$namacust = $_POST['namacust'];
$email = $_POST['email'];
$notelp = $_POST['notelp'];
$tanggal = date("Y-m-d");

$dataValid = "YA";
if (strlen(trim($namacust)) == 0 ) {
echo "Nama Harus Diisi...<br/>";
$dataValid="TIDAK"; }
if (strlen(trim($notelp))==0) {
echo "No. Telp Harus Diisi... </br>";
$dataValid = "TIDAK"; }
if ($dataValid == "TIDAK") {
echo "Masih Ada Kesalahan, Silahkan Perbaiki! </br>";
echo "<input type = 'button' value = 'Kembali'
onClick = 'self.history.back()'>";
exit; }
include "koneksi.php";
$simpan = true;
$mulai_transaksi = mysql_query('start transaction') ;

$sql="insert into dpinjam


(tanggal, namacust, email, notelp)
values
('$tanggal','$namacust','$email','$notelp') ";
$hasil = mysql_query($sql);
if(!$hasil) {
$simpan = false; }

$iddpinjam = 0 ;
$hasil = mysql_query("select last_insert_id()");
if(!$hasil){
$simpan= false ;
}else{
$data = mysql_fetch_array($hasil) ;
$iddpinjam = $data[0]; }

$buku_pilih = '';

if(isset($_COOKIE['keranjang'])) {
$buku_pilih = $_COOKIE['keranjang'] ;
}else{
$simpan = false ; }
$buku_array = explode(",",$buku_pilih) ;
$jumlah = count ($buku_array) ;
if ($jumlah <=1) {
$simpan = false;
}else{
foreach($buku_array as $kodebuku) {
if($kodebuku == 0) {
continue ; }
$sql = "select * from buku where kodebuku = ".$kodebuku ;
$hasil = mysql_query($sql) ;
if(!$hasil) {
$simpan = false ;
}else{
$row = mysql_fetch_assoc($hasil) ;
$harga = $row['harga'] ; }
$gty = 1;
$sql = "insert into djual (iddpinjam, idpinjam, qty)
values
('$iddpinjam','$idpinjam','$qty') ";
$hasil = mysql_query($sql) ;
if(!$hasil) {
$simpan = false; }
}
}

if ($simpan) {
$komit = mysql_query('commit');
}else{
$rollback = mysql_query('rollback') ;
echo"Gagal Simpan Data Peminjaman ? <br/>
Apakah Keranjang Peminjaman Tidak Kosong ? <br/>
<a href='peminjaman_buku.php'> OK </a> ";
exit; }

echo"<pre>";
echo"<h2>DATA PEMINJAMAN</h2>";
echo"================================================<br/>";
echo"NO. PEMINJAMAN :".date("Ymd").$iddpinjam."<br/>";
echo"TANGGAL PINJAM :".date("d-m-Y"),"<br/>";
echo"TANGGAL HARUS KEMBALI :".date("d-m-Y"),"<br/>";
echo"NAMA PEMINJAMAN :".$namacust."<br/>";
echo"================================================<br/>";
echo"tunjukkan bukti pinjam ini ketika pengembalian.<br/>";
include("buku_keranjang.php");
echo"</pre>";

?>
<div class="noprint">
Data Pembelian Berhasil Disimpan.
Cetak Bukti Pembelian Barang Ini. <br/>
<input type='button' value='Cetak'
onclick='javascrip:print();'>
<br/><br/>
<a href="peminjaman_buku.php">Pinjam Buku Lagi </a> <br/>
</div>

<?php
setcookie('keranjang',$buku_pilih,time()-3600);
?>
E. KESIMPULAN
Dengan adanya aplikasi transakasi (MASTER-DETAIL) ini,untuk sebuah toko
sangatlah bermanfaat, dikarenakan dengat adanya aplikasi ini, toko bisa lebih detail
lagi dalam melakukan big data dan mengelolah data yang ada didalam.

F. DAFTAR PUSTAKA
Pemrograman WEB Modul Pertemuan ke-11, www.php.net.
http://www.foxpromania.com/2011/04/penerapan-konsep-master-detail-atau-one.html

G. LISTING
Terlampir .

Anda mungkin juga menyukai