Kamis, 10 November 2011

Membuat Script PHP untuk Hapus Data dengan Multi Selection

Pernahkah Anda membuat script untuk menghapus data dengan konsep multi selection? Untuk menghapus sebuah data sih.. saya kira mudah untuk membuatnya.

Tapi… bagaimana bila data yang akan dihapus lebih dari satu sekaligus? Rumit gak ya membuat scriptnya? Hmm… nggak rumit kok, cuman sedikit memusingkan saja he.. he.. he :-) nggak ding, becanda… mudah-mudahan artikel yang saya sajikan ini tidak membuat Anda pusing.
OK… konsep menghapus data dengan multi selection ini biasanya menggunakan bantuan komponen checkbox. Mengapa checkbox? ya.. karena komponen checkbox memungkinkan kita bisa memilih pilihan lebih dari satu.

Data yang akan dihapus terlebih dahulu dipilih dengan memberi tanda check pada checkbox yang ada di depan setiap data. Perhatikan contoh tampilan berikut ini:
Photobucket
Nah… kita akan membuat script PHP untuk menghapus data dengan konsep multi selection seperti gambaran di atas.
Untuk studi kasus yang diambil, lagi-lagi kita mengambil kasus tentang data mahasiswa :-) Huh… mentang-mentang yang buat artikel ini seorang dosen kali ya :-)
Misalkan kita punya tabel dan data sbb:

1.CREATE TABLE mhs (2.nim varchar(10),3.namamhs varchar(30),4.PRIMARY KEY (nim)5.)

1.INSERT INTO mhs VALUES ('M0197001', 'ROSIHAN ARI YUANA');2.INSERT INTO mhs VALUES ('M0197002', 'DWI AMALIA FITRIANI');3.INSERT INTO mhs VALUES ('M0197003', 'FAZA FAUZAN KH.');4.INSERT INTO mhs VALUES ('M0197004', 'NADA HASANAH');5.INSERT INTO mhs VALUES ('M0197005', 'MUH. AHSANI TAQWIM');
Langkah pertama dalam membuat script penghapusan data ini, terlebih dahulu kita siapkan script untuk menampilkan semua datanya. Untuk setiap data nantinya kita letakkan sebuah checkbox di depannya yang digunakan untuk memilih data mana saja yang akan dihapus.
data.php

01.<html>02.<head>03.<title>Hapus data mahasiswa</title>04.</head>05.<body>06.<h1>Hapus Data Mahasiswa</h1>07.<?php08. 09.// koneksi mysql10. 11.mysql_connect("dbhost", "dbuser", "dbpass");12.mysql_select_db("dbname");13. 14.// query SQL untuk menampilkan semua data15. 16.$query = "SELECT * FROM mhs";17.$hasil = mysql_query($query);18. 19.// membuat form penghapusan data20. 21.echo "<form name='myform' method='post' action='".$_SERVER['PHP_SELF']."?action=del'>";22.echo "<table border='1'>";23.echo "<tr><td></td><td><b>NIM</b></td><td><b>Nama Mahasiswa</b></td></tr>";24.$i = 0;25.while($data = mysql_fetch_array($hasil))26.{27.echo "<tr><td><input type='checkbox' name='nim".$i."' value='".$data['nim']."' /></td><td>".$data['nim']."</td><td>".$data['namamhs']."</td></tr>";28.$i++;29.}30.echo "</table>";31.echo "<input type='hidden' name='n' value='".$i."' />";32.echo "<p><input type='submit' value='Hapus' name='submit'> <input type='reset' value='Batal' name='reset'></p>";33.echo "</form>";34.?>35. 36.</body>37.</html>
Perhatikan script di atas! Form nantinya akan diarahkan ke script itu sendiri (menggunakan $_SERVER['PHP_SELF']) namun dengan parameter ‘?action=del’. Anda boleh arahkan pemrosesan formnya ke script lain. It’s up to you.
Selain itu perhatikan pula bahwa untuk setiap komponen checkbox diberikan name yang berbeda. Di sini diberikan name berbentuk ‘nim0′, ‘nim1′, ‘nim2′, … dst (perhatikan bagian name=’nim”.$i.”‘).
Kemudian, terdapat pula komponen hidden value (name=’n') yang bernilai sama dengan jumlah data total atau dalam hal ini adalah $i. Komponen ini nantinya akan sangat penting ketika memproses form terutama pada saat membaca komponen checkbox yang dipilih.
Selanjutnya untuk pemanis, misalkan kita ingin membuat fasilitas SELECT ALL untuk memilih semua data sekaligus. OK Bagaimana caranya? Ya.. kita gunakan Javascript. Oya… jangan lupa berikan sebuah checkbox tambahan untuk memberikan fasilitas ini. Begitu checkbox ini dipilih, maka semua checkbox yang ada di depan data akan terpilih. Untuk hal ini, kita berikan event onclick() pada checkbox tsb. Mmm… sebaiknya checkbox ini diletakkan di dalam header tabel saja ya.
data.php

01.<html>02.<head>03.<title>Hapus data mahasiswa</title>04.<script type="text/javascript">05. 06.function pilihan()07.{08.// membaca jumlah komponen dalam form bernama 'myform'09.var jumKomponen = document.myform.length;10. 11.// jika checkbox 'Pilih Semua' dipilih12.if (document.myform[0].checked == true)13.{14.// semua checkbox pada data akan terpilih15.for (i=1; i<=jumKomponen; i++)16.{17.if (document.myform[i].type == "checkbox") document.myform[i].checked = true;18.}19.}20.// jika checkbox 'Pilih Semua' tidak dipilih21.else if (document.myform[0].checked == false)22.{23.// semua checkbox pada data tidak dipilih24.for (i=1; i<=jumKomponen; i++)25.{26.if (document.myform[i].type == "checkbox") document.myform[i].checked = false;27.}28.}29.}30. 31.</script>32.</head>33.<body>34.<h1>Hapus Data Mahasiswa</h1>35.<?php36. 37.// koneksi mysql38. 39.mysql_connect("dbhost", "dbuser", "dbpass");40.mysql_select_db("dbname");41. 42.// query SQL untuk menampilkan semua data43. 44.$query = "SELECT * FROM mhs";45.$hasil = mysql_query($query);46. 47.// membuat form penghapusan data48. 49.echo "<form name='myform' method='post' action='".$_SERVER['PHP_SELF']."?action=del'>";50.echo "<table border='1'>";51.echo "<tr><td><input type='checkbox' name='pilih' onclick='pilihan()' /> Pilih semua</td><td><b>NIM</b></td><td><b>Nama Mahasiswa</b></td></tr>";52.$i = 0;53.while($data = mysql_fetch_array($hasil))54.{55.echo "<tr><td><input type='checkbox' name='nim".$i."' value='".$data['nim']."' /></td><td>".$data['nim']."</td><td>".$data['namamhs']."</td></tr>";56.$i++;57.}58.echo "</table>";59.echo "<input type='hidden' name='n' value='".$i."' />";60.echo "<p><input type='submit' value='Hapus' name='submit'> <input type='reset' value='Batal' name='reset'></p>";61.echo "</form>";62.?>63. 64.</body>65.</html>
Nah… selanjutnya, kita bisa membuat bagian untuk memproses formnya atau membuat script untuk proses penghapusan datanya.
Trus… bagaimana konsep membaca data mana saja yang akan dihapus sesuai pilihan checkboxnya? Untuk membaca data mana yang akan dihapus, kita gunakan bantuan looping. Berapa jumlah loopingnya? Jumlah loopingnya sesuai jumlah komponen checkboxnya. Nah… di sinilah pentingnya penggunaan komponen hidden value <input type=’hidden’ name=’n’ value=’”.$i.”‘ /> Dalam contoh ini nilai n=5.
Selanjutnya isi dalam loopingnya bagaimana? ya… kita cek saja apakah komponen checkbox dengan name=’nim0′ dipilih tidak? jika ya, maka baca NIM mahasiswa terkait dengan komponen tersebut, lalu jalankan query SQL untuk menghapus data mahasiswanya. Trus… komponen checkbox dengan name=’nim1′ dicek apakah dipilih atau tidak. Jika ya, maka baca NIM mahasiswa terkait dengan komponen tersebut, lalu hapus dengan query SQL. Proses ini diulang sebanyak 5 kali untuk kasus di atas, yaitu mulai dari komponen checkbox dengan name=’nim0′ sampai dengan name=’nim4′.
Lantas yang menjadi masalah adalah, bagaimana cara kita mendeteksi bahwa komponen checkbox dengan name tertentu itu dipilih atau tidak? caranya adalah kita gunakan statement IF seperti di bawah ini

1.if (isset($_POST['nim'.$i]))2.{3....4.}
dengan $i = 0, 1, …, n-1.
Jika suatu komponen checkbox itu dipilih, maka perintah isset($_POST['nim'.$i]) akan menghasilkan nilai TRUE. Sedangkan FALSE jika tidak dipilih.
Dengan demikian, script untuk menghapus data dengan multi selection ini adalah sbb:
data.php
01.<html>02.<head>03.<title>Hapus data mahasiswa</title>04.<script type="text/javascript">05. 06.function pilihan()07.{08.// membaca jumlah komponen dalam form bernama 'myform'09.var jumKomponen = document.myform.length;10. 11.// jika checkbox 'Pilih Semua' dipilih12.if (document.myform[0].checked == true)13.{14.// semua checkbox pada data akan terpilih15.for (i=1; i<=jumKomponen; i++)16.{17.if (document.myform[i].type == "checkbox") document.myform[i].checked = true;18.}19.}20.// jika checkbox 'Pilih Semua' tidak dipilih21.else if (document.myform[0].checked == false)22.{23.// semua checkbox pada data tidak dipilih24.for (i=1; i<=jumKomponen; i++)25.{26.if (document.myform[i].type == "checkbox") document.myform[i].checked = false;27.}28.}29.}30. 31.</script>32.</head>33.<body>34.<h1>Hapus Data Mahasiswa</h1>35.<?php36. 37.// koneksi mysql38. 39.mysql_connect("dbhost", "dbuser", "dbpass");40.mysql_select_db("dbname");41. 42.// bagian script untuk menghapus data43. 44.if ($_GET['action'] == "del")45.{46.// membaca nilai n dari hidden value47.$n = $_POST['n'];48. 49.for ($i=0; $i<=$n-1; $i++)50.{51.if (isset($_POST['nim'.$i]))52.{53.$nim = $_POST['nim'.$i];54.$query = "DELETE FROM mhs WHERE nim = '$nim'";55.mysql_query($query);56.}57.}58.}59. 60.// query SQL untuk menampilkan semua data61. 62.$query = "SELECT * FROM mhs";63.$hasil = mysql_query($query);64. 65.// membuat form penghapusan data66. 67.echo "<form name='myform' method='post' action='".$_SERVER['PHP_SELF']."?action=del'>";68.echo "<table border='1'>";69.echo "<tr><td><input type='checkbox' name='pilih' onclick='pilihan()' /> Pilih semua</td><td><b>NIM</b></td><td><b>Nama Mahasiswa</b></td></tr>";70.$i = 0;71.while($data = mysql_fetch_array($hasil))72.{73.echo "<tr><td><input type='checkbox' name='nim".$i."' value='".$data['nim']."' /></td><td>".$data['nim']."</td><td>".$data['namamhs']."</td></tr>";74.$i++;75.}76.echo "</table>";77.echo "<input type='hidden' name='n' value='".$i."' />";78.echo "<p><input type='submit' value='Hapus' name='submit'> <input type='reset' value='Batal' name='reset'></p>";79.echo "</form>";80. 81.?>82. 83.</body>84.</html>

Selamat mencoba... 

Cara Membuat Form Dinamis Untuk Submit Data dengan PHP

Dalam artikel ini, saya akan mencoba memaparkan teknik lain dalam membuat form dinamis yang mirip seperti di atas namun tanpa menentukan jumlah datanya dahulu, melainkan dengan mengklik suatu tombol atau link maka secara otomatis komponen input akan bertambah sendiri. Setiap kali kita mau menambah data baru, tinggal klik link tersebut tanpa merefresh halaman sehingga data yang telah diinputkan sebelumnya tidak hilang.

Perhatikan ilustrasi dari teknik tersebut di bawah ini
Membuat form dinamis
Gambar di atas adalah tampilan mula-mula form yang terdiri dari sebuah komponen input. Kita bisa mengisi data pertama pada komponen input tersebut. Apabila kita ingin menambah data baru, maka tinggal diklik saja link ‘Tambah’ nya dan jreng… munculah komponen input berikutnya di bawah nya, tanpa merefresh halaman dan data pertamanya tidak hilang. Perhatikan gambar di bawah ini
Membuat form dinamis
Apabila mau menambah data berikutnya lagi, klik ‘Tambah’ lagi dan munculah komponen input ketiga.
Membuat form dinamis
Begitu seterusnya…
OK.. dah paham skenarionya ya? sekarang bagaimana cara membuatnya?
Untuk membuat form dinamis seperti di atas, kita akan menggunakan Javascript. Adapun konsepnya adalah, kita akan gunakan innerHTML untuk menyisipkan tag HTML ke dalam sebuah bagian tag HTML yang lain. Perhatikan konsep di bawah ini.
Andaikan mula-mula kita punya tag HTML untuk form seperti di bawah ini

1.<form method="post" action="...">2.Masukkan Data <input type="text" name="data[]">3. 4.<div id="input0">5.</div>6. 7.</form>
Perhatikan bagian

1.<div id="input0">2.</div>
bagian tersebut, adalah bagian tag HTML yang nantinya akan kita tempatkan komponen input berikutnya. Sehingga apabila kita sisipkan lagi komponen input di dalam bagian ber-id ‘input0′, struktur tag HTML nya menjadi

01.<form method="post" action="...">02.Masukkan Data <input type="text" name="data[]">03. 04.<div id="input0">05.Masukkan Data <input type="text" name="data[]">06. 07.<div id="input1">08.</div>09.</div>10. 11.</form>
Apabila disipkan lagi komponen berikutnya di id ‘input1′, maka strukturnya menjadi

01.<form method="post" action="...">02.Masukkan Data <input type="text" name="data[]">03. 04.<div id="input0">05.Masukkan Data <input type="text" name="data[]">06. 07.<div id="input1">08.Masukkan Data <input type="text" name="data[]">09. 10.<div id="input2">11.</div>12.</div>13.</div>14. 15.</form>
Begitu seterusnya… itulah konsep dalam membuat form dinamis seperti di atas. Setiap kali kita sisipkan komponen input baru, kita sisipkan pula bagian atau tempat untuk meletakkan komponen input berikutnya dengan id yang berbeda.
Di sini, id komponen dibuat berbeda supaya kita bisa menentukan lokasi atau bagian yang tepat dimana ingin disisipkan tag HTML yang baru.
Trus.. bagaimana perintah Javascript untuk menyisipkan tag HTML ke dalam sebuah bagian ber-id tertentu? Seperti yang telah saya singgung sebelumnya, yaitu menggunakan innerHTML. Adapun sintaksnya sbb:

1.document.getElementById("namaID").innerHTML = "...";
Sebagai contoh, misalkan kita ingin menyisipkan tag HTML <p>Test</p> ke dalam komponen ber-id ‘contoh’ maka perintahnya

1.document.getElementById("contoh").innerHTML = "<p>Test</p>";
Nah.. konsepnya sudah kita dapatkan, sekarang saatnya action membuat script nya. Ini dia scriptnya

01.<html>02.<head>03.<script language="JavaScript" type="text/JavaScript">04.counter = 0;05.function action()06.{07.counterNext = counter + 1;08.document.getElementById("input"+counter).innerHTML = "<p>Masukkan Data <input type='text' name='data[]'></p><div id=\"input"+counterNext+"\"></div>";09.counter++;10.}11.</script>12.</head>13. 14.<body>15.<h1>Form Dinamis</h1>16. 17.<form method="post" action="submit.php">18.<p>Masukkan Data <input type='text' name='data[]'></p>19. 20.<div id="input0">21.</div>22. 23.<p><a href="javascript:action();">Tambah</a></p>24.<p><input type="submit" name="submit" value="Submit"><input type="reset" name="reset" value="Reset"></p>25.</form>26. 27.</body>28.</html>
Keterangan:
Untuk membuat nama id komponen yang berubah-ubah: input0, input1, input2, .. dst kita menggunakan increment counter++ dengan nilai awal counternya adalah 0.
Script di atas sudah dicoba dijalankan di browser Firefox 3 dan IE 6, dan.. hasilnya sukses.
Mudah bukan membuatnya?? nah.. dalam kesempatan lain saya akan menjelaskan cara membaca data yang diinputkan melalui form dinamis di atas pada script PHP. Tunggu ya…

Sumber : http://blog.rosihanari.net

Selasa, 08 November 2011

Script PHP untuk Transaksi Unik Otomatis Berdasarkan Tanggal

Dalam artikel kali ini saya akan mencoba menjelaskan cara pembuatan kode transaksi unik yang digenerate secara otomatis berdasarkan tanggal. Biasanya kode transaksi unik berdasarkan tanggal ini digunakan pada transaksi pembayaran atau pembelian barang, misalnya ’201009010001′ dimana 4 digit terdepan menunjukkan tahun transaksi, digit 5 dan 6 menunjukkan bulan transaksi, digit 7-8 menunjukkan tanggal transaksi, sedangkan digit sisanya menunjukkan urutan transaksi yang terjadi pada tanggal tersebut.
Pada prinsipnya, cara membuatnya hampir sama dengan artikel yang pernah saya bahas sebelumnya tentang Generator Unik Incremental Otomatis, namun yang membedakannya di sini hanyalah pada proses penggunaan tanggalnya untuk mengkonstruksi nomor transaksi.

Dalam pembahasan ini, kasus yang kita pilih adalah tentang proses pembayaran (entah pembayaran apa), yang jelas pada proses pembayaran tersebut mula-mula operator diminta memasukkan ID member yang akan membayar. Proses berikutnya adalah memunculkan data identitas member berdasarkan ID member yang dimasukkan tadi dan muncul form isian jumlah uang yang dibayar. Setelah jumlah uang diisi pada form, proses berikutnya adalah memunculkan konfirmasi pembayaran yang didalamnya muncul ID transaksi pembayaran yang menggunakan tanggal transaksi.
Berdasarkan skenario di atas, kita buat dahulu tabel member yang berisi data-data identitas member. Data ini nanti akan diload sewaktu proses pembayaran.
1.CREATE TABLE `member` (
2.`idMember` varchar(10),
3.`nama` varchar(30),
4.`alamat` varchar(50),
5.PRIMARY KEY  (`idMember`)
6.);
dan berikut ini contoh datanya
1.INSERT INTO `member` VALUES ('100001', 'MR. A', 'SOLO');
2.INSERT INTO `member` VALUES ('100002', 'MR. B', 'SOLO');
3.INSERT INTO `member` VALUES ('100003', 'MR. C', 'SEMARANG');
4.INSERT INTO `member` VALUES ('100004', 'MR. D', 'YOGYAKARTA');
Selanjutnya kita buat satu buah tabel lagi untuk menyimpan data transaksi pembayaran. Kita buat tabel yang simpel saja sebagai contoh misalnya
1.CREATE TABLE `transaksi` (
2.`idTransaksi` varchar(12),
3.`idMember` varchar(10),
4.`jumlah` int(11),
5.PRIMARY KEY  (`idTransaksi`)
6.)
di mana field ‘idTransaksi’ untuk menyimpan data ID transaksi, ‘idMember’ terkait dengan ID dari member yang membayar, dan ‘jumlah’ menunjukkan jumlah uang yang dibayar. Karena ‘idTransaksi’ adalah kode unik maka kita set field tsb sebagai primary key.
OK, tabel database yang diperlukan sudah siap, selanjutnya kita buat scriptnya mulai dari form pembayarannya.
bayar.html
01.<html>
02.<head>
03.<title>Transaksi Pembayaran</title>
04.</head>
05.<body>
06.<h1>Transaksi Pembayaran</h1>
07.<p><a href="bayar.htm">Form Bayar</a></p>
08.<hr>
09.<form method="post" action="proses.php">
10.ID Member </td><td><input type="text" name="id"> <input type="submit" name="submit" value="Submit">
11.</form>
12.</body>
13.</html>
Tampilan dari form di atas adalah sbb:
Transaksi Pembayaran
Script berikutnya yang kita buat adalah proses.php. Script ini nanti akan mencari data member berdasarkan ID member yang dimasukkan dari form bayar.html. Jika data member yang dicari ada maka akan memunculkan data member, dan jika tidak maka akan memunculkan konfirmasi data member tidak ditemukan.
Oya, sebelumnya kita butuh script untuk koneksi databasenya dulu ya
koneksi.php
01.<?php
02.// nama host
03.$dbhost = '...';
04.// nama user
05.$dbuser = '...';
06.// password user
07.$dbpass = '...';
08.// nama database
09.$dbname = '...';
10. 
11.mysql_connect($dbhost, $dbuser, $dbpass);
12.mysql_select_db($dbname);
13.?>
Nah sekarang baru script proses.php nya
proses.php
01.<?php
02.// koneksi ke database
03.include 'koneksi.php';
04.?>
05. 
06.<html>
07.<head>
08.<title>Transaksi Pembayaran</title>
09.</head>
10.<body>
11.<h1>Transaksi Pembayaran</h1>
12.<p><a href="bayar.htm">Form Bayar</a></p>
13.<hr>
14.<?php
15.// baca ID member dari form bayar.html
16.$id = $_POST['id'];
17.// lakukan query pencarian data member berdasarkan ID
18.$query = "SELECT * FROM member WHERE idMember = '$id'";
19.$hasil = mysql_query($query);
20.if (mysql_num_rows($hasil)>0)
21.{
22.// jika ditemukan datanya maka tampilkan
23.$data  = mysql_fetch_array($hasil);
24.?>
25.<form method="post" action="proses2.php">
26.<table>
27.<tr><td>ID</td><td>:</td><td><?php echo $id; ?></td></tr>
28.<tr><td>Nama</td><td>:</td><td><?php echo $data['nama']; ?></td></tr>
29.<tr><td>Alamat</td><td>:</td><td><?php echo $data['alamat']; ?></td></tr>
30.<tr><td>Jumlah Bayar</td><td>:</td><td>Rp. <input type="text" name="jumlah"></td></tr>
31.</table>
32.<input type="hidden" name="id" value="<?php echo $id?>">
33.<input type="submit" name="submit" value="Submit">
34.</form>
35.<?php
36.}
37.// jika tidak maka tampilkan peringatan
38.else echo "Nomor ID tidak ditemukan";
39.?>
40.</body>
41.</html>
Tampilan dari script proses.php adalah seperti di bawah ini
Transaksi Pembayaran
OK… script proses.php sudah dibuat, selanjutnya kita buat script proses2.php. Di dalam script ini, akan dilakukan proses penyimpanan data transaksi pembayaran dari member. Sebelum proses penyimpanan data transaksi, terlebih dahulu akan digenerate ID transaksinya secara otomatis. Bagaimana idenya? Idenya adalah pertama baca tanggal hari ini (current date) dalam format YYYYMMDD, gunakan function date('Ymd'). Anda tidak harus menggunakan format YYYYMMDD tapi bisa format DDMMYYYY atau MMDDYYYY.
Setelah itu gunakan query untuk mencari nomor transaksi terakhir yang berawalan tanggal hari ini. Yang menjadi pertanyaan adalah bagaimana cara mencari nomor transaksi terahir? ya… gunakan saja function MAX() pada query nya
1.SELECT MAX(idTransaksi) FROM transaksi WHERE idTransaksi LIKE 'tanggalharini%'
Query di atas digunakan untuk mencari nomor transaksi terakhir yang berawalan tanggal hari ini.
Setelah idTransaksi terakhir diperoleh, selanjutnya kita baca nomor urut dari idTransaksi terakhir tersebut. Karena nomor urut adalah substring yang terletak dalam string nomor transaksi, maka kita gunakan function substr() untuk membacanya. Nomor urut ini terletak pada digit ke 9 s/d 12. Nah… nomor urut ini nanti selanjutnya kita tambah 1 untuk nomor urut transaksi berikutnya. Ilustrasinya begini, misalkan nomor urut dari id transaksi terakhir adalah 0001 maka nomor urut id transaksi berikutnya adalah 0002. Gunakan function sprintf('%04s', nomorurut) untuk menyatakan nomor urut dalam 4 digit string. Misalkan nomor urutnya adalah 12, maka dengan function tersebut akan dihasilkan ’0012′. Kemudian nomor urut ini kita gabung kembali dengan tanggal hari ini untuk membentuk nomor transaksi yang baru.
Nomor transaksi yang baru sudah digenerate, barulah proses penyimpanan data transaksinya ke dalam tabel transaksi.
OK… berikut ini isi script proses2.php nya
proses2.php
01.<?php
02.// koneksi ke database
03.include 'koneksi.php';
04. 
05.// baca current date
06.$today = date("Ymd");
07.?>
08. 
09.<html>
10.<head>
11.<title>Transaksi Pembayaran</title>
12.</head>
13.<body>
14.<h1>Transaksi Pembayaran</h1>
15.<p><a href="bayar.htm">Form Bayar</a></p>
16.<hr>
17.<?php
18. 
19.// baca id member dari form proses.php
20.$id = $_POST['id'];
21. 
22.// baca jumlah pembayaran dari form proses.php
23.$jumlah = $_POST['jumlah'];
24. 
25.// cari id transaksi terakhir yang berawalan tanggal hari ini
26.$query = "SELECT max(idTransaksi) AS last FROM transaksi WHERE idTransaksi LIKE '$today%'";
27.$hasil = mysql_query($query);
28.$data  = mysql_fetch_array($hasil);
29.$lastNoTransaksi = $data['last'];
30. 
31.// baca nomor urut transaksi dari id transaksi terakhir
32.$lastNoUrut = substr($lastNoTransaksi, 8, 4);
33. 
34.// nomor urut ditambah 1
35.$nextNoUrut = $lastNoUrut + 1;
36. 
37.// membuat format nomor transaksi berikutnya
38.$nextNoTransaksi = $today.sprintf('%04s', $nextNoUrut);
39. 
40.// proses simpan data transaksi dengan nomor transaksi yang baru
41.$query = "INSERT INTO transaksi (idTransaksi, idMember, jumlah)
42.VALUES ('$nextNoTransaksi', '$id', '$jumlah')";
43.$hasil = mysql_query($query);
44.if ($hasil)
45.{
46.// jika proses simpan transaksi sukses, maka tampilkan nomor transaksi dan data pembayaran
47.$query2 = "SELECT * FROM member WHERE idMember = '$id'";
48.$hasil2 = mysql_query($query2);
49.$data2  = mysql_fetch_array($hasil2);
50.?>
51. 
52.<p>Transaksi Pembayaran Sukses</p>
53.<table>
54.<tr><td>ID Transaksi</td><td>:</td><td><?php echo $nextNoTransaksi; ?></td></tr>
55.<tr><td>ID Member</td><td>:</td><td><?php echo $id; ?></td></tr>
56.<tr><td>Nama</td><td>:</td><td><?php echo $data2['nama']; ?></td></tr>
57.<tr><td>Alamat</td><td>:</td><td><?php echo $data2['alamat']; ?></td></tr>
58.<tr><td>Jumlah Bayar</td><td>:</td><td>Rp. <?php echo $jumlah; ?></td></tr>
59.</table>
60. 
61.<?php
62.}
63.else echo "Transaksi Gagal";
64.?>  
65. 
66.</body>
67.</html>
Tampilan dari script proses2.php adalah seperti di bawah ini
Transaksi Pembayaran
Mudah bukan membuatnya? selamat mencoba dan bereksperimen ya…

solusinya error di php dan sebabnya

pertanyaan yang disampaikan oleh para pengunjung. Dalam artikel kali ini, saya mencoba merangkum beberapa pertanyaan yang sering ditanyakan oleh pengunjung seputar error yang mereka jumpai dan bagaimana cara mengatasinya.

Bunyi Error:
Warning: mysql_fetch_array(): supplied argument is not
a valid MySQL result resource in ....
atau
Warning: mysql_num_rows(): supplied argument is not
a valid MySQL result resource in ...
Penyebab:
Error di atas disebabkan ada query SQL yang salah. Bisa jadi karena sintaks perintah query SQL nya salah, misalnya kurang tanda petik untuk menyatakan string dll. Selain itu bisa juga terjadi karena nama field dan tabel yang salah penulisannya.
Solusi:
Coba cek kembali statement query SQL Anda. Pastikan tidak ada lagi kesalahan dalam penulisannya. Untuk proses debugging query SQL (mengetahui letak kesalahannya), Anda bisa menambahkan statement die(mysql_error()) pada perintah mysql_query() nya. Contoh:
$query = ".....";
mysql_query($query) or die(mysql_error());
.
.
atau silakan baca kembali teknik debugging script php mysql.

Bunyi Error:
Warning: session_start() [function.session-start]:
Cannot send session cookie - headers already sent by
(output started at ... ) in ... on line ...
atau
Warning: session_start() [function.session-start]:
Cannot send session cache limiter - headers already sent
(output started at ...) in ... on line ...
Penyebab:
Error di atas biasanya terjadi pada penggunaan session. Sewaktu memberikan perintah session_start(), terdapat baris perintah di atasnya yang menampilkan string atau kode html ke browser. Sebagai contoh, perhatikan script berikut ini:
<?php
echo "Hallo...";
session_start();
?>
atau
<html>
<head>
    <title>....</title>
</head>
<?php
session_start();
?>
Bila Anda perhatikan script di atas, maka terdapat string yang di-echo-kan atau terdapat kode html yang diletakkan sebelum session_start(). Nah… inilah yang menyebabkan error. Selain contoh di atas, error juga bisa muncul dari script yang berbentuk seperti ini
<?php
include "header.php";
session_start();
?>
Meskipun sebelum session_start() tidak ada echo atau kode html, namun error akan tetap muncul apabila isi dari script header.php terdapat echo atau kode html juga, misalnya
header.php
<?php
echo "hallo";
?>
Solusi:
Pastikan sebelum perintah session_start() tidak terdapat perintah echo atau kode html apapun.

Bunyi Error:
Warning: Cannot modify header information – headers already sent by
(output started at ...) in ...
Penyebab:
Peringatan di atas biasanya muncul ketika Anda melakukan redirecting menggunakan perintah
header("Location: ...");
Seharusnya, sebelum perintah header("Location: ...") tidak boleh ada string apapun yang ditampilkan di browser, meskipun itu kode HTML (sama seperti penyebab error di session_start() sebelumnya). Sebagai contoh perhatikan script berikut ini:
<?php
echo "<p>Hallo Apa kabar?</p>";
header("Location: test.php");
?>
Pada script di atas, sebelum perintah header() terdapat string yang ditampilkan ke browser. Inilah yang mengakibatkan muncul peringatan tsb. Lantas bagaimana dengan script berikut ini?
<?php
$a = 10;
if ($a < 0) echo "Nilai A negatif";
else header("Location: test.php");
?>
Kira-kira muncul Warning nya gak ya? Jika Anda coba, maka tidak muncul Warning nya meskipun sebelum header() terdapat string yang ditampilkan ke browser. Mengapa demikian? ya.. meskipun di situ terdapat perintah untuk menampilkan string ke browser, namun perintah tersebut tidak pernah dijalankan karena nilai $a nya positif.
Solusi:
Pastikan sebelum perintah header("Location: ...") tidak ada kode HTML atau perintah echo apapun. Jika Anda mengincludekan suatu script di atas header("Location: ...") pastikan dalam script yang diincludekan tersebut tidak ada kode HTML atau echo.

Bunyi Error:
Warning: mysql_connect() [function.mysql-connect]:
Access denied for user ‘root’@'localhost’ (using password: YES) in ...
Penyebab:
Error di atas disebabkan karena koneksi yang gagal ke MySQL. Penyebab gagalnya bisa jadi disebabkan nama user atau password yang salah.
Solusi:
Pastikan username dan password koneksi ke MySQL Anda sudah benar ketika menggunakan perintah koneksi mysql_connect("namahost", "namauser", "passworduser");

Bunyi Error:
Parse error: syntax error, unexpected T_STRING,
expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in ...
Penyebab:
Penyebab pastinya, saya kurang mengetahuinya. Namun biasanya ini terjadi karena penggunaan versi PHP yang rendah (versi di bawah PHP 5) untuk menjalankan script PHP yang menggunakan OOP.
Solusi:
Coba upgrade versi PHP Anda, atau gunakan PHP dengan versi yang lebih tinggi.

Bunyi Error:
Parse error: syntax error, unexpected T_ELSE in ...
Penyebab:
Error tersebut muncul sebagai akibat penulisan sintaks IF … ELSE yang tidak sesuai aturan. Perhatikan contoh penggunaan IF ELSE yang salah di bawah ini
<?php
$a = 5;
if ($a > 0) $status = "A lebih besar dari 0"
else ($a < 0) $status = "A lebih kecil dari 0"
else $status = "A sama dengan 0"
?>
Contoh di atas terdapat kesalahan yaitu setiap akhir statement tidak diberikan tanda titik koma (;), dan pada bagian else ($a < 0) kurang IF, seharusnya
<?php
$a = 5;
if ($a > 0) $status = "A lebih besar dari 0";
else if ($a < 0) $status = "A lebih kecil dari 0";
else $status = "A sama dengan 0";
?>
Solusi:
Pastikan struktur statement yang Anda gunakan berbentuk seperti ini
<?php
if (syarat1) statement1;
else if (syarat2) statement2;
else if (syarat3) statement3;
.
.
else statementX;
?>
atau
<?php
if (syarat1)
{
   statement;
   statement;
   .
   .
}
else if (syarat2)
{
   statement;
   statement;
   .
   .
}
.
.
else
{
   statement;
   statement;
   .
   .
}
?>

Bunyi Error:
Fatal error: Call to undefined function: ...
Penyebab:
Error tersebut disebabkan karena nama function yang digunakan tidak ada atau tidak dikenal oleh PHP. Jika function tersebut adalah built in function, misalnya str_split() bisa jadi hal ini disebabkan pada versi PHP yang digunakan belum ada function tersebut. Jika function tersebut adalah function buatan sendiri, bisa jadi anda lupa menyisipkan ke dalam script atau meng-include-kannya.
Solusi:
Jika function yang tidak dikenal adalah built in function, maka lakukan upgrade versi PHP yang lebih tinggi. Sedangkan jika function yang tidak dikenal adalah buatan sendiri, pastikan Anda sudah meng-includekan di dalam scriptnya sehingga bisa dikenal. Contohnya:
function.php
<?php
function jumlah($a, $b)
{
   return $a + $b;
}
?>
script.php
<?php
include "function.php";
echo jumlah(9, 10);   // akan menghasilkan 19
?>
atau
script.php
<?php
function jumlah($a, $b)
{
   return $a + $b;
}

echo jumlah(9, 10);   // akan menghasilkan 19
?>

Bunyi Error:
Parse error: parse error, unexpected $end
Penyebab:
Error di atas disebabkan karena kurangnya tanda penutup kurung kurawal. Contohnya:
<?php
if ($a > 1)
{
   echo "Nilai A lebih dari 1";
?>
atau
<?php
while ($a > 1)
{
   .
   .
   .
?>
Selain itu, bisa pula error tersebut disebabkan karena efek perbedaan penggunaan tanda pembuka PHP <?php dan <?. Contohnya
<?php
if (syarat)
{
   statement1;
   statement2;
?>

<?
   statement3;
   statement4;
}
?>
Perhatikan contoh script di atas, bahwa pada blok statement IF oleh si programmer dipecah menjadi 2 blok, namun perhatikan bahwa untuk blok kedua, tanda pembukanya menggunakan <? saja. Nah... terkadang suatu server hanya membolehkan tanda pembuka script PHP menggunakan <?php, sehingga untuk blok kedua tidak dianggap sebagai script, dan.. akibatnya statement IF nya dianggap tidak ada tanda } penutup.
Solusi:
Pastikan tanda kurung kurawal penutup tidak lupa menuliskannya. Jika ternyata kasus yang Anda hadapi sama seperti contoh kasus terakhir (perbedaan tanda pembuka script PHP), konsistenkan penulisan tanda pembukanya menggunakan <?php supaya aman.

Bunyi Error:
Parse error: syntax error, unexpected T_STRING
Penyebab:
Error tersebut disebabkan karena penggunaan tanda petik (double quote atau single quote) yang tidak tepat untuk menyatakan suatu string. Sebuah string harus diapit oleh dua buah tanda petik. Sebagai contoh:
<?php
$a = "ini sebuah string";
?>
atau
<?php
$a = 'ini sebuah string';
?>
Namun... jika dalam string tersebut terdapat tanda petik lagi, misalkan
<?php
$a = "ini sebuah " string";
?>
atau
<?php
$a = 'ini sebuah ' string';
?>
maka akan terdapat error di atas. Hal yang sama jika Anda menggunakan single quote (tanda petik tunggal).
Solusi:
Pastikan di dalam sebuah string, anda mengapitnya dengan hanya 2 buah tanda petik saja. Jika Anda bermaksud menyisipkan tanda petik dalam sebuah string, gunakan tanda \" atau \', contoh
<?php
$a = "ini sebuah \" string";
?>
atau
<?php
$a = 'ini sebuah \' string';
?>

Bunyi Error:
Notice: Undefined index: ...
atau
Notice: Undefined variable: ...
Penyebab:
Sebenarnya itu bukan error, namun sekedar peringatan saja bahwa ada variabel atau index array yang belum terdefinisi sebelumnya. Di beberapa versi PHP peringatan tersebut muncul, namun di versi yang lain tidak muncul. Berikut ini contohnya:
<?php
if ($a > 0)
{
   ....
}
?>
Jika kita perhatikan script di atas, variabel $a langsung diberikan statement pengecekan IF, padahal nilai $a ini tidak ada sebelumnya. Nah... di beberapa versi PHP, akan muncul peringatan
Notice: Undefined variable: a
Namun, bila nilai $a ini sudah didefinisikan sebelumnya misalnya
<?php
$a = 10;
if ($a > 0)
{
   ....
}
?>
maka peringatan di atas tidak akan muncul lagi. Peringatan yang hampir sama juga bisa muncul untuk contoh berikut ini
<?php
if ($_GET['test'] == 0)
{
   ....
}
?>
yang dikarenakan nilai $_GET['test'] belum terdefinisi sebelumnya atau belum ada nilainya (belum ada request GET untuk parameter 'test').
Solusi:
Sebenarnya peringatan di atas bisa saja diabaikan karena tidak berpengaruh pada kinerja script atau proses yang terjadi di dalamnya. Namun, jika Anda ingin menghilangkan peringatan tersebut caranya adalah dengan memodifikasi parameter
error_reporting  = ...
pada file konfigurasi php.ini
Tambahkanlah nilai "& ~E_NOTICE" pada nilai parameternya, contoh:
error_reporting  =  E_ALL & ~E_NOTICE
Maksud dari parameter di atas adalah, PHP akan menampilkan bunyi error kecuali NOTICE. Jika sudah, silakan merestart Apache nya.

Bunyi Error:
Fatal error: Maximum execution time of ... seconds exceeded in ...
Penyebab:
Error di atas disebabkan karena lama eksekusi sebuah script PHP telah mencapai batas maksimumnya. Jika Anda menggunakan AppServ atau XAMPP, default maximum execution time nya diset 30 detik. Jika lama eksekusi script yang Anda buat melebihi 30 detik, maka akan muncul error di atas.
Solusi:
Anda dapat meningkatkan atau menambah max execution time pada file php.ini, dengan cara carilah parameter
max_execution_time = ...
Tambahlah nilainya, misalnya menjadi 9999 detik, sehingga nilai parameternya menjadi
max_execution_time = 9999
Selanjutnya, simpan kembali php.ini nya, lalu restart Apachenya.
Kalau perlu, lakukan analisis algoritma pada script Anda apabila dirasa tidak efisien sehingga mengakibatkan running time yang lama.

Bunyi Error:
Bukan Error sih, tapi kegagalan dalam proses upload file ketika Anda membuat script upload file.
Penyebab:
Kegagalan dalam proses upload file itu disebabkan oleh ukuran file yang terlalu besar melebihi batas maksimum yang diperbolehkan oleh PHP sesuai di file php.ini.
Solusi:
Anda dapat mengubah batas maksimum file size untuk upload ini dengan mengubah parameter
upload_max_filesize = ...
dan
post_max_size = ...
pada file php.ini
Berikut ini contoh pengubahan batas maksimum upload file hingga 80 Mb.
upload_max_filesize = 80M
dan
post_max_size = 80M
Jika sudah melakukan pengubahan, lakukan restart Apache nya. Oya, jangan lupa pula untuk menambah komponen input
<input type="hidden" name="MAX_FILE_SIZE" value="80000000" />
pada form upload nya.
Solusi di atas hanya akan bisa menyelesaikan permasalahan upload jika file diupload ke folder atau direktori tertentu yang ada di server. Namun, jika file diupload ke database server, seperti pada artikel lain yang pernah dibahas, maka solusi di atas tidak menyelesaikan masalah karena adanya batasan limit file size pada tipe data yang memungkinkan untuk menyimpan data file, misalnya tipe data blob, medium blob, atau long blob.
OK.. mudah-mudahan artikel di atas bisa bermanfaat bagi Anda yang ingin belajar PHP, namun terkendala beberapa macam error yang belum tahu penyebabnya dan solusinya.

Teknik Grabbing Dengan CURL

Pernahkah Anda mendengar istilah ‘Grabbing’? Grabbing adalah teknik untuk mengambil teks atau secara umum obyek yang ada di suatu situs lain kemudian diletakkan ke web kita. Sebagai contoh yang sering saya jumpai adalah mengambil informasi kurs yang ada di web KlikBCA lalu menaruhnya ke web kita. Apabila kurs di KlikBCA berubah, maka secara otomatis informasi kurs yang ada di web kita pun akan berubah secara otomatis.
Konsep grabbing ini berbeda dengan konsep web service karena data teks yang diambil melalui grabbing ini tidak disajikan dalam bentuk format tertentu seperti halnya XML atau JSON. Namun teks yang diambil berada di halaman web situs, atau dengan kata lain terselip di dalam kode-kode HTML.
Untuk melakukan grabbing ini, kita bisa menggunakan CURL. Dengan CURL ini nanti, kita bisa baca semua kode HTML dari suatu situs lalu kita ambil informasi yang kita inginkan dan kemudian informasi tersebut kita tampilkan di web kita.

Sekarang akan saya berikan cara membaca kode HTML dari suatu situs menggunakan CURL. Ini dia script functionnya…
<?php
function bacaHTML($url){
     // inisialisasi CURL
     $data = curl_init();
     // setting CURL
     curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($data, CURLOPT_URL, $url);
     // menjalankan CURL untuk membaca isi file
     $hasil = curl_exec($data);
     curl_close($data);
     return $hasil;
}
?>
Function bacaHTML() di atas nantinya akan menghasilkan isi file HTML dari suatu situs. Sebagai contoh, misalkan Anda ingin menampilkan isi file HTML yang ada di halaman depan dari blog ini (http://blog.rosihanari.net), maka buat saja script berikut ini
test.php
<?php
function bacaHTML($url){
     // inisialisasi CURL
     $data = curl_init();
     // setting CURL
     curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($data, CURLOPT_URL, $url);
     // menjalankan CURL untuk membaca isi file
     $hasil = curl_exec($data);
     curl_close($data);
     return $hasil;
}

echo bacaHTML('http://blog.rosihanari.net');

?>
Jika Anda jalankan script di atas, maka akan terlihat lucu. Misalkan Anda jalankan di localhost dengan URL http://localhost/test.php, maka akan muncul tampilan blog saya ini.
Teknik Grabbing PHP
Oya… syarat untuk bisa menjalankan script di atas, PC Anda haruslah terkoneksi dengan internet lho ya…
Nah… setelah kita bisa baca kode HTML dari suatu halaman situs, selanjutnya proses pengambilan suatu teks atau obyek tertentu yang kita inginkan. Caranya bagaimana tuh?? kan kode HTML itu banyak, lagian rumit gitu loh??? He… 3x gak kok mudah sekali caranya. Ini dia idenya. Misalkan kode HTML yang dibaca tersebut berbentuk seperti ini
<html>
   <head>
       <title>Contoh halaman web</title>
   </head>
   <body>
       <h1>Ini judul</h1>
       <p>Ini paragraf1. Ini paragraf1.  <b>TARGET 1</b> Ini paragraf1. Ini paragraf1. </p>
       <p>Ini paragraf2. Ini paragraf2.  <b>TARGET 2</b> Ini paragraf2. Ini paragraf2. </p>
  </body>
</html>
Dari contoh kode HTML di atas, misalkan kita akan mengambil teks ‘TARGET 1′. Bagaimana cara mendapatkannya? OK, jika kita lihat, bahwa teks ‘TARGET 1′ ini terletak di sebelah tag <b>. Nah, cara mendapatkan ‘TARGET 1′ ini dengan memecah kode HTML nya menggunakan function explode() terhadap string <b> tersebut atau dengan perintah
$pecah = explode('<b>', $kodeHTML);
Hasil dari proses explode terhadap string ‘<b>’ tersebut akan diperoleh beberapa data array sbb:
$pecah[0] yang berisi
<html>
   <head>
       <title>Contoh halaman web</title>
   </head>
   <body>
       <h1>Ini judul</h1>
       <p>Ini paragraf1. Ini paragraf1.
$pecah[1] yang berisi
TARGET 1</b> Ini paragraf1. Ini paragraf1. </p>
       <p>Ini paragraf2. Ini paragraf2.
dan $pecah[2] yang berisi
TARGET 2</b> Ini paragraf2. Ini paragraf2. </p>
  </body>
</html>
Dari hasil pemecahan tersebut, tampak bahwa ‘TARGET 1′ terletak di dalam $pecah[1]. Proses berikutnya, kita lakukan proses pemecahan lagi, sekarang dilakukan terhadap string </b> karena string </b> ini terletak setelah ‘TARGET 1′ di dalam $pecah[1].
$pecahLagi = explode('</b>', $pecah[1]);
Hasil dari proses pemecahan kedua ini dihasilkan array sbb:
$pecahLagi[0] yang berisi
TARGET 1
$pecahLagi[1] yang berisi
Ini paragraf1. Ini paragraf1. </p>
       <p>Ini paragraf2. Ini paragraf2.
Nah… akhirnya kita dapatkan string ‘TARGET 1′ yang ada di $pecahLagi[0]. Dengan demikian script lengkapnya adalah sbb:
<?php

function bacaHTML($url){
     // inisialisasi CURL
     $data = curl_init();
     // setting CURL
     curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($data, CURLOPT_URL, $url);
     // menjalankan CURL untuk membaca isi file
     $hasil = curl_exec($data);
     curl_close($data);
     return $hasil;
}

$kodeHTML =  bacaHTML('http://situs.com');
$pecah = explode('<b>', $kodeHTML);
$pecahLagi = explode('</b>', $pecah[1]);

echo $pecahLagi[0];

?>
OK… teknik dasar grabbing sudah saya berikan, sekarang saatnya aksi yang sebenarnya yaitu mengambil informasi kurs yang ada di situs KlikBCA, perhatikan kotak merah pada gambar di bawah ini
Teknik Grabbing PHP
Langkah pertama, kita buka dulu situsnya KlikBCA dan pelajari source codenya. Lalu carilah bagian dalam kode HTML source nya yang terdapat informasi kurs nya. Sepertinya informasi kursnya terletak di bagian ini
Teknik Grabbing PHP
Kemudian, kita pilih kode tag yang terletak sebelum bagian informasi kurs. Saran saya, sebaiknya pilih beberapa tag sekaligus supaya unik (tidak ada yang sama) dalam satu halaman. Dan usahakan tag yang dipilih ini tidak memuat suatu teks yang bukan tag HTML. Dalam contoh ini misalnya kita ambil tag yang terletak sebelum informasi kurs seperti di bawah ini
<table width="139" border="0" cellspacing="0" cellpadding="0">
Tag di atas terletak tepat di atas bagian yang kita tandai di atas. Selanjutnya dengan tag tersebut, kita akan melakukan proses exploding (pemecahan string).
Sehingga scriptnya menjadi
kursbca.php
<?php

function bacaHTML($url){
     // inisialisasi CURL
     $data = curl_init();
     // setting CURL
     curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($data, CURLOPT_URL, $url);
     // menjalankan CURL untuk membaca isi file
     $hasil = curl_exec($data);
     curl_close($data);
     return $hasil;
}

$kodeHTML =  bacaHTML('http://www.klikbca.com');
$pecah = explode('<table width="139" border="0" cellspacing="0" cellpadding="0">', $kodeHTML);

?>
Selanjutnya, perhatikan kembali source code dari halaman depan klikbca tersebut, bahwa ternyata terdapat 2 buah tag yang kita pilih tadi
<table width="139" border="0" cellspacing="0" cellpadding="0">
Coba cari sendiri ya, nanti Anda akan menemukan 2 buah tag tersebut. Jika kita melakukan proses explode() pada tag tersebut, maka nantinya akan terdapat 3 buah elemen array hasil explode. Nah… bagian kurs yang akan kita ambil terletak pada elemen array ke-2 atau $pecah[2].
Selanjutnya $pecah[2] ini nanti kita pecah lagi berdasarkan tag HTML yang terletak setelah informasi kurs, dalam contoh ini misalkan kita pilih tag </table> karena tag ini terletak tepat setelah bagian yang kita tandai.
Sehingga scriptnya menjadi
kursbca.php
<?php

function bacaHTML($url){
     // inisialisasi CURL
     $data = curl_init();
     // setting CURL
     curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($data, CURLOPT_URL, $url);
     // menjalankan CURL untuk membaca isi file
     $hasil = curl_exec($data);
     curl_close($data);
     return $hasil;
}

$kodeHTML =  bacaHTML('http://www.klikbca.com');
$pecah = explode('<table width="139" border="0" cellspacing="0" cellpadding="0">', $kodeHTML);

$pecahLagi = explode('</table>', $pecah[2]);

echo $pecahLagi[0];
?>
Hasil script di atas tampak di bawah ini
Teknik Grabbing PHP
Supaya lebih cantik, kita tambahkan tag table di atas hasil grabbing nya.
<?php

function bacaHTML($url){
     // inisialisasi CURL
     $data = curl_init();
     // setting CURL
     curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
     curl_setopt($data, CURLOPT_URL, $url);
     // menjalankan CURL untuk membaca isi file
     $hasil = curl_exec($data);
     curl_close($data);
     return $hasil;
}

$kodeHTML =  bacaHTML('http://www.klikbca.com');
$pecah = explode('<table width="139" border="0" cellspacing="0" cellpadding="0">', $kodeHTML);

$pecahLagi = explode('</table>', $pecah[2]);

echo "<table border='1'>";
echo "<tr><td>KURS</td><td>JUAL</td><td>BELI</td></tr>";
echo $pecahLagi[0];
echo "</table>";
?>
Dan… hasil terakhir tampak di bawah ini
Teknik Grabbing PHP
Oya, mungkin Anda berpikiran, mengapa tidak sekalian saja tag <table> nya dalam informasi kurs digrabbing? Niat awalnya maunya begitu sih, cuman kalo kita perhatikan di dalam tag <table> nya bordernya 0 atau tanpa border
<table width="139" border="0" cellspacing="0" cellpadding="0">
Kok rasanya kurang keren :-) makanya untuk header tabel nya kita buat sendiri, lagian untuk headernya informasi kurs di klikBCA (KURS – JUAL – BELI) menggunakan image.
Nah… untuk latihan Anda sendiri, silakan Anda grabbing informasi kurs yang berasal dari Bank Mandiri. Selamat mencoba ya…

sumber : http://blog.rosihanari.net