0% menganggap dokumen ini bermanfaat (0 suara)
103 tayangan71 halaman

Oop

PHP mendukung Object Oriented Programming secara penuh sejak versi PHP 5. Object didefinisikan dalam sebuah class yang berfungsi sebagai template untuk membentuk object. Properti dan method memberi object kemampuan untuk menyimpan dan melakukan tugas. Method dideklarasikan dalam class. Inheritance memungkinkan class diturunkan ke subclass.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
103 tayangan71 halaman

Oop

PHP mendukung Object Oriented Programming secara penuh sejak versi PHP 5. Object didefinisikan dalam sebuah class yang berfungsi sebagai template untuk membentuk object. Properti dan method memberi object kemampuan untuk menyimpan dan melakukan tugas. Method dideklarasikan dalam class. Inheritance memungkinkan class diturunkan ke subclass.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 71

OOP: Object Oriented Programming

PHP mendukung Object Oriented Programming atau OOP secara penuh sejak
versi PHP 5. Di PHP Object didefinisikan dalam sebuah class. Properti object
didefinisikan menggunakan kata tercadang var, dan method dari object berbentuk
sebuah function.
Daftar Isi
Object dan Class
Properti class dan Visibility Keyword
Method class
Konstruktor Class
Inheritance atau pewarisan
Object dan Class
Secara singkat class adalah template/kerangka yang digunakan untuk membentuk
sebuah object. Dengan demikian object adalah data yang telah terstruktur sesuai
dengan yang didefinisikan dalam sebuah class. Object adalah instance dari
classnya. Di PHP object didefinisikan menggunakan kata tercadang class diikuti oleh
nama class. Nama class boleh berupa gabungan huruf dan angka serta tanda garis
bawah, tapi tidak boleh diawali dengan angka dan tidak menggunakan kata
tercadang seperti abstract,static,final,private. Kode yang terkait dengan sebuah
class ditutup dengan kurung kurawal. Contoh:
1. class Product{
2. //body class
3. }
4.
5. class shopping_cart{
6. //body class
7. }
Membuat Instance Sebuah Class
Untuk membuat instance dari sebuah class digunakan kata tercadang new dan
diikuti oleh nama class tersebut. Misalkan:
$product = new Product();
Properti Object & Visibility Keyword
Dalam class dapat didenisikan variable 9ias9al yang disebut 9ias9al9. Properti juga
disebut member variable. Mendefinisikan variable di dalam class sama dengan
mendefinisikan variable biasa. Hanya saja diawali dengan visibility keyword atau
kata tercadang var, diikuti oleh nama ias al . Visibility keyword dapat berupa
public, protected atau private. Kata tercadang var sama dengan public. Visibility
keyword ini menandakan ruang lingkup dari mana saja 9ias9al9 bersangkutan 9ias
diakses. Nama 9ias9al9 9ias berupa gabungan dari huruf dan angka serta garis
bawah, tetapi tidak boleh diawali dengan angka. Cara mendefinisikan 9ias9al9
dengan kata tercadang public:
1. class Product{
2. public $name = default product name;
3. public $price = 0;
4. public $description; //definisi 9ias9al9 dengan nilai null
5. }
Cara mengakses !ias!al! dan men-setting !ias!al!
1. $product = new Product();
2. //mengakses property
3. echo $product->name; //ouput default product name
4. echo Price: .$product->price; //output Price: 0;
5. //men-setting nilai 9ias9al9
6. $product->price = 100;
7. echo Price: .$product->price; //ouput Price: 100;
Method Class

1
Properti memberi object kemampuan untuk menyimpan data, dan method memberi
object kemampuan untuk melakukan sebuah tugas. Method adalah function 9ias9al
yang dideklarasikan dalam sebuah class. Deklarasi method sama dengan deklarasi
function php biasa. Hanya saja method harus dideklarasikan dalam body class, dan
9ias dideklarasikan dengan visibility keyword. Contoh method:
1. class Product{
2.
3. public $name = default product name;
4. public $price = 0;
5. protected $discount = 0; //dalam persen
6.
7. public function getDiscount(){
8. return $this->discount; //cara mengakses 9ias9al9 dari sebuah method
9. }
10.
11.public function getPrice(){
12. $price = $this->price ($this->price * $this->getDiscount());
13. return $price;
14.}
15.
16.public function setDiscount($discount){
17. $this->discount = $discount; // cara men-setting nilai 9ias9al9 dari method
18.}
19.}
Memanggil atau Menggunakan Method Class
Untuk memanggil method dari sebuah class sama seperti 9ias9al9 menggunakan
tanda ->, seperti contoh di bawah:
1. $product = new Product();
2. $product->price = 100;
3. echo Price: .$product->getPrice(); //output Price: 100
4. $product->setDiscount(5);
5. echo Price: .$product->getPrice(); //output Price: 95
6. echo Discount: .$product->getDiscount().%; //output Discount: 5%
Konstruktor Class
Konstruktor class adalah method yang dipanggil pada saat object dibentuk atau
diinstance. Konstruktor digunakan untuk mempersiapkan class sebelum class
digunakan. Seperti menset 9ias9al9 9ias9al9 penting, memanggil method method
lain. Di PHP 5, konstruktor class diberi nama __construct(). Nama method diawali
dengan dua tanda garis bawah dan kata construct. Contoh konstruktor:
1. class Product{
2.
3. public $name = default product name;
4. public $price = 0;
5. protected $discount = 0; //dalam persen
6.
7. public function __construct($productName, $price){
8. $this->name = $productName;
9. $this->price = $price;
10.}
11.
12.public function getDiscount(){
13. return $this->discount; //cara mengakses 9ias9al9 dari sebuah method
14.}
15.
16.public function getPrice(){
17. $price = $this->price ($this->price * $this->getDiscount());

2
18. return $price;
19.}
20.
21.public function setDiscount($discount){
22. $this->discount = $discount; // cara men-setting nilai 9ias9al9 dari method
23.}
24.}
Contoh penggunaan:
1. $product = new Product(Buku Belajar PHP Object, 99.5);
2. echo $product->name; //output Buku Belajar PHP Object bukan default
product name
3. echo $product->getPrice(); //output 99.5 bukan 0
Inheritance atau Pewarisan
Inheritance atau Pewarisan adalah sebuah mekanisme dimana satu atau lebih
class diturunkan dari sebuah class lain. Class yang mewarisi atau diturunakn dari
class lainnya disebut subclass dari class yang diwarisi. Hal ini sering dijelaskan
dalam konteks ayah dan anak (parent dan child). Child class mewarisi semua
karakteristik dari parent class. Karakteristik ini adalah 9ias9al9 dan method.
Biasanya child class menambahkan fungsionalitas baru yang tidak dimiliki oleh
parent class. Untuk lebih memperjelas akan diberikan contoh kasus sebagai berikut.

Dari contoh di atas telah dibuat sebuah class Product. Class ini 9ias menangani
produk pada umumnya, dimana setiap product memiliki nama dan harga, juga 9ias
mendapatkan diskon. Namun class product ini tidak cukup baik untuk menangani
produk yang berupa CD 9ias9. CD 9ias9 memerlukan informasi berupa total durasi,
nama artis serta daftar judul lagu. Untuk itu diperlukan class baru (9ias9a class
Cdmusik) yang mewarisi karakteristik class product.
Contoh inheritance:
1. class Cdmusik extends Product{
2.
3. public $artis;
4. public $durasi = 0;
5. public $daftarLagu = array();
6.
7. function tambahLagu($lagu){
8. if(is_array($lagu)){
9. $this->daftarLagu = array_merge($this->daftarLagu, $lagu);
10. }else{
11. $this->daftarLagu[] = $lagu;
12. }
13.}
14.
15.function setDurasi($durasi){
16. $this->durasi = $durasi;
17.}
18.
19.function setArtis($artis){
20. $this->artis = $artis;
21.}
22.
23.}
24.
25.$cdAndra = new Cdmusik(Andra and The Backbone, 40);
26.$cdAndra->tambahLagu(Main Hati);
27.$cdAndra->tambahLagu(Hitamku);
28.$cdAndra->setArtis(Andra);

3
29.$cdAndra->setDurasi(60);
30.
31.echo Artis: .$cdAndra->artis;
32.echo <br/>Durasi:.$cdAndra->durasi;
33.echo <br/>Lagu:;
34.echo <ol>;
35.foreach($cdAndra->daftarLagu as $lagu){
36.echo <li>.$lagu.</a>;
37.}
38.echo </ol>;
Rangkuman
PHP mendukung Object Oriented Programming secara penuh sejak versi PHP 5.
Object didefinisikan dalam sebuah class. Secara singkat class adalah
template/kerangka yang digunakan untuk membentuk sebuah object. Dengan
demikian object adalah data yang telah terstruktur sesuai dengan yang
didefinisikan dalam sebuah class. Properti memberi object kemampuan untuk
menyimpan data, dan method memberi object kemampuan untuk melakukan
sebuah tugas. Method adalah function 9ias9al yang dideklarasikan dalam sebuah
class. Dengan Inheritance atau Pewarisan class 9ias diturunkan ke dalam
subclass subclass.

4
Membuat Searching (Skrip Pencarian Data)

Searching atau pencarian data merupakan hal penting dalam sebuah aplikasi,
apalagi aplikasi yang menangani data yang banyak. Ada dua tipe searching yaitu:
Quick Search dan Advanced Search. Quick search adalah pencarian sederhana
seperti google search, pengguna hanya memasukkan sebuah kata kunci dari apa
yang dicarinya. Sedangkan Advanced search adalah pencarian lanjut yang lebih
kompleks dengan beberapa kriteria pencarian, yang memungkinkan hasil pencarian
yang lebih akurat.
5
Sebelum membuat script seaching ada baiknya untuk mempelajari dasar untuk
menampilkan data. Pada tutorial ini akan digunakan sebuah tabel siswa seperti
berikut:
Fieldname Tipe Data Keterangan
Id int(11) primary key
Nama varchar(50)
Ayah varchar(50)
Ibu varchar(50)
Alamat text
Searching biasanya menggunakan query "like", seperti:
SELECT * FROM nama_table WHERE nama_field LIKE '%cari%'
hasilnya adalah semua data yang berisikan kata cari seperti "mencari",
"pencarian".

Membuat Quick Search

Untuk membuat Quick Search gunakan skrip php di bawah:


1. <!-- form quick search -->
2. <form name="form1" method="get" action="">
3. Search : <input type="text" name="q" id="q"/> <input type="submit"
value="Search"/>
4. </form>
5. <!-- menampilkan hasil pencarian -->
6. <?php
7. if(isset($_GET['q']) && $_GET['q']){
8. $conn = mysql_connect("localhost", "root", "");
9. mysql_select_db("test");
10. $q = $_GET['q'];
11. $sql = "select * from siswa where nama like '%$q%' or
12. ayah like '%$q%' or ibu like '%$q%' or alamat like '%$q%'";
13. $result = mysql_query($sql);
14. if(mysql_num_rows($result) > 0){
15. ?>
16. <table>
17. <tr>
18. <td>Nama</td>
19. <td>Ayah</td>
20. <td>Ibu</td>
21. <td>Alamat</td>
22. </tr>
23. <?php
24. while($siswa = mysql_fetch_array($result)){?>
25. <tr>
26. <td><?php echo $siswa['nama'];?></td>
27. <td><?php echo $siswa['ayah'];?></td>
28. <td><?php echo $siswa['ibu'];?></td>
29. <td><?php echo $siswa['alamat'];?></td>
30. </tr>
31. <?php }?>
32. </table>
33. <?php

6
34. }else{
35. echo 'Data not found!';
36. }
37.}
38.?>

Membuat Advanced Search

Gunakan skrip di bawah untuk membuat advanced search.


1. <!-- form advanced search -->
2. <form name="form1" method="get" action="">
3. Nama : <input type="text" name="nama" id="nama"/> <br/>
4. Ayah : <input type="text" name="ayah" id="ayah"/> <br/>
5. Ibu : <input type="text" name="ibu" id="ibu"/> <br/>
6. Alamat : <input type="text" name="alamat" id="alamat"/>
7. <br/><input type="submit" value="Search" name="search"/>
8. </form>
9. <!-- menampilkan hasil pencarian -->
10.<?php
11.if(isset($_GET['search'])){
12. $conn = mysql_connect("localhost", "root", "");
13. mysql_select_db("test");
14. $nama = $_GET['nama'];
15. $ayah = $_GET['ayah'];
16. $ibu = $_GET['ibu'];
17. $alamat = $_GET['alamat'];
18. $sql = "select * from siswa where nama like '%$nama%' and
19. ayah like '%$ayah%' and ibu like '%$ibu%' and alamat like '%$alamat%'";
20. $result = mysql_query($sql);
21. if(mysql_num_rows($result) > 0){
22. ?>
23. <table>
24. <tr>
25. <td>Nama</td>
26. <td>Ayah</td>
27. <td>Ibu</td>
28. <td>Alamat</td>
29. </tr>
30. <?php
31. while($siswa = mysql_fetch_array($result)){?>
32. <tr>
33. <td><?php echo $siswa['nama'];?></td>
34. <td><?php echo $siswa['ayah'];?></td>
35. <td><?php echo $siswa['ibu'];?></td>
36. <td><?php echo $siswa['alamat'];?></td>
37. </tr>
38. <?php }?>
39. </table>
40. <?php
41. }else{
42. echo 'Data not found!';
43. }
44.}
45.?>
Perbedaan advanced search dengan quick search adalah: Quick search
menggunakan operator "or" pada sql query, sedangkan Advanced search
7
menggunakan operator "and" dengan beberapa kriteria pencarian, seperti nama,
ayah, ibu, alamat.

Edit & Delete Data Tabel Yang Berelasi

Tutorial PHP Edit & Delete Data Tabel Yang Berelasi adalah kelanjutan dari
tutorial Menampilkan Data Beberapa Tabel. Seperti dijelaskan di tutorial
sebelumnya Menyimpan Data & Menampilkan Beberapa Tabel, relasi antar tabel
bisa dari satu-ke-satu, satu-ke-banyak dan banyak-ke-banyak. Di tutorial
Menampilkan Data Beberapa Tabel telah dijelaskan pula cara menampilkan data
dari masing masing relasi tersebut. Di tutorial sekarang ini akan dijelaskan cara
mengedit & menghapus data dari table yang berelasi, baik itu yang berelasi
satu-ke-satu,satu-ke-banyak ataupun banyak-ke-banyak.
Catatan:
Sebelum membaca tutorial ini Anda perlu membaca terlebih dahulu tutorial
Menyimpan Data & Menampilkan Beberapa Tabel dan Menampilkan Data Beberapa
Tabel

Edit & Delete Data Tabel Berelasi Satu-ke-satu

Hal pertama yang perlu dilakukan adalah mengubah kode yang digunakan untuk
menampilkan data dari tabel yang berelasi satu ke satu di tutorial Menampilkan
Data Beberapa Tabel dengan menambahkan link edit dan delete, seperti:
1. <?php
2. $conn = mysql_connect("localhost","root","blah");
3. mysql_select_db("test",$conn);
4. $sql = "select * from product p inner join buku b on
p.id_produk=b.id_produk";
5. $result = mysql_query($sql);
6. ?>
7. <table cellpadding="5" cellspacing="0" border="1">
8. <tr>
9. <th>Nama</th>
10. <th>Harga</th>
11. <th>Penulis</th>
12. <th>Penerbit</th>
13. <th>ISBN</th>
14. <th>Tanggal Terbit</th>
15. <th>Aksi</th>
16. </tr>
17. <?php while($buku = mysql_fetch_array($result)){?>
18. <tr>
19. <td><?php echo $buku['nama'];?></td>
20. <td><?php echo $buku['harga'];?></td>
21. <td><?php echo $buku['penulis'];?></td>
22. <td><?php echo $buku['penerbit'];?></td>
23. <td><?php echo $buku['isbn'];?></td>
24. <td><?php echo $buku['tgl_terbit'];?></td>
25. <!-- tambah link edit & delete -->
26. <td>
27. <a href="edit.php?id=<?php echo $buku['id_produk'];?
>">Edit</a> |

8
28. <a href="delete.php?id=<?php echo $buku['id_produk'];?
>">Delete</a>
29. </td>
30. </tr>
31. <?php }?>
32.</table>
Kemudian buat file edit.php seperti di bawah:
1. <?php
2. $conn = mysql_connect("localhost","root","blah");
3. mysql_select_db("test",$conn);
4. if($_POST){// jika tombol update ditekan
5. //update data di tabel product
6. $sql = "update product set
nama='{$_POST['nama']}',harga='{$_POST['harga']}'
7. where id_produk='{$_POST['id_produk']}'";
8. mysql_query($sql);
9. //update data di tabel buku
10. $sql = "update buku set
penulis='{$_POST['penulis']}',penerbit='{$_POST['penerbit']}',
11. isbn='{$_POST['isbn']}',tgl_terbit='{$_POST['tgl_terbit']}' where
id_produk='{$_POST['id_produk']}'";
12. mysql_query($sql);
13. echo "Data telah di edit";
14.}
15.$idProduk = (int) $_GET['id'];
16.$sql = "select * from product p inner join buku b on p.id_produk=b.id_produk
where p.id_produk='$idProduk'";
17.$result = mysql_query($sql);
18.$product = mysql_fetch_array($result);
19.?>
20.<form name="form1" action="" method="post">
21. <dl>
22. <dt>Nama</dt>
23. <dd><input type="text" name="nama" value="<?php echo
$product['nama'];?>"/></dd>
24. <dt>Harga</dt>
25. <dd><input type="text" name="harga" value="<?php echo
$product['harga'];?>"/></dd>
26. <dt>Jenis</dt>
27. <dd>
28. <select name="jenis" disabled="disabled">
29. <option value="BUKU" <?php echo
$product['jenis'] == "BUKU" ? 'selected="selected"' : '';?>>Buku</option>
30. </select>
31. </dd>
32. <dt>Penulis</dt>
33. <dd><input type="text" name="penulis" value="<?php echo
$product['penulis'];?>"/></dd>
34. <dt>Penerbit</dt>
35. <dd><input type="text" name="penerbit" value="<?php echo
$product['penerbit'];?>"/></dd>
36. <dt>ISBN</dt>
37. <dd><input type="text" name="isbn" value="<?php echo
$product['isbn'];?>"/></dd>
38. <dt>Tanggal Terbit</dt>

9
39. <dd><input type="text" name="tgl_terbit" value="<?php echo
$product['tgl_terbit'];?>"/></dd>
40. <dt></dt>
41. <dd><input type="submit" value="Update"/></dd>
42. </dl>
43. <input type="hidden" name="id_produk" value="<?php echo
$product['id_produk'];?>"/>
44.</form>
Penjelasan kode di atas sebagai berikut:
1. Baris ke-2 sampai 3 melakukan koneksi ke database
2. Baris ke-4 sampai 14 menyimpan perubahan data saat pengguna menekan
tombol update.
o Baris 6,7,8 untuk mengupdate data di tabel product
o Baris 10,11,12 mengupdate data di tabel buku
3. Selanjutnya baris ke-15 sampai 18 membaca/mencari data yang mau diedit
menggunakan sql join.
Data yang mau diedit didapat dari parameter id url, seperti /edit.php?id=2.
Sehingga di baris 15 - $idProduk = (int) $_GET['id']; - $idProduk akan berisi
nilai 2
4. Terakhir baris ke-20 sampai 44 menampilkan data yang diedit pada form,
dengan menambahkan attribute value pada masing masing input text,
seperti value="<?php echo $product['nama'];?>".
Langkah ketiga membuah file delete.php di bawah:
1. <?php
2. $idProduk = (int) $_GET['id'];
3. if($idProduk){
4. $conn = mysql_connect("localhost","root","blah");
5. mysql_select_db("test",$conn);
6. //delete data buku terlebih dahulu
7. mysql_query("delete from buku where id_produk='{$idProduk}'");
8. //delte data produk
9. mysql_query("delete from product where id_produk='{$idProduk}'");
10.}
11.//kembali ke halaman tampil.php
12.header("Location: tampil.php");
13.exit;
Pada saat menghapus data dari tabel berelasi satu-ke-satu, pertama-tama
hapus data tabel anak (tabel buku) kemudian hapus data tabel induk
(tabel product).

Edit & Delete Data Tabel Berelasi Satu-ke-banyak

Sama seperti Edit & Delete Data Table Berelasi Satu-ke-satu di atas, pertama ubah
kode yang digunakan untuk menampilkan data dari table yang berelasi satu ke
banyak di tutorial Menampilkan Data Beberapa Tabel dengan menambahkan link
edit dan delete, seperti:
1. <?php
2. $conn = mysql_connect("localhost","root","blah");
3. mysql_select_db("test",$conn);
4. $sql = "select * from album";
5. $result = mysql_query($sql);
6. ?>
7. <table cellpadding="5" cellspacing="0" border="1">
8. <tr>
9. <th>Judul</th>
10. <th>Artis</th>
10
11. <th>Aksi</th>
12. </tr>
13. <?php while($album = mysql_fetch_array($result)){?>
14. <tr>
15. <td><?php echo $album['judul'];?></td>
16. <td><?php echo $album['artis'];?></td>
17. <!-- tambah link edit & delete -->
18. <td>
19. <a href="edit-album.php?id=<?php echo $album['id']?
>">Edit</a> |
20. <a href="delete-album.php?id=<?php echo $album['id']?
>">Delete</a>
21. </td>
22. </tr>
23. <tr>
24. <td colspan="3">
25. <strong>Lagu: </strong>
26. <table cellspacing="0" cellpadding="3" width="100%">
27. <tr>
28. <td style="border-bottom:1px solid #000;">No
Track</td>
29. <td style="border-bottom:1px solid
#000">Judul</td>
30. <td style="border-bottom:1px solid
#000">Durasi</td>
31. </tr>
32. <?php
33. $rowset = mysql_query("select * from lagu where
id_album='".$album['id']."'");
34. while($lagu = mysql_fetch_array($rowset)){
35. ?>
36. <tr>
37. <td style="border-bottom:1px solid #000; border-
right:1px solid #000"><?php echo $lagu['no_track'];?></td>
38. <td style="border-bottom:1px solid #000; border-
right:1px solid #000"><?php echo $lagu['judul'];?></td>
39. <td style="border-bottom:1px solid #000"><?php
echo $lagu['durasi'];?></td>
40. </tr>
41. <?php }?>
42. </table>
43. </td>
44. </tr>
45. <?php }?>
46.</table>
Langkah kedua buat file edit-album.php sebagai berikut:
1. <?php
2. $conn = mysql_connect("localhost","root","blah");
3. mysql_select_db("test",$conn);
4. if($_POST){ // jika tombol update di tekan
5. //update data album
6. mysql_query("update album set
judul='{$_POST['judul']}',artis='{$_POST['artis']}'
7. where id='{$_POST['id']}'");
8. //delete data lagu album yang sedang diedit
9. mysql_query("delete from lagu where id_album='{$_POST['id']}'");

11
10. //kemudian simpan kembali data lagu
11. foreach($_POST['judul_lagu'] as $key => $judul){
12. if(!$judul){
13. continue;
14. }
15. $sql = "insert into lagu(id_album, no_track,judul,durasi)
16. values ('{$_POST['id']}','{$_POST['no_track']
[$key]}','{$judul}','{$_POST['durasi'][$key]}')";
17. mysql_query($sql);
18. }
19.}
20.$id = (int) $_GET['id'];
21.$sql = "select * from album where id='$id'";
22.$result = mysql_query($sql);
23.$album = mysql_fetch_array($result);
24.?>
25.<form name="formalbum" action="" method="post">
26.Judul Album: <input type="text" name="judul" value="<?php echo
$album['judul'];?>"/>
27.Nama Artis: <input type="text" name="artis" value="<?php echo
$album['artis'];?>"/>
28.<table id="tabel-lagu" cellspacing="0" border="1" cellpadding="3">
29. <tr>
30. <td>NO. Track</td>
31. <td>Judul</td>
32. <td>Durasi</td>
33. <td>Delete</td>
34. </tr>
35. <?php
36. $i = 0;
37. $rowset = mysql_query("select * from lagu where id_album='".
$album['id']."'");
38. while($lagu = mysql_fetch_array($rowset)){
39. ?>
40. <tr>
41. <td><input type="text" name="no_track[<?php echo $i?>]"
value="<?php echo $lagu['no_track'];?>"/></td>
42. <td><input type="text" name="judul_lagu[<?php echo $i?>]"
value="<?php echo $lagu['judul'];?>"/></td>
43. <td><input type="text" name="durasi[<?php echo $i?>]"
value="<?php echo $lagu['durasi'];?>"/></td>
44. <td><button type="button" class="del">Del</button></td>
45. </tr>
46. <?php $i++; }?>
47. <tr id="last">
48. <td colspan="4" align="right"><button type="button"
id="addRow">Add</button></td>
49. </tr>
50.</table>
51.<input type="hidden" name="id" value="<?php echo $album['id']?>"/>
52.<input type="submit" value="Update"/>
53.</form>
54.<script type="text/javascript" src="
https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
55.<script type="text/javascript">
56.var i = <?php echo $i?>;

12
57.$(function(){
58. $("#addRow").click(function(){
59. row = '<tr>'+
60. '<td><input type="text" name="no_track['+i+']"/></td>'+
61. '<td><input type="text" name="judul_lagu['+i+']"/></td>'+
62. '<td><input type="text" name="durasi['+i+']"/></td>'+
63. '<td><button type="button" class="del">Del</button></td>'+
64. '</tr>';
65. $(row).insertBefore("#last");
66. i++;
67. });
68. });
69. $(".del").live('click', function(){
70. $(this).parent().parent().remove();
71. });
72.</script>
Kode di atas mirip dengan kode untuk menyimpan data tabel berelasi satu ke
banyak di tutorial Menyimpan Data & Menampilkan Beberapa Tabel. Pada saat
mengedit data tabel berelasi satu-ke-banyak, pertama edit data induk
(tabel album), kemudian delete data terkait di tabel anak (tabel lagu), dan
simpan kembali data tabel anak (beserta perubahan data dan inputan
yang baru).
1. Baris 2,3 membuat koneksi ke database.
2. Baris ke-4 sampai 19 mengupdate data pada saat pengguna menekan
tombol update:
o baris 6,7 mengupdate data tabel album (tabel induk),
o baris 9 menghapus data di tabel lagu yang id_album-nya sama dengan
id album yang sedang diedit,
o baris ke-11 sampai 18 menyimpan kembali data lagu beserta
perubahannya.
3. Baris 20-23 membaca/mencari data yang akan diedit.
4. Baris 25-53 menampilkan data album dan lagu yang diedit pada form.
5. Baris 54-72 javascript untuk menambah atau mengurangi lagu.
Untuk delete data tabel berelasi satu-ke-banyak sama seperti tabel berelasi satu-
ke-satu. Pertama delete data tabel anak (tabel lagu) kemudian tabel hapus data
tabel index (tabel album).
1. <?php
2. $id = (int)$_GET['id'];
3. if($id){
4. $conn = mysql_connect("localhost","root","blah");
5. mysql_select_db("test",$conn);
6. //delete data di tabel lagu
7. mysql_query("delete from lagu where id_album='{$id}'");
8. //delete data album
9. mysql_query("delete from album where id='{$id}'");
10.}
11.header("Location: tampil.php");
12.exit;

Edit & Delete Data Tabel Berelasi Banyak-ke-banyak

Berbeda dengan tabel berelasi satu-ke-satu dan satu-ke-banyak dimana proses edit
dilakukan secara bersamaan pada kedua tabel. Pada relasi banyak-ke-banyak
proses edit dilakukan terpisah. Untuk lebih jelas, akan diambil contoh dari tutorial
sebelumnya Menyimpan Data & Menampilkan Beberapa Tabel. Relasi banyak-ke-
banyak antar tabel mahasiswa dan mata_kuliah yang dihubungkan dengan tabel
13
mahasiswa_mk. Data mahasiswa dan mata_kuliah diedit secara terpisah, sama
dengan mengedit data satu tabel.
Demikian pula dengan proses delete data, proses hapus dilakukan terpisah. Jika
menghapus data mahasiswa maka terlebih dahulu hapus data mahasiswa_mk yang
kolom nim-nya sama dengan nim mahasiswa yang dihapus. Jika menghapus data
mata_kuliah maka hapus lebih dulu data mahasiswa_mk yang kolom id_mk-nya
sama dengan id mata_kuliah yang dihapus.
1. <?php
2. // delete mata_kuliah
3. $id =(int) $_GET['id'];
4. if($id){
5. $conn = mysql_connect("localhost","root","blah");
6. mysql_select_db("test",$conn);
7. //delete data mahasiswa_mk
8. mysql_query("delete from mahasiswa_mk where id_mk='{$id}'");
9. //kemudian delete data mata kuliah
10. mysql_query("delete from mata_kuliah where id='{$id}'");
11.}
12.header("Location: list_mk.php");
13.
14.// ----------------------------------- //
15.
16.//delete mahasiswa
17.$nim = $_GET['nim'];
18.if($nim){
19. $conn = mysql_connect("localhost","root","blah");
20. mysql_select_db("test",$conn);
21. //delete data mahasiswa_mk
22. mysql_query("delete from mahasiswa_mk where
nim='".mysql_real_escape_string($nim)."'");
23. //kemudian delete data mahasiswa
24. mysql_query("delete from mahasiswa where
nim='".mysql_real_escape_string($nim)."'");
25.}
26.header("Location: list-mahasiswa.php");
Lalu bagaimana jika ingin mengurangi data mata kuliah dari seorang mahasiswa?
Salah satu caranya adalah dengan menghapus data tabel mahasiswa_mk yang
kolom nim-nya sama dengan mahasiswa bersangkutan dan kolom id_mk-nya sama
dengan mata kuliah yang dikurangkan. Pertama edit kode untuk menampilkan data
dari tabel berelasi banyak-ke-banyak, file list-mahasiswa.php yang telah dibuat di
tutorial Menampilkan Data Beberapa Tabel, dan tambahkan link delete
mahasiswa_mk seperti:
1. <?php
2. $conn = mysql_connect("localhost","root","blah");
3. mysql_select_db("test",$conn);
4. $sql = "select * from mahasiswa";
5. $result = mysql_query($sql);
6. ?>
7. <table cellspacing="0" cellpadding="5" border="1">
8. <tr>
9. <td>NIM</td>
10. <td>Nama</td>
11. <td>Jurusan</td>
12. <td>Aksi</td>
13. </tr>
14. <?php while($mhs = mysql_fetch_array($result)){?>

14
15. <tr>
16. <td><?php echo $mhs['nim'];?></td>
17. <td><?php echo $mhs['nama'];?></td>
18. <td><?php echo $mhs['jurusan'];?></td>
19. <td>
20. <a href="mahasiswa_mk.php?nim=<?php echo
$mhs['nim'];?>">Tambah Mata Kuliah</a> |
21. <a href="delete_mhs.php?nim=<?php echo $mhs['nim'];?
>">Delete Mahasiswa</a>
22. </td>
23. </tr>
24. <tr>
25. <td colspan="4">
26. <strong>Mata Kuliah:</strong>
27. <table cellspacing="0" cellpadding="5" width="100%">
28. <tr>
29. <td style="border-bottom:1px solid
#000;">Kode MK</td>
30. <td style="border-bottom:1px solid
#000;">Nama MK</td>
31. <td style="border-bottom:1px solid
#000;"></td>
32. </tr>
33. <?php
34. $rowset = mysql_query("select * from
mahasiswa_mk m inner join
35. mata_kuliah m1 on m.id_mk=m1.id where nim='".
$mhs['nim']."'");
36. while($mk = mysql_fetch_array($rowset)){
37. ?>
38. <tr>
39. <td style="border-bottom:1px solid
#000;border-right:1px solid #000"><?php echo $mk['kode'];?></td>
40. <td style="border-bottom:1px solid
#000;border-right:1px solid #000"><?php echo $mk['nama'];?></td>
41. <!-- tambah link delete -->
42. <td style="border-bottom:1px solid
#000;">
43. <a href="delete_mhs_mk.php?
nim=<?php echo $mhs['nim'];?>&id_mk=<?php echo $mk['id']?
>">Delete</a>
44. </td>
45. </tr>
46. <?php }?>
47. </table>
48. </td>
49. </tr>
50. <?php }?>
51.</table>
Kemudian buat file delete_mhs_mk.php
1. <?php
2. $nim = $_GET['nim'];
3. $id_mk = (int) $_GET['id_mk'];
4. if($nim && $id_mk){
5. $conn = mysql_connect("localhost","root","blah");
6. mysql_select_db("test",$conn);

15
7. mysql_query("delete from mahasiswa_mk where
nim='".mysql_real_escape_string($nim)."' and id_mk='{$id_mk}'");
8. }
9. header("Location: list-mahasiswa.php");

mungkin seperti ini (karena saya tidak lihat formnya):


1. $con = mysql_connect("localhost","root","11111111");
2. mysql_select_db("dbemuhdela", $con);
3.
4. $idedit=$_POST['textfield'];
5. $ffff=$_POST['bbbb'];
6. $alamat=$_POST['alamat'];
7. $jenis_kel=$_POST['jenis_kel'];
8. $hub_kepala_keluarga=$_POST['hub_kepala_keluarga'];
9. $tempat=$_POST['tempat'];
10.$tgl_lahir=$_POST['tgl'];
11.$bln_lahir=$_POST['bln'];
12.$thn_lahir=$_POST['thn'];
13.$propinsi=$_POST['propinsi'];
14.
15. if(isset($_POST['get'])){
16. $N = count($idedit);
17.for($i=0; $i < $N; $i++){
18. $y = date('Y');
19. $m = date('m');
20. $d = date('d');
21.
22. // kelahiran dijadikan dalam format tanggal semua
23. $lahir = $_POST['tgl'][$i] + ($_POST['bln'][$i]*30) + ($_POST['thn']
[$i]*365);
24.
25. // sekarang dijadikan dalam format tanggal semua
26. $now = $d + ($m*30) + ($y*365);
27.
28. // dari format tanggal jadikan tahun, bulan, hari
29. $umur = ($now - $lahir) / 365;
30. $bulan = (($now - $lahir) % 365) / 30;
31. $hari = (($now - $lahir) % 365) % 30;
32.
33. $result = mysql_query("UPDATE datart01 SET nama_lengkap='$idedit[$i]',
alamat='$alamat[$i]',
jenis_kel='$jenis_kel[$i]',hub_kepala_keluarga='$hub_kepala_keluarga[$i]',te
mpat='$tempat[$i]', tgl_bln_thn='$thn_lahir[$i]-$bln_lahir[$i]-$tgl_lahir[$i]',
umur='$umur[$i]', propinsi='$propinsi[$i]' where no='$ffff[$i]'");
34.}
35.}
36.header("location: index.php");
37.mysql_close($con);
38.
39.?>
December 20, 2012 | 10:45 pm
mas kode di bwh multipe update
tpi gagal di script menghitung umur pad
di jlnkan untuk update hanya tmpilan
kosong dh sy cri kesalhn y g ketemu
tolong cori solusi ya mas

16
December 20, 2012 | 10:42 pm
1. $con = mysql_connect("localhost","root","11111111");
2. mysql_select_db("dbemuhdela", $con);
3.
4. $idedit=$_POST['textfield'];
5. $ffff=$_POST['bbbb'];
6. $alamat=$_POST['alamat'];
7. $jenis_kel=$_POST['jenis_kel'];
8. $hub_kepala_keluarga=$_POST['hub_kepala_keluarga'];
9. $tempat=$_POST['tempat'];
10.$tgl_lahir=$_POST['tgl'];
11.$bln_lahir=$_POST['bln'];
12.$thn_lahir=$_POST['thn'];
13.$propinsi=$_POST['propinsi'];
14.
15. if(isset($_POST['get'])){
16. $y = date('Y');
17. $m = date('m');
18. $d = date('d');
19.
20. // kelahiran dijadikan dalam format tanggal semua
21. $lahir = $_POST['tgl'] + ($_POST['bln']*30) + ($_POST['thn']*365);
22.
23. // sekarang dijadikan dalam format tanggal semua
24. $now = $d + ($m*30) + ($y*365);
25.
26. // dari format tanggal jadikan tahun, bulan, hari
27. $umur = ($now - $lahir) / 365;
28. $bulan = (($now - $lahir) % 365) / 30;
29. $hari = (($now - $lahir) % 365) % 30;
30.
31.$N = count($idedit);
32.for($i=0; $i < $N; $i++)
33.
34.
35.{
36. $result = mysql_query("UPDATE datart01 SET nama_lengkap='$idedit[$i]',
alamat='$alamat[$i]',
jenis_kel='$jenis_kel[$i]',hub_kepala_keluarga='$hub_kepala_keluarga[$i]',te
mpat='$tempat[$i]', tgl_bln_thn='$thn_lahir[$i]-$bln_lahir[$i]-$tgl_lahir[$i]',
umur='$umur[$i]', propinsi='$propinsi[$i]' where no='$ffff[$i]'");
37.}
38.}
39.header("location: index.php");
40.mysql_close($con);
41.
42.?>

Menampilkan Data Beberapa Tabel

Tutorial PHP Menampilkan Data Beberapa Tabel adalah lanjutan dari tutorial
Menyimpan Data & Menampilkan Beberapa Tabel. Sebelum membaca tutorial ini
silahkan baca terlebih dulu tutorial sebelumnya. Ditutorial sebelumnya telah
dijelaskan cara menyimpan data ke beberapa tabel sekaligus. Seperti dijelaskan
sebelumnya, ada tiga tipe relasi antar tabel: relasi satu ke satu, satu ke banyak,
17
dan banyak ke banyak. Di sini akan dijelaskan cara menampilkan data masing
masing tipe relasi tabel.

Menampilkan Data Dari Beberapa Tabel

Menampilkan Data Dari Tabel Berelasi Satu-ke-satu

Cara paling cepat menampilkan dari tabel yang berelasi satu-ke-satu adalah
menggunakan sql join, seperti kode php di bawah.
1. <?php
2. $conn = mysql_connect("localhost","root","blah");
3. mysql_select_db("test",$conn);
4. $sql = "select * from product p inner join buku b on
p.id_produk=b.id_produk";
5. $result = mysql_query($sql);
6. ?>
7. <table cellpadding="5" cellspacing="0" border="1">
8. <tr>
9. <th>Nama</th>
10. <th>Harga</th>
11. <th>Penulis</th>
12. <th>Penerbit</th>
13. <th>ISBN</th>
14. <th>Tanggal Terbit</th>
15. </tr>
16. <?php while($buku = mysql_fetch_array($result)){?>
17. <tr>
18. <td><?php echo $buku['nama'];?></td>
19. <td><?php echo $buku['harga'];?></td>
20. <td><?php echo $buku['penulis'];?></td>
21. <td><?php echo $buku['penerbit'];?></td>
22. <td><?php echo $buku['isbn'];?></td>
23. <td><?php echo $buku['tgl_terbit'];?></td>
24. </tr>
25. <?php }?>
26.</table>
Kode untuk menampilkan data dari beberapa tabel di atas hampir sama dengan
cara menampilkan data dari satu tabel. Perbedaannya hanya pada baris ke-4, pada
baris ke-4 menggunakan sql join.

Menampilkan Data dari Tabel Berelasi Satu-ke-banyak

Untuk menampilkan data dari tabel berelasi satu ke banyak juga bisa menggunakan
sql join, namun lebih bagus jika tidak. Caranya adalah membaca tabel induk dan
kemudian menampilkan tabel anak berdasarkan isi tabel induk,seperti:
1. <?php
2. $conn = mysql_connect("localhost","root","blah");
3. mysql_select_db("test",$conn);
4. $sql = "select * from album";
5. $result = mysql_query($sql);
6. ?>
7. <table cellpadding="5" cellspacing="0" border="1">
8. <tr>
9. <th>Judul</th>
10. <th>Artis</th>

18
11. </tr>
12. <?php while($album = mysql_fetch_array($result)){?>
13. <tr>
14. <td><?php echo $album['judul'];?></td>
15. <td><?php echo $album['artis'];?></td>
16. </tr>
17. <tr>
18. <td colspan="2">
19. <strong>Lagu: </strong>
20. <table cellspacing="0" cellpadding="3">
21. <tr>
22. <td style="border-bottom:1px solid #000;">No
Track</td>
23. <td style="border-bottom:1px solid
#000">Judul</td>
24. <td style="border-bottom:1px solid
#000">Durasi</td>
25. </tr>
26. <?php
27. $rowset = mysql_query("select * from lagu where
id_album='".$album['id']."'");
28. while($lagu = mysql_fetch_array($rowset)){
29. ?>
30. <tr>
31. <td style="border-bottom:1px solid #000; border-
right:1px solid #000"><?php echo $lagu['no_track'];?></td>
32. <td style="border-bottom:1px solid #000; border-
right:1px solid #000"><?php echo $lagu['judul'];?></td>
33. <td style="border-bottom:1px solid #000"><?php
echo $lagu['durasi'];?></td>
34. </tr>
35. <?php }?>
36. </table>
37. </td>
38. </tr>
39. <?php }?>
40.</table>
bisa dilihat kode di atas hampir sama dengan kode untuk menampilkan data dari
satu tabel. Perbedaanya adalah pada baris 17-38. Baris 17-38 adalah untuk
menampilkan lagu berdasarkan id_album album yang sedang ditampilkan.

Menampilkan Data dari Tabel Berelasi Banyak-ke-banyak

Untuk menampilkan data dari tabel yang berelasi banyak ke banyak hampir sama
dengan cara menampilkan data dari tabel berelasi satu ke banyak.Bedanya adalah
pada sql yang digunakan, yaitu sql join. Sekarang buka kembali file list-
mahasiswa.php yang telah dibuat di tutorial sebelumnya dan ubah menjadi:
1. <?php
2. $conn = mysql_connect("localhost","root","blah");
3. mysql_select_db("test",$conn);
4. $sql = "select * from mahasiswa";
5. $result = mysql_query($sql);
6. ?>
7. <table cellspacing="0" cellpadding="5" border="1">
8. <tr>
19
9. <td>NIM</td>
10. <td>Nama</td>
11. <td>Jurusan</td>
12. <td>Aksi</td>
13. </tr>
14. <?php while($mhs = mysql_fetch_array($result)){?>
15. <tr>
16. <td><?php echo $mhs['nim'];?></td>
17. <td><?php echo $mhs['nama'];?></td>
18. <td><?php echo $mhs['jurusan'];?></td>
19. <td><a href="mahasiswa_mk.php?nim=<?php echo
$mhs['nim'];?>">Tambah Mata Kuliah</a></td>
20. </tr>
21. <tr>
22. <td colspan="4">
23. <strong>Mata Kuliah:</strong>
24. <table cellspacing="0" cellpadding="5" width="100%">
25. <tr>
26. <td style="border-bottom:1px solid
#000;">Kode MK</td>
27. <td style="border-bottom:1px solid
#000;">Nama MK</td>
28. </tr>
29. <?php
30. $rowset = mysql_query("select * from
mahasiswa_mk m inner join
31. mata_kuliah m1 on m.id_mk=m1.id where nim='".
$mhs['nim']."'");
32. while($mk = mysql_fetch_array($rowset)){
33. ?>
34. <tr>
35. <td style="border-bottom:1px solid
#000;border-right:1px solid #000"><?php echo $mk['kode'];?></td>
36. <td style="border-bottom:1px solid
#000;"><?php echo $mk['nama'];?></td>
37. </tr>
38. <?php }?>
39. </table>
40. </td>
41. </tr>
42. <?php }?>
43.</table>
Baris 21-41 adalah untuk menampilkan mata kuliah dari mahasiswa yang
bersangkutan.

Menyimpan Data & Menampilkan Beberapa Tabel

Tutorial PHP Menyimpan Data & Menampilkan Beberapa Tabel Sekaligus,


akan menjelaskan cara Menyimpan data ke beberapa tabel dan menampilkan
data dari beberapa tabel yang berelasi. Baik itu tabel dengan relasi one-to-one
atau satu-ke-satu, one-to-many atau satu-ke-banyak dan many-to-many atau
banyak-ke-banyak. Sebenarnya tidak ada trik atau cara khusus saat menyimpan
data ke beberapa table, begitu pula dengan menampilkan data dari beberapa table.

20
Selama memahami cara memproses HTML form yang benar dan memahami cara
menyimpan & menampilkan data ke satu tabel.

Relasi Antar Tabel

Pada saat melakukan normalisasi terhadap sebuah data, maka data akan dipecah
kedalam beberapa tabel yang berelasi satu sama lainnya. Ada 3 relasi antar table
sebagai berikut.

One-to-one Satu-ke-satu

Relasi one-to-one merupakan relasi tabel yang jarang digunakan, relasi ini
merelasikan satu data sebuah tabel dengan hanya satu data dari tabel lainnya.
Indikasi untuk menggunakan tipe relasi ini adalah jika sebuah data memiliki sebuah
subset data tertentu yang menerangkan lebih detil data itu, dimana subset data ini
tidak dimiliki oleh data tersebut pada umumnya. Sebagai contoh, sebuah product
secara umum memiliki id_produk, nama, harga, jenis. Namun pada tipe product
tertentu seperti buku, memiliki data tambahan seperti penulis, penerbit, ISBN,
tanggal_terbit. Satu data di tabel product hanya terhubung dengan satu data di
tabel buku. Jika digambarkan seperti di bawah.

One-to-many Satu-ke-banyak

Relasi one-to-many adalah relasi antar dua tabel dimana satu data (record) dari
Tabel 1 bisa terhubung dengan beberapa record di Tabel 2. Misalnya penjualan
memiliki id_penjualan, tanggal_jual, kasir. Setiap penjualan bisa terhubung
dengan banyak item_penjualan. item_penjualan memiliki id_item,id_penjualan,

21
id_produk, jumlah, harga_jual. Jika digambarkan seperti:

Many-to-many Banyak-ke-Banyak

Relasi many-to-many merupakan relasi yang paling kompleks, karena diperlukan


tabel lain untuk menghubungkan dua tabel data yang saling berkepentingan.
Seperti halnya penjualan bisa terhubung (berkepentingan) dengan banyak product,
dan product bisa terhubungan dengan banyak penjualan. Tabel penjualan dan
product memiliki relasi banyak ke banyak yang dihubungkan oleh tabel
item_penjualan. Contoh lain adalah dosen bisa memiliki banyak mahasiswa dan
mahasiswa bisa memiliki banyak dosen. Relasi banyak ke banyak antara dosen dan
mahasiswa memerlukan tabel lain, sebut saja tabel mahasiswa_dosen. Jika

22
digambarkan seperti di bawah.

Menyimpan Data ke Beberapa Tabel

Seperti dijelaskan sebelumnya tidak ada cara khusus untuk menyimpan data ke
beberapa tabel. Berikut adalah cara menyimpan data ke beberapa tabel
berdasarkan tipe relasi tabel.

Menyimpan Data ke Tabel Berelasi Satu-ke-satu

Disini akan diambil contoh seperti contoh di atas, menyimpan produk dengan tipe
buku. Pertama buat html form dengan kode di bawah.
1. <form name="form1" action="simpan.php" method="post">
2. <dl>
3. <dt>Nama</dt>
4. <dd><input type="text" name="nama"/></dd>
5. <dt>Harga</dt>
6. <dd><input type="text" name="harga"/></dd>
7. <dt>Jenis</dt>
8. <dd>
9. <select name="jenis">
10. <option value="BUKU">Buku</option>
11. </select>
12. </dd>
13. <dt>Penulis</dt>
14. <dd><input type="text" name="penulis"/></dd>
15. <dt>Penerbit</dt>
16. <dd><input type="text" name="penerbit"/></dd>
17. <dt>ISBN</dt>
18. <dd><input type="text" name="isbn"/></dd>
19. <dt>Tanggal Terbit</dt>
20. <dd><input type="text" name="tgl_terbit"/></dd>
21. <dt></dt>
22. <dd><input type="submit" value="Simpan"/></dd>
23. </dl>
24.</form>
23
Simpan kode di atas dengan nama form.php, kemudian buat file simpan.php untuk
menyimpan data ke tabel product dan tabel buku, dengan kode di bawah.
1. <?php
2. if($_POST){
3. $conn = mysql_connect("localhost","root","");
4. mysql_select_db("test",$conn);
5. //menyimpan ke table product
6. $sql = "insert into product (nama,harga,jenis) values
('{$_POST['nama']}','{$_POST['harga']}','{$_POST['jenis']}')";
7. mysql_query($sql) or die('Gagal menyimpan produk');
8. //mencari id produk
9. $sql = "select max(id_produk) as last_id from product limit 1";
10. $hasil = mysql_query($sql);
11. $row = mysql_fetch_array($hasil);
12. $lastId = $row['last_id'];
13. //menyimpan data buku ke table buku
14. $sql = "insert into buku (id_produk,penulis,penerbit,isbn,tgl_terbit)
15. values
('$lastId','{$_POST['penulis']}','{$_POST['penerbit']}','{$_POST['isbn']}','{$_P
OST['tgl_terbit']}')";
16. mysql_query($sql) or die('Gagal menyimpan data buku');
17. echo 'data tersimpan';
18.}
Bisa dilihat kode di atas hampir sama dengan kode untuk menyimpan data ke satu
tabel. Pada baris ke-2 dilakukan pengecekan apakah ada data yang dikirim atau
tidak. Jika ada data yang dikirim, di baris ke-3 dan 4 dilakukan koneksi ke database.
Kemudian pada baris ke-6 dan 7 menyimpan data ke tabel product. Selanjutnya dari
ke ke-9 sampai 16 adalah untuk menyimpan data ke tabel buku.
Setiap tabel yang berelasi, tabel anak (dalam kasus ini tabel buku) memiliki sebuah
foreign key, nilai foreign key ini diambil dari nilai referenced column -- primary
key tabel induk (referenced table, tabel product dalam contoh ini). Pada
contoh ini, kolom id_produk pada tabel buku adalah foreign key dan primary key
tabel product (kolom id_produk) adalah referenced column. Nilai dari foreign key
tidak boleh berisi nilai nilai yang tidak ada di reference colomn kecuali null.
Sekarang lihat kembali baris ke-9. Baris ke-9 sampai 12 adalah untuk mencari
id_produk yang baru saja disimpan pada tabel product (baris ke-6 dan 7). Kenapa
proses ini diperlukan? Karena nilai dari kolom id_produk tabel buku tidak
boleh berisi nilai nilai selain nilai yang ada di kolom id_produk tabel
product. Selanjutnya baris ke-14 sampai 16 adalah untuk menyimpan data ke
tabel buku, dan kolom id_produk diisi dengan nilai yang diperoleh dari baris
sebelumnya (baris ke-9 sampai 12).

Menyimpan Data ke Tabel Berelasi Satu-ke-banyak

Disini akan diberikan contoh menyimpan Album musik. Album musik yang memiliki
beberapa lagu. Struktur tabel album dan lagu seperti:

Pertama buatlah form html berikut:


24
1. <!-- file album.php -->
2. <form name="formalbum" action="simpan-album.php" method="post">
3. Judul Album: <input type="text" name="judul"/> Nama Artis: <input
type="text" name="artis"/>
4. <table id="tabel-lagu" cellspacing="0" border="1" cellpadding="3">
5. <tr>
6. <td>NO. Track</td>
7. <td>Judul</td>
8. <td>Durasi</td>
9. <td>Delete</td>
10. </tr>
11. <tr>
12. <td><input type="text" name="no_track[0]"/></td>
13. <td><input type="text" name="judul_lagu[0]"/></td>
14. <td><input type="text" name="durasi[0]"/></td>
15. <td><button type="button" class="del">Del</button></td>
16. </tr>
17. <tr id="last">
18. <td colspan="4" align="right"><button type="button"
id="addRow">Add</button></td>
19. </tr>
20.</table>
21.<input type="submit" value="Simpan"/>
22.</form>
23.<script type="text/javascript" src="
https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
24.<script type="text/javascript">
25.var i = 1;
26.$(function(){
27. $("#addRow").click(function(){
28. row = '<tr>'+
29. '<td><input type="text" name="no_track['+i+']"/></td>'+
30. '<td><input type="text" name="judul_lagu['+i+']"/></td>'+
31. '<td><input type="text" name="durasi['+i+']"/></td>'+
32. '<td><button type="button" class="del">Del</button></td>'+
33. '</tr>';
34. $(row).insertBefore("#last");
35. i++;
36. });
37. });
38. $(".del").live('click', function(){
39. $(this).parent().parent().remove();
40. });
41.</script>
Kode diatas akan membentuk form seperti berikut:

Yang perlu diperhatikan adalah atribut name dari element form (baris ke-12 sampai
14) yang diberi nilai seperti no_track[0], judul_lagu[0], durasi[0]. Penamaan
seperti itu bertujuan agar data dikirim ke server berupa array. Selanjut buatlah file
simpan-album.php untuk menyimpan data ke database.

25
1. <?php
2. //file simpan-album.php
3. if(!$_POST){
4. die('Tidak ada data yang disimpan!');
5. }
6. //koneksi ke database
7. $conn = mysql_connect("localhost","root","blah");
8. mysql_select_db("test");
9. //simpan ke tabel album
10.$sql = "insert into album (judul,artis) values
('{$_POST['judul']}','{$_POST['artis']}')";
11.mysql_query($sql) or die('Gagal menyimpan album');
12.//mencari id album
13.$sql = "select max(id) as id_album from album limit 1";
14.$row = mysql_fetch_array(mysql_query($sql));
15.$id_album = $row['id_album'];
16.//menyimpan data ke tabel lagu
17.foreach($_POST['judul_lagu'] as $key => $judul){
18. $sql = "insert into lagu(id_album, no_track,judul,durasi)
19. values ('{$id_album}','{$_POST['no_track']
[$key]}','{$judul}','{$_POST['durasi'][$key]}')";
20. mysql_query($sql);
21.}
22.echo 'Data telah disimpan';
Baris ke-1 sampai 15 sama dengan cara yang dilakukan untuk menyimpan data ke
tabel berelasi satu ke satu. Pertama membuka koneksi ke database (baris ke-7 dan
8 ). Kemudian menyimpan data ke tabel album (baris ke-10 dan 11). Selanjutnya
mencari id album yang baru saja disimpan (baris ke-13 s/d 15). Langkah terakhir
(baris ke-17 s/d 21) adalah melakukan perulangan dan menyimpan satu persatu
data ke tabel lagu, serta id_album diisi dengan nilai yang diperoleh sebelumnya di
baris ke-13 s/d 15.

Menyimpan Data ke Tabel Berelasi Banyak-ke-banyak

Menyimpan data ke tabel yang berelasi banyak ke banyak merupakan bagian yang
paling kompleks. Menyimpan datanya tidak bisa seperti cara cara sebelumnya,
yang hanya sekali langkah. Menyimpan data ke tabel yang berelasi banyak ke
banyak paling sedikit melewati 3 langkah. Agar lebih jelas akan dicontohkan relasi
antara mahasiswa dan mata_kuliah yang direlasikan oleh tabel mahasiswa_mk,
sebagai berikut:

Langkah Pertama: Menyimpan Data Mahasiswa.


Untuk menyimpan data mahasiswa gunakan kode php di bawah. Kode di bawah
sama seperti yang digunakan untuk menyimpan data ke satu tabel.
1. <?php
2. // file mahasiswa.php
3. if($_POST){
4. $conn = mysql_connect("localhost","root","blah");
5. mysql_select_db("test",$conn);

26
6. $sql = "insert into mahasiswa (nim,nama,jurusan) values
('{$_POST['nim']}','{$_POST['nama']}','{$_POST['jurusan']}')";
7. mysql_query($sql);
8. echo 'Data telah disimpan';
9. }
10.?>
11.<h3>Input Mahasiswa</h3>
12.<form name="form1" method="post" action="">
13.<dl>
14. <dt>NIM</dt>
15. <dd><input type="text" name="nim"/></dd>
16. <dt>Nama</dt>
17. <dd><input type="text" name="nama"/></dd>
18. <dt>Jurusan</dt>
19. <dd><input type"text" name="jurusan"/></dd>
20. <dt></dt>
21. <dd><input type="submit" value="Simpan"/></dd>
22.</dl>
23.</form>
Simpan kode di atas dengan nama file mahasiswa.php
Langkah Kedua: Menyimpan Data Mata Kuliah
Menyimpan data mata kuliah sama seperti menyimpan data mahasiswa. Gunakan
kode di bawah dan simpan dengan nama mata_kuliah.php.
1. <?php
2. //file mata_kuliah.php
3. if($_POST){
4. $conn = mysql_connect("localhost","root","blah");
5. mysql_select_db("test",$conn);
6. $sql = "insert into mata_kuliah (kode,nama) values
('{$_POST['kode']}','{$_POST['nama']}')";
7. mysql_query($sql);
8. echo 'Data telah disimpan';
9. }
10.?>
11.<h3>Input Mata Kuliah</h3>
12.<form name="form1" method="post" action="">
13.<dl>
14. <dt>Kode MK</dt>
15. <dd><input type="text" name="kode"/></dd>
16. <dt>Nama</dt>
17. <dd><input type="text" name="nama"/></dd>
18. <dt></dt>
19. <dd><input type="submit" value="Simpan"/></dd>
20.</dl>
21.</form>
Langkah Ketiga: Menyimpan Data Mata Kuliah Seorang Mahasiswa
Untuk mempermudah proses menyimpan data Mata Kuliah Seorang Mahasiswa,
diperlukan kode untuk menampilkan daftar mahasiswa di bawah.
1. <?php
2. //file list-mahasiswa.php
3. $conn = mysql_connect("localhost","root","blah");
4. mysql_select_db("test",$conn);
5. $sql = "select * from mahasiswa";
6. $result = mysql_query($sql);
7. ?>
8. <table cellspacing="0" cellpadding="5" border="1">

27
9. <tr>
10. <td>NIM</td>
11. <td>Nama</td>
12. <td>Jurusan</td>
13. <td>Aksi</td>
14. </tr>
15. <?php while($mhs = mysql_fetch_array($result)){?>
16. <tr>
17. <td><?php echo $mhs['nim'];?></td>
18. <td><?php echo $mhs['nama'];?></td>
19. <td><?php echo $mhs['jurusan'];?></td>
20. <td><a href="mahasiswa_mk.php?nim=<?php echo
$mhs['nim'];?>">Tambah Mata Kuliah</a></td>
21. </tr>
22. <?php }?>
23.</table>
Simpan kode di atas dengan nama list-mahasiswa.php. Kode tersebut berfungsi
untuk menampilkan daftar mahasiswa dan membuat link berjudul "Tambah Mata
Kuliah" ke halaman mahasiswa_mk.php. Halaman mahasiswa_mk.php digunakan
untuk menyimpan data mata kuliah seorang mahasiswa.
1. <?php
2. //file mahasiswa_mk.php
3. $conn = mysql_connect("localhost","root","blah");
4. mysql_select_db("test",$conn);
5. //mencari data mahasiswa
6. $sql = "select * from mahasiswa where
nim='".mysql_real_escape_string($_GET['nim'])."'";
7. $mhs = mysql_fetch_array(mysql_query($sql));
8. ?>
9. <h2>Tambah Mata Kuliah Mahasiswa: <?php echo $mhs['nama'];?></h2>
10.<form name="form" method="post" action="simpan_mahasiswa_mk.php">
11.<?php
12.//mencari semua data mata kuliah
13.$subquery = "select id_mk from mahasiswa_mk where nim='".
$mhs['nim']."'";
14.$sql = "select * from mata_kuliah where id not in ({$subquery})";
15.$result = mysql_query($sql);
16.while($mataKuliah = mysql_fetch_array($result)){
17. //membut checkbox
18. echo '<input type="checkbox" name="mata_kuliah[]" value="'.
$mataKuliah['id'].'"/>';
19. echo $mataKuliah['kode'].': '.$mataKuliah['nama'].' ';
20.}
21.?>
22.<input type="hidden" name="nim" value="<?php echo $mhs['nim'];?>"/>
23.<br/>
24.<input type="submit" value="Simpan"/>
25.</form>
Baris ke-6 dan 7 kode di atas adalah untuk mencari data mahasiswa yang akan di
tambahkan mata kuliahnya. Baris ke-8 menampilkan nama mahasiswa. Baris ke-13
dan 14 adalah membuat sql query untuk mencari mata kuliah yang belum
ditambahkan ke mahasiswa bersangkutan. Untuk mempermudah di baris 13 dan 14
menggunakan subquery. Selanjutnya baris 15 s/d 20 untuk menampilkan checkbox
mata kuliah yang belum dimiliki oleh mahasiswa bersangkutan.
Langkah berikutnya adalah membuat file simpan_mahasiswa_mk.php untuk
menyimpan data mata kuliah mahasiswa.

28
1. <?php
2. //file simpan_mahasiswa_mk.php
3. if($_POST){
4. $conn = mysql_connect("localhost","root","blah");
5. mysql_select_db("test",$conn);
6. foreach($_POST['mata_kuliah'] as $id_matakuliah){
7. $sql = "insert into mahasiswa_mk (nim,id_mk) values
('{$_POST['nim']}','{$id_matakuliah}')";
8. mysql_query($sql) or die("Gagal Menyimpan Data".mysql_error());
9. }
10.}
11.header("Location: list-mahasiswa.php");
12.exit('Data disimpan');

Sistem Login dengan Tipe User & Hak Akses Berbeda

Tutorial php Sistem Login dengan Tipe User & Hak Akses Berbeda
menjelaskan langkah langkah membuat login sistem dengan beberapa tipe user
yang memiliki hak akses yang berbeda beda pula.

Pada tutorial ini Anda mungkin menemukan hal baru atau hal yang bisa
membingungkan, oleh karena itu Anda perlu membaca dengan seksama!

Sistem login menyangkut 2 hal/konsep/proses yaitu Otentikasi & Otorisasi atau


Authentication & Authorization

Otentikasi & Otorisasi

Kedua konsep ini perlu dipahami sebelum memulai membuat kode login sistem
yang akan dijelaskan di tutorial php ini.

Otentikasi atau Authentication adalah proses mengkonfirmasi identitas dari


seseorang atau suatu benda. Misalkan pada saat pulang ke rumah dan mengetuk
pintu masuk, maka ibu Anda akan menanyakan siapa yang mengetuk pintu,
sebelum mempersilahkan Anda masuk.

Otorisasi atau Authorization adalah proses memberi izin seseorang atau suatu
benda untuk melakukan sesuatu. Contoh, setelah Anda dipersilahkan masuk, maka
Anda akan diizikan untuk duduk di ruang tamu, menonton tv, membaca majalah di
meja, masuk ke kamar tidur Anda. Namun tidak mengizinkan Anda menggunakan
29
laptop ayah Anda atau membuka kotak penyimpanan.

Proses otentikasi & otorisasi menyangkut 4 komponen penting.


1. Orang atau benda yang akan melakukan sesuatu dan dikonfirmasi
indentitasnya, dalam contoh di atas Anda sendiri;
2. Aksi yang dilakukan, misal membaca, menonton;
3. Benda yang dikenakan Aksi, misal tv, buku, kamar tidur;
4. Peran atau role dari orang di dalam sistem, misal peran Anda di rumah yaitu
sebagai Anak.
Perlu ditekankan di komponen terakhir peran. Pada saat Anda berdiri di depan pintu
rumah, saat mengetuk pintu, maka peran Anda adalah "TAMU" atau "GUEST".
Setelah ibu Anda mengkonfirmasi diri Anda dan mengizinkan Anda masuk ke dalam
rumah, maka peran Anda berubah menjadi "ANAK". Jika yang mengetuk pintu
ayah Anda maka setelah diizinkan masuk perannya berubah dari "TAMU" ke
"KEPALA KELUARGA". Peran inilah yang menentukan aksi apa yang boleh Anda
lakukan terhadap sebuah benda. Aksi Aksi apa saja yang bisa Anda lakukan
berdasarkan peran Anda sering disebut dengan hak akses.

Menyiapkan Tabel Database

Langkah pertama yang perlu dilakukan adalah membuat tabel yang akan
digunakan pada tutorial ini. Buatlah tabel dengan nama "user" seperti di bawah:
_______________________________________________________________________
| kolom | tipe data | keterangan |
-----------------------------------------------------------------------
| user_id | varchar(40) | primary key |
-----------------------------------------------------------------------
| name | varchar(50) | |
-----------------------------------------------------------------------
| password | varchar(50) | |
-----------------------------------------------------------------------
| type | varchar(20) | mencatat tipe/peran user |
-----------------------------------------------------------------------
1. CREATE TABLE `user` (
2. `user_id` VARCHAR(40) NOT NULL ,
3. `name` VARCHAR(50) NULL ,
4. `password` VARCHAR(50) NULL ,
5. `type` VARCHAR(20) NULL ,
6. PRIMARY KEY (`user_id`) )
7. DEFAULT CHARACTER SET = utf8
8. COLLATE = utf8_general_ci;
Perlu diperhatikan di tabel di atas ada satu kolom type, kolom type
digunakan untuk mencatat/menentukan peran pengguna setelah berhasil login.

Membatasi Hak Akses Pengguna Berdasarkan Tipe/Peranan (Otorisasi)

Pada bagian ini akan dimulai membuat kode php untuk membatasi hak akses.
Seperti dijelaskan di atas otentikasi & otorisasi menyangkut 4 komponen. Jika
dikaitkan dengan contoh kode di tutorial ini maka 4 komponen tersebut adalah
sebagai berikut:
1. Orang atau benda-> pengguna atau pengunjung website;
2. Aksi-> mengakses/menload/mengunjungi halaman web;
3. Benda-> halaman web, misal: index.php, login.php, admin.php;
4. Peran-> guest,admin,user ditentukan dari kolom type di tabel user.

30
File Konfigurasi

Pertama buat file config.php untuk menyimpan semua konfigurasi umum seperti
konfigurasi koneksi database.
1. <?php
2. if(!defined('__NOT_DIRECT')){
3. //mencegah akses langsung ke file ini
4. die('Akses langsung tidak diizinkan!');
5. }
6.
7. define('BASE_URL', '/tutorial/multi-login/');
8. //koneksi database
9. define('DB_HOST','localhost');
10.define('DB_USER','root');
11.define('DB_PASS', 'blah');
12.define('DB_NAME' ,'test');
Pada baris ke-2 sampai ke-5 digunakan untuk mencegah akses langsung ke file
config.php, file harus di-include oleh file lain dengan mendifinisikan konstanta
__NOT_DIRECT terlebih dahulu.
Baris ke-7 adalah bagian terpenting, mendifinisikan konstanta BASE_URL jika Anda
mengakses tutorial ini di browser seperti http://localhost/tutorial/multi-login/ maka
BASE_URL diisi dengan /tutorial/multi-login/. Jika http://localhost/multi-login/ maka
isi BASE_URL dengan /multi-login/. Tinggal hilangkan localhost, lebih mudahnya lagi
jika Anda membuat tutorial ini di folder htdocs/tutorial/multi-login maka isi
BASE_URL dengan tutorial/multi-login.
Baris selanjutnya adalah mendefinisikan konstanta untuk koneksi ke database.

Konfigurasi Hak Akses Masing Masing Tipe User

Setelah selesai mendefinisikan konfigurasi global, selanjutnya adalah membuat file


konfigurasi hak akses masing masing tipe user, halaman web mana saja yang bisa
diakses setiap tipe user.
1. Pertama buat folder dengan nama "akses".
2. Di dalam folder akses buatlah 3 file, file admin.php untuk pengguna dengan
peran admin, file user.php untuk pengguna dengan peran user (user biasa),
dan file guest.php untuk pengguna dengan peran guest.
Masing masing file tersebut adalah sebagai berikut:
file admin.php
1. <?php
2. $__akses_config = array(
3. 'login.php',
4. 'logout.php',
5. 'admin/index.php',
6. 'admin/list-user.php',
7. 'admin/add-user.php',
8. 'admin/edit-user.php',
9. 'admin/delete-user.php',
10. 'admin/add-artikel.php',
11. 'admin/edit-artikel.php',
12. 'admin/list-artikel.php',
13. 'admin/delete-artikel.php',
14. 'index.php',
15. 'view-artikel.php'
16.);
file user.php
1. <?php
31
2. $__akses_config = array(
3. 'login.php',
4. 'logout.php',
5. 'admin/index.php',
6. 'admin/add-artikel.php',
7. 'admin/edit-artikel.php',
8. 'admin/list-artikel.php',
9. 'admin/delete-artikel.php',
10. 'index.php',
11. 'view-artikel.php'
12.);
file guest.php
1. <?php
2. $__akses_config = array(
3. 'login.php',
4. 'logout.php',
5. 'register.php',
6. 'index.php',
7. 'view-artikel.php'
8. );
ketiga file di atas berisi satu variabel dengan nama $__akses_config dengan tipe
data array, variabel $__akses_config berisi data array dari halaman halaman mana
saja yang bisa diakses masing masing tipe user. Contoh admin boleh mengakses
halaman admin/list-user.php sedangkan user dan guest tidak bisa, kemudian semua
pengguna bisa mengakses halaman login.php.
Jumlah file di folder akses tidak terpaku hanya 3 buah, bisa ditambah sesuai
dengan kebutuhan, sesuai dengan tipe user yang diinginkan.

File Untuk Otorisasi User

Langkah selanjutnya adalah membuat file cek-akses.php. File ini digunakan untuk
menentukan apa peran pengguna dan halaman apa saja yang bisa dikunjungi.

Pertama mencegah akses langsung ke file cek-akses.php, file harus di-include oleh
file lain dengan mendifinisikan konstanta __NOT_DIRECT terlebih dahulu.
1. <?php
2. if(!defined('__NOT_DIRECT')){
3. //mencegah akses langsung ke file ini
4. die('Akses langsung tidak diizinkan!');
5. }

Kedua mengecek apakah user sudah login atau belum dan menentukan tipe/peran
pengguna.
6. // ....
7. session_start();
8. include_once dirname(__FILE__).DIRECTORY_SEPARATOR.'config.php';
9. if(!isset($_SESSION['my_user_agent']) || ($_SESSION['my_user_agent']!
=md5($_SERVER['HTTP_USER_AGENT']))){
10. //user belum login
11. $__tipe_user = 'guest';
12.}else{
13. $__tipe_user = $_SESSION['tipe_user'];
14.}
Membuka session di baris ke-7, baris ke-8 meng-include file config.php yang telah
dibuat sebelumnya. Baris ke-9 sampai 14 mengecek apakah pengguna sudah login,
jika belum login maka tipenya adalah "guest" dan sebaliknya tipe user sesuai
32
dengan nilai $_SESSION['tipe_user'] (sesuai dengan nilai dari tabel user).
Catatan:
Berikut penjelasan beberapa fungsi yang mungkin baru Anda ketahui:
DIRECTORY_SEPARATOR adalah konstanta yang berisi nilai 'pemisah folder',
di windows nilainya \ dan di linux /.
__FILE__ adalah konstanta yang berisi nilai nama lengkap file beserta nama
foldernya misal, file cek-akses.php ada di folder C:\xampp\htdocs\multi-login
maka __FILE__ akan berisi C:\xampphtdocsmulti-logincek-akses.php.
dirname fungsi untuk mendapatkan nama folder dari sebuah file atau folder,
dirname('C:\xampp\htdocs\multi-login\cek-akses.php'); akan menghasilkan
'C:\xampp\htdocs\multi-login'.

Ketiga meng-include salah satu file yang ada di folder akses yang dibuat
sebelumnya, sesuai dengan tipe pengguna yang diperoleh pada kode di atas. Jika
tipe pengguna guest maka include file akses/guest.php, jika admin maka include
file akses/admin.php
15.//.....
16.$aksesFilename =
dirname(__FILE__).DIRECTORY_SEPARATOR.'akses'.DIRECTORY_SEPARATOR.
$__tipe_user.'.php';
17.if(!file_exists($aksesFilename)){
18. die('Terjadi kesalahan sistem');
19.}
20.include $aksesFilename;

Keempat menentukan file yang sedang diakses oleh pengguna dan mengecek
apakah pengguna diperbolehkan mengakses file tersebut.
21.//.........
22.$arrayCurrentPath = explode('?',$_SERVER['REQUEST_URI']);
23.$currentPath = substr($arrayCurrentPath[0], strlen(BASE_URL));
24.
25.$allow = in_array($currentPath, $__akses_config);

Kelima jika pengguna tidak diizinkan dan pengguna belum login maka pengguna
dialihkan ke halaman login (baris 28 dan 29), sebaliknya ditampilkan text "Anda
tidak diizinkan mengakses halaman ini!" (baris 31).
26.//..........
27.if(!$allow){
28. if($__tipe_user == 'guest' && $currentPath != 'login.php'){
29. header("Location: ".BASE_URL.'login.php');
30. }else{
31. echo "Anda tidak diizinkan mengakses halaman ini!";
32. }
33. exit;
34.}
Setelah semua langkah di atas digabungkan maka file cek-akses.php akan seperti:
1. <?php
2. if(!defined('__NOT_DIRECT')){
3. //mencegah akses langsung ke file ini
4. die('Akses langsung tidak diizinkan!');
5. }
6.
7. session_start();
8.
9. require_once dirname(__FILE__).DIRECTORY_SEPARATOR.'config.php';
10.

33
11.if(!isset($_SESSION['my_user_agent']) || ($_SESSION['my_user_agent']!
=md5($_SERVER['HTTP_USER_AGENT']))){
12. //user belum login
13. $__tipe_user = 'guest';
14.}else{
15. $__tipe_user = $_SESSION['tipe_user'];
16.}
17.
18.$aksesFilename =
dirname(__FILE__).DIRECTORY_SEPARATOR.'akses'.DIRECTORY_SEPARATOR.
$__tipe_user.'.php';
19.if(!file_exists($aksesFilename)){
20. die('Terjadi kesalahan sistem');
21.}
22.include $aksesFilename;
23.
24.$arrayCurrentPath = explode('?',$_SERVER['REQUEST_URI']);
25.$currentPath = substr($arrayCurrentPath[0], strlen(BASE_URL));
26.
27.$allow = in_array($currentPath, $__akses_config);
28.
29.if(!$allow){
30. if($__tipe_user == 'guest' && $currentPath != 'login.php'){
31. header("Location: ".BASE_URL.'login.php');
32. }else{
33. echo "Anda tidak diizinkan mengakses halaman ini!";
34. }
35. exit;
36.}

Otentikasi Pengguna

Setelah membuat skrip untuk otorisasi pengguna di atas, langkah selanjutnya


adalah membuat skrip untuk Otentikasi user.

File Login.php

Berikut adalah langkah langkah untuk membuat file login.php, langkah langkah
mengotentikasi pengguna.
Pertama mendefinisikan konstanta __NOT_DIRECT dan meng-include file cek-
akses.php
1. defined('__NOT_DIRECT') || define('__NOT_DIRECT',1);
2. include 'cek-akses.php';

Kedua cek apakah pengguna sudah menginput user_id & password dan menekan
tombol login, kemudian membuka koneksi ke database
3. //....
4. if($_POST){
5. mysql_connect(DB_HOST,DB_USER,DB_PASS);
6. mysql_select_db(DB_NAME);

Ketiga cek kebenaran user_id dan password yang diinput pengguna. Jika benar
buat 3 session $_SESSION['tipe_user'], $_SESSION['user_id'], dan
$_SESSION['my_user_agent'] dan alihkan pengguna ke halaman admin/index.php.

34
Sebaliknya jika user_id atau password salah tampilkan pesan "ID User atau
password salah!"
7. //..........
8. $userId = mysql_real_escape_string($_POST['user_id']);
9. $data = mysql_fetch_array(mysql_query("select * from user where
user_id='".$userId."'"));
10. if($data !== false && $data['password'] == md5($_POST['password'])){
11. //login berhasil
12. $_SESSION['tipe_user'] = $data['type'];
13. $_SESSION['user_id'] = $data['user_id'];
14. $_SESSION['my_user_agent'] =
md5($_SERVER['HTTP_USER_AGENT']);
15. header("Location: admin/index.php");
16. }else{
17. echo "ID User atau password salah!";
18. }
19.}?>

Keempat membuat form login


19.//.......
20.<form method="post" action="">
21.ID User: <input type="text" name="user_id"/>
22.Password: <input type="password" name="password"/>
23.<input type="submit" value="Login"/>
24.</form>
Jika digabungkan file login.php akan menjadi:
1. <?php
2. defined('__NOT_DIRECT') || define('__NOT_DIRECT',1);
3. include 'cek-akses.php';
4. if($_POST){
5. mysql_connect(DB_HOST,DB_USER,DB_PASS);
6. mysql_select_db(DB_NAME);
7. $userId = mysql_real_escape_string($_POST['user_id']);
8. $data = mysql_fetch_array(mysql_query("select * from user where
user_id='".$userId."'"));
9. if($data !== false && $data['password'] == md5($_POST['password'])){
10. //login berhasil
11. $_SESSION['tipe_user'] = $data['type'];
12. $_SESSION['user_id'] = $data['user_id'];
13. $_SESSION['my_user_agent'] =
md5($_SERVER['HTTP_USER_AGENT']);
14. header("Location: admin/index.php");
15. }else{
16. echo "ID User atau password salah!";
17. }
18.}
19.?>
20.<form method="post" action="">
21.ID User: <input type="text" name="user_id"/>
22.Password: <input type="password" name="password"/>
23.<input type="submit" value="Login"/>
24.</form>

Cara Menggunakan File cek-akses.php

Untuk menggunakan cek-akses.php sangat sederhana seperti


35
1. defined('__NOT_DIRECT') || define('__NOT_DIRECT',1);
2. include 'cek-akses.php';
Sekarang buatlah folder admin dan file admin/index.php, admin/add-user.php dan
admin/add-artikel.php. Masing masing file ditambahkan kode di bawah di bagian
paling atas.
1. <?php
2. defined('__NOT_DIRECT') || define('__NOT_DIRECT',1);
3. include '../cek-akses.php';
4. ?>

Uji Coba

Gunakanlah sql berikut untuk menambahkan user di tabel user


1. INSERT INTO USER (user_id, name, password, TYPE) VALUES ('admin1',
'Admin', md5('admin'), 'admin');
2. INSERT INTO USER (user_id, name, password, TYPE) VALUES ('test', 'Test',
md5('123456'), 'user');
Sekarang akses dari browser http://localhost/multi-login/admin/index.php maka
Anda akan dialihkan ke halaman login. Masukkan user id test dan password
123456. Setelah berhasil login akses http://localhost/multi-login/admin/add-
user.php maka akan muncul text "Anda tidak diizinkan mengakses halaman ini!".
Dengan langkah yang sama coba login dengan admin dan password admin, lalu
akses http://localhost/multi-login/admin/add-user.php maka Anda akan
diperbolehkan mengaksesnya serta text "Anda tidak diizinkan mengakses halaman
ini!" akan hilang.

36
PHP OOP: Save Edit Delete & Menampilkan Data dengan OOP

Sep 22, 2012 By Ellyx Christian Level: Menengah Komentar Print


Banyak kelebihan yang diberikan dari pemrograman berorientasi objek atau OOP.
Salah satunya adalah reusable, dimana kode php yang ditulis dapat digunakan
kembali, tanpa harus menulis kembali kode php untuk melakukan hal yang sama.
Tutorial PHP OOP: Save Edit Delete & Menampilkan Data dengan OOP ini
akan dibahas cara menyimpan, menampilkan, mengedit, dan menghapus data
menggunakan konsep OOP.

Membuka Koneksi ke Database dengan OOP

Hal pertama yang harus dilakukan sebelum bisa menyimpan data adalah membuka
koneksi ke database. Untuk membuka koneksi ke database dengan php, cukuplah
mudah. Misal, bisa menggunakan kode sederhana di bawah:
1. $koneksi = mysql_connect("localhost","root",""); //host, user, password
2. mysql_select_db("db_test", $koneksi);
Jika kode ini langsung diubah kedalam konsep OOP, maka akan seperti:
1. class Connect {
2. public static function getConnection(){
3. $koneksi = mysql_connect("localhost","root",""); //host, user,
password
4. mysql_select_db("db_test", $koneksi);
5. return $koneksi;
6. }
7. }
Namun bukan cara ini yang akan digunakan, karena pada saat parameter koneksi
seperti host, user database dan password berubah maka class ini harus diubah atau
diedit sesuai dengan parameter yang baru. Hal itu bertentangan dengan
Open/Closed Principle dimana class terbuka untuk ekstensi/inheritance tapi tertutup
untuk modifikasi. Class yang sudah selesai ditulis hanya terbuka untuk modifikasi
untuk perbaikan error.

File Konfigurasi

Jadi apa yang diperlukan agar bisa mengubah parameter koneksi? sebuah file
konfigurasi. Dalam tutorial ini akan digunakan sebuah file config.ini untuk
menyimpan semua konfigurasi. Pertama buatlah file dengan nama config.ini dan
tulis konfigurasi berikut:

37
1. ;database configuration
2. dbhost="localhost"
3. dbuser="root"
4. dbpassword="blah"
5. dbname="test"
Pada saat parameter koneksi berubah file config.ini lah yang diubah tanpa perlu
mengedit class Connect yang dibuat.

Membaca File Konfigurasi dengan Class Config

Langkah selanjutnya, dibutuhkan sebuah class untuk membaca konfigurasi, maka


buatlah sebuah file Config.php dan class Config sebagai berikut.
1. <?php
2.
3. class Config {
4.
5. protected static $_config = array();
6.
7. public static function getConfig($key){
8. if(!self::$_config){
9. $filename =
dirname(__FILE__).DIRECTORY_SEPARATOR.'config.ini';
10. $config = parse_ini_file($filename);
11. if(false === $config){
12. throw new Exception('Gagal membaca file
konfigurasi');
13. }
14. self::$_config = $config;
15. }
16.
17. if(isset(self::$_config[$key])){
18. return self::$_config[$key];
19. }
20. }
21.}
Berikut penjelesan singkat dari fungsi getConfig() di atas. Cek apakah parameter
$_config masih kosong (file config.ini belum pernah dibaca), jika kosong maka baca
file config.ini menggunakan fungsi parse_ini_file dan simpan hasilnya di properti
$_config -- baris ke-8 sampai 15. Setelah file config.ini dibaca, cari nilai konfigurasi
sesuai dengan parameter $key (baris ke-17).

Class Connect

Setelah membuat file konfigurasi config.ini kemudian membaca konfigurasi


menggunakan class Config. Sekarang saatnya membuka koneksi ke database
menggunakan class Connect. Buatlah file Connect.php dan class Connect di bawah:
1. <?php
2.
3. include_once dirname(__FILE__).DIRECTORY_SEPARATOR.'Config.php';
4.
5. class Connect {
6.
7. protected static $_connection;
8.
9. public static function getConnection(){

38
10. if(!self::$_connection){
11. $dbhost = Config::getConfig('dbhost');
12. $dbuser = Config::getConfig('dbuser');
13. $dbpassword = Config::getConfig('dbpassword');
14. $dbname = Config::getConfig('dbname');
15. self::$_connection = @mysql_connect($dbhost, $dbuser,
$dbpassword);
16. if(!self::$_connection){
17. throw new Exception('Gagal melalukan koneksi ke
database. '.mysql_error());
18. }
19. $result = @mysql_select_db($dbname, self::$_connection);
20. if(!$result){
21. throw new Exception('Koneksi gagal:
'.mysql_error());
22. }
23. }
24. return self::$_connection;
25. }
26.
27. public static function close(){
28. if(self::$_connection){
29. mysql_close(self::$_connection);
30. }
31. }
32.}
Fungsi getConnection() di atas pertama-tama mengecek apakah sudah ada koneksi
terbuka, jika belum maka konfigurasi dibaca dan koneksi baru ke database dibuat.

Menyimpan Data dengan Konsep OOP

Sebelum mulai membuat kode OOP untuk menyimpan data, terlebih dahulu kita
akan mempelajari bagaimana proses penyimpanan data. Jika ada sebuah lemari
penyimpanan seperti gambar dibawah:

Maka kita akan menaruh pensil di kotak pensil, pulpen di kotak pulpen. Secara
sederhana seperti itulah proses menyimpan data ke database. Jika ada tabel user
seperti berikut:
Kolom Tipe Data

user_id varchar(50)

nama varchar(100)

39
password varchar(50)

tipe varchar(20)
maka perlu dilakukan hal yang sama seperti kotak penyimpanan di atas. user_id
disimpan di kolom user_id, nama di kolom nama, dan seterusnya. Bagaimana
melakukan hal ini dengan kode php? menggunakan associated array, seperti:
1. array(
2. 'user_id' => 'admin',
3. 'nama' => 'Administrator',
4. 'password' => '123123',
5. 'tipe' => 'USER'
6. )
bagian kiri tanda => adalah kolom tabel dan bagian kanan adalah nilai yang akan
disimpan.
Lalu apa hubungannya dengan kode menyimpan data yang akan dibuat?
Mengetahui cara menggunakan kode simpan tersebut dan mengetahui parameter
inputan yang digunakan yaitu associated array. Berikut adalah cara membuat kode
menyimpan data menggunakan konsep OOP.

Buatlah file Table.php lalu include file Connect.php dan deklarasikan class Table
1. <?php
2.
3. include_once dirname(__FILE__).DIRECTORY_SEPARATOR.'Connect.php';
4.
5. class Table {

Tambahkan property $_tableName untuk menyimpan nama tabel dan buat


konstruktor class
1. <?php
2.
3. include_once dirname(__FILE__).DIRECTORY_SEPARATOR.'Connect.php';
4.
5. class Table {
6.
7. protected $_tableName;
8.
9. function __construct($tableName){ // konstruktor
10. $this->_tableName = $tableName;
11. }

Buat fungsi connect() dan close() untuk membuka dan menutup koneksi ke
database. Dan deklarasikan fungsi save().
12.//.......kode sebelumnya ...........
13. public function connect(){
14. return Connect::getConnection();
15. }
16.
17. public function close(){
18. Connect::close();
19. }
20.
21. function save(array $data){ //inisialisai fungsi save

dengan fungsi save akan dibuat sebuah sql insert dengan format kurang lebih
seperti

40
INSERT INTO `nama_tabel` SET `nama_kolom1`='nilai 1', `nama_kolom2`='nilai 2';.

Buat kode sql untuk bagian warna merah


20.// ... kode sebelumnya ........
21. function save(array $data){
22. $sql = "UPDATE `".$this->_tableName."` SET"; // sql bagian warna
merah

buat kode sql bagian bagian warna hijau dan sambungkan dengan dengan
bagian warna merah
22.// ... kode sebelumnya ........
23. foreach($data as $field => $value){ //sql bagian warna hijau
24. $sql .= " `".$field."`='".mysql_real_escape_string($value,
Connect::getConnection())."',";
25. }
26. $sql = rtrim($sql, ','); // hilangkan kelebihan tanda koma ,

simpan data menggunakan fungsi mysql_query dan throw Exception jika gagal
menyimpan data.
26.// ... kode sebelumnya ........
27. $result = mysql_query($sql, Connect::getConnection());
28. if(!$result){
29. throw new Exception('Gagal menyimpan data ke table '.
$this->_tableName.': '.mysql_error());
30. }
31. } // akhir fungsi save
32.} // akhir class Tabel

Jika potongan kode di atas digabungkan maka akan menjadi:


1. <?php
2.
3. include_once dirname(__FILE__).DIRECTORY_SEPARATOR.'Connect.php';
4.
5. class Table {
6.
7. protected $_tableName;
8.
9. function __construct($tableName){
10. $this->_tableName = $tableName;
11. }
12.
13. public function connect(){
14. return Connect::getConnection();
15. }
16.
17. public function close(){
18. Connect::close();
19. }
20.
21. function save(array $data){
22. $sql = "INSERT INTO `".$this->_tableName."` SET";
23. foreach($data as $field => $value){
24. $sql .= " `".$field."`='".mysql_real_escape_string($value,
Connect::getConnection())."',";
25. }
26. $sql = rtrim($sql, ',');

41
27. $result = mysql_query($sql, Connect::getConnection());
28. if(!$result){
29. throw new Exception('Gagal menyimpan data ke table '.
$this->_tableName.': '.mysql_error());
30. }
31. }
32.}

Bagaimana cara menggunakan class Tabel di atas untuk menyimpan data, contoh:
1. include 'Tabel.php';
2. $table = new Tabel('user'); // user adalah nama tabel
3. $table->connect();
4. $table->save(array(
5. 'user_id' => 'admin',
6. 'nama' => 'Admin',
7. 'password' => '123456',
8. 'tipe' => 'USER'
9. ));
10.$table->close();

Edit Data Menggunakan Konsep OOP

Langkah langkah untuk membuat kode edit data dengan konsep OOP hampir sama
dengan simpan data di atas. Fungsi update() yang akan dibuat digunakan untuk
membentuk sql kurang lebih seperti:
UPDATE `nama_tabel` SET `nama_kolom1`='nilai 1', `nama_kolom2`='nilai 2'
WHERE `nama_kolom1` = 'test';.

Buka kembali file Tabel.php dan tambahkan fungsi update() dan buat sql bagian
warna merah.
31.// ....... kode sebelumnya.......
32. function update(array $data, $where = ''){
33. $sql = "UPDATE `".$this->_tableName."` SET"; // sql bagian warna
merah

buat sql bagian warna hijau dan sambung dengan sql bagian warna merah
33.// ......... kode sebelumnya .........
34. foreach($data as $field => $value){ // sql bagian hijau
35. $sql .= " `".$field."`='".mysql_real_escape_string($value,
Connect::getConnection())."',";
36. }
37. $sql = rtrim($sql, ','); // hilangkan kelebihan tanda koma ,

buat sql warna biru jika parameter $where tidak kosong


37.//.......... kode sebelumnya........
38. if($where){
39. $sql .= " WHERE ".$where; // sql bagian warna biru
40. }

edit data menggunakan fungsi mysql_query dan throw Exception jika proses edit
data gagal
40.//........ kode sebelumny ..........
41. $result = mysql_query($sql, Connect::getConnection());
42. if(!$result){
42
43. throw new Exception('Gagal mengupdate data table '.
$this->_tableName.': '.mysql_error());
44. }
45. }

jika digabungkan akan menjadi seperti berikut:


31.//....... kode sebelumnya .........
32. function update(array $data, $where = ''){
33. $sql = "UPDATE `".$this->_tableName."` SET";
34. foreach($data as $field => $value){
35. $sql .= " `".$field."`='".mysql_real_escape_string($value,
Connect::getConnection())."',";
36. }
37. $sql = rtrim($sql, ',');
38. if($where){
39. $sql .= " WHERE ".$where;
40. }
41. $result = mysql_query($sql, Connect::getConnection());
42. if(!$result){
43. throw new Exception('Gagal mengupdate data table '.
$this->_tableName.': '.mysql_error());
44. }
45. }

Cara menggunakan fungsi update di atas sangat mudah, contoh:


1. <?php
2. include 'Table.php';
3. $tabel = new Tabel('user');
4. $tabel->connect();
5. $data = array(
6. 'nama' => 'Administrator',
7. 'password' => '123123'
8. );
9. $tabel->update($data, "user_id='admin'");
10.$tabel->close();

Delete Data dengan Konsep OOP

Jika menghapus data dari sebuah tabel database maka digunakan sql query kurang
lebih seperti:
DELETE FROM `nama_tabel` WHERE `nama_kolom`='test'
Untuk membuat kode php untuk menghapus data dengan konsep OOP, sql bagian
merah akan menjadi parameter inputan dari fungsi delete() di bawah.
45.//....... kode sebelumnya .........
46. function delete($where = ''){
47. $sql = "DELETE FROM `".$this->_tableName."`";
48. if($where){
49. $sql .= " WHERE ".$where;
50. }
51. $result = mysql_query($sql, Connect::getConnection());
52. if(!$result){
53. throw new Exception('Gagal menghapus data dari table '.
$this->_tableName.': '.mysql_error());
54. }
55. }

43
Tambahkan kode delete di atas ke class Tabel di file Tabel.php. Cara
penggunaannya sebagai berikut:
1. <?php
2. include 'Tabel.php';
3. $tabel = new Tabel('user');
4. $tabel->connect();
5. $table->delete("user_id='admin'");
6. $table->close();

Menampilkan Data dengan Konsep OOP

Menampilkan data dari sebuah tabel database bisa menggunakan fungsi


mysql_fetch_array, mysql_fetch_assoc, atau mysql_fetch_object. Sesuai dengan
bahasa tutorial ini, maka fungsi yang sesuai adalah mysql_fetch_object karena
fungsi mysql_fetch_object re-return sebuah object. Apakah itu pilihan yang tepat?
Coba perhatikan kode menampilkan data berikut:
1. <?php
2. $conn = mysql_connect("localhost", "root", "");
3. mysql_select_db("test", $conn);
4. $sql = "select * from `user`";
5. $rs = mysql_query($sql);
6. while($user = mysql_fetch_object($rs)){
7. echo $user->nama;
8. }
kode di atas terlihat sederhana, tapi setiap kali menampilkan data tabel berbeda,
harus menulis kode yang mirip berulang ulang kali. Lalu bagaimana cara
mengubahnya menjadi berorientasi object? Di php ada sebuah interface standar
yang disebut Iterator. Interface Iterator digunakan untuk mengakses atau
memanipulasi sebuah array/list. Dengan mengimplementasikan interface Iterator
maka class yang dibuat bisa digunakan dalam foreach seperti halnya array.
Interface Iterator memiliki 5 fungsi di bawah yang perlu diimplementasikan.
Nama Fungsi Deskripsi

rewind() mereset pointer array kembali 0 atau awal

current() me-return element dari pointer terkini

key() me-return pointer terkini

next() me-return element terkini dan memperbaharui pointer

valid() memvalidasi bahwa ada element dari pointer terkini

Sekarang buatlah file Select.php dan Class Select untuk mengimplementasikan


fungsi interface Iterator di atas.
1. <?php
2.
3. include_once dirname(__FILE__).DIRECTORY_SEPARATOR.'Connect.php';
4.
5. class Select implements Iterator{
6.
7. protected $_query;
8. protected $_sql;
9. protected $_pointer = 0;
10. protected $_numResult = 0;
11. protected $_results = array();
44
12.
13. function __construct($sql){
14. $this->_sql = $sql;
15. }
16.
17. function rewind(){
18. $this->_pointer = 0;
19. }
20.
21. function key(){
22. return $this->_pointer;
23. }
24.
25. protected function _getQuery(){
26. if(!$this->_query){
27. $connection = Connect::getConnection();
28. $this->_query = mysql_query($this->_sql, $connection);
29. if(!$this->_query){
30. throw new Exception('Gagal membaca data dari
database:'.mysql_error());
31. }
32. }
33. return $this->_query;
34. }
35.
36. protected function _getNumResult(){
37. if(!$this->_numResult){
38. $this->_numResult = mysql_num_rows($this-
>_getQuery());
39. }
40. return $this->_numResult;
41. }
42.
43. function valid(){
44. if($this->_pointer >= 0 && $this->_pointer < $this-
>_getNumResult()){
45. return true;
46. }
47. return false;
48. }
49.
50. protected function _getRow($pointer){
51. if(isset($this->_results[$pointer])){
52. return $this->_results[$pointer];
53. }
54. $row = mysql_fetch_object($this->_getQuery());
55. if($row){
56. $this->_results[$pointer] = $row;
57. }
58. return $row;
59. }
60.
61. function next(){
62. $row = $this->_getRow($this->_pointer);
63. if($row){
64. $this->_pointer ++;

45
65. }
66. return $row;
67. }
68.
69. function current(){
70. return $this->_getRow($this->_pointer);
71. }
72.
73. function close(){
74. mysql_free_result($this->_getQuery());
75. Connect::close();
76. }
77.
78.}

konstruktor dari class Select menerima inputan sebuah string sql query. Sql query
inilah yang akan diproses untuk mengambil data ke tabel database.

Selanjutnya kembali ke class Tabel di file Tabel.php. Tambahkan fungsi findAll()


untuk menampilkan seluruh data, dan fungsi findBy() untuk mencari/menampilkan
data berdasarkan kolom tertentu.
55.// ... kode class Tabel sebelumnya.......
56. function findAll(){
57. include_once
dirname(__FILE__).DIRECTORY_SEPARATOR.'Select.php';
58. $sql = "SELECT * FROM `".$this->_tableName."`";
59. return new Select($sql);
60. }
61.
62. function findBy($field, $value){
63. include_once
dirname(__FILE__).DIRECTORY_SEPARATOR.'Select.php';
64. $sql = "SELECT * FROM `".$this->_tableName."`";
65. $sql .=" WHERE `".
$field."`='".mysql_real_escape_string($value)."'";
66. return new Select($sql);
67. }

Jadi kode class Tabel selengkapnya adalah seperti di bawah.


1. <?php
2.
3. include_once dirname(__FILE__).DIRECTORY_SEPARATOR.'Connect.php';
4.
5. class Table {
6.
7. protected $_tableName;
8.
9. function __construct($tableName){
10. $this->_tableName = $tableName;
11. }
12.
13. public function connect(){
14. return Connect::getConnection();
15. }
16.
17. public function close(){

46
18. Connect::close();
19. }
20.
21. function save(array $data){
22. $sql = "INSERT INTO `".$this->_tableName."` SET";
23. foreach($data as $field => $value){
24. $sql .= " `".$field."`='".mysql_real_escape_string($value,
Connect::getConnection())."',";
25. }
26. $sql = rtrim($sql, ',');
27. $result = mysql_query($sql, Connect::getConnection());
28. if(!$result){
29. throw new Exception('Gagal menyimpan data ke table '.
$this->_tableName.': '.mysql_error());
30. }
31. }
32.
33. function update(array $data, $where = ''){
34. $sql = "UPDATE `".$this->_tableName."` SET";
35. foreach($data as $field => $value){
36. $sql .= " `".$field."`='".mysql_real_escape_string($value,
Connect::getConnection())."',";
37. }
38. $sql = rtrim($sql, ',');
39. if($where){
40. $sql .= " WHERE ".$where;
41. }
42. $result = mysql_query($sql, Connect::getConnection());
43. if(!$result){
44. throw new Exception('Gagal mengupdate data table '.
$this->_tableName.': '.mysql_error());
45. }
46. }
47.
48. function delete($where = ''){
49. $sql = "DELETE FROM `".$this->_tableName."`";
50. if($where){
51. $sql .= " WHERE ".$where;
52. }
53. $result = mysql_query($sql, Connect::getConnection());
54. if(!$result){
55. throw new Exception('Gagal menghapus data dari table '.
$this->_tableName.': '.mysql_error());
56. }
57. }
58.
59. function findAll(){
60. include_once
dirname(__FILE__).DIRECTORY_SEPARATOR.'Select.php';
61. $sql = "SELECT * FROM `".$this->_tableName."`";
62. return new Select($sql);
63. }
64.
65. function findBy($field, $value){
66. include_once
dirname(__FILE__).DIRECTORY_SEPARATOR.'Select.php';

47
67. $sql = "SELECT * FROM `".$this->_tableName."`";
68. $sql .=" WHERE `".
$field."`='".mysql_real_escape_string($value)."'";
69. return new Select($sql);
70. }
71.}

Lalu bagaimana cara menampilkan data dengan konsep OOP, seperti contoh
berikut.
1. <?php
2. include_once '../Table.php';
3.
4. $table = new Table('user');
5. $users = $table->findAll();
6. ?>
7. <table border="1">
8. <tr>
9. <th>User Id</th>
10. <th>Name</th>
11. <th>Password</th>
12. <th>Type</th>
13. <th>Action</th>
14. </tr>
15. <?php foreach($users as $user){?>
16. <tr>
17. <td><?php echo $user->user_id;?>
18. <td><?php echo $user->name;?></td>
19. <td><?php echo $user->password?></td>
20. <td><?php echo $user->type?></td>
21. </tr>
22. <?php }?>
23.</table>
Sederhana sekali, hanya buat instant class Tabel dan panggil fungsi findAll() atau
fungsi findBy().

Selamat Mencoba dan Berlatih CRUD OOP.

48
49
Autocomplete: Memberi Sugesti Saat User Input Data

Feb 9, 2013 By Ellyx Christian Level: Menengah Komentar Print


Pernahkah Anda memperhatikan saat Anda mencari sesuatu dengan google, google
akan memberi sugesti ketika Anda mulai mengetik kata kunci. Misalkan Anda ingin
mencari "tutorial php", saat Anda mulai mengetik kata "tutorial" google akan
memberi sugesti di bawah inputbox seperti tutorial photoshop, tutorial window 8.

.
Hal di atas sering disebut dengan autocomplete. Tutorial ini akan menjelaskan cara
membuat autocomplete atau memberi sugesti pada user menggunakan jQuery UI
Autocomplete.
Di sangkep banyak yang bertanya seperti:
Quote:
Bagaimana caranya menampilkan nama produk setelah user mengetik kode
product
Tutorial ini akan mengambil kasus tersebut. Misalkan ada sebuah tabel produk
seperti:
Kolom Tipe Data

id integer (auto increment, primary key)

kode varchar(50)

name varchar(255)

Pada tutorial ini diasumsikan Anda memiliki pengetahuan dasar tentang jQuery.

Pertama silahkan download jQuery ui di http://jqueryui.com/. Kemudian buatlah file


get_product.php di bawah.
1. <?php
2. mysql_connect("localhost","root","blah");
3. mysql_select_db("test");
4.
5. $term = $_GET['term'];
6.
7. $query = mysql_query("select * from produk where kode like '%".
$term."%'");
8. $json = array();
9. while($produk = mysql_fetch_array($query)){
10. $json[] = array(
11. 'label' => $produk['kode'].' - '.$produk['nama'], // text sugesti saat
user mengetik di input box
12. 'value' => $produk['kode'], // nilai yang akan dimasukkan
diinputbox saat user memilih salah satu sugesti
13. 'nama' => $produk['nama']
14. );

50
15.}
16.header("Content-Type: text/json");
17.echo json_encode($json);
Kode php sederhana di atas untuk membentuk json sesuai dengan aturan dari
jQuery UI autocomplete. Kemudian kita akan membuat sebuah form html seperti
gambar.

Buatlah file autocomplete.php di bawah.


1. <!doctype html>
2. <html>
3. <head>
4. <title>Tutorial Autocomplete</title>
5. <!-- tambahkan jquery dan jquery ui -->
6. <script type="text/javascript" src="jquery-ui/js/jquery-
1.9.0.js"></script>
7. <script type="text/javascript" src="jquery-ui/js/jquery-ui-
1.10.0.custom.min.js"></script>
8. <link type="text/css" rel="stylesheet" href="jquery-
ui/css/smoothness/jquery-ui-1.10.0.custom.min.css"/>
9. </head>
10. <body>
11. <form method="post" action="">
12. Kode: <input type="text" id="kode" name="kode"/>
Name: <span id="nama-produk">-</span>
13. <br/><input type="submit" value="submit"/>
14. </form>
15. <script type="text/javascript">
16. $(document).ready(function(){
17. $("#kode").autocomplete({
18. minLength:2,
19. source:'get_product.php',
20. select:function(event, ui){
21. $('#nama-
produk').html(ui.item.nama);
22. }
23. });
24. });
25. </script>
26. </body>
27.</html>
Pada baris ke 6-8 untuk menambahkan jquery dan jquery ui. Baris 11-14 untuk
membuat form berisi sebuah inputbox dengan id="kode" dan sebuah <span/>
dengan id="nama-produk" untuk menampilkan nama produk setelah user memilih
salah satu kode produk (sugesti). Kemudian pada baris 15-25 adalah kode untuk
membuat autocomplete dengan opsi minLength:2 (sugesti akan muncul setelah
user mengetik 2 huruf), source:'get_product.php' (source/sumber data untuk

51
sugesti berupa url, file get_product.php yang dibuat sebelumnya), dan select untuk
menampilkan nama produk setelah user memilih salah satu kode produk.

opsi opsi lain jquery autocomplete bisa di pelajari di


http://api.jqueryui.com/autocomplete/.

Selamat mencoba.
Tags: jquery, javascript
Tinggalkan Komentar
Silahkan login sebelum meninggalkan komentar Anda!
Login dengan:

Ateng Tenga
July 27, 2013 | 04:19 pm
Oke , udah SOLVED

Terimakasih banyak Mas


salam kenal.

Ellyx Christian
July 27, 2013 | 01:23 pm
pertama buat file get_data.php seperti:
1. mysql_connect("localhost","root","blah");
2. mysql_select_db("test");
3.
4. $term = $_GET['code'];
5.
6. $query = mysql_query("select * from produk where kode = '".$term."'");
7. $produk = mysql_fetch_array($query);
8. $json = array(
9. 'label' => $produk['kode'].' - '.$produk['nama'], // text sugesti saat user
mengetik di input box
10. 'value' => $produk['kode'], // nilai yang akan dimasukkan diinputbox saat
user memilih salah satu sugesti
11. 'nama' => $produk['nama']
12.);
13.header("Content-Type: text/json");
14.echo json_encode($json);
kemudian ubah javascriptnya seperti:
1. <script type="text/javascript">
2. $(document).ready(function(){
3. $("#kode").autocomplete({
4. minLength:2,
5. source:'get_product.php',
6. select:function(event, ui){
7. $('#name').val(ui.item.nama); // untuk isi value
input text
8. }
9. });
10. $("#kode").blur(function(){

52
11. if($('#name').val()){
12. return;
13. }
14. $.ajax({
15. dataType:'json',
16. url:'get_data.php?code='+$('#kode').val(),
17. success:function(resp){
18. $('#name').val(resp.nama);
19. }
20. });
21. });
22. });
23.</script>

PHP Date Function


Berikut adalah daftar dari fungsi-fungsi di PHP yang berhubungan dengan tanggal /
date.
Function Description PH
P
checkdate() Memvalidasi tanggal gregorian 3
date_default_timezone_get() Mengembalikan nilai default zona waktu 5
date_default_timezone_set() Menetapkan default dari zona waktu 5
date_sunrise() Mengembalikan waktu terbit matahari sesuai 5
hari / lokasi
date_sunset() Mengembalikan waktu terbenam matahari 5
sesuai hari / lokasi
date() Format waktu lokal / date 3
getdate() Mengembalikan array yang mengandung 3
waktu saat ini untuk Unix timestamp
gettimeofday() Mengembalikan array yang mengandung 3
waktu saat ini
gmdate() Memformat tanggal/waktu dari GMT/UTC 3
gmmktime() Mengembalikan waktu Unix timestamp utk 3
tanggal sesuai dengan GMT
gmstrftime() Memformat tanggal/waktu GMT/UTC sesuai 3
dengan waktu lokal
idate() Memformat tanggal/waktu loka sebagai integer 5
localtime() Mengembalikan array yang mengandung
komponen waktu dari Unix ti

PHP AJAX jQuery

Nov 12, 2010 By Ellyx Christian Level: Menengah Komentar Print


Tutorial PHP AJAX jQuery ini merupakan versi kedua dari Tutorial AJAX JQuery.
Tutorial kedua ini dibuat karena ada banyak yang tidak mengerti dengan tutorial
versi pertama. Sebelum mengikuti tutorial ini silahkan download jQuery di
jQuery.com.

Seperti dijelaskan sebelumnya di Tutorial AJAX JQuery. AJAX memerlukan


XMLHttpRequest Object untuk dapat me-request sebuah halaman web secara
Asynchronous. Untuk membentuk object XMLHttpRequest dijelaskan di Tutorial
Dasar Dasar Ajax. Dengan adanya jQuery anda tidak perlu lagi memikirkan kode
javascript untuk membentuk object XMLHttpRequest. jQuery akan membuatkannya

53
untuk anda. Sebelum mulai menggunakan jQuery AJAX anda perlu tahu sedikit
tentang jQuery Selector.

jQuery Selector

Ada beberapa jQuery selector yang akan digunakan ditutorial ini.


Selector ID.
contoh: $("#nama"), setara dengan document.getElementById('nama'), untuk
memilih element html dengan id="nama".
Selector Class.
contoh: $(".red"), pengganti document.getElementsByClassName('red'), untuk
memilih semua element dengan class="red".
Selector Element.
contoh: $("div"), setara dengan document.getElementsByTagName('div'), untuk
memilih semua element div.
Untuk lebih jelas silahkan kunjungi dokumentasi jQuery.

Menyimpan Data ke Database dengan jQuery AJAX

Misalkan anda memiliki sebuah database dengan nama 'example', dengan sebuah
tabel 'pegawai' dengan struktur seperti berikut:

untuk menyimpan data pegawai ke table di atas tentunya anda memerlukan


sebuah html form seperti:
1. <form name="form1" id="form1" action="" method="post">
2. <p>NIP: <input type="text" name="nip" id="nip"/></p>
3. <p>Nama: <input type="text" name="nama" id="nama"/></p>
4. <p>Jenis Kelamin: <select name="jenis_kelamin" id="jenis_kelamin">
5. <option value="L">Laki Laki</option>
6. <option value="P">Perempuan</option>
7. </select></p>
8. <p>Tanggal Lahir: <input type="text" name="tgl_lahir" id="tgl_lahir"/></p>
9. <p>Alamat: <textarea name="alamat" id="alamat"></textarea></p>
10.<p><input type="button" value="Save" onclick="simpanPegawai(); return
false;"/></p>
11.</form>
tanpa menggunakan jQuery anda akan membutuhkan kode javascript panjang
berikut.
1. <form name="form1" id="form1" action="" method="post">
2. <p>NIP: <input type="text" name="nip" id="nip"/></p>
3. <p>Nama: <input type="text" name="nama" id="nama"/></p>
4. <p>Jenis Kelamin: <select name="jenis_kelamin" id="jenis_kelamin">
5. <option value="L">Laki Laki</option>
6. <option value="P">Perempuan</option>
7. </select></p>
8. <p>Tanggal Lahir: <input type="text" name="tgl_lahir" id="tgl_lahir"/></p>
9. <p>Alamat: <textarea name="alamat" id="alamat"></textarea></p>
10.<p><input type="button" value="Save" onclick="simpanPegawai(); return
false;"/></p>
11.</form>
54
12.<div id="loading"></div>
13.<script type="text/javascript">
14.function getXMLHttpRequest(){
15. if(window.ActiveXObject){
16. return new ActiveXObject("Microsoft.XMLHTTP");
17. }else if(window.XMLHttpRequest){
18. return new XMLHttpRequest();
19. }else {alert("Status : can not create XMLHttpRequest Object");}
20.}
21.function simpanPegawai(){
22. var xmlhttp = getXMLHttpRequest();
23./*simpan.php adalah file php yang meng-handle proses menyimpan data*/
24. xmlhttp.open('POST', 'simpan.php', true);
25. xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-
urlencoded");
26. document.getElementById('loading').innerHTML = 'loading...';
27. xmlhttp.onreadystatechange=function(){
28. if(xmlhttp.readyState == 4){
29. if(xmlhttp.status == 200){
30. document.getElementById('loading').innerHTML = xmlhttp.responseText;
31. }
32. }
33. }
34. var data = 'nip='+document.getElementById('nip').value;
35. data += '&nama='+document.getElementById('nama').value;
36. data +=
'&jenis_kelamin='+document.getElementById('jenis_kelamin').value;
37. data += '&tgl_lahir='+document.getElementById('tgl_lahir').value;
38. data += '&alamat='+document.getElementById('alamat').value;
39. xmlhttp.send(data);
40.}
41.</script>
dan tentunya file simpan.php untuk menyimpan data ke database.
1. <?php
2. /*file simpan.php*/
3. mysql_connect("localhost", "user", "password");
4. mysql_select_db("example");
5.
6. mysql_query("insert into pegawai set nip='".$_POST['nip']."',
7. nama='".$_POST['nama']."', jenis_kelamin='".$_POST['jenis_kelamin']."',
8. tgl_lahir='".$_POST['tgl_lahir']."', alamat='".$_POST['alamat']."'");
9. echo 'Data telah disimpan';
10.?>
sekarang coba bandingkan dengan menggunakan jQuery.
1. <form name="form1" id="form1" action="" method="post">
2. <p>NIP: <input type="text" name="nip" id="nip"/></p>
3. <p>Nama: <input type="text" name="nama" id="nama"/></p>
4. <p>Jenis Kelamin: <select name="jenis_kelamin" id="jenis_kelamin">
5. <option value="L">Laki Laki</option>
6. <option value="P">Perempuan</option>
7. </select></p>
8. <p>Tanggal Lahir: <input type="text" name="tgl_lahir" id="tgl_lahir"/></p>
9. <p>Alamat: <textarea name="alamat" id="alamat"></textarea></p>
10.<p><input type="button" value="Save" onclick="simpanPegawai(); return
false;"/></p>
11.</form>

55
12.<div id="loading"></div>
13.<!-- sesuaikan dengan file jquery yang anda download -->
14.<script type="text/javascript" src="jquery-1.4.2.min.js"></script>
15.<script type="text/javascript">
16.function simpanPegawai(){
17. $("#loading").html('loading...');
18. $.post('simpan.php', $("form").serialize(), function(hasil){
19. $("#loading").html(hasil);
20. });
21.}
22.</script>
bisa dilihat perbedaan yang signifikan, tanpa jQuery membutuhkan 28 baris (13-14)
kode javascript, sedangkan dengan jQuery hanya dibutuhkan 9 baris (14-22) kode
javascript. Dibaris 14 ditambahkan library jQuery, kemudian di function
savePegawai() baris ke-17 untuk menampilkan kata 'loading...' kepada user. Baris
18-20 adalah pengganti baris 24-39 kode sebelumnya yang tanpa jQuery. function
jQuery $.post (bisa juga dengan jQuery.post) memiliki 3 parameter
$.post(url,data,callback_function);
url: diisi dengan url yang direquest, dalam hal ini adalah file simpan.php;
data: diisi dengan data yang dikirim ke server, kode di atas menggunakan function
jQuery.serialize() untuk mengisi parameter ini. Function jQuery.serialize()
mengkodekan (Encode) semua element form beserta value masing masing menjadi
sebuah string data untuk dikirim ke server;
callback_function: diisi dengan function yang dipanggil setelah proses request
selesai.

Menampilkan Data dengan jQuery AJAX

Untuk menampilkan data, pertama yang harus dibuat adalah file php untuk
membaca data dari database. Misalnya seperti kode php di bawah.
1. <?php
2. /*file tampil.php*/
3. mysql_connect("localhost", "user", "password");
4. mysql_select_db("example");
5. ?>
6. <table>
7. <tr>
8. <td>NIP</td>
9. <td>Nama</td>
10. <td>Jenis kelamin</td>
11. <td>TGL Lahir</td>
12. <td>Alamat</td>
13. </tr>
14. <?php
15. $query = mysql_query("select * from pegawai");
16. while($pegawai = mysql_fetch_array($query)){
17. echo '<tr>';
18. echo '<td>'.$pegawai['nip'].'</td>';
19. echo '<td>'.$pegawai['nama'].'</td>';
20. echo '<td>'.$pegawai['jenis_kelamin'].'</td>';
21. echo '<td>'.$pegawai['tgl_lahir'].'</td>';
22. echo '<td>'.$pegawai['alamat'].'</td>';
23. echo '</tr>';
24. }
25. ?>
26.</table>
56
Selanjutnya adalah menggunakan AJAX untuk request file tampil.php di atas. Tanpa
jQuery anda akan membuat kode javascript seperti:
1. <a href="javascript:loadData()">Load Data</a>
2. <div id="pegawai"></div>
3. <script type="text/javascript">
4. function getXMLHttpRequest(){
5. if(window.ActiveXObject){
6. return new ActiveXObject("Microsoft.XMLHTTP");
7. }else if(window.XMLHttpRequest){
8. return new XMLHttpRequest();
9. }else {alert("Status : can not create XMLHttpRequest Object");}
10. }
11. function loadData(){
12. var xmlhttp = getXMLHttpRequest();
13. document.getElementById('pegawai').innerHTML = 'loading...';
14. xmlhttp.open('GET', 'tampil.php', true);
15. xmlhttp.onreadystatechange = function(){
16. if(xmlhttp.readyState == 4){
17. if(xmlhttp.status == 200){
18. document.getElementById('pegawai').innerHTML = xmlhttp.responseText;
19. }
20. }
21. }
22. xmlhttp.send(null);
23. }
24.</script>
Sedangkan dengan menggunakan jQuery anda hanya membutuhkan kode
javascript singkat di bawah:
1. <a href="javascript:loadData()">Load Data</a>
2. <div id="pegawai"></div>
3. <!-- sesuaikan dengan file jquery yang anda download -->
4. <script type="text/javascript" src="jquery-1.4.2.min.js"></script>
5. <script type="text/javascript">
6. function loadData(){
7. $("#pegawai").load('tampil.php');
8. }
9. </script>
Bisa dilihat perbedaan yang sangat siginifikan antara menampilkan data dengan
jQuery AJAX dibandingkan dengan tanpa jQuery. Tanpa jQuery membutuhkan 22
baris (3-24) kode javascript, sedangkan dengan jQuery hanya dibutuhkan 6 baris.
Untuk menampilkan data dengan jQuery AJAX, digunakan function jQuery.load();
function jQuery.load() memiliki dua parameter:
.load(url, [callback_function]);
url: diisi dengan url yang ingin direquest, dalam hal ini adalah file tampil.php;
callback_function: function yang dipanggil setelah proses selesai, parameter ini
optional, bisa tidak diisi.
function ini setara dengan function jQuery.get().

Rangkuman

Dengan jQuery hanya dibutuhkan menulis sedikit kode javascript, sesuai dengan
slogan jQuery "write less, do more". jQuery menyediakan library library AJAX yang
selengkapnya bisa dilihat di http://api.jquery.com/category/ajax/. Untuk menyimpan
data ke database (lebih umum mengirim data server) dengan AJAX digunakan
function jQuery.post(). Untuk menampilkan data (merequest data dari

57
server/melakukan http request get) dengan AJAX digunakan function jQuery.load()
atau jQuery.get().

Membuat AJAX Search

May 2, 2011 By Ellyx Christian Level: Menengah Komentar Print Download Pdf
Tutorial Membuat AJAX Search atau skrip pencarian data menggunakan AJAX.
Tutorial ini adalah kelanjutan dari tutorial Membuat Searching (Skrip Pencarian
Data). Sebelum mengikuti tutorial ini ada baiknya untuk mengikuti tutorial AJAX
sebelumnya. AJAX search bisa diterapkan pada quick search. Hasil akhir tutorial ini
adalah skrip pencarian seperti google instant search. Tutorial ini menggunakan
jQuery, jQuery bisa didownload di website jQuery, atau bisa juga menggunakan
google CDN http://code.google.com/apis/libraries/devguide.html#jquery.

Tutorial AJAX search ini masih menggunakan tabel siswa seperti berikut:
Fieldname Tipe Data Keterangan

id int(11) primary key

nama varchar(50)

ayah varchar(50)

ibu varchar(50)

alamat text
selain itu diasumsikan Anda telah memiliki pengetahuan javascript, DOM dan
jQuery.

AJAX Search

Gunakanlah skrip php dan javascript di bawah untuk membuat AJAX search (simpan
dengan nama ajax-search.php). Skrip di bawah merupakan pengembangan dari
skrip quick search di tutorial Membuat Searching (Skrip Pencarian Data).
1. <!--file ajax-search.php -->
2. <?php if(!isset($_GET['q'])):?>
3. <!-- form quick search -->
4. <form name="form1" method="get" action="">
5. Search : <input type="text" name="q" id="q"/> <input type="submit"
value="Search"/>
6. </form>
7. <!-- tempat hasil pencarian ditampilkan -->
8. <div id="result"></div>
9. <!-- javascript -->
10.<!-- jquery -->
11.<script type="text/javascript"
src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></scrip
t>
12.<script type="text/javascript">
13. var allow = true;
14. $(document).ready(function(){
15. $("#q").keypress(function(e){
16. if(e.which == '13'){
17. e.preventDefault();
18. loadData();

58
19. }else if($(this).val().length >= 2){
20. loadData();
21. }
22. });
23. });
24. function loadData(){
25. if(allow){
26. allow = false;
27. $("#result").html('loading...');
28. $.ajax({
29. url:'ajax-search.php?q='+escape($("#q").val()),
30. success: function (data){
31. $("#result").html(data);
32. allow = true;
33. }
34. });
35. }
36. }
37.</script>
38.<?php endif;?>
39.<?php
40.if(isset($_GET['q']) && $_GET['q']){
41. $conn = mysql_connect("localhost", "root", "");
42. mysql_select_db("test");
43. $q = $_GET['q'];
44. $sql = "select * from siswa where nama like '%$q%' or
45. ayah like '%$q%' or ibu like '%$q%' or alamat like '%$q%'";
46. $result = mysql_query($sql);
47. if(mysql_num_rows($result) > 0){
48. ?>
49. <table>
50. <tr>
51. <td>Nama</td>
52. <td>Ayah</td>
53. <td>Ibu</td>
54. <td>Alamat</td>
55. </tr>
56. <?php
57. while($siswa = mysql_fetch_array($result)){?>
58. <tr>
59. <td><?php echo $siswa['nama'];?></td>
60. <td><?php echo $siswa['ayah'];?></td>
61. <td><?php echo $siswa['ibu'];?></td>
62. <td><?php echo $siswa['alamat'];?></td>
63. </tr>
64. <?php }?>
65. </table>
66. <?php
67. }else{
68. echo 'Data not found!';
69. }
70.}
71.?>
pada baris ke-11 sampai ke-37 ditambahkan javascript untuk menampilkan data
secara dinamis pada saat pengguna mengetikkan 3 karakter atau lebih atau pada
saat pengguna menekan tombol enter.

59
Selamat Mencoba
Jika ada pertanyaan silahkan di AskMyPHPtutorials, atau melalui form komentar di
bawah.
Tags: searching, pencarian data, ajax
Tinggalkan Komentar
Silahkan login sebelum meninggalkan komentar Anda!
Login dengan:

Ellyx Christian
September 03, 2013 | 10:04 pm
@tryco: ubah pada baris ke-40 jadi:
1. <?php
2. $conn = mysql_connect("localhost", "root", "");
3. mysql_select_db("test");
4. if(isset($_GET['q']) && $_GET['q']){
5. $q = $_GET['q'];
6. $sql = "select * from siswa where nama like '%$q%' or
7. ayah like '%$q%' or ibu like '%$q%' or alamat like '%$q%'";
8. }else{
9. $sql = "select * from siswa";
10. }
11. $result = mysql_query($sql);
12. if(mysql_num_rows($result) > 0){
13. ?>
14. <table>
15. <tr>
16. <td>Nama</td>
17. <td>Ayah</td>
18. <td>Ibu</td>
19. <td>Alamat</td>
20. </tr>
21. <?php
22. while($siswa = mysql_fetch_array($result)){?>
23. <tr>
24. <td><?php echo $siswa['nama'];?></td>
25. <td><?php echo $siswa['ayah'];?></td>
26. <td><?php echo $siswa['ibu'];?></td>
27. <td><?php echo $siswa['alamat'];?></td>
28. </tr>
29. <?php }?>
30. </table>
31. <?php
32. }else{
33. echo 'Data not found!';
34. }
35.?>

Ajax & PHP : Menyimpan Data ke Database dengan AJAX

Feb 20, 2010 By MyPHPtutorials Level: Menengah Komentar Print Download Pdf

60
Di tutorial Ajax & PHP : Menyimpan Data ke Database dengan AJAX ini anda akan
belajar menyimpan data ke database mysql dengan ajax. Untuk menyimpan data
ke database dengan ajax, ada tiga langkah yang perlu anda lakukan :

1. Bentuk XMLHttpRequest object,


2. Kirim data yang akan disimpan ke database dengan method send dari
XMLHttpRequest, dan
3. Buat handle Page untuk menyimpan data ke database.

Sebagai contoh, misalkan anda memiliki sebuah form seperti di bawah.

First name :

Last name :

Code Form :
<form id="form1" name="form1" method="post" action="handle_data.php">
First name :
<input name="first_name" type="text" id="first_name" />
<p>Last name :
<input name="last_name" type="text" id="last_name" />
<input type="button" name="Button" value="Save" />
</p>
</form>

Untuk menyimpan "First Name" dan "Last Name " yang dinputkan user dari form
di atas, maka yang perlu anda lakukan adalah :

1. Bentuk XMLHttpRequest object,


2. Kirim First name dan Last name yang diinputkan pada form di atas ke web
server,
3. Simpan First name dan Last name yang dikirim ke database dengan PHP.

1. Membentuk XMLHttpRequest Object

Untuk membentuk XMLHttpRequest Object kita dapat menggunakan function yang


telah kita buat pada tutorial pertama, seperti di bawah.

view plaincopy to clipboardprint?


1. function getXMLHttpRequest(){
2. //jika user menggunak IE
3. if(window.ActiveXObject){
4. return new ActiveXObject("Microsoft.XMLHTTP");
5. }else if(window.XMLHttpRequest){
6. //user menggunakan browser selain IE
7. return new XMLHttpRequest();
8. }else { alert("Status : can not create XMLHttpRequest Object"); }
9. }

61
2. Mengirim First Name dan Last Name ke Web Server

Untuk mengirim First name dan Last name yang dinputkan oleh user pada form di
atas, anda dapat melakukan langkah yang sama seperti pada tutorial kedua
(Mengirim Data ke Web Server). Tetapi anda perlu melakukan validasi dari input
yang diberikan oleh user. Anda dapat menggunakan script seperti di bawah.

var xmlhttp=getXMLHttpRequet();
function sendData(handlePage,ElementID){
//mengambil nilai dari element form
var first_name=document.getElementById('first_name').value;
var last_name=document.getElementById('last_name').value;
//cek apakah first_name dan last_name tidak kosong
if(first_name==""){
alert("Please Input First Name");
}else if(last_name==""){
alert("Please Input last name");
} else{
var obj=document.getElementById(ElementID);
obj.innerHTML="Sending Data Please wait....";
if(xmlhttp.readyState==4 || xmlttp.readyState==0){
xmlhttp.open("POST",handlePage,true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-
form-urlencoded");
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
obj.innerHTML=xmlhttp.responseText;
}
}
var dataToSend="first_name="+first_name;
dataToSend+="&last_name="+last_name;
xmlhttp.send(dataToSend);
}
}
}

fungsi sendData di atas menggambil dua parameter handelPage dan ElementID.


Parameter handlePage diisi dengan nama file di server yang akan menangani data
yang dikirim dan menyimpan data yang dkirim ke database. Parameter ElementID
diisi dengan ID dari element HTML tempat response dari server akan ditampilkan.

3. Menyimpan First name dan Last name ke Database

Untuk menyimpan data ke database, dalam kasus ini menyimpan First nama dan
Last name, anda akan menggunakan script PHP, misalkan file "save_data.php".
File "save_data.php" ini akan menjadi parameter handlePage pada function
sendData di atas. Tetapi perlu anda ingat, bahwa data dikirim ke server
menggunakan JavaScript, seperti anda ketahui javascript akan didownload oleh web
browser dan semua orang yang menggunakan website anda dapat melihat script
anda dan tentunya dapat mengubah script anda. Perlu juga anda ketahui, website
dengan Ajax sangat mudah untuk dilakukan SQL Injection karena JavaScript yang
digunakan untuk mengirim data dapat diubah oleh setiap orang. Oleh karenanya,
data yang dikirim ke server perlu di validasi kembali setelah sampai di server

62
dengan bahasa pemrograman server side seperti PHP. Pada contoh ini, untuk
menyimpan data ke database anda dapat menggunakan script seperti di bawah :

view plaincopy to clipboardprint?


1. #php open tag
2. <?php
3. $f_name=$_POST['first_name'];
4. $l_name=$_POST['last_name'];
5. //cek apakah keduanya tidak kosong
6. if($f_name=="" || $l_name==""){
7. echo "Maaf data tidak lengkap";
8. } else{
9. settype($f_name,'string');
10. settype($l_name,'string');
11. //buat koneksi ke database
12. $conn=mysql_connect("dbHost","dbUser","dbPass");
13. mysql_select_db("namaDatabase");
14. //simpan first name dan last name, misal ke tabel t_nama
15. $query="insert into t_name(first_name, last_name)values('$f_name', '$l
_name')";
16. $hasil=mysql_query($query);
17. //jika berhasil menyimpan data
18. if($hasil){
19. echo "Data telah disimpan";
20. }else{ echo "Error, tidak bisa meyimpan data";}
21. }
22.?>

Latihan Menyimpan Data ke Database dengan AJAX

Untuk lebih memperjelas pemahaman anda bagaimana cara menyimpan data ke


database dengan AJAX, anda akan diajak untuk berlatih. Pada latihan ini anda akan
membuat sebuah contact form dan menyimpan data yang diinput oleh user dengan
menggunakan Ajax. Pada contoh ini saya asumsikan anda memiliki sebuah tabel
pada database anda dengan nama t_contact dan dengan struktur seperti berikut.

Fields Tipe data Keterangan


id_contact int(10) Primary key auto_increment
first_name varchar(50)
last_name varchar(50)
email varchar(50)
phone varchar(20)
message text

Langkah I. Membuat HTML Form

Pertama buatlah sebuah document baru dengan text editor anda, dan buat sebuah
HTML form dengan script di bawah.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
63
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Contact Us - Contoh Tutorial Ajax</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
<fieldset>
<legend><strong>Contact Us</strong></legend>
<div style="width:300px;" align="right" id="content">
<label>First Name : <input name="first_name" type="text" id="first_name"
maxlength="50" /></label>
<p> <label>Last Name : <input name="last_name" type="text" id="last_name"
maxlength="50" /> </label> </p>
<p> <label>Email : <input name="email" type="text" id="email"
maxlength="50" /> </label> </p>
<p> <label>Phone : <input name="phone" type="text" id="phone"
maxlength="20" /> </label> </p>
<p> <label>Message : <textarea name="message" id="message"></textarea>
</label> </p>
<p> <input type="button" name="Button" value="Save" />
<input type="reset" name="Reset" value="Cancel" /> </p>
</div>
</fieldset>
</form>
</body>
</html>

Simpan dengan nama file contact.php di direktory web server anda. Script di atas
untuk membentuk sebuah form seperti berikut.

Langkah II. Membuat File Javascript untuk Membentuk XMLHttpRequest

Langkah selanjutnya adalah membuat JavaScript untuk membentuk


XMLHttpRequest dan membuat function untuk mengirim data ke server. Buat
kembali document baru dengan text editor anda dan ketik script berikut :

64
// JavaScript Document
//file ajax.js
function getXMLHttpRequest(){
if(window.ActiveXObject){
return new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){
return new XMLHttpRequest();
}else alert("Status : Can not create XMLHttpRequest Object");
}

var xmlhttp=getXMLHttpRequest();
//function to send data
function sendData(handlePage,ElementID){
var fname=document.getElementById('first_name').value;
var lname=document.getElementById('last_name').value;
var email=document.getElementById('email').value;
var phone=document.getElementById('phone').value;
var message=document.getElementById('message').value;
var filterEmail=/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+
$/;
var filterPhone=/^[0-9]+$/;
//validate user input
if(fname==""){
alert("Input First Name First!");
}else if(lname==""){
alert("Input last name first!");
}else if(email==""){
alert("Please input email first!");
}else if(!filterEmail.test(email)){
alert("Incorrect email address");
}else if(phone==""){
alert("Please input phone first!");
}else if(!filterPhone.test(phone)){
alert("Incorrect phone number!");
}else if(message==""){
alert("Please input message first!");
}else{
//data valid
if(xmlhttp.readyState==4 || xmlhttp.readyState==0){
var obj=document.getElementById(ElementID);
var form=obj.innerHTML;
obj.innerHTML='Saving data, please wait..';
xmlhttp.open('POST',handlePage,true);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-
urlencoded');
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){
obj.innerHTML=xmlhttp.responseText+'<br>'+form;
}else{
alert('Error : '+xmlhttp.statusText);
}
}
}
var param='first_name='+fname;
param+='&last_name='+lname;

65
param+='&email='+email;
param+='&phone='+phone;
param+='&message='+message;
param+='&action=save';
xmlhttp.send(param);
}

Kemudian simpan dengan nama ajax.js di directory yang sama dengan file
contact.php yang dibuat sebelumnya.

Langkah III. Membuat handlePage dan Menyimpan Data

Setelah selesai dengan langkah I dan II, selanjutnya adalah membuat handlePage
untuk menangani data yang dikirim dan menyimpan data yang dikirim ke database.
Perlu anda ingat, walaupun sebelum data dikirim telah divalidasi dengan javascript
anda harus kembali melakukan validasi setelah data sampai di server dengan
server side scripting seperti PHP. Ingat jangan pernah percaya kepada user anda
dan jangan pernah percaya dengan apa yang diinputkan oleh user serta jangan
percaya dengan apa yang dikirim oleh web browser anda. Sekarang buatlah sebuah
document baru dengan text editor dan ketikkan script berikut.

<?php
/*file save_data.php*/
$conn=mysql_connect("localhost","db-user","db-psw"); /*sesuiakn dengan
komputer anda*/
mysql_select_db('nama-database'); /*sesuikan dengan komputer anda */
if($_POST['action']=='save'){
//validasi data
$fname=$_POST['first_name'];
$lname=$_POST['last_name'];
$email=$_POST['email'];
$phone=$_POST['phone'];
$message=$_POST['message'];
settype($fname,'string');
settype($lname,'string');
settype($message,'string');
//validasi email;
if(!preg_match('/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})
+$/',$email)){
echo 'Ivalid Email Address'; exit();
}
//validasi phone
if(!preg_match('/^[0-9]+$/',$phone)){
echo 'Invalid phone number'; exit();
}
//saving data
$query="INSERT INTO t_contact
(first_name,last_name,email,phone,message) VALUES
('$fname','$lname','$email','$phone','$message')";
$hasil=@mysql_query($query);

66
if($hasil){
echo '<font color="green">DATA HAS BEEN SAVED</font>';
}else {
echo '<font color="red">Error, CAN NOT SAVE DATA</font>';
}
}
?>

setelah selesai simpan dengan nama save_data.php di directory yang sama


dengan file contact.php.

Langkah IV. Finishing

Setelah selesai membuat ketiga file di atas, sekarang buka kembali file contact.php
dan edit pada bagian yang diberi warna biru seperti berikut :

<input type="button" name="Button" value="Save" />

menjadi

<script type="text/javascript" src="ajax.js"></script>


<input type="button" name="Button" value="Save"
onclick="sendData('save_data.php','content'); return false;" />

Sekarang anda simpan kembali file contact.php dan coba hasilnya menggunakan
browser anda. Jika anda telah melakukkanya dengan benar maka tidak akan ada
masalah. Jika anda menemui masalah dengan contoh ini anda dapat mendownload
tutorial ini dan mempelajarinya lagi.

Menampilkan Data Dengan Ajax

Feb 6, 2010 By MyPHPtutorials Level: Menengah Komentar Print Download Pdf

Pada tutorials ini akan dijelaskan cara untuk menampilkan data sebuah tabel dari
database MySql menggunakan AJAX dan PHP.

Misalkan anda memiliki seebuah tabel dengan nama "customer_tb" dalam sebuah
database dengan nama "customer_db". Struktur tabel tersebut seperti di bawah
ini :

Nama Field Tipe Data


email varchar(50) *
name varchar(100)
address text

dan tabel tersebut berisi data misalkan seperti di bawah :

email name address


[email protected] Ellyx Legian Kuta
[email protected] Christian Jalan Padma
info@dewata-production Dewata production Jalan Padma Timur

67
untuk menampilkan data tersebut menggunakan AJAX ikuti langkah - langkah
berikut :

Langkah I

Buat sebuah folder baru dalam folder htdocs anda dan beri nama "ajax". Kemudian
buat sebuah file di dalam folder "ajax" dengan nama get_data.php, dan ketik script
di bawah pada file get_data.php :

<?php
//file get_data.php

//-- melakukan koneksi ke database --


$conn=mysql_connect("localhost", "root" ,"root"); // dbhost, dbuser, dbpsw
mysql_select_db("customer_db");
//--- membaca data ----
$sql="select * from customer_tb";
$hs=mysql_query($sql);
echo '<div style=" background-color:#eeeeee;"><table width="100%" border="0"
cellpadding="0">
<tr>
<td bgcolor="#0099CC">email</td>
<td bgcolor="#0099CC">name</td>
<td bgcolor="#0099CC">address</td>
<td bgcolor="#0099CC">Action</td>
</tr>';
while($rs=mysql_fetch_array($hs)){
echo'<tr>
<td bgcolor="white">'.$rs['email'].'</td>
<td bgcolor="white">'.$rs['name'].'</td>
<td bgcolor="white">'.$rs['address'].'</td>
<td bgcolor="white"><button>Edit</button></td>
</tr>';
}
echo'</table></div>';
?>

Saya yakin jika anda sudah memilki dasar PHP anda pasti mengerti script di atas,
jadi saya tidak akan menjelakannya.

Langkah II

Buatlah file baru di dalam folder "ajax" dan beri nama ajax.js. Kemudian ketik
script di bawah pada file ajax.js :

// file ajax.js
var recReq = getXmlHttpRequestObject();
var _documentid='content';

68
//-- membentuk instant XMLHttpRequest ---
function getXmlHttpRequestObject() {
if (window.XMLHttpRequest) {
return new XMLHttpRequest();
} else if(window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
} else {
alert('Status: Cound not create XmlHttpRequest Object. Consider upgrading your
browser.');
}
}

function LoadData(){
document.getElementById(_documentid).innerHTML = 'Loading.... Please wait';
if (recReq.readyState == 4 || recReq.readyState == 0) {
recReq.open("GET", 'get_data.php', true);
recReq.onreadystatechange = function() {
if (recReq.readyState == 4 && recReq.status == 200) {
document.getElementById(_documentid).innerHTML = recReq.responseText;
}
}
recReq.send(null);
}
}

Langkah III

Buatlah sebuah file di dalam folder "ajax" dan beri nama "index.php". Kemudian
ketik script di bawah pada file "index.php" :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Data Customer</title>
</head>

<body>
<script type="text/javascript" src="ajax.js"></script>
<div>
<button onclick="LoadData(); return false;">Load Data</button>
</div>
<div id="content" style="border:1px solid black; width:95%; margin:0 auto;">
Tekan tombol load data untuk menampilkan data </div>
</body>
</html>

Langkah IV

69
Buka browser anda dan browsing ke "http://localhost/ajax/", ingat anda harus
mengenablekan javascript pada browser anda. Jika tidak terjadi kesalahan maka
hasilnya akan tampil seperti dibawah ini:

jika tombol Load Data diklik maka akan tampil hasilnya seperti di bawah ini :

Sampai di sini adan sudah berhasil menampilkan data menggunakan AJAX.


Keuntungan yang bisa diperoleh dengan menggunakan AJAX adalah untuk
menghindari reload halaman yang sama berulang-ulang. Pada tutorial berikutnya
saya akan menjelaskan cara untuk mengedit data yang ada dalam tabel tanpa
melakukan reload halaman dan tentunya menggunakan ajax pula. Tutorial
berikutnya merupakan kelanjutan dari tutorial ini.

Sebelum saya menyudahi tutorial ini tak lupa saya memohon maaf jika ada sesuatu
yang salah. Jika ada yang tidak anda mengerti, silahkan bertanya di Sangkep

70
71

Anda mungkin juga menyukai