Pages

12 May, 2009

Export MySQL data ke Excel dengan PHP

Kadang-kadang data yang berada di database akan dicetak atau disimpan dalam format Excel atau spreedsheet. Beberapa aplikasi client database menyediakan fasilitas Export Data, baik ke dalam tabel html, DBF file, maupun Excel File.
Sekarang Kita akan melakukan export data MySQL ke file excel dengam menggunakan aplikasi yang dibuat dengan PHP. Berikut angkah-langkahnya,
Kita buat tabel contoh (id int(5), Nik varchar(8), nama varchar(25)) di dalam database test. lalu kita isi tabel tersebut dengan beberapa data dan kita export data tersebut ke dalam format file Excel.

Langkah pertama adalah melakukan konfigurasi koneksi ke server MySQL:

$host="localhost";
$user="whoami";
$pass="screet";
$db="test";
$conn=mysql_connect($host,$user,$pass) or die(mysql_error()."Koneksi Gagal");
?>

Setelah melakukan koneksi database dan koneksi berhasil, lalu kita buat tabel di atas, jangan lupa gunakan @ pada fungsi mysql_query, tanda @ digunakan untuk menghilangkan komentar error ketika ada kesalahan pembuatan tabel, hal ini dimaksudkan apabila tabel sudah ada, maka program tetap jalan tanpa ada pesan error.
Setelah Tabel selesai dibuat kita isi data tabel tersebut, berikut contoh script untuk membuat tabel dan mengisi datanya:
/* create database */
mysql_select_db($db);
$create="CREATE TABLE contoh (id INT( 5 ) NOT NULL AUTO_INCREMENT ,nik VARCHAR( 8 ) NOT NULL ,nama VARCHAR( 25 ) NOT NULL ,PRIMARY KEY ( id ) ,UNIQUE (nik)) TYPE = innodb";
$kueri_create=@mysql_query($create);
/* selesai create */

/* Insert data */
$insert="INSERT INTO `contoh` ( `id` , `nik` , `nama` )VALUES ('1', '00100001', 'Didik'), ('2', '00100002', 'Kurniawan')";
$kueri_insert=@mysql_query($insert);
?>

Setelah tabel siap dan data sudah ada, sekarang kita akan melakukan proses export data tersebut, berikut scriptnya:
$select = "select * from contoh order by nik";
//die($select);
$export = mysql_query($select);
$fields = mysql_num_fields($export);
for ($i = 0; $i < $fields; $i++) {
$header .= mysql_field_name($export, $i) . "\t";
}
while($row = mysql_fetch_row($export)) {
$line = '';
foreach($row as $value) {
if ((!isset($value)) OR ($value == "")) {
$value = "\t";
} else {
$value = str_replace('"', '""', $value);
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim($line)."\n";
}
$data = str_replace("\r","",$data);
if ($data == "") {
$data = "n(0) Records Found!\n";
}
header("Content-type: application/x-msdownload");
header("Content-Disposition: attachment; filename=contoh.xls");
header("Pragma: no-cache");
header("Expires: 0");
print "$header\n$data";
?>

Selamat mencoba!
Sebagian source diambil dari berbagai sumber

08 May, 2009

Membuat Paging dengan PHP

Bagi programmer pasti sering membuat aplikasi yang menampilkan data. Nah, apabila data yang mau ditampilkan sedikit, itu tidak masalah, tapi bagaimana jika data yang mau ditampilkan jumlahnya puluhan bahkan ratusan maka pengguna akan menghadapi scrool window yang sangat panjang (sampe cape scrool-nya :P) dan loading-nya akan lama. Nah, untuk mengatasi hal ini digunakan satu sistem yang sudah banyak dikenal yaitu Sistem Paging. Sistem Paging adalah sistem dimana menampilkan data-data yang ada secara bertahap, jadi data tidak ditampilkan semua, data dibagi menjadi beberapa halaman dengan masing-masing halaman hanya memiliki beberapa data saja. Kemudian jika halaman tujuan diklik baru data pada halaman tersebut ditampilkan, jadi proses loading yang terjadi tidak lama.
Sistem Paging ini saya jelaskan lebih dikhususkan untuk penggunaan pada Website.
Sekarang saya akan menjelaskan dulu logika dasar dari sistem Paging. Perhatikan table di bawah ini :












Sebagai contoh, kita memiliki 22 record daftar telepon, kemudian ingin kita tampilkan dengan dibagi menjadi beberapa halaman dengan maksimum 5 record per halaman.
Nah, pertama kita cari dulu jumlah halaman yang akan terbentuk :

Jumlah Halaman = Total Record / Maksimum Record tiap halaman
Jumlah Halaman = 22 / 5 = 4.4 Halaman

Ibarat kan saja halaman itu halaman pada buku novel ukuran kertas A4,dimana ada sisa sedikit cerita yang tidak muat lagi untuk ditampilkan di halaman terakhir, mau tak mau kertas musti ditambah satu lagi guna menempatkan sisa cerita yang ada (walaupun hanya menggunakan separo dari ukuran kertas saja. Maka dari itu setiap perhitungan Jumlah Halaman kita akan bulatkan ke atas.

Jumlah Halaman = 22 / 5 = 4.4 = 5 Halaman

Kemudian setelah jumlah halaman didapat, kita lakukan pencetakan nomor halaman (berupa link). Masing-masing halaman/link diberi value kelipatan 5 (jumlah maksimum record per halaman) dimulai dari 0 (karena perhitungan record dari database dimulai dari 0). Jadi pada halaman 1 akan memiliki value 0, halaman 2 memiliki value 5,dst . Dapat dilihat pada table di atas. Value ini akan dipakai sebagai penanda awal record yang akan ditampilkan. Halaman 1 akan dimulai dari record ke-0, halaman 2 dimulai dari record yang ke-5,dst.

Nah,ini logika sistem paging yang saya pikiran. Sekarang saya akan menjelaskan menggunkan coding PHP.

function paging($curRec,$totalRec,$maxRec){
$totalPage=ceil($totalRec/$maxRec);
$curPage=ceil(($curRec+1)/$maxRec);
$str="";

/*--------------------------prev button-----------------------*/
if($curPage>1){
$rec=($curPage-2)*$maxRec;
$str.=’ prev’;
}
/*-------------------------generate page number----------------*/
for($i=1;$i<=$totalPage;$i++){ if($i==$curPage){ $bold=true; }else{ $bold=false; } $rec=($i-1)*$maxRec; $angka=($bold)?””.$i.””:$i;
$str.=’ ’.$angka.’’;
}

/*--------------------------next button-----------------------*/
if($curPage<$totalPage){ $rec=($curPage*$maxRec); $str.=’ next’;
}

return $str;

}

Saya akan jelaskan perbagian.

function paging($curRec,$totalRec,$maxRec){

Disini, Paging saya buat dalam bentuk function , jadi bisa dipakai dengan mudah setiap saat. Paramater yang diterima oleh function paging ini ada 3 yaitu :

1. $curRec = digunakan untuk memberitaukan function record pertama dari halaman yang sedang aktif.
2. $totalRec =berisi total record yang berada di dalam database.
3. $maxRec= berisi informasi maksimum record yang boleh ditampilkan tiap halaman.



$totalPage=ceil($totalRec/$maxRec);

Nah ini untuk mencari total halaman yang akan dibentuk (seperti yang sudah dijelaskan logikanya di atas).


$curPage=ceil(($curRec+1)/$maxRec);

$str="";

Di atas tadi dijelaskan bahwa masing-masing halaman diberi value, nah value itu akan dipakai disini untuk mengetahui halaman yang sedang aktif dengan menggunakan rumus diatas.Untuk rumusnya, jangan tanya kenapa, itu juga saya ketemu sendiri dengan mencari kecocok2an, kalo penasaran coba tes saja. Kemudian sediakan satu variable kosong untuk menyimpan string paging.



/*--------------------------prev button-----------------------*/

if($curPage>1){

$rec=($curPage-2)*$maxRec;

$str.=’ prev’;

}

/*-------------------------generate page number----------------*/

for($i=1;$i<=$totalPage;$i++){ if($i==$curPage){ $bold=true; }else{ $bold=false; } $rec=($i-1)*$maxRec; $angka=($bold)?””.$i.””:$i;

$str.=’ ’.$angka.’’;

}



/*--------------------------next button-----------------------*/

if($curPage<$totalPage){ $rec=($curPage*$maxRec); $str.=’ next’;

}

Nah setelah perhitungan tadi, maka kita sudah bisa mencetak /membuat paging dengan code di atas. Supaya gak bingung dengan code diatas, coba baca code-nya sambil melihat table yang sudah saya kasi diatas. Ini saya sertakan file php-nya supaya lebih jelas. Kalo masih bingung jg, bs hubungi saya ke email, kalo sempat saya balas .

contoh paging (tanpa database)

contoh paging (dengan database)

07 May, 2009

Anomali Pada Windows

benarkah anomali? lagi?

hmm.. pasti bingung, ada apa dengan win$$ kali ini?? silahkan dicoba sendiri yaa, untuk versinya windows XP.. :)

-

-

-

Anomali 1
Anda tidak akan bisa membuat folder dengan nama CON di mana saja. Silahkan dicoba jika tidak percaya.

Anomali 2
Bagi anda pengguna sistem operasi Windows, coba lakukan langkah berikut:

1. Buka Notepad
2. Tulis “Bush hid the facts” (tanpa tanda kutip)
3. Simpan dimana saja
4. Close dan buka lagi.

Anda akan melihat text yang tersimpan tadi menjadi karakter aneh. Silahkan dicoba.
Anomali 3
buka notepad..terus ketikkan “.LOG” (tanpa tanda kutip) dan simpan dengan nama sembarang.lalu buka kembali..tulisan tadi akan berganti menjadi tanggalan dan jam saat anda menulis tadi.

Anomali 4
Dikatakan bahwa ini ditemukan oleh orang Brasil, silahkan dicoba sendiri.
Buka Microsoft Word dan ketik
=rand (100, 99)
Kemudian tekan ENTER , Lihat hasilnya :).

-
gimana? udah di coba belom? bingung?kaget? shock, putus asa? susah buang air besar? *lebay* okei2 gw kasih tau kalo kenapa kok hal itu terjadi diwindows.

-
Anomali 1 : CON Folder
Con adalah salah satu default reserved driver name dalam OS DOS dan Windows, yang tidak dapat digunakan sebagai nama file ataupun folder. Di Windows Nama folder dan Special System Variables berbagi dengan tampilan yang sama, karena itulah ketika anda membuat folder dengan nama System Variable akan dianggap folder tersebut sudah ada.

Karena itulah lw gak akan bisa menamai folder dgn nama berikut ini ( case sensitive)
CON, NUL, COM1, COM2, COM3, LPT1, LPT2, LPT3, COM1 hingga COM9 dan LPT1 hingga LPT9….
CON berarti console , COM1 berarti serial port 1 , LPT1 berarti parallel port 1 , kalo kata orang barat mah gini :

  • CON : Keyboard and display
  • PRN : System list device, usually a parallel port
  • AUX : Auxiliary device, usually a serial port
  • CLOCK$ : System real-time clock
  • NUL : Bit-bucket device
  • A:-Z: : Drive letters
  • COM# : #th serial communications port
  • LPT# : #th parallel printer port

* symbol # untuk sebuah angka
Ini jg berlaku di Linux, dimana hardware resource direpresentasikan layaknya suatu file. Misalnya: /dev/tty, /dev/null dsb. Tapi kita tetep bisa kok bikin folder CON, caranya:
- buka command prompt
- ketik “mkdir \\.\c:\con”
- akses direktori “dir \\.\c:\con”
- hapus direktori “rmdir \\.\c:\con”

Anomali 2 : Notepad “Bush hid the facts”
unsur politik? gak, sama sekali bukan.. ini adalah bugs microsoft yg hampir semua produk nya ada bug.
ketika kalimat “bush hid the facts” disimpan ke sebuah file, notepad menyimpan tanpa masalah. Bisa dibuktikan dengan membuka file tersebut dengan editor lain, misalnya wordpad. Masalah baru muncul waktu file tsb dibuka oleh notepad itu sendiri. Sebelum membuka file itu, notepad berusaha ngedeteksi encoding yg digunakan. Ternyata algoritma deteksi ini keliru jika file yang dimaksud mengandung kalimat dengan pola 4-3-3-5 karakter atau pola “xxxx xxx xxx xxxxx”,sehingga membentuk kode ASCII tertentu. Akibatnya file yg disimpan dalam encoding ANSI tsb malah dibuka dalam encoding UTF-16.

Anomali 3 : Notepad .Log
bugs lagi niy? bukan2 ini emang fasilitas dari microsoft untuk cetak tanggal sekarang.. ini mah pihak perusahaan juga dah tau, ini normal banget :) ,

SUMMARY
Microsoft Notepad is a word processing tool included with Windows and is installed by default under the Accessories program group. You can use it to create a log-type file that adds the current date and time each time the Notepad file is opened. This article describes how to create a log file with Notepad.

MORE INFORMATION
To create a log file in Notepad:
1. Click Start, point to Programs, point to Accessories, and then click Notepad.
2. Type .LOG on the first line, and then press ENTER to move to the next line.
3. On the File menu, click Save As, type a descriptive name for your file in the File name box, and then click OK. When you next open the file, note that the date and time have been appended to the end of the log, immediately preceding the place where new text can be added. You can use this functionality to automatically add the current date and time to each log entry.

sumber : http://support.microsoft.com/kb/260563

Anomali 4 : =rand (100, 99)

Kenehan ini sering dianggap bug pada Microsoft Office Word, namun sebenarnya hal-hal semacam ini merupakan hal yang lumrah yang dimasukkan oleh programer dalam mengetes oleh seorang tipografer atau sekedar iseng pada suatu produk. Karena programernya kebanyakan geek, dan gila game, maka muncullah kalimat “The quick brown fox jumps over the lazy dog” yang berulang pada kode itu. Hal-hal ini disembunyikan dan dapat diakses dengan cara-cara/trik-trik tertentu. Ini disebut “easter egg”. Trik di word itu salah satu easter egg.

rand berarti random

angka (200,99), 200 berarti paragraf, dan 99 berarti 99 kalimat per paragraf.

Coba anda ubah menjadi (1,1) atau angka lainnya, hasilnya akan berbeda.

sumber : http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B212251

ini bukanlah anomali atau misteri tapi pasti suatu history..

06 May, 2009

Membangun SMS Gateway denga Gammu dan MySQL

Membangun SMS Gateway dengan Gammu dan MySql

Saya sangat bersyukur sekali, karena sudah 1 tahun saya mencoba membangun SMS Gateway menggunakan gnokii, kannel,etc, tapi saya selalu menemukan masalah, dan sekarang alhamdullilah telah berhasil membangun SMS Gateway menggunakan Gammu yang saya rasa cukup stabil. Handphone yang telah berhasil saya coba adalah Nokia 3310 dan Siemens C35i. Distro linux yang saya gunakan untuk membangun SMS Gateway ini adalah Trustix 3.0. Sebelum installasi kita lakukan silahkan anda baca-baca info tentang Gammu di http://www.mwiacek.com/gsm/soft/gammu.html

Gimana!! udah selesai bacanya?? Oke..lansung saja dan tidak banyak basa-basi, mari kita mulai saja mengumpulkan kebutuhan untuk membangun SMS Gateway menggunakan Gammu ini.

1. Gammu.tar.gz
Dapat anda download di : http://www.mwiacek.com/zips/gsm/gammu/gammu.tar.gz
atau # wget http://www.mwiacek.com/zips/gsm/gammu/gammu.tar.gz

2. Web Server (Jika anda sudah punya webserver, abaikan saja no 2 ini, kalau belum terpaksa anda harus install dulu apache,myslq,php)

3. Handphone Nokia 3310 atau Siemens C35i, untuk support handphone lainnya silahkan baca lagi http://www.mwiacek.com/gsm/soft/gammu.html

Gammu support dengan berbagai merek handphone kok lihat ini :
Gammu currently supports:
majority of Nokia phones from DCT3 generation with Nokia operating system - for example Nokia 3210, 3310, 3315, 3410, 5110, 5130, 6110, 6130, 6150, 6210, 7110, 8210
majority of Nokia phones from DCT4 generation with Nokia operating system - for example Nokia 3100, 3510, 3510i, 6220, 6230, 6310, 6310i, 6510, 6610, 7210, 8310
many AT devices - for example many Siemens, Sony Ericsson, Nokia, Alcatel models
Alcatel from BE5/BF5/BH4 generation - for example 501, 511, 512
some functions with OBEX and Symbian devices

4. Kabel Serial untuk handphone

Jika anda sudah berhasil mendonwload gammu.tar.gz, silahkan di extract
#tar xvfz gammu.tar.gz

Setelah anda extract secara otomatis anda akan mendapati folder gammu-1.05.00, sekarang masuklah ke folder tersebut

#cd gammu-1.05.00

Sebelum anda menginstall biasakan membaca README, INSTALL, etc.
#./configure
#make
Disini perlu anda perhatikan apakah ada yang error atau tidak jika ada error!, berarti library mysql anda masih kurang lengkap, biasanya error yang ditemui adalah "lssl" sering tidak ditemukan ketika melakukan "make" atau database mysql tidak support dengan gammu-nya.
(Solusi-nya coba install ulang mysql-nya atau lengkapi library yang dibutuhkan)
#make shared
#make install
#make installshared

Selanjutnya anda perlu meng-upgrade "library"
# vi /etc/ld.so.conf
Tambahkan link library dengan mengetik /usr/local/lib pada file ld.so.conf, selanjutnya lakukan upgrade library dengan mengetik
#/sbin/ldconfig

Note : Jika anda tidak menemukan error apa2 sampai tahap ini berarti anda sudah berhasil mengintall Gammu SMS Gateway

Sekarang coba masuk lagi ke folder dimana anda meng-extract gammu.tar.gz dan copy-lah file yang ada pada folder /docs/example/config/ disitu anda akan menemukan 3 buah file dengan nama gammurc, mysql.sql, smsdrc lalu file gammurc dan smsdrc anda copy-kan ke folder /etc

#cp gammurc smsdrc /etc/

Selanjutnya cari editlah file tersebut seperti ini :

[gammu]
port = /dev/ttyS0 #Jika anda memakai COM2 ganti dengan ttyS1
#model = 6110 #model handphone-nya anda abaikan saja, karena kalau diaktifin sering timbul masalah
connection = fbus #Kalau anda pakai hp Nokia connection-nya "fbus" jika anda memakai hp Siemens ganti "fbus" menjadi "at19200"
#synchronizetime = yes
#logfile = gammulog
#logformat = textall
#use_locking = yes
#gammuloc = locfile
#startinfo = yes
#gammucoding = utf8
#rsslevel = teststable #usephonedb = yes

Jika anda masih bingung, didalam file gammurc tersebut sudah ada petunjuk pemakaian lihat bagian bawah-nya.
Jika anda malas untuk mengedit file-nya, anda juga bisa mendapatkan file-nya di http://www.posmetropadang.com/gammu/gammurc

Sekarang pastikan kabel data dan handphone anda sudah tersambung ke port COM1 pada komputer anda, selanjutnya anda tinggal ketik

#gammu --identify

Saya harap anda dapat melihat keluaran seperti dibawah ini :

Manufacturer : Nokia
Model : 3310 (NHM-5)
Firmware : 06.33 F (28-11-03)
Hardware : 1012
IMEI : 350835608671298
Original IMEI : 350835608671298
Manufactured : 0802
Product code : 0505201
Simlock 1 : MCC+MNC 00101, opened, user , counter 0
Simlock 2 : GID1 0000, opened, factory, counter 0
Simlock 3 : GID2 0000, opened, factory, counter 0
Simlock 4 : MSIN 0000000001, opened, factory, counter 0
MSID : 830d50880846870ebedd126096
MCU checksum : 9C79
DSP ROM : 6

Jika sudah ada koneksi seperti diatas berarti gammu sudah bisa mengenali handphone anda dan kita sudah bisa melanjutkan ke step yang lainnya.

Nah sekarang kita tinggal membuat, bagaimana semua sms yang masuk lansung tersimpan ke database mysql dan dapat ditampilkan ke website dengan memakai php scripts.

Oke lanjut bro... kerjaan kita sudah hampir selesai, mungkin ada kopi atau rokok yang bisa disruputt dulu hehe...??

Sekarang coba anda buka file smsdrc yang telah anda copy-kan ke folder /etc tadi

#vi /etc/smsdrc
bagian dibawah ini biarkan saja apa adanya
[smsd]
PIN = 1234
logfile = smsdlog
commtimeout = 1
sendtimeout = 10

carilah dan edit bagian dibawah ini sesuai dengan keadaan mysql anda

# ------------------------- SETTINGS FOR --smsd MYSQL ---------------------------
user = root
password = password_mysql_anda
pc = localhost
database = nama_database

Note : Selain bagian yang saya sebutkan diatas mohon anda kasih tanda "#" karena yang kita butuhkan disini hanya bagian seperti yang saya sebutkan diatas saja, guna untuk koneksi ke database mysql-nya.

Sekarang anda masuk ke directory /docs/example/config/ terdapat file ‘mysql.sql’ , yang adalah structure table yang digunakan, anda tinggal memasukkannya di MySQL database anda.

Buat database sms
#mysqladmin –u root –p create sms

Buat table gammu dari file ‘mysql.sql’
#mysql –u root –p < mysql.sql

Atau dengan cara yang lebih mudah, anda dapat membuat database dan membuat table gammu melalui phpmyadmin http://localhost/phpmyadmin

Setelah selesai anda sudah bisa menjalankan daemon smsd-nya
#gammu --smsd MYSQL /etc/smsdrc
Log filename is "smsdlog"
Press Ctrl+C to stop the program ...

Jika keluar seperti yang diatas berarti SMS Gateway anda sudah berjalan dengan baik dan anda bisa menggunakan sesuai kebutuhan anda, dan semua sms yang ada di handphone anda akan lansung masuk kedalam database mysql.

Untuk tahap selanjutnya anda tinggal menampilkan sms anda ke web menggunakan php scripts, php scripts-nya bisa anda download di
http://posmetropadang.com/gammu/sms.zip

Anda perlu sedikit mengedit sms.php-nya sesuai dengan keadaan server database anda.

Sekarang anda bisa membuka sms lewat browser kesayangan anda dengan mengetik http://localhost/sms.php

Nah sekarang apa yang harus anda lakukan?? yang perlu anda lakukan adalah menjalan service daemon smsd secara otomatis ketika komputer di restart.

Buatlah file dengan nama gammu.sh dan simpanlah dalam direktori /usr/local/bin/
#cd /usr/local/bin/
#vi gammu.sh

Isinya sebagai berikut :

#!/bin/sh
export LANG=da_DK
/usr/local/bin/gammu --smsd MYSQL /etc/smsdrc

Setelah itu editlah file /etc/inittab anda
#vi /etc/inittab

Tambahkan baris dibawah ini pada inittab anda

GA:345:respawn:/usr/local/bin/gammu.sh

Wah... cukup panjang juga, hmmm mudah-mudahan tidak ada masalah ya... sekarang habiskan kopi anda, sampai disini anda sudah selesai membangun SMS Gateway menggunakan Gammu. Jika ada kritikan dan pertanyaan jangan sungkan kontak saya.

e-mail : yonaldi@gmail.com
Wrote : Yonaldi

Jika anda bingung dengan langkah2-nya karna saya lihat disini text-nya ketengah semua jadi untuk solusi silahkan anda buka http://lintau.com