Jumat, 11 Mei 2012

Menjalankan Script PHP Untuk SMS Gateway Tanpa Autorefresh Dengan AJAX

Sebenarnya sudah lama niat saya untuk artikel ini, tapi maaf baru kesampaian sekarang. Sepertinya para fans blog ini sudah gak sabar :-) Artikel ini didasarkan pada hasil eksperimen pribadi yang awalnya hanya bersifat iseng-iseng saja. Dari judul artikel di atas, tentu Anda sudah bisa memperkirakan apa isi artikel ini yaitu cara alternatif menjalankan script PHP untuk memproses SMS gateway tanpa autorefresh browser. Dalam hal ini pembahasan hanya dibatasi untuk SMS Gateway dengan Gammu.
Pada artikel-artikel sebelumnya, seringkali saya membuat contoh-contoh script PHP untuk memproses SMS yang masuk ke database menggunakan konsep autorefresh setiap n detik atau menjalankan script berulang-ulang secara otomatis setiap n detik. Namun konsep ini terkadang kurang cocok untuk browser yang menolak autorefresh. Beberapa rekan-rekan mengeluh karena browsernya tidak bisa melakukan autorefresh yang kemungkinan disebabkan settingan di browsernya. Dengan autorefresh yang sering tersebut, terkadang browser menganggap adanya suatu program abnormal.
Dari hal di atas, maka saya menggunakan pendekatan lain untuk menjalankan script PHP pengolah SMS gateway tersebut bukan lagi menggunakan autorefresh namun menjalankan script PHP nya di balik layar (browser) menggunakan AJAX (Asynchronous Javascript And XML).

Pada prinsipnya, penggunaan AJAX untuk menjalankan script PHP pengolah SMS gateway ini hampir sama dengan autorefresh, namun perbedaannya hanyalah autorefreshnya dilakukan di balik layar browser. Untuk proses autorefreshnya sendiri nanti menggunakan Javascript dan bukannya meload script ke browser seperti sebelumnya.
Lantas.. bagaimana implementasinya? OK, andaikan kita memiliki script PHP bernama “script.php” untuk mengolah SMS gatewaynya, dan juga halaman “index.htm” untuk halaman utama tampilan. Maka isi struktur dari halaman index.htm adalah sbb:
index.htm

01.<html>
02.<head>
03.<title>SMS Servertitle>
04.<script type="text/javascript" src="ajax.js">script>
05.head>
06.<body onload="autorefresh('script.php')">
07.<h1 align="center">SMS SERVERh1>
08..
09..
10.body>
11.html>
Keterangan:
  • File ‘ajax.js’ merupakan file berisi script Javascript untuk menjalankan AJAX
  • Sedangkan function ‘autorefresh()’ adalah function untuk menjalankan autorefresh pada ‘script.php’. Function ini nantinya diletakkan dalam ajax.js.
Selanjutnya, bagaimana isi script ajax.js nya? OK ini dia isinya
ajax.js
01.var page = "script.php";
02. 
03.function autorefresh(page) {
04.if (window.XMLHttpRequest) {
05.req = new XMLHttpRequest();
06.req.open("GET", page, true);
07.req.send(null);
08.} else if (window.ActiveXObject) {
09.req = new ActiveXObject("Microsoft.XMLDOM");
10.if (req) {
11.req.open("GET", page, true);
12.req.send(null);
13.}
14.}
15.setTimeout("autorefresh(page)", 5000);
16.}
Javascript di atas akan melakukan autorefresh menggunakan AJAX pada setiap interval 5 detik (5000 milisekon). Anda bisa mengatur sendiri lama intervalnya pada bagian
1.setTimeout("autorefresh(page)", 5000);
OK… that’s all. Nah… Script mana yang nantinya dijalankan di browser? yang dijalankan cukup file index.htm saja. Untuk script.php nya tidak perlu dijalankan karena yang menjalankan adalah script AJAX nya.
Sekarang saya akan mengambil contoh implementasi pendekatan di atas pada kasus SMS Ulang Tahun yang pernah dibahas.
Misalkan kita punya script PHP untuk memproses SMSnya sbb:
ultah.php
01.
02. 
03.// koneksi ke database mysql
04.mysql_connect("dbhost", "dbuser", "dbpass");
05.mysql_select_db("dbname");
06. 
07.// baca tanggal sekarang
08.$tglNow = date("d");
09. 
10.// baca bulan sekarang
11.$blnNow = date("m");
12. 
13.// baca tahun-bulan-tanggal sekarang
14.$now = date("Y-m-d");
15. 
16.// cari data teman yang bulan lahir dan tanggal lahir sesuai pada current date
17.$query = "SELECT * FROM friends WHERE DAY(tglLahir) = '$tglNow' AND MONTH(tglLahir) = '$blnNow'";
18.$hasil = mysql_query($query);
19.while ($data = mysql_fetch_array($hasil))
20.{
21.// baca nomor HP dan nama teman
22.$noHP = $data['noHP'];
23.$nama = $data['nama'];
24. 
25.// insert data ke tabel kirim
26.$query2 = "INSERT INTO kirim (noHP, tglKirim) VALUES ('$noHP', '$now')";
27.$hasil2 = mysql_query($query2);
28. 
29.// jika proses insert ke tabel kirim sukses maka kirim sms ucapan
30.if ($hasil2)
31.{
32.// isi pesan SMS ucapan ultah, disertai nama temannya
33.$pesanSMS = "Wahai sahabatku ".$nama.", Happy Birthday !! Semoga dengan bertambahnya usiamu, semakin bertambah pula amalan ibadahmu.";
34. 
35.// proses kirim sms via insert data ke tabel outbox
36.$query2 = "INSERT INTO outbox (DestinationNumber, TextDecoded, CreatorID) VALUES ('$noHP', '$pesanSMS', 'Gammu')";
37.mysql_query($query2);
38.}
39.}
40. 
41.?>
Berikutnya kita buat javascript ‘ajax.js’ untuk AJAX nya sbb:
ajax.js
01.// setting file tujuan autorefresh via AJAX
02.var page = "ultah.php";
03. 
04.function autorefresh(page) {
05.if (window.XMLHttpRequest) {
06.req = new XMLHttpRequest();
07.req.open("GET", page, true);
08.req.send(null);
09.} else if (window.ActiveXObject) {
10.req = new ActiveXObject("Microsoft.XMLDOM");
11.if (req) {
12.req.open("GET", page, true);
13.req.send(null);
14.}
15.}
16.setTimeout("autorefresh(page)", 5000);
17.}
Sedangkan isi dari file index.htm nya adalah
index.htm
01.<html>
02.<head>
03.<title>SMS Servertitle>
04.<script type="text/javascript" src="ajax.js">script>
05.head>
06.<body onload="autorefresh('ultah.php')">
07.<h1 align="center">SMS SERVER ULANG TAHUNh1>
08.body>
09.html>
Script di atas sudah diuji coba dan berjalan dengan lancar di modem Wavecom Fastrack.
OK begitulah contoh implementasi pendekatan AJAX untuk mengolah data SMS dengan script PHP. Mudah-mudahan artikel ini bermanfaat.

Artikel Terkait


EmoticonEmoticon