Anda di halaman 1dari 53

Implementasi SMS Autoreply Gammu di Database Non MySQL (Studi Kasus MS.

Access)
January 1st, 2011 | by rosihanari | Cetak Artikel Ini

Niat hati ingin membuat postingan di penghujung tahun 2010 (31/12/2010), akan tetapi Allah SWT belum mengizinkan yang akhirnya postingan ini baru bisa dibuat di awal tahun 2011 But.. its OK, mudah-mudahan artikel ini bisa bermanfaat bagi Anda yang ingin belajar mengembangkan SMS Gateway dengan Gammu. Artikel kali ini tentang bagaimana cara mengimplementasikan SMS Auto Reply dengan Gammu di database selain MySQL. Dalam kasus ini, saya pilih database MS. Access sebagai master database untuk autoreply nya. Mungkin sebelumnya Anda mengira bahwa Gammu hanya bisa cocok dengan database MySQL. Memang sebenarnya Gammu bisa langsung terintegrasi pada 3 jenis database engine, yaitu MySQL, Posgre SQL, dan SQL lite. Ketiganya bisa langsung terintegrasi dengan Gammu karena di dalam Gammunya sendiri sudah terdapat library. Lantas bagaimana dengan database engine yang lain, seperti MS. Access, Oracle, MS SQL (SQL Server) dll? Untuk database engine yang lain pada prinsipnya bisa, akan tetapi dengan sedikit trik atau tidak secara langsung. Penasaran dengan triknya? OK simak artikel ini baik-baik ya. Dalam studi kasus ini, saya menggunakan database MS Access yang berisi data induk nilai mahasiswa untuk autoreply nya.

Tabel di MS. Access tersebut saya beri nama nilai dengan 3 field yaitu: kodemk, nim dan nilai. Untuk kodemk dan nim bertipe data text dan nilai bertipe data number. Dengan data di atas, saya akan membuat aplikasi SMS autoreply dengan Gammu yang memungkinkan seseorang bisa mengecek nilai mahasiswa pada matakuliah tertentu dengan format perintah SMS: NILAI#KODEMK#NIM. Sebagai contoh misalkan ada seseorang mengirim SMS dengan perintah: NILAI#MK001#M01, maka secara otomatis akan mendapat balasan SMS berupa nilai dari mahasiswa bernim M01 pada matakuliah berkode MK001 yaitu 90 . Nah bagaimana idenya untuk membuat sms auto reply tersebut? Idenya mudah sekali. Untuk mengimplementasikan konsep di atas, kita tetap menggunakan MySQL sebagai database untuk menerima dan mengirim SMS, mengingat Gammu hanya bisa terhubung langsung dengan 3 database seperti yang saya jelaskan di atas. Begitu SMS diterima oleh modem/hp, maka SMS akan masuk ke MySQL nya (di tabel INBOX nya Gammu). Selanjutnya SMS yang masuk ini kita baca dengan menggunakan program atau script untuk mendapatkan KODEMK dan NIM nya. KODEMK dan NIM ini nanti kita gunakan untuk mencari nilai di database MS. Access nya. Siapa yang melakukan pencarian nilai di MS. Accessnya? ya tentu saja script atau program yang kita buat dong, siapa lagi? Setelah nilai ketemu, selanjutnya nilai tersebut kita kirimkan dalam bentuk SMS melalui Gammu dengan cara menyisipkannya ke dalam tabel OUTBOX di database MySQL. Simpel bukan idenya? Dari ide di atas, tampak bahwa di dalam script yang akan kita buat itu terdapat 2 koneksi ke database engine yang berbeda, yaitu ke MySQL dan ke MS. Access. Lantas bisakah hal itu diterapkan? He 3x ya jelas bisa dong. Untuk koneksi ke MS. Accessnya dari PHP bagaimana caranya? Anda bisa menggunakan ODBC sebagaimana yang pernah saya jelaskan di artikel Cara Koneksi PHP ke MS. Access. OK, sekarang kita bisa buat scriptnya. Script pertama yang kita buat adalah script untuk membaca SMS yang masuk ke tabel INBOX nya Gammu di MySQL, selanjutnya melakukan proses parsing untuk mendapatkan KODEMK dan NIM. Setelah itu, melakukan proses pencarian nilai di MS. Access sesuai KODEMK dan NIM, lalu mengirimkan SMS balasan. sms.php view sourceprint?
01.<?php 02. 03.// parameter koneksi ke database Gammu di MySQL 04.$mysqlHost = "..."; 05.$mysqlUser = "..."; 06.$mysqlPass = "..."; 07.$mysqlDB = "..."; 08. 09.// parameter koneksi ke MS. Access via ODBC 10.$odbcDataSource = "..."; 11.$odbcUser = "..."; 12.$odbcPass = "...";

13. 14.// proses koneksi ke mysql 15.mysql_connect($mysqlHost, $mysqlUser, $mysqlPass); 16.mysql_select_db($mysqlDB); 17. 18.// cari data SMS yang masuk ke INBOX MySQL 19.// yang berawalan NILAI#... 20.$queryMySQL = "SELECT * FROM inbox WHERE TextDecoded LIKE 'NILAI#%' AND Processed = 'false'"; 21.$hasilMySQL = mysql_query($queryMySQL); 22.while ($dataMySQL = mysql_fetch_array($hasilMySQL)) 23.{ 24.// baca ID sms 25.$id = $dataMySQL['ID']; 26.// baca nomor pengirim (akan digunakan untuk mengirim SMS balasan) 27.$sender = $dataMySQL['SenderNumber']; 28.// mengubah sms ke huruf kapital semua 29.$sms = strtoupper($dataMySQL['TextDecoded']); 30.// proses parsing untuk mendapatkan KODEMK dan NIM dari SMS 31.$split = explode('#', $sms); 32.$kodemk = $split[1]; 33.$nim = $split[2]; 34. 35.// koneksi ke MS. Access via ODBC 36.$koneksiODBC = odbc_connect($odbcDataSource, $odbcUser , $odbcPass); 37.// query untuk mencari ada tidaknya data di tabel 'nilai' pada MS. Access berdasarkan KODEMK dan NIM 38.$queryODBC = "SELECT count(*) AS jum FROM nilai WHERE nim = '$nim' AND kodemk = '$kodemk'"; 39.$hasilODBC = odbc_exec($koneksiODBC, $queryODBC); 40.$dataODBC = odbc_fetch_array($hasilODBC); 41. 42.// jika hasil query ditemukan (hasil query > 0), maka cari nilainya dengan query 43.if ($dataODBC['jum'] > 0) 44.{ 45.// query untuk mendapatkan nilai di MS. Access 46.$queryODBC = "SELECT * FROM nilai WHERE nim = '$nim' AND kodemk = '$kodemk'"; 47.$hasilODBC = odbc_exec($koneksiODBC, $queryODBC); 48.$dataODBC = odbc_fetch_array($hasilODBC); 49.$nilai = $dataODBC['nilai']; 50.// bunyi balasan SMS jika nilai ditemukan 51.$reply = "Nilai MK ".$kodemk." mahasiswa berNIM ".$nim." adalah ".$nilai; 52.} 53.// jika hasil query tidak ada, maka bunyi balasan SMS nya 'Data tidak ditemukan' 54.else $reply = "Data tidak ditemukan"; 55. 56.// query untuk mengirim SMS balasan via Gammu 57.$queryMySQL2 = "INSERT INTO outbox(DestinationNumber, TextDecoded, CreatorID) 58.VALUES ('$sender', '$reply', 'Gammu')"; 59.mysql_query($queryMySQL2); 60.

61.// proses penandaan SMS di Inbox bahwa SMS sudah diproses berdasarkan ID SMS 62.$queryMySQL3 = "UPDATE inbox SET Processed = 'true' WHERE ID = '$id'"; 63.mysql_query($queryMySQL3); 64. 65.}

Dari script di atas, perlu saya jelaskan mengapa SMS yang dibaca dari tabel INBOX perlu dibuat ke kapital semua menggunakan strtoupper(). Ya hal ini untuk menjaga konsistensi data saja sewaktu proses. Di dalam database nilai mahasiswa pada MS. Access, KODEMK dan NIM saya buat huruf besar. Padahal, jika seseorang mengirim SMS seringnya besar kecilnya huruf itu tidak konsisten. Kadang huruf besar semua, kecil semua atau bahkan campuran. Proses kapitalisasi karakter ini perlu diberikan untuk mengurangi efek dari sifat Case Sensitivitas (pembedaan besar kecilnya huruf) pada sistem. Paham kan yang saya maksud? Supaya script di atas berjalan secara otomatis, tanpa kita jalankan secara manual dengan merefresh script tersebut berulangkali di browser, kita bisa buat script untuk autorefreshnya dengan AJAX menggunakan script berikut ini index.php view sourceprint?
01.<html> 02.<head> 03.<title>SMS Server Running...</title> 04.<script type="text/javascript"> 05.function ajax() 06.{ 07.if (window.XMLHttpRequest) 08.{ 09.xmlhttp=new XMLHttpRequest(); 10.} 11.else 12.{ 13.xmlhttp =new ActiveXObject("Microsoft.XMLHTTP"); 14.} 15. 16.xmlhttp.onreadystatechange=function() 17.{ 18.if (xmlhttp.readyState==4 &amp;amp;&amp;amp; xmlhttp.status==200) 19.{ 20.} 21.} 22. 23.xmlhttp.open("GET","sms.php"); 24.xmlhttp.send(); 25.setTimeout("ajax()", 5000); 26.} 27.</script> 28. 29.</head> 30.<body onload="ajax()">

31.<h1>SMS Server Running...</h1> 32.</body> 33.</html>

Dengan demikian, Anda cukup menjalankan script index.php nya saja di browser dan biarkan script SMS servernya bekerja secara otomatis. Script di atas telah saya coba dengan sukses menggunakan XAMPP terbaru dan dengan dukungan modem Wavecom. Untuk Gammu nya sendiri, Anda bisa download Easy Gammu Installer buatan saya. Semoga artikel ini bisa bermanfaat untuk Anda pengunjung setia blog ini. Anda dapat bereksperimen untuk membuat SMS autoreply ini dengan mengintegrasikannya dengan database engine yang lain seperti Oracle, MS. SQL atau SQL Server, dll karena konsep maupun idenya sama persis dengan ide di atas. Oya, untuk MS. SQL atau SQL server Anda juga dapat menggunakan ODBC untuk mengkoneksikan ke PHP.

Ide Membuat Script Grafik PHP Untuk Menampilkan Indeks Prestasi Mahasiswa (Studi Kasus)
June 20th, 2009 | by rosihanari | Cetak Artikel Ini

Dalam artikel sebelumnya, saya pernah singgung bagaimana membuat query SQL untuk menampilkan Indeks Prestasi (IP) mahasiswa dalam setiap semester yang telah ditempuhnya. Hasil query ini nanti bisa digunakan untuk melihat progress atau perkembangan prestasi akademik mahasiswa. Oleh karena itu biasanya, query ini sering digunakan dalam suatu sistem informasi akademik. Selanjutnya dalam artikel ini, saya akan mencoba memaparkan bagaimana menampilkan hasil query SQL di atas ke dalam bentuk grafik (chart) menggunakan script PHP, atau dengan kata lain artikel ini akan membahas bagaimana membuat grafik (chart) untuk menampilkan perkembangan IP setiap semester mahasiswa. Mengapa harus ditampilkan dalam bentuk grafik (chart)? ya karena dengan grafik, seseorang dapat dengan mudah membaca suatu informasi. Dengan grafik, seseorang dapat dengan mudah mengetahui apakah prestasi akademiknya semakin turun, ataukah naik atau sedang-sedang saja. OK deh trus bagaimana skenario dari script ini? adapun skenarionya adalah pertama akan disajikan terlebih dahulu daftar (list) dari mahasiswa yang ada. Kemudian disetiap mahasiswa terdapat link untuk melihat grafik IP nya. Berikut ini adalah gambarannya.

Apabila link VIEW tersebut diklik, maka akan tampil grafik IP untuk setiap semesternya

OK.. paham ya skenarionya? Nah.. selanjutnya kita mulai rancang tabel-tabel dan field yang diperlukan untuk databasenya. Pada prinsipnya, struktur tabelnya sama seperti di artikel sebelumnya. Terdapat 3 tabel yang kita perlukan untuk studi kasus ini, yaitu mhs (tabel mahasiswa), mk (tabel matakuliah) dan ambilmk (tabel pengambilan matakuliah) view sourceprint?
1.CREATE TABLE mhs ( 2.nim varchar(5), 3.nama varchar(20), 4.PRIMARY KEY (nim) 5.)

view sourceprint?
1.CREATE TABLE mk ( 2.kodeMK varchar(5), 3.namaMK varchar(20), 4.sks int(11), 5.PRIMARY KEY (kodeMK) 6.)

view sourceprint?
1.CREATE TABLE ambilmk ( 2.nim varchar(5), 3.kodeMK varchar(5), 4.nilai float, 5.smt varchar(10) default NULL, 6.tahun varchar(9) default NULL, 7.PRIMARY KEY (nim,kodeMK) 8.)

Hmm alangkah baiknya jika Anda menggunakan tipe tabel InnoDB untuk merancang tabeltabel di atas supaya terdapat referential integration di antara setiap datanya. Sedangkan untuk sampel recordnya, kita gunakan data seperti di bawah ini

view sourceprint?
1.INSERT INTO mhs VALUES ('M002', 'DWI AMALIA FITRIANI'); 2.INSERT INTO mhs VALUES ('M003', 'FAZA FAUZAN');

view sourceprint?
1.INSERT 2.INSERT 3.INSERT 4.INSERT 5.INSERT INTO INTO INTO INTO INTO mk mk mk mk mk VALUES ('MK01', VALUES ('MK02', VALUES ('MK03', VALUES ('MK04', VALUES ('MK05', 'DATABASE', 3); 'PEMROGRAMAN DASAR', 2); 'PEMROGRAMAN WEB', 4); 'OOP', 3); 'PEMROGRAMAN VISUAL', 3); 'MK01', 'MK02', 'MK03', 'MK04', 'MK05', 'MK01', 'MK02', 'MK03', 'MK04', 'MK05', 3, 2, 2, 2, 4, 2, 3, 3, 2, 3, 'GANJIL', '2008/2009'); 'GANJIL', '2008/2009'); 'GENAP', '2008/2009'); 'GENAP', '2008/2009'); 'GANJIL', '2009/2010'); 'GANJIL', '2008/2009'); 'GANJIL', '2008/2009'); 'GENAP', '2008/2009'); 'GENAP', '2008/2009'); 'GANJIL', '2009/2010');

view sourceprint?
01.INSERT 02.INSERT 03.INSERT 04.INSERT 05.INSERT 06.INSERT 07.INSERT 08.INSERT 09.INSERT 10.INSERT INTO INTO INTO INTO INTO INTO INTO INTO INTO INTO ambilmk ambilmk ambilmk ambilmk ambilmk ambilmk ambilmk ambilmk ambilmk ambilmk VALUES ('M002', VALUES ('M002', VALUES ('M002', VALUES ('M002', VALUES ('M002', VALUES ('M003', VALUES ('M003', VALUES ('M003', VALUES ('M003', VALUES ('M003',

OK.. tabel dan sampel record sudah ready, selanjutnya kita mulai membuat script untuk menampilkan list mahasiswanya terlebih dahulu. mhs.php view sourceprint?
01.<?php 02. 03.mysql_connect("dbhost", "dbuser", "dbpass"); 04.mysql_select_db("dbname"); 05. 06.echo "<h1>Data Mahasiswa</h1>"; 07. 08.$query = "SELECT * FROM mhs"; 09.$hasil = mysql_query($query); 10. 11.echo "<table border='1'>"; 12.echo "<tr><th>NIM</th><th>Nama Mhs</th><th>Statistik IP</th></tr>"; 13.while ($data = mysql_fetch_array($hasil)) 14.{ 15.echo "<tr> 16.<td>".$data['nim']."</td> 17.<td>".$data['nama']."</td> 18.<td><a href='statistik.php?nim=".$data['nim']."'>View</a></td> 19.</tr>"; 20.} 21. 22.echo "</table>"; 23. 24.?>

Perhatikan script mhs.php di atas! Untuk menampilkan list mahasiswa kita cukup membuat query SQL yang memanfaatkan tabel mhs. Kemudian di setiap baris data mahasiswa dalam tabel, kita buat link VIEW yang diarahkan ke script statistik.php. Link ke script ini kita sertakan parameter ?nim= karena NIM ini nanti digunakan sebagai acuan untuk membuat grafik IP si mahasiswa yang memiliki NIM tersebut. Hasil dari script mhs.php ini tampak seperti pada gambar pertama di atas. Selanjutnya kita membuat script statistik.php nya statistik.php view sourceprint?
01.<?php 02. 03.mysql_connect("dbhost", "dbuser", "dbpass"); 04.mysql_select_db("dbname"); 05. 06.// membaca nim dari parameter 07.$nim = $_GET['nim']; 08. 09.// query untuk menampilkan NIM dan Nama Mahasiswa berdasarkan NIM 10.$query = "SELECT * FROM mhs WHERE nim = '$nim'"; 11.$hasil = mysql_query($query); 12.$data = mysql_fetch_array($hasil); 13. 14.echo "<h1>Statistik Indeks Prestasi</h1>"; 15. 16.echo "<table>"; 17.echo "<tr><td>NIM</td><td>:</td><td>".$data['nim']."</td></tr>"; 18.echo "<tr><td>Nama Mhs</td><td>:</td><td>".$data['nama']."</td></tr>"; 19.echo "</table>"; 20. 21.// menampilkan image grafik IP dari mahasiswa berdasarkan NIM 22.echo "<img src='stat.php?nim=".$nim."'>"; 23. 24.?>

Script statistik.php di atas pada prinsipnya adalah menggabungkan antara informasi si mahasiswa (NIM dan Nama) dengan grafik IP nya. Untuk menampilkan informasi si mahasiswa, cukup kita buat query SQL SELECT * FROM mhs WHERE nim = '$nim', dan grafiknya kita embed menggunakan tag <img src='stat.php?nim=".$nim."'>. Script stat.php adalah script untuk membuat grafiknya. Mengapa dalam tag <img> ini perlu ada parameter ?nim= nya? Ya karena NIM itu nanti juga digunakan untuk acuan dalam membuat script grafik IP dari mahasiswa tersebut. Mungkin Anda bertanya, mengapa tidak dijadikan satu saja antara script untuk menampilkan informasi mahasiswa dengan script untuk grafiknya? He.. 3x jawabannya adalah tidak bisa. Karena script stat.php ini akan menghasilkan output berupa image. Sedangkan informasi mahasiswanya (statistik.php) outputnya berupa dokumen HTML sehingga keduanya tidak bisa

langsung dipadukan menjadi satu. Solusinya adalah mengembed script grafiknya ke dalam script dokumen HTML menggunakan tag <img src="...">. Trus kita akan membuat script grafiknya. Untuk grafik, kita akan menggunakan JpGraph karena free and mudah digunakan Mau menggunakan Open Flash Chart nya yang digunakan KPU, gak jadi, coz its very ribet Ane pengin yang simpel-simpel aja deh. Untuk grafiknya, seperti yang kita lihat pada sampel di atas, akan kita pilih grafik yang merupakan gabungan dalam bentuk batang (bar chart) dan garis (line chart). stat.php view sourceprint?
01.<?php 02. 03.mysql_connect("dbhost", "dbuser", "dbpass"); 04.mysql_select_db("dbname"); 05. 06.// membaca parameter NIM dari <img src="stat.php?nim=..."> 07.$nim = $_GET['nim']; 08. 09.// menyiapkan array untuk menyimpan smt dan tahun 10.$smtThn = array(); 11. 12.// menyiapkan array untuk menyimpan ip 13.$ip = array(); 14. 15.// memanggil modul JpGraph untuk membuat grafik batang dan garis 16.// modul ini terletak dalam folder bernama 'modul' 17.include ("modul/jpgraph.php"); 18.include ("modul/jpgraph_bar.php"); 19.include ("modul/jpgraph_line.php"); 20. 21.// query sql untuk mendapatkan IP setiap semester dari mahasiswa 22.$query = "SELECT smt, tahun, sum(nilai * sks)/sum(sks) as ip 23.FROM ambilmk, mk 24.WHERE ambilmk.kodemk = mk.kodemk AND ambilmk.nim = '$nim' 25.GROUP BY tahun, smt"; 26. 27.$hasil = mysql_query($query); 28.while ($data = mysql_fetch_array($hasil)) 29.{ 30.// menyimpan data semester dan tahun hasil query ke dalam array $smtThn 31.// smt dan tahun digabung dalam satu string untuk ditampilkan dalam sumbuy grafik 32.array_unshift($smtThn, $data['smt']." ".$data['tahun']); 33. 34.// menyimpan data IP hasil query ke dalam array $ip 35.array_unshift($ip, $data['ip']); 36.} 37.

38.// membuat image ukuran 500 x 300 pixel 39.$graph = new Graph(500,300,"auto"); 40. 41.// membuat skala grafik. Nilai 4 di sini adalah nilai maksimum sumbu Y nya, mengingat IP maks adalah 4 42.$graph->SetScale("textlin", 1, 4); 43. 44.// membuat bayangan dari image 45.$graph->SetShadow(); 46. 47.// mengatur batas margin grafik 48.$graph->SetMargin(50,50,40,40); 49. 50.// membuat bar plot dari data IP 51.$barplot = new BarPlot($ip); 52. 53.// membuat line plot dari data IP 54.$lineplot=new LinePlot($ip); 55. 56.// memberi warna merah pada bar plot 57.$barplot->SetFillColor("red"); 58. 59.// menampilkan value IP pada setiap bar 60.$barplot->value->show(); 61. 62.// mengatur tampilan value IP dengan format 1 digit desimal di belakang koma 63.$barplot ->value->SetFormat("%3.1f"); 64. 65.// mengatur ketebalan garis pada lineplot 66.$lineplot->SetWeight(3); 67. 68.// mengatur posisi ujung line plot supaya terletak di tengah-tengah bar 69.$lineplot->SetBarCenter(); 70. 71.// menampilkan barplot ke dalam image 72.$graph->Add($barplot); 73. 74.// menampilkan lineplot ke dalam image 75.$graph->Add($lineplot); 76. 77.// menampilkan smt dan tahun pada sumbu X 78.$graph->xaxis-> SetTickLabels($smtThn); 79. 80.// menampilkan title grafik 81.$graph->title->Set("Grafik Indeks Prestasi Mahasiswa"); 82. 83.// memberi label pada sumbu X 84.$graph->xaxis->title->Set("Semester"); 85. 86.// memberi label pada sumbu Y 87.$graph->yaxis->title->Set("Indeks Prestasi (IP)");

88. 89.// mengatur jenis font pada title, label sumbu X dan label sumbu Y 90.$graph->title->SetFont(FF_FONT1,FS_BOLD); 91.$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD); 92.$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD); 93. 94.// menampilkan output grafik 95.$graph->Stroke(); 96.?>

Catatan: Query SQL untuk menghasilkan data IP setiap semester dari mahasiswa untuk ditampilkan ke dalam grafik, sama dengan query SQL yang pernah dibahas pada artikel sebelumnya. Jika Anda ingin mendapatkan script di atas sekaligus modul JpGraph nya, maka dapat didownload di bawah ini.

[ Download Script ]
Selamat mencoba ya. Mudah-mudahan artikel ini bermanfaat bagi Anda semuanya baik yang sedang belajar, maupun yang sedang mendapat project membuat sistem informasi akademik Kalau sedang dapat project, jangan lupa bagi-bagi ya

Script PHP Updating Data Secara Simultan (Studi Kasus Update Nilai Kuliah Mahasiswa)
May 18th, 2009 | by rosihanari | Cetak Artikel Ini

Setelah beberapa waktu yang lalu saya memposting artikel tentang cara hapus data secara simultan dengan teknik multi selection dan insert data secara simultan menggunakan komponen checkbox, kali ini saya akan coba memposting artikel bagaimana proses update data secara simultan. Ada seorang member saya, mas Christ, menanyakan sebuah kasus. Dalam kasusnya diceritakan bahwa ia ingin membuat aplikasi untuk keperluan update nilai siswa. Namun dia tidak ingin proses update nilainya satu-persatu, namun bisa secara simultan sekaligus. Proses ini terjadi ketika dalam proses entri nilai mata pelajaran. Perlu diketahui bahwa ketika siswa mengambil pelajaran, terlebih dahulu data siswa dan mata pelajaran yang diikutinya disimpan ke dalam database, namun belum ada nilainya (nilainya 0). Begitu nilai sudah ada dan ingin diinputkan, maka proses updatelah yang terjadi. Nah saudara Christ ini menghendaki proses updatenya bisa dilakukan sekaligus secara simultan dan tidak satu-satu. Kalau satu-satu jadi repot, apalagi kalau jumlah siswanya banyak. So dalam artikel ini akan dibahas teknik atau ide untuk membuat aplikasi seperti yang dimaksud oleh member saya tersebut, namun dengan sedikit modifikasi dalam kasusnya. Kali ini saya ambil kasus proses update nilai kuliah mahasiswa. Ya supaya lebih mudah saja saya memahaminya, karena saya orang kampus kalee Nggak kok just kidding, saya pilih kasus ini karena dalam komputer saya sudah ada tabel dan data terkait dengan hal ini. Jadi gak perlu repot-repot bikin tabel dan data baru. Tapi yang jelas konsepnya sama seperti yang diinginkan mas Christ kok. Untuk keperluan pembahasannya dalam studi kasus ini, kita siapkan terlebih dahulu tabel dan datanya view sourceprint?
1.CREATE TABLE mhs ( 2.nim varchar(10),

3.namamhs varchar(30), 4.alamat text, 5.sex varchar(10), 6.PRIMARY KEY(nim) 7.);

view sourceprint?
1.CREATE TABLE mk ( 2.kodemk varchar(5), 3.namamk varchar(20), 4.sks int(11), 5.smt int(11), 6.PRIMARY KEY(kodemk) 7.);

view sourceprint?
1.CREATE TABLE ambilmk ( 2.nim varchar(10), 3.kodemk varchar(5), 4.nilai float, 5.PRIMARY KEY(nim,kodemk) 6.);

view sourceprint?
1.INSERT 2.INSERT 3.INSERT 4.INSERT 5.INSERT INTO INTO INTO INTO INTO mhs mhs mhs mhs mhs VALUES ('M0197001', VALUES ('M0197002', VALUES ('M0197003', VALUES ('M0197004', VALUES ('M0197005', 'ROSIHAN ARI YUANA', 'COLOMADU', 'L'); 'DWI AMALIA FITRIANI', 'KUDUS', 'P'); 'FAZA FAUZAN KH.', 'COLOMADU', 'L'); 'NADA HASANAH', 'COLOMADU', 'P'); 'MUH. AHSANI TAQWIM', 'COLOMADU', 'L');

view sourceprint?
1.INSERT INTO mk VALUES ('K001', 'KALKULUS II', 3, 4); 2.INSERT INTO mk VALUES ('K004', 'NUMERIK', 3, 4);

view sourceprint?
1.INSERT 2.INSERT 3.INSERT 4.INSERT 5.INSERT INTO INTO INTO INTO INTO ambilmk ambilmk ambilmk ambilmk ambilmk VALUES ('M0197001', VALUES ('M0197002', VALUES ('M0197003', VALUES ('M0197004', VALUES ('M0197005', 'K001', 'K001', 'K001', 'K001', 'K004', 0); 0); 0); 0); 0);

Perhatikan pada sampel tabel dan data di atas bahwa, misalkan hanya terdapat 2 matakuliah yang ada (Kalkulus II dan Numerik). Sedangkan mahasiswa yang mengambil Kalkulus II ada 4 orang yaitu yang bernim M0197001 , M0197002 , M0197003 , dan M0197004 . Tampak pula bahwa nilai matakuliah tersebut untuk keempat mahasiswa adalah masih 0 (belum diinputkan nilainya). Selanjutnya kita coba desain skenario untuk proses update nilai secara simultan ini. Skenario pertama adalah memilih nama matakuliah yang akan kita update nilainya (lihat gambar di bawah ini)

Setelah dipilih nama matakuliah, akan muncul daftar form nilai untuk semua mahasiswa yang mengambil matakuliah tersebut. Nah.. di form inilah kita kan lakukan proses entri nilai atau edit nilai untuk mahasiswanya.

Contoh tampilan di atas menggambarkan proses update nilai mahasiswa yang mengambil Kalkulus II OK.. skenario sudah, berikutnya kita mulai buat aplikasinya. Pertama kita buat form untuk memilih nama matakuliahnya terlebih dahulu. formnilai.php view sourceprint?
01.<?php 02.// koneksi ke mysql 03.mysql_connect("dbhost", "dbuser", "dbpass"); 04.mysql_select_db("dbname"); 05.?> 06. 07.<form method="post" action="submit.php"> 08.Pilih Mata Kuliah : 09.<select name="mk"> 10.<?php 11.// query untuk menampilkan semua matakuliah dari tabel 'mk' 12.$query = "SELECT * FROM mk";

13.$hasil = mysql_query($query); 14.while ($data = mysql_fetch_array($hasil)) 15.{ 16.echo "<option value='".$data['kodemk']."'>".$data['namamk']."</option>"; 17.} 18.?> 19.<input type="submit" value="Submit" name="submit" /> 20.</select> 21.</form>

Keterangan: Nilai yang disubmit oleh form di atas menuju submit.php adalah kode matakuliahnya. Selanjutnya kita buat script submit.php. Script ini nanti akan memunculkan form update nilai untuk semua mahasiswa yang mengambil matakuliah yang dipilih dari formnilai.php submit.php view sourceprint?
01.<h1>Update Nilai</h1> 02. 03.<form method="post" action="update.php"> 04.<table border="1"> 05.<tr><td>No</td><td>NIM</td><td>Nilai</td></tr> 06. 07.<?php 08.mysql_connect("dbhost", "dbuser", "dbpass"); 09.mysql_select_db("dbname"); 10. 11.// membaca kode matakuliah yang disubmit dari formnilai.php 12.$kodeMK = $_POST['mk']; 13. 14.// menampilkan data nim dan nilai mahasiswa yang mengambil matakuliah berdasarkan kode MK 15.$query = "SELECT nim, nilai FROM ambilmk WHERE kodemk = '$kodeMK'"; 16. 17.$hasil = mysql_query($query); 18. 19.// inisialisasi counter 20.$i = 1; 21.while ($data = mysql_fetch_array($hasil)) 22.{ 23.echo "<tr><td>".$i."</td><td>".$data['nim']."</td><td><input type='hidden' name='mhs".$i."' value='".$data['nim']."' /> 24.<input type='text' name='nilai".$i."' value='".$data['nilai']."' /></td></tr>"; 25.$i++; 26.} 27.$jumMhs = $i-1; 28.?> 29.</table><br /> 30.<input type="hidden" name="n" value="<?php echo $jumMhs ?>" />

31.<input type="hidden" name="kodemk" value="<?php echo $kodeMK;?>"> 32.<input type="submit" value="Update" name="submit" /> 33.</form>

Keterangan: Perintah <input type=hidden name=mhs.$i. value=.$data['nim']. /> digunakan untuk membuat komponen hidden yang berisi nim mahasiswa yang mengambil matakuliah tersebut. NIM ini nantinya akan ikut disubmit ketika proses updating nilai. Mengapa NIM perlu disubmit ketika proses updating nilai? ya karena NIM akan diperlukan dalam query SQL update nilai yang berbentuk view sourceprint?
1.UPDATE ambilmk SET nilai = ... WHERE nim = ... AND kodemk = ...

Query SQL di atas nanti akan diletakkan dalam script update.php Dalam script di atas terdapat pula perintah <input type=hidden name=n value=<?php echo $jumMhs ?> />. Nilai n ini nanti akan ikut disubmit untuk proses looping dalam membaca semua nilai dan NIM yang berasal dari form sekaligus menjalankan query SQL update data. Proses pembacaan dan menjalankan query update data ini dilakukan sebanyak n kali (sebanyak jumlah mahasiswa yang mengambil). Terakhir kita buat script update.php nya update.php view sourceprint?
01.<?php 02.mysql_connect("dbhost", "dbuser", "dbpass"); 03.mysql_select_db("dbname"); 04. 05.// membaca jumlah mahasiswa (n) dari submit.php 06.$jumMhs = $_POST['n']; 07. 08.// membaca kode MK yang akan diupdate 09.$kodeMK = $_POST['kodemk']; 10. 11.// proses looping untuk membaca nilai dan nim mahasiswa dari form, serta menjalankan query update 12.for ($i=1; $i<=$n; $i++) 13.{ 14.// membaca nim mahasiswa ke-i, i = 1, 2, 3, ..., n 15.$nimMhs = $_POST['mhs'.$i]; 16. 17.// membaca nilai mahasiswa ke-i, i = 1, 2, 3, ..., n 18.$nilai = $_POST['nilai'.$i]; 19. 20.// update nilai mahasiswa ke-i, i = 1, 2, 3, ..., n

21.$query = "UPDATE ambilmk SET nilai = $nilai WHERE nim = '$nimMhs' AND kodemk = '$kodeMK'"; 22.mysql_query($query); 23.} 24. 25.echo "<h2>Update nilai sukses</h2>"; 26. 27.?>

Nah mudah dan simpel bukan membuatnya? Dalam kasus yang nyata, tentu struktur tabel dan datanya tidak sesimpel yang saya bahas di atas namun kemungkinan jauh lebih kompleks. Di sini saya hanya memberikan ide dan konsep dasarnya saja untuk proses update data secara simultan. Untuk selanjutnya silakan Anda kembangkan sendiri sesuai kasus yang Anda hadapi masing-masing. OK?

Perintah SQL Menampilkan Nilai Matakuliah Terbaik (Studi Kasus Akademik)


April 25th, 2009 | by rosihanari | Cetak Artikel Ini

Sebuah sistem informasi akademik seharusnya merekam atau mencatat semua track record akademik mahasiswanya secara lengkap detail dan lengkap. Proses pencatatan ini harus dilakukan secara kontinyu tiap semester. Sistem informasi akademik tidak lepas dengan pencatatan nilai semua mahasiswanya. Dalam pencatatan nilai ini, terkadang ada banyak mahasiswa yang mengambil sebuah matakuliah lebih dari sekali. Yah itu wajar mengingat tidak semua matakuliah itu mudah, sehingga butuh beberapa kali pengambilan matakuliah yang sama sampai mencapai nilai yang baik. Sebagai contoh misalkan ada mahasiswa A dia mengambil matakuliah X pada semester 1. Karena si A ini anaknya malas belajar, maka nilai matakuliah X nya jelek sekali yaitu 1.0 (D). Nah semester 3, si A ini kembali lagi mengambil matakuliah X. Namun dengan usahanya kali ini dia hanya mendapatkan nilai 2.0 (C). Karena matakuliah itu sebenarnya menyenangkan, maka si A ingin mengambil lagi matakuliah X di semester 5. Nah.. karena usahanya dalam belajar tinggi, maka akhirnya ia mendapat nilai 4.0 (A). Nah dalam sistem informasi akademik harus dapat mencatat semua track record mahasiswa A di atas dalam pengambilan matakuliah X nya, mulai dari semester 1, 3, dan 5. Selanjutnya ketika si A akan lulus kuliah, maka sistem informasi akademik akan mencetak semua hasil studinya (transkrip nilai). Untuk kasus di atas (pengambilan matakuliah X), harusnya sistem informasi akademik hanya akan menampilkan hasil yang terbaik, yaitu nilai 4.0 (A) pada matakuliah X nya. Yang menjadi pertanyaan adalah, Bagaimana membuat query SQL untuk menampilkan daftar matakuliah yang telah diikuti mahasiswa beserta hasilnya, dengan ketentuan jika ada sebuah matakuliah yang diikuti beberapa kali maka hanya akan ditampilkan sekali yaitu yang memiliki nilai terbaik saja. Pertanyaan inilah yang akan dibahas pada artikel kali ini.

OK.. untuk membahasnya, ada baiknya kita sajikan terlebih dahulu data-datanya. Dalam kasus ini misalkan terdapat 3 buah tabel yaitu mhs, mk dan ambilmk. Tabel mhs digunakan untuk menyimpan data mahasiswa, mk untuk menyimpan data matakuliah-matakuliah, dan ambilmk untuk menyimpan data pengambilan matakuliah oleh mahasiswa beserta nilainya. view sourceprint?
1.CREATE TABLE mhs ( 2.nim varchar(10), 3.namamhs varchar(30), 4.alamat text, 5.sex varchar(10), 6.PRIMARY KEY (nim) 7.);

view sourceprint?
1.INSERT 2.INSERT 3.INSERT 4.INSERT 5.INSERT INTO INTO INTO INTO INTO mhs mhs mhs mhs mhs VALUES ('M0197001', VALUES ('M0197002', VALUES ('M0197003', VALUES ('M0197004', VALUES ('M0197005', 'ROSIHAN ARI YUANA', 'COLOMADU', 'L'); 'DWI AMALIA FITRIANI', 'KUDUS', 'P'); 'FAZA FAUZAN KH.', 'COLOMADU', 'L'); 'NADA HASANAH', 'COLOMADU', 'P'); 'MUH. AHSANI TAQWIM', 'COLOMADU', 'L');

view sourceprint?
1.CREATE TABLE mk ( 2.kodemk varchar(5), 3.namamk varchar(20), 4.sks int(11), 5.smt int(11), 6.PRIMARY KEY (kodemk) 7.) ;

view sourceprint?
1.INSERT 2.INSERT 3.INSERT 4.INSERT INTO INTO INTO INTO mk mk mk mk VALUES ('K001', VALUES ('K002', VALUES ('K003', VALUES ('K004', 'KALKULUS I', 3, 1); 'KALKULUS II', 3, 2); 'GEOMETRI', 2, 1); 'NUMERIK', 3, 2);

view sourceprint?
1.CREATE TABLE ambilmk ( 2.nim varchar(10), 3.kodemk varchar(5), 4.smt varchar(6), 5.thajaran varchar(9), 6.nilai float, 7.PRIMARY KEY (nim, kodemk, smt, thajaran) 8.);

view sourceprint?
1.INSERT 2.INSERT 3.INSERT 4.INSERT 5.INSERT 6.INSERT 7.INSERT INTO INTO INTO INTO INTO INTO INTO ambilmk ambilmk ambilmk ambilmk ambilmk ambilmk ambilmk VALUES ('M0197001', VALUES ('M0197001', VALUES ('M0197001', VALUES ('M0197002', VALUES ('M0197002', VALUES ('M0197001', VALUES ('M0197001', 'K001', 'K002', 'K003', 'K001', 'K002', 'K001', 'K001', 'GANJIL', 'GANJIL', 'GANJIL', 'GANJIL', 'GANJIL', 'GANJIL', 'GANJIL', '2007/2008', '2007/2008', '2007/2008', '2007/2008', '2007/2008', '2008/2009', '2009/2010', 1); 2); 3); 2); 3); 2); 4);

Dari data pengambilan matakuliah di atas tampak bahwa mahasiswa bernim M0197001 mengambil matakuliah berkode K001 beberapa kali, tepatnya 3 kali. Pengambilan pertama dia mendapat 1.0, kedua 2.0 dan ketiga mendapat 4.0.

Sekarang bagaimana cara menulis query SQL untuk menampilkan semua matakuliah yang telah diikuti mahasiswa bernim M0197001 ini? OK misalkan kita gunakan query seperti berikut ini view sourceprint?
1.SELECT nim, kodemk, nilai 2.FROM ambilmk 3.WHERE nim = 'M0197001';

Hasil query di atas adalah

Jika Anda gunakan query di atas maka akan tampak semua matakuliah yang telah diikuti mahasiswa tersebut. Dalam hasil yang diperoleh akan tampak bahwa matakuliah K001 muncul sebanyak 3 kali dengan nilainya masing-masing. Sehingga penggunaan query di atas belum menampilkan hasil pengambilan matakuliah K001 secara tunggal dengan nilai tertinggi. Hmm yang nilainya tertinggi yah OK.. berarti kita harus gunakan function MAX(nilai). Tapi eit tunggu dulu! Nilai tertinggi di sini bukan nilai nilai tertinggi secara umum dari semua matakuliah yang diambil tapi nilai tertinggi dari matakuliah yang sama yang pernah diambilnya. Oleh karena itu dalam query SQL yang kita buat ini nanti harus ada GROUP BY kodemk view sourceprint?
1.SELECT nim, kodemk, max(nilai) 2.FROM ambilmk 3.WHERE nim = 'M0197001' 4.GROUP BY kodemk;

Hasil query di atas adalah

Yes. sudah lebih baik sekarang. Dari hasil di atas tampak bahwa untuk nilai K001 sudah muncul hanya sebuah dengan nilai yang tertinggi. OK.. next bagaimana jika kita ingin menampilkan nama masing-masing matakuliahnya dan juga SKS nya? Hmm.. ya berarti kita harus relasikan tabel ambilmk dengan mk.

view sourceprint?
1.SELECT ambilmk.nim, ambilmk.kodemk, mk.namamk, mk.sks, MAX(ambilmk.nilai) 2.FROM ambilmk, mk 3.WHERE ambilmk.kodemk = mk.kodemk AND ambilmk.nim = 'M0197001' 4.GROUP BY ambilmk.kodemk;

Hasil query di atas adalah

He..3x mudah bukan membuat query SQL nya. Nah mudah-mudahan artikel ini bisa membantu Anda yang sedang membuat sistem informasi akademik.

Membuat Sendiri Kirim SMS Gratis Via Web dengan PHP dan MySQL
December 8th, 2010 | by rosihanari | Cetak Artikel Ini

Masih terkait dengan SMS gateway, dalam artikel kali ini saya akan mencoba memaparkan cara membuat sendiri aplikasi kirim SMS gratis via web. Permintaan untuk membuat artikel dengan topik ini sudah banyak masuk ke email saya maupun komentar dalam blog ini. Namun, mohon maaf baru kali ini saya bisa mewujudkannya. Untuk membuat fasilitas kirim SMS gratis via web, kita membutuhkan sebuah aplikasi gateway untuk mengirim SMS. Aplikasi sms gateway ini nanti kita install atau letakkan di pc yang ada di rumah kita beserta modem/hp yang tercolok pada PC tersebut sebagai alat untuk mengirim SMS. PC ini harus senantiasa terhubung ke internet untuk berkomunikasi dengan PC server yang ada di hosting. Sedangkan di dalam hosting, kita buat semacam script form untuk interface user yang ingin mengirim SMS. Untuk aplikasi sms gateway yang diinstall di PC rumah, Anda bisa menggunakan Gammu sebagai enginenya. Pertanyaan yang muncul kemudian adalah bagaimana cara mengkomunikasikan PC server yang ada di hosting dengan PC di rumah, atau dengan kata lain bagaimana mengirim data sms yang disubmit via hosting kemudian bisa sampai di PC rumah lalu mengirimkan sms tersebut via modem/hp? OK konsep dasar atau ide dasar dalam pembuatannya adalah kita menggunakan semacam web service yang dibuat di server hosting untuk komunikasi antara PC rumah dan PC hosting. Web service ini nanti senantiasa akan diakses oleh PC rumah. Melalui web service inilah SMS akan dikirim dari PC hosting ke PC rumah. Lantas, apa bentuk output dari web service ini? Web service disajikan dalam bentuk XML yang isinya adalah bunyi SMS dan nomor tujuan SMS yang akan dikirim. Data XML yang berisi bunyi sms dan nomor tujuan inilah yang nanti akan dibaca oleh PC rumah, lalu mengirimkannya lewat SMS gateway (Gammu). Nah.. sekarang kita menuju implementasi cara pembuatannya.

Langkah pertama, Anda harus sudah menginstall Gammu sebagai tool SMS gateway nya. Pastikan Anda bisa mengirim SMS menggunakan Gammu dan HP/modem yang tercolok di PC Anda. Langkah kedua, buatlah script form untuk mengirim SMS. Script form ini nanti diletakkan di server hosting sms.html view sourceprint?
1.<form method="post" action="kirim.php"> 2.No. Tujuan <input type="text" name="destination"> 3.Isi SMS<br><textarea name="sms"></textarea> 4.</form>

Bila diperhatikan, form kirim SMS di atas nantinya akan disubmit di script kirim.php. Di dalam script kirim.php inilah nomor tujuan dan isi SMS akan disimpan dalam tabel temporary pada database server hosting. Misalkan kita beri nama tabel temporary tersebut adalah outbox. Kita bisa buat tabel outbox ini dengan struktur sbb: view sourceprint?
1.CREATE TABLE `outbox` ( 2.`id` int(11) AUTO_INCREMENT, 3.`destinationNumber` varchar(20), 4.`sms` text, 5.PRIMARY KEY (`id`) 6.)

Field id digunakan sebagai nomor unik penanda setiap SMS yang akan dikirim, field destinationNumber untuk menyimpan nomor tujuan SMS, dan sms untuk menyimpan isi SMS. OK, kita buat script kirim.php nya kirim.php view sourceprint?
01.<?php 02.// koneksi ke mysql server hosting 03.mysql_connect('dbhost', 'dbuser', 'dbpass'); 04.mysql_select_db('dbname'); 05. 06.// baca nomor tujuan dan isi sms dari form 07.$destNumber = $_POST['destination']; 08.$sms = $_POST['sms']; 09. 10.// query insert data sms ke tabel 'outbox' 11.$query = "INSERT INTO outbox (DestinationNumber, TextDecoded, CreatorID) VALUES ('$destNumber', '$sms', 'Gammu')"; 12.mysql_query($query);

13. 14.echo "SMS sudah dikirim..."; 15.?>

Setelah data sms yang dikirim tersimpan dalam tabel outbox, langkah selanjutnya kita buat script web service untuk menyajikan data sms yang tersimpan dalam tabel outbox tersebut ke dalam bentuk dokumen XML. Misalkan kita beri nama script untuk mengenerate XML ini data.php data.php view sourceprint?
01.<?php 02.// koneksi ke mysql server hosting 03.mysql_connect('dbhost', 'dbuser', 'dbpass'); 04.mysql_select_db('dbname'); 05. 06.// membuat header dokumen XML 07.header('Content-Type: text/xml'); 08.echo "<?xml version='1.0'?>"; 09. 10.// membuat root tag untuk data XML 11.echo "<outbox>"; 12. 13.// query untuk membaca seluruh SMS yang ada di tabel outbox 14.$query = "SELECT * FROM outbox ORDER BY id"; 15.$hasil = mysql_query($query); 16.while ($data = mysql_fetch_array($hasil)) 17.{ 18.// representasi data sms 19.echo "<data>"; 20.echo "<id>".$data['id']."</id>"; 21.echo "<destination>".$data['destinationNumber']."</destination>"; 22.echo "<sms>".$data['sms']."</sms>"; 23.echo "</data>"; 24.} 25.echo "</outbox>"; 26.?>

OK ketiga file di atas (sms.html, kirim.php, dan data.php) nanti diletakkan di dalam server hosting. Sampai langkah ini, kita sudah selesai bekerja di level server hosting. Langkah berikutnya adalah membuat script di sisi PC rumah. Di dalam PC rumah, nantinya kita akan membuat script untuk membaca data sms yang tersaji dalam bentuk XML yang digenerate melalui script data.php yang ada di server hosting. Setelah data sms ini dibaca, kemudian kita masukkan ke dalam tabel outbox bawaannya Gammu untuk dikirim melalui hp/modem. Oya, kita perlu juga menghapus setiap data sms di server hosting yang sudah dibaca. Mengapa hal ini dilakukan? ya dong, supaya tabel outbox nya di server hosting tidak penuh. Lantas, bagaimana cara menghapus data secara otomatis di server hosting setelah data sms nya terbaca? ya kita gunakan CURL.

OK ini dia script untuk membaca data sms dari XML nya. bacasms.php view sourceprint?
01.<?php 02.// koneksi ke mysql di server localhost 03.mysql_connect('dbhost', 'dbuser', 'dbpass'); 04.// nama database Gammu yang ada di localhost 05.mysql_select_db('dbname'); 06. 07.// baca data XML dari server hosting yang digenerate oleh data.php 08.$dataxml = simplexml_load_file('http://namasitus/data.php'); 09.foreach($dataxml->data as $data) 10.{ 11.// baca field ID 12.$id = $data->id; 13.// baca nomor tujuan 14.$destination = $data->destination; 15.// baca isi sms 16.$sms = $data->sms; 17. 18.// mengirim SMS via Gammu dengan insert data ke tabel outbox Gammu 19.$query = "INSERT INTO outbox (DestinationNumber, TextDecoded) VALUES ('$destination', '$sms')"; 20.mysql_query($query); 21. 22.// hapus data SMS di server hosting yang sudah terbaca berdasarkan ID 23.$curlHandle = curl_init(); 24.curl_setopt($curlHandle, CURLOPT_URL, 'http://namasitus/hapus.php'); 25.curl_setopt($curlHandle, CURLOPT_POSTFIELDS, 'id='.$id); 26.curl_setopt($curlHandle, CURLOPT_HEADER, 0); 27.curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, 1); 28.curl_setopt($curlHandle, CURLOPT_TIMEOUT,30); 29.curl_setopt($curlHandle, CURLOPT_POST, 1); 30.curl_exec($curlHandle); 31.curl_close($curlHandle); 32.} 33.?>

Jika web server di PC localhost belum mendukung CURL, maka lakukan setting CURL terlebih dahulu. Eh kalo kita liat pada script bacasms.php di atas, pada proses penghapusan data SMS yang ada di server hosting melalui CURL terdapat pemanggilan script hapus.php. Nah script ini belum kita buat di server hosting. Script hapus.php ini nanti berfungsi untuk menghapus data sms yang ada di tabel outbox dalam database server hosting berdasarkan ID nya setelah data sms tersebut di baca oleh script bacasms.php. hapus.php view sourceprint?

01.<?php 02.// koneksi ke mysql di server hosting 03.mysql_connect('dbhost', 'dbuser', 'dbpass'); 04.mysql_select_db('dbname'); 05. 06.// baca ID data yang akan dihapus yang dikirim via CURL dari localhost 07.$id = $_POST['id']; 08.// hapus data SMS berdasarkan ID 09.$query = "DELETE FROM outbox WHERE id = '$id'"; 10.mysql_query($query); 11. 12.?>

Sekali lagi script hapus.php di atas harus ditaruh di server hosting lho ya !!! Selanjutnya script bacasms.php ini harus senantiasa kita jalankan melalui web browser localhost di PC rumah kita supaya bisa selalu membaca data sms yang ada di hosting lalu mengirimnya via Gammu. Lalu bagaimana supaya script bacasms.php ini bisa secara otomatis berjalan dan selalu bisa membaca data dari server hosting? Sebenarnya Anda bisa mengklik tombol REFRESH pada web browser supaya script ini bekerja, namun tentu hal ini membuat report kan? Nah salah satu solusi dari hal ini adalah Anda bisa menjalankan autorefresh melalui AJAX yang secara otomatis merefresh script bacasms.php ini pada setiap selang n detik. Ini dia script nya index.php view sourceprint?
01.<html> 02.<head> 03.<title>SMS Server Running...</title> 04.<script type="text/javascript"> 05.function ajax() 06.{ 07.if (window.XMLHttpRequest) 08.{ 09.xmlhttp=new XMLHttpRequest(); 10.} 11.else 12.{ 13.xmlhttp =new ActiveXObject("Microsoft.XMLHTTP"); 14.} 15. 16.xmlhttp.onreadystatechange=function() 17.{ 18.if (xmlhttp.readyState==4 &amp;amp;amp;&amp;amp;amp; xmlhttp.status==200) 19.{ 20.} 21.} 22. 23.xmlhttp.open("GET","bacasms.php"); 24.xmlhttp.send(); 25.setTimeout("ajax()", 5000); 26.} 27.</script>

28. 29.</head> 30.<body onload="ajax()"> 31.<h1>SMS Server Running...</h1> 32.</body> 33.</html>

Contoh script AJAX yang ada di index.php di atas diset supaya bisa merefresh secara otomatis bacasms.php dalam interval 5 detik (5000 ms). Dengan demikian yang perlu Anda jalankan di localhost hanyalah script index.php di atas melalui browser. Nah.. konsep di atas memungkinkan kita untuk bisa membangun aplikasi SMS gateway yang terintegrasi antara PC di server hosting dengan PC di rumah tanpa menggunakan IP public yang urusan untuk mendapatkannya sangat ribet dan mahal biayanya, atau tanpa menggunakan VPS maupun dedicated server untuk tipe hostingnya yang juga sangat mahal biayanya. Anda dapat belajar teknik-teknik lain kaitannya dengan SMS gateway yang mengintegrasikan server hosting dengan pc rumah dengan contoh-contoh script SMS gateway yang saya buat untuk belajar. Oya meskipun namanya SMS gratis, tapi tidak sepenuhnya gratis. Istilah Gratis hanya bagi si pengguna atau pengirim SMS melalui web Anda, namun tidak gratis bagi si pemilik web karena harus menyisihkan sedikit biaya untuk bayar pulsa. Tapi tak apalah, anggap saja itu biaya marketing untuk lebih mengenalkan web Anda, apalagi saat ini pulsa sms sangat murah Bisa pula tambahkan string pada setiap SMS yang dikirimkan dengan nama situs Anda untuk lebih memperkuat branding web Anda. Untuk hal ini silakan utak-atik sendiri ya

Easy Gammu Installer (Free Download)


November 22nd, 2010 | by rosihanari | Cetak Artikel Ini

Masih bingung dengan proses instalasi Gammu? Mudah-mudahan mulai sekarang tidak lagi, karena saya telah membuat Gammu Installer (Windows Version) yang mudah. Karena kemudahan itulah, installer ini saya namakan Easy Gammu Installer. Dengan Easy Gammu Installer, mudah-mudahan Anda tidak dipusingkan lagi dengan beberapa macam command yang harus diberikan selama proses instalasi mulai dari cek koneksi PC terhadap modem/hp, membuat konfigurasi SMSDRC, GAMMURC, maupun proses pembuatan service SMS daemonnya. Yang Anda lakukan dengan Easy Gammu Installer hanyalah memasukkan beberapa parameter konfigurasi pada form-form yang disediakan dan tinggal klakklik tombol saja. Mudah bukan? Easy Gammu Installer ini saya buat menggunakan PHP, oleh karena itu untuk menjalankannya melalui web browser dan dibutuhkan web server. Untuk web server Anda bisa menggunakan AppServ atau XAMPP. Easy Gammu Installer ini sudah saya sempurnakan dibandingkan versi pendahulunya, terutama pada tambahan fitur instalasi Gammu dengan multiple modem/hp. Dengan fitur ini, Anda dapat menggunakan Gammu yang terhubung dengan lebih dari satu modem/hp. Namun dalam hal ini, jumlah hp/modem yang bisa terhubung max 4 buah saja. Anda bisa memodifikasi sendiri scriptnya supaya support dengan lebih dari 4 buah hp/modem. Adapun langkah instalasi Easy Gammu Installer nya adalah sebagai berikut:
y

y y

Letakkan folder gammu hasil download ke web direktori. Jika Anda menggunakan XAMPP, maka letakkan di folder htdocs. Sedangkan jika Anda menggunakan AppServ, maka letakkan di folder WWW. Kemudian panggil Easy Gammu Installer nya melalui browser dengan alamat http://localhost/gammu Ikuti langkah demi langkah instalasinya

Berikut ini tampilan menu instalasi Gammu yang disajikan langkah per langkah:

Pada langkah 1, silakan isi nomor port dan jenis connection hp/modem Anda.

Untuk mengetahui nomor port, silakan masuk ke Control Panel System Hardware Device Manager, dan lihat pada bagian PORT. Sedangkan untuk mengetahui jenis connection hp.modem yang Anda gunakan, silakan klik Jenis Connection yang terletak di bawah form Langkah 1.

Anda bisa mengisikan lebih dari satu nomor port dan connection jika Anda ingin menggunakan lebih dari satu hp/modem. Penting !!! Pastikan selama akan menggunakan gammu, hp/modem tidak digunakan untuk koneksi internet atau fungsi yang lain. Selanjutnya, menuju ke Langkah 2 yaitu lakukan test koneksi pada setiap hp/modem yang Anda set sebelumnya pada Langkah 1.

Jika koneksi hp/modem dengan PC baik, maka akan muncul informasi jenis/merek hp/modem yang digunakan. Selanjutnya, jika koneksi ke hp/modem semuanya berjalan dengan baik maka lanjutkan ke Langkah 3 yaitu instalasi database yang diperlukan Gammu untuk bekerja. Masukkan username, password MySQL serta nama database yang akan dibuat.

Langkah berikutnya adalah mensetting konfigurasi SMSDRC yang diperlukan Gammu SMS Daemon untuk bekerja. Isikan nomor port dan jenis connectionnya seperti yang Anda lakukan pada Langkah 1, dan juga isikan pula nama identitas untuk hp/modem Anda. Nama identitas ini

nanti digunakan untuk menentukan melalui modem/hp mana yang akan digunakan untuk mengirim dan menerima SMS. Masukkan juga username, password, dan nama database MySQL yang telah Anda buat pada Langkah 3.

Setelah SMSDRC selesai disetting, selanjutnya membuat service. Untuk membuat service cukup Anda klik tombol yang ada pada Langkah 5. Dalam hal ini, service gammu hanya akan dibuat sejumlah hp/modem yang Anda tentukan. Jika service gammu sudah dibuat, maka Anda bisa menjalankan servicenya (Langkah 6)

Terakhir, setelah service berjalan Anda dapat mengetest pengiriman SMS via Gammu melalui Langkah 7,

serta mengetest penerimaan SMS melalui Langkah 8.

. Easy Gammu Installer di atas telah saya coba dengan baik dengan modem Wavecom Fastrack yang menggunakan connection (at115200). Sedangkan untuk tipe modem/hp yang lain belum saya coba karena tidak mungkin saya test pada semua jenis modem yang ada di pasaran. Oleh karena itu saya harap bantuan rekan-rekan untuk mengetestnya pada HP/modem lain. Silakan share pengalaman Anda mengenai kompatibilitas Easy Gammu Installer ini dengan hp/modem Anda pada komentar di bawah ini dengan menuliskan informasi jenis HP/modem yang Anda gunakan dan juga informasi bisa atau tidaknya digunakan. Beberapa tipe hp/modem kemungkinan hanya bisa cocok untuk gammu versi tertentu saja, oleh karena itu pastikan memilih versi gammu yang cocok dari beberapa versi gammu di atas.

Sebaiknya mulailah mencoba versi gammu 1.25.0 dahulu, jika modem/hp tidak dikenali atau tidak bisa mengirim dan menerima sms, cobalah menggunakan 1.26.0, begitu seterusnya. Setelah Gammu sukses diinstall (SMS bisa dikirim dan diterima dengan baik melalui hp/modem), selanjutnya Anda bisa menggunakannya untuk membangun aplikasi SMS Gateway sendiri. Anda bisa belajar bagaimana membangun aplikasi SMS Gateway dengan contoh-contoh script yang saya tulis pada blog ini, atau dengan mempelajari ebook dan sampel script dari saya.

Membuat Script SMS Flash Dengan Gammu dan PHP


July 27th, 2010 | by rosihanari | Cetak Artikel Ini

Apaan tuh SMS Flash? SMS Flash itu adalah sms yang begitu diterima langsung terbaca isinya. Setelah dibaca, SMS tersebut langsung terhapus secara otomatis dari inbox hp si penerima. Beda dengan SMS biasa, dimana SMS yang diterima tidak langsung terbaca/dibuka dan masih tersimpan di dalam inbox. Nah pada artikel ini, saya akan paparkan ide bagaimana cara membuat SMS flash dengan Gammu, dan pengembangannya bila diintegrasikan dengan script PHP. Script PHP ini nanti akan kita gunakan untuk memproses pengiriman, dimana sebelumnya si pengirim bisa memilih format SMS yang akan dikirim apakah dalam bentuk SMS normal atau SMS flash, seperti fitur free sms yang ada di blog saya ini. Jika kita menggunakan Gammu, secara default SMS yang kita kirim adalah format normal. Bagaimana jika kita ingin mengirim dalam bentuk flash SMS? caranya sangat mudah sekali, yaitu dengan menggunakan query SQL sebagai berikut view sourceprint?
1.INSERT INTO outbox(DestinationNumber, TextDecoded, CreatorID, Class) 2.VALUES ('nohptujuan', 'isi sms', 'Gammu', '0');

dimana DestinationNumber merupakan field yang menunjukkan nomor tujuan sms, TextDecoded adalah field yang menyatakan isi sms, dan Class menunjukkan format SMS. Dalam artikel sebelumnya tentang teknik dasar pengiriman sms gammu, saya pernah mengajarkan cara mengirim sms dengan query view sourceprint?
1.INSERT INTO outbox(DestinationNumber, TextDecoded, CreatorID) 2.VALUES ('nohptujuan', 'isi sms', 'Gammu');

SMS yang dikirim dari query di atas, akan dihasilkan SMS normal, sedangkan untuk Flash SMS cukup ditambahkan nilai 0 pada field Class dalam tabel OUTBOX. Mengapa harus 0 ? Ya

nilai 0 ini menandakan bahwa SMS yang akan dikirim ini dalam bentuk flash SMS. Sedangkan defaultnya adalah -1 yang menandakan SMS normal, sehingga perintah view sourceprint?
1.INSERT INTO outbox(DestinationNumber, TextDecoded, CreatorID) 2.VALUES ('nohptujuan', 'isi sms', 'Gammu');

identik dengan view sourceprint?


1.INSERT INTO outbox(DestinationNumber, TextDecoded, CreatorID, Class) 2.VALUES ('nohptujuan', 'isi sms', 'Gammu', '-1');

Paham ya konsepnya??? OK setelah ide dasarnya sudah saya paparkan, berikutnya akan saya jelaskan cara membuat form untuk pengiriman SMS yang di dalamnya terdapat pilihan atau option untuk format SMS yang akan dikirim apakah dalam bentuk flash SMS atau normal SMS. Pertama, kita siapkan form nya terlebih dahulu sbb sms.php view sourceprint?
01.<h1>Kirim SMS</h1> 02. 03.<form method="post" action="send.php"> 04.Nomor HP Tujuan<br> 05.<input type="text" name="nohp"><br><br> 06.Isi SMS<br> 07.<textarea name="sms"></textarea><br><br> 08.Format SMS<br> 09.<input type="radio" name="format" value="flash"> Flash SMS <br> 10.<input type="radio" name="format" value="normal"> Normal SMS <br><br> 11.<input type="submit" name="submit" value="Kirim SMS"> 12.</form>

Tampilan form yang telah kita buat tersebut adalah sbb:

Perhatikan form di atas, bahwa di situ tersedia 2 buah komponen radiobutton bernama format untuk pilihan format sms nya. Nah.. selanjutnya, kita buat script send.php untuk proses pengirimannya. Karena ada 2 cara pengiriman berdasarkan pilihan si pengirim, maka dalam script send.php ini nanti harus ada pilihan persyaratan yaitu jika yang dipilih adalah flash SMS dan jika yang dipilih normal SMS. Untuk menyatakan persyaratan ini, kita akan menggunakan statement IF dalam PHP. Ini dia scriptnya send.php view sourceprint?
01.<?php 02. 03.// koneksi ke database Gammu 04.mysql_connect("dbhost", "dbuser", "dbpass"); 05.mysql_select_db("dbname"); 06. 07.// baca no tujuan 08.$no_tujuan = $_POST['nohp']; 09. 10.// baca isi sms 11.$isi_sms = $_POST['sms']; 12. 13.// baca format sms 14.$pilih_format = $_POST['format']; 15. 16.if ($pilih_format == "flash") 17.{ 18.// jika format yang dipilih 'flash' 19.

20.// query kirim sms format flash 21.$query = "INSERT INTO outbox(DestinationNumber, TextDecoded, CreatorID, Class) 22.VALUES ('$no_tujuan', '$isi_sms', 'Gammu', '0')"; 23. 24.// jalankan query 25.mysql_query($query); 26.} 27.else if ($pilih_format == "normal") 28.{ 29.// jika format yang dipilih 'normal' 30. 31.// query kirim sms normal 32.$query = "INSERT INTO outbox(DestinationNumber, TextDecoded, CreatorID, Class) 33.VALUES ('$no_tujuan', '$isi_sms', 'Gammu', '-1')"; 34. 35.// jalankan query 36.mysql_query($query); 37.} 38.else echo "Anda belum memilih format SMS"; 39. 40.?>

Nah mudah bukan membuatnya, silakan dikembangkan sendiri ya. Jika masih bingung dengan Gammu, silakan baca artikel tentang panduan dasar gammu yang telah saya buat sebelumnya. Oya, script di atas sudah saya coba dengan baik dan sukses pada AppServ, Gammu 1.25.0 dan modem Wavecom.

Cara Membuat Script PHP Untuk Cek Pulsa Dengan Gammu


April 21st, 2010 | by rosihanari | Cetak Artikel Ini

Banyak sekali pengunjung setia blog ini yang menanyakan bagaimana cara melakukan cek pulsa menggunakan Gammu. Pertanyaannya menarik juga, karena kebanyakan orang mengidentikkan Gammu hanya sebagai tool untuk pengolah SMS Gateway saja. Tapi bisakah Gammu ini digunakan untuk cek pulsa juga? Setelah saya melakukan eksperimen sendiri beberapa waktu yang lalu, dan hasilnya ternyata . BISA OK.. dalam artikel ini saya akan mencoba memaparkan cara melakukan cek pulsa dengan Gammu, baik melalui console (command prompt) maupun menggunakan script PHP. Untuk melakukan cek pulsa dengan menggunakan Gammu melalui console (command prompt), caranya cukup mudah yaitu dengan menggunakan perintah sbb: view sourceprint?
1.gammu getussd nocekpulsa

Sebagai contoh misalkan saya menggunakan kartu XL, maka perintahnya view sourceprint?
1.gammu getussd *123#

Perintah di atas dijalankan setelah Anda masuk ke direktori Gammu nya. Jika setelah Anda berikan perintah tersebut dan ternyata muncul keterangan Press CTRL+C to break tunggulah sebentar karena Gammu sedang merequest perintah cek pulsa tersebut ke operator. Oya sebelum Anda melakukan cek pulsa dengan Gammu, pastikan bahwa konfigurasi di GAMMURC nya sudah tepat, khususnya parameter CONNECTION dan PORT nya. Untuk panduan lengkapnya, silakan baca Cara Setting Gammu.

Berikut ini tampilan yang muncul setelah perintah di atas diberikan

Dari tampilan di atas tampak bahwa pulsa nya masih ada Rp. 2.000,-. Mmm.. tapi kok hasil requestnya rumit gitu ya? ada tulisan USSD Received, Status, Service Reply, dsb belum lagi ada iklan dari XL yang banyak. Padahal inti terpenting dari keterangan tersebut hanyalah jumlah sisa pulsanya saja. Trus bagaimana cara menampilkan hanya besar sisa pulsanya saja? He 3x itu nanti kita lakukan dengan script PHP. Dengan script PHP kita bisa hilangkan beberapa informasi yang kurang berguna. OK.. sekarang kita coba buat script PHP untuk cek pulsa dengan Gammu. Pada prinsipnya caranya sama seperti di atas yaitu dengan menjalankan perintah di console lalu hasilnya dibaca oleh PHP. Di dalam PHP, terdapat function exec() yang digunakan untuk menjalankan perintah dalam console, dan keterangan hasil dari proses tersebut bisa ditangkap kembali oleh PHP untuk ditampilkan via browser. So script PHP untuk cek pulsa dengan Gammu adalah sbb: cekpulsa.php view sourceprint?
01.<?php 02.// jalankan perintah cek pulsa via gammu 03.exec("c:\gammu\gammu -c c:\gammu\gammurc getussd *123#", $hasil); 04. 05.// proses filter hasil output 06.for ($i=0; $i<=count($hasil)-1; $i++) 07.{ 08.if (substr_count($hasil[$i], 'Service reply') > 0) $index = $i; 09.} 10. 11.// menampilkan sisa pulsa 12.echo $hasil[$index]; 13. 14.?>

Keterangan: Script di atas dibuat berdasarkan asumsi bahwa direktori Gammu berada di C:\gammu Perintah view sourceprint?
1.exec("c:\gammu\gammu -c c:\gammu\gammurc getussd *123#", $hasil);

digunakan untuk menjalankan perintah cek pulsa Gammu melalui console. Tapi kok perintahnya beda dengan yang diberikan di atas? Ya khusus untuk perintah console yang dijalankan lewat script PHP ini, path direktorinya harus jelas. Perhatikan pula, bahwa untuk perintah gammu getussd ini perlu ditambahkan path untuk GAMMURC nya (file konfigurasi). Bagaimana bila dihilangkan path GAMMURC nya? dari hasil eksperimen saya, ternyata tidak bisa. Oya, untuk cek pulsa ini, file yang diperlukan adalah GAMMURC, bukan SMSDRC. Setelah perintah di console dijalankan, selanjutnya hasilnya disimpan dalam variabel $hasil. Selanjutnya bagian view sourceprint?
1.for ($i=0; $i<=count($hasil)-1; $i++) 2.{ 3.if (substr_count($hasil[$i], 'Service reply') > 0) $index = $i; 4.}

digunakan untuk memfilter $hasil yang di dalamnya hanya terdapat string Service Reply. Mengapa harus string Service Reply? Perhatikan gambar hasil cek pulsa lewat console di atas. Keterangan jumlah sisa pulsa muncul pada baris output yang didahului dengan string Service Reply. Oleh karena itu kita hanya ambil saja baris output yang terdapat string Service Reply. Oya perlu saya tambahkan pula bahwa hasil dari perintah exec() ini adalah berupa array dimana elemen array nya adalah tergantung jumlah baris outputnya atau dalam hal ini nilai $hasil adalah berupa data array. Trus.. mungkin Anda melihat bahwa pada gambar hasil cek pulsa di atas terdapat 2 buah baris yang di dahului dengan string Service Reply, nah lantas mana yang diambil, karena keterangan sisa pulsanya muncul pada baris Service Reply yang terakhir, maka kita ambil saja index terakhirnya. Sekarang, ini dia tampilan cek pulsa melalui script PHP yang dijalankan via browser.

Script pengecekan pulsa di atas sudah diuji coba dan berjalan dengan lancar di modem Wavecom Fastrack.

Teknik Dasar Mengirim SMS dengan Gammu


October 26th, 2009 | by rosihanari | Cetak Artikel Ini

Pada artikel sebelumnya, saya sudah paparkan bagaimana cara melakukan setting Gammu untuk SMS Gateway yang diintegrasikan dengan MySQL. Jika proses setting ini sudah beres, maka selanjutnya kita bisa bermain-main sepuasnya dengan Gammu. Dalam artikel ini saya akan paparkan bagaimana teknik dasar mengirim SMS dengan Gammu baik dalam bentuk short text maupun long text. Pada bagian akhir nanti kita akan coba membuat script sederhana dengan PHP untuk mengirim pesan SMS ini yang diintegrasikan dengan Gammu melalui sebuah form. OK.. pada dasarnya dengan Gammu kita bisa mengirim pesan SMS dalam 2 cara yaitu dengan menggunakan command inject yang sudah disediakan oleh Gammu, atau cara kedua kita menyisipkan record dengan menggunakan query SQL ke dalam tabel outbox. Bila Anda ingin mengirimkan pesan dengan cara yang kedua ini, terlebih dahulu Anda harus sudah memiliki database sms dan tabel-tabel yang diperlukan oleh Gammu sebagaimana sudah saya jelaskan cara instalasinya pada langkah ke-5 dari artikel sebelumnya. Untuk cara pertama yaitu dengan menggunakan command inject yang disediakan oleh Gammu, caranya adalah masuklah ke folder/direktori Gammu Anda melalui Command Prompt di mana terdapat file bernama gammu-smsd-inject, lalu ketikkan perintah berikut ini kemudian tekan ENTER. view sourceprint?
1.gammu-smsd-inject -c pathtoconfigfile TEXT notujuan -text "pesan"

dengan parameter pathtoconfigfile adalah path direktori file SMSDRC Gammu Anda. Sebagai contoh misalkan akan dikirim pesan SMS ke no. tujuan +62811000001 dengan pesan Hello World, dan file SMSDRC nya terletak di C:\gammu, maka perintahnya view sourceprint?
1.gammu-smsd-inject -c c:\gammu\smsdrc TEXT +62811000001 -text "Hello World"

Keterangan: tanda petik ganda pada command inject digunakan untuk mengapit string pesan yang akan dikirim. Perintah di atas akan mengirimkan pesan SMS dengan maksimum panjang karakternya adalah 160. Lantas, bagaimana jika untuk long text atau dengan panjang yang lebih dari itu? Caranya adalah dengan menggunakan pesan dalam format EMS. view sourceprint?
1.gammu-smsd-inject -c pathtoconfigfile EMS notujuan -text "pesan"

Setelah Anda mengetikkan perintah di atas, maka Gammu akan segera mengirim SMS ke nomor tujuan. Selanjutnya kita gunakan cara kedua, yaitu dengan menyisipkan sebuah record ke dalam tabel outbox. Di dalam tabel outbox Anda akan lihat banyak sekali field, namun yang perlu diperhatikan hanyalah field DestinationNumber dan TextDecoded. Field DestinationNumber itu nanti akan diisi dengan nomor HP tujuan dan TextDecoded diisi dengan pesan SMS yang akan dikirimkan. Contoh: view sourceprint?
1.INSERT INTO outbox(DestinationNumber, TextDecoded, CreatorID) VALUES ('+62811000001', 'Hello World', 'Gammu');

Nah cara ini hanya hanya akan bisa dilakukan bila pesan teks SMS nya maksimal 160 karakter saja. Sedangkan bila lebih dari itu tidak bisa. Meskipun di situs resminya Gammu telah menjelaskan teknik mengirim SMS long text melalui INSERT tabel menggunakan multipart, namun setelah saya coba berkali-kali dan berhari-hari ternyata tidak bisa dilakukan. Sehingga untuk mengirim long text (di atas 160 karakter) sebaiknya gunakan command inject di atas. OK.. sekarang kita akan mencoba membuat script PHP sederhana untuk mengirim pesan SMS yang terintegrasi dengan Gammu ini. Langkah pertama kita buat form untuk mengirim pesan SMS nya terlebih dahulu. view sourceprint?
1.<form method="post" action="send.php"> 2.No. HP Tujuan : <input type="text" name="nohp" value="+62"><br> 3.Pesan : <textarea name="msg"></textarea><br> 4.<input type="submit" name="submit" value="Kirim SMS"> 5.</form>

Langkah kedua, kita buat script php untuk mengirim pesannya.

send.php view sourceprint?


1.<?php 2.$noTujuan = $_POST['nohp']; 3.$message = $_POST['msg']; 4. 5.exec('c:\gammu\gammu-smsd-inject.exe -c c:\gammu\smsdrc EMS '.$noTujuan.' text "'.$message.'"'); 6. 7.?>

Perintah exec() dalam PHP digunakan untuk menjalankan perintah command DOS dalam hal ini adalah perintah command inject nya Gammu. Karena command inject Gammu pada script di atas menggunakan format EMS maka memungkinkan kita mengirim SMS dengan jumlah karakter lebih dari 160 buah. Oya sebelum Anda menjalankan script di atas, pastikan bahwa service Gammu nya telah Anda jalankan, dan HP Anda tercolok ke PC Sekarang bagaimana bila pengiriman SMS dari script di atas menggunakan query INSERT? Ini dia scriptnya. send.php view sourceprint?
01.<?php 02.mysql_connect("dbhost", "dbuser", "dbpass"); 03.mysql_select_db("sms"); 04. 05.$noTujuan = $_POST['nohp']; 06.$message = $_POST['msg']; 07. 08.$query = "INSERT INTO outbox (DestinationNumber, TextDecoded, CreatorID) VALUES ('$noTujuan', '$message', 'Gammu')"; 09.$hasil = mysql_query($query); 10.if ($hasil) echo "SMS berhasil dikirim"; 11.else echo "SMS gagal dikirim"; 12. 13.?>

Teknik pengiriman SMS di atas sudah diuji coba dan berjalan dengan lancar di modem Wavecom Fastrack. Bagaimana mudah bukan membuatnya? Nantikan artikel berikutnya tentang cara pengolahan SMS yang masuk dengan studi kasus autorespon atau autoreply.

Sebagai catatan, baik cara pertama maupun cara kedua, bila pesan SMS sudah terkirim maka secara otomatis akan tersimpan ke dalam tabel sentitems dalam database sms. Update: Oya, satu lagi teknik di atas merupakan teknik pengiriman sms untuk Gammu versi mulai 1.25 sampai dengan terbaru. Untuk versi Gammu di bawah 1.25 kemungkinan ada sedikit perbedaan perintah.

Script PHP Untuk Menjalankan Service Gammu


October 7th, 2010 | by rosihanari | Cetak Artikel Ini

Setelah beberapa hari yang lalu membuat artikel tentang cara membuat script PHP untuk melihat status service gammu, untuk saat ini saya akan mencoba menulis artikel baru tentang cara membuat script PHP untuk menjalankan service gammu. Dengan hanya mengklik sebuah tombol yang muncul di browser, kita bisa menjalankan service gammu dengan cepat, tanpa ribet OK deh, langsung saja yah pada prinsipnya konsep untuk membuat script ini hampir sama dengan script cek pulsa, yaitu menjalankan command gammu. Command gammu yang seharusnya dijalankan melalui command prompt atau console ini, kita jalankan via script PHP menggunakan function passthru(). Apa itu function passthru()? function PHP ini dapat menjalankan command yang seharusnya diberikan melalui console. Selain bisa menjalankan command, function ini juga bisa menampilkan pesan yang muncul setelah command dijalankan. Function ini dapat bekerja di sistem operasi manapun, baik Windows, Linux maupun yang lain. Nah terkait dengan menjalankan service gammu, maka function passthru() ini nanti digunakan untuk mengeksekusi command berikut ini view sourceprint?
1.gammu-smsd -c smsdrc -s

dimana command di atas adalah command untuk menjalankan service gammu. Adapun cara menjalankan command tersebut melalui function passthru() adalah sebagai berikut: view sourceprint?
1.passthru("gammu-smsd -c smsdrc -s");

Catatan: Perintah di atas, diasumsikan bahwa script PHP terletak dalam satu folder yang sama dengan file

gammu. Bagaimana jika path scriptnya berbeda dengan file gammu? Ya.. tinggal diarahkan saja, misalnya view sourceprint?
1.passthru("c:\gammu\gammu-smsd -c smsdrc -s");

jika folder gammu terletak di c:\gammu atau view sourceprint?


1.passthru("d:\gammu\gammu-smsd -c smsdrc -s");

jika folder gammu terletak di d:\gammu Nah berikut ini contoh script PHP untuk menjalankan service gammunya service.php view sourceprint?
01.<?php 02. 03.echo "<h1>Gammu Service</h1>"; 04. 05.if ($_POST['submit']) 06.{ 07.passthru("gammu-smsd -c smsdrc -s"); 08.} 09.else 10.{ 11.echo "<form method='post' action=".$_SERVER['PHP_SELF'].">"; 12.echo "<input type='submit' name='submit' value='Jalankan Service Gammu'>"; 13.echo "</form>"; 14.} 15.?>

Berikut ini tampilan script di atas jika dijalankan di browser

Keterangan: Jika service gammu berhasil dijalankan, maka akan muncul status Service GammuSMSD started successfully, dan kebalikannya jika gagal maka akan muncul Error starting GammuSMSD service Sedangkan script PHP untuk menghentikan service gammu, harap sabar dulu ya baru ditulis artikelnya nih Update: Oya, ada satu lagi tambahan. Mungkin di antara Anda ada yang menjumpai tidak munculnya status setelah tombol untuk menjalankan service atau menghentikan service Gammu diklik. Biasanya hal ini terjadi bagi Anda yang menggunakan OS Windows XP. Hal ini disebabkan adanya file di Windows yang hilang atau corrupt. Nama file tersebut adalah msvcr71.dll. Trus solusinya gimana? apakah harus direinstall Windows nya? he 3x, tidak perlu kawan, cukup Anda download saja file tersebut di situs www.dll-files.com. Kemudian taruh file tersebut di direktori C:\Windows\System32 kemudian restart PC nya.

Script PHP Untuk Menghentikan Service Gammu


October 11th, 2010 | by rosihanari | Cetak Artikel Ini

Baru beberapa hari setelah menulis artikel tentang cara menjalankan service gammu dengan PHP, eh.. sudah diminta menulis lagi untuk menghentikan service gammu nya Its OK brothers. Saya akan berusaha mewujudkannya, selama ada kesempatan. Dan Alhamdulillah saat ini saya ada waktu, dan saya akan menuliskan caranya membuat script PHP untuk menghentikan service gammunya. Well seperti yang sudah saya katakan sebelumnya bahwa, untuk menjalankan dan menghentikan service gammu memang agak sedikit ribet terutama jika Anda menggunakan OS Windows karena harus melalui beberapa langkah. Atau jika Anda menggunakan Linux, maka Anda harus hapal command nya. Nah untuk memudahkan Anda untuk menjalankan dan menghentikan service gammu, kita bisa membuat semacam script yang ditulis dengan bahasa PHP. Pada prinsipnya, membuat script PHP untuk menghentikan service Gammu ini sama dengan menjalankan service Gammu nya, hanya beda di command nya saja. Dalam script yang nanti kita buat ini nanti, kita masih menggunakan function passthru() guna menjalankan command Gammu untuk menghentikan servicenya. Nah sebelum membuat script PHP nya, terlebih dahulu kita harus tahu command Gammu untuk menghentikan servicenya. Bagaimana bentuk command nya? Ini dia view sourceprint?
1.gammu-smsd -k

parameter -k mungkin bermakna kill ya

CMIIW.

OK, command untuk menghentikan servicenya sudah tahu. Sekarang kita bisa buat script PHP nya. Oya, untuk skenarionya, nanti kita buat sebuah tombol untuk proses penghentian servicenya. service-stop.php

view sourceprint?
01.<?php 02. 03.echo "<h1>Gammu Service</h1>"; 04. 05.if ($_POST['submit']) 06.{ 07.// menjalankan command menghentikan service Gammu 08.passthru("gammu-smsd -k"); 09.} 10.else 11.{ 12.// form berisi tombol untuk menghentikan service Gammu 13.echo "<form method='post' action=".$_SERVER['PHP_SELF'].">"; 14.echo "<input type='submit' name='submit' value='Hentikan Service Gammu'>"; 15.echo "</form>"; 16.} 17.?>

Script di atas dibuat dengan asumsi bahwa script service-stop.php tersebut terletak dalam folder Gammu nya. Anda bisa mengubah path command nya seperti pada script menjalankan service Gammu, asal script service-stop.php nya ditempatkan pada folder WWW atau HTDOCS. Berikut ini tampilan script di browser

Jika service gammu berhasil dihentikan, maka akan muncul keterangan Service GammuSMSD stopped sucessfully.

Namun jika gagal, akan muncul status Error stopping GammuSMSD service. Munculnya pesan error ini kemungkinan disebabkan karena sebelumnya servicenya memang sudah berhenti, namun Anda klik tombol untuk menghentikannya kembali. Oya, ada satu lagi tambahan. Mungkin di antara Anda ada yang menjumpai tidak munculnya status setelah tombol untuk menjalankan service atau menghentikan service Gammu diklik.

Biasanya hal ini terjadi bagi Anda yang menggunakan OS Windows XP. Hal ini disebabkan adanya file di Windows yang hilang atau corrupt. Nama file tersebut adalah msvcr71.dll. Trus solusinya gimana? apakah harus direinstall Windows nya? he 3x, tidak perlu kawan, cukup Anda download saja file tersebut di situs www.dll-files.com. Kemudian taruh file tersebut di direktori C:\Windows\System32 kemudian restart PC nya.

Anda mungkin juga menyukai