Integration Between VB6, PHP and MySql


  • SPYRO KiD
  • admin[~@t~]spyrozone[~d.t~]net
  • Friday, September 24th, 2010
  • CopyLEFT (c) 2011++ www.spyrozone.net All Rights Reserved


Kang Iwan (bukan nama yang sebenarnya) memiliki sebuah aplikasi desktop berupa sebuah buku tamu sederhana untuk mencatat kehadiran peserta yang datang ke acara pernikahannya. Kang Iwan menginginkan setiap data yang masuk ke database buku tamunya di komputer lokal langsung otomatis masuk ke database pada webserver agar bisa langsung tampil di Websitenya. Jadi, dalam kasus ini ada 2 database: yang satu di komputer si penerima tamu, satunya lagi di webserver. Tujuannya adalah jika sewaktu-waktu koneksi internet terputus, data tetap masuk ke database di komputer lokal.

Nah, dalam artikel ini, saya akan membahas bagaimana mengintegrasikan Vb6 dengan PHP/MySql dengan cara yang paling mudah untuk membantu Kang Iwan (beneran bukan nama yang sebenarnya, kok) :D

Alur Program

Alur program yang diinginkan Kang Iwan kurang lebih demikian:

  1. Aplikasi Desktop: Mengambil serta nilai pada textbox yang menampung nama dan alamat, serta mengambil informasi waktu saat ini
  2. Aplikasi Desktop: Memasukkan nilai tersebut ke database lokal (Dalam contoh kali ini, fungsi memasukkan data ke database lokal saya ganti dengan fungsi untuk menuliskan data ke file TXT. Silahkan diubah sendiri.)
  3. Aplikasi Desktop: Mengirimkan nilai tersebut dengan metode POST ke http://www.spyrozone.net/playground/inetgb/index.php
  4. Aplikasi Web: index.php memasukkan nilai yang ditangkap ke database website lalu menampilkan respon “Success, bos!” jika berhasil dan pesan “ERROR!” jika gagal.
  5. Aplikasi Desktop: Menangkap respon server lalu menampilkannya melalui Message Box.

Mempersiapkan Database

Karena contoh kali ini cuma buat buku tamu acara kawinan (ih, jadi pengen kawin – lagi) :D , jadi tabelnya cukup 4 field ajah, yaitu id, name untuk menampung nama, address untuk menampung alamat peserta, dan datetime untuk menampung informasi waktu.

CREATE TABLE `inetgb` (
 `id` int(4) NOT NULL auto_increment,
 `name` varchar(30) NOT NULL default '',
 `address` longtext NOT NULL,
 `datetime` varchar(23) NOT NULL default '',
 PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

Kode index.php

File index.php inilah yang akan menangkap parameter dari aplikasi desktop lalu memasukkannya kedalam database di webserver. Salin lalu upload script berikut. Jangan lupa untuk memasukkan username, password dan nama database Anda pada variabel yang telah saya beri comment.

<?PHP
//--------- Config DB
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name="inetgb"; // Table name
//---------- End Config
// Connect to server and select database.
mysql_connect("$host", "$username", "$password")or die("cannot connect server ");
mysql_select_db("$db_name") or die("cannot select DB");

if($_POST['insert']=="yes"){
 $name = $_POST['name'];
 $address = $_POST['address'];
 $datetime=$_POST['datetime'];
 $sql="INSERT INTO $tbl_name(name, address, datetime)VALUES('$name', '$address', '$datetime')";
 $result=mysql_query($sql);
 //Inserted
 if($result){
 echo "Success, bos!";
 }else{
 echo "ERROR!";
 }
}else{
 $sql="SELECT * FROM $tbl_name";
 $result=mysql_query($sql);
 while($rows=mysql_fetch_array($result)){
 ?>
 <table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC"><tr><td valign="top">
 <table width="400" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
 <tr><td valign="top">ID</td><td valign="top">:</td><td valign="top">
 <? echo htmlspecialchars($rows['id'], ENT_QUOTES); ?></td></tr>
 <tr><td width="117">Name</td><td width="14">:</td><td width="357">
 <? echo htmlspecialchars($rows['name'], ENT_QUOTES); ?></td></tr>
 <tr><td valign="top">Address</td><td valign="top">:</td><td valign="top">
 <? echo htmlspecialchars($rows['address'], ENT_QUOTES); ?></td></tr>
 <tr><td valign="top">Date/Time </td><td valign="top">:</td><td valign="top">
 <? echo htmlspecialchars($rows['datetime'], ENT_QUOTES); ?></td></tr>
 </table>
 </td></tr></table><BR>
<?PHP
 }
}
mysql_close();
?>

Baris ke 21 dan 23 pada code diatas itulah yang akan ditampilkan VB6 sebagai pemberitahuan kepada user apakah insert data ke database pada webserver berhasil atau gagal dilakukan.

VB6.0 Project

Saya asumsikan Anda sudah mengenal VB6. Kalo belum pernah menjamah VB6, bersyukurlah, silahkan beralih ke bahasa yang lebih baik, C misalnya :D Tapi jika terlanjur ingin mencoba, silahkan membuka area kerja VB6 dan buat sebuah project baru (Standard EXE)

Panggil komponen Microsoft internet Transfer Control 6.0 dengan klik Project -> Components…

{Image: Add New Component}

Add New Component

Pilih Microsoft internet Transfer Control 6.0 lalu klik OK.

{Image: Microsoft internet Transfer Control 6.0}

Microsoft internet Transfer Control 6.0

Icon MSINET akan tampil di Toolbox Anda

{Image: Toolbox}

Toolbox

Buatlah sebuah form dengan komponen sebagai berikut (klik untuk memperbesar):

{Image: Form dan komponen yang dibutuhkan}

Form dan komponen yang dibutuhkan

Salin kode berikut, masukkan kedalam area code:

'-----------------------------------------------------
'Author : SPYRO KiD
'Website: http://www.spyrozone.net
'Mail   : root@spyrozone.net
'-----------------------------------------------------
Private Sub cmdSend_Click()
Dim gbUrl As String
Dim gbParam As String
Dim txtfPath As String
'inetgb index.php location
gbUrl = "http://www.spyrozone.net/playground/inetgb/index.php"
'Path to inetGB.txt
txtfPath = App.Path & "\inetGB.txt"
'-----------------------------------------------------
'Write to text file
'you can replace it with function to insert data into
'local database
'-----------------------------------------------------
Open txtfPath For Append As #1
 Print #1, "Name"; Tab(15); ":  " + txtName.Text
 Print #1, "Address"; Tab(15); ":  " + txtAddress.Text
 Print #1, "Date/Time"; Tab(15); ":  "; Now
 Print #1, "---------------------------------------"
Close #1
'-----------------------------------------------------
'Now, send data to the net via Inet
gbParam = "insert=yes&name=" & txtName.Text & "&address=" & txtAddress.Text & "&datetime=" & Now
InetGb.Execute gbUrl, "POST", gbParam, "Content-Type: application/x-www-form-urlencoded"
Do Until InetGb.StillExecuting = False
 DoEvents
Loop
Screen.MousePointer = vbArrow
End Sub
Private Sub InetGb_StateChanged(ByVal State As Integer)
Dim chData As Variant
Dim myData As String: myData = ""
Dim flagDone As Boolean: flagDone = False
Screen.MousePointer = vbHourglass
'Control state
Select Case State
Case icResolvingHost
lblStatus.Caption = " Looking up IP address of host computer.."
Case icHostResolved
lblStatus.Caption = "IP address found!"
Case icConnecting
lblStatus.Caption = "Attempting to connect to Host.."
Case icConnected
lblStatus.Caption = "Connected!"
Case icRequesting
lblStatus.Caption = "Making Request.."
Case icRequestSent
lblStatus.Caption = "Request sent!"
Case icReceivingResponse
lblStatus.Caption = "Chatting with Host.."
Case icResponseReceived
lblStatus.Caption = "Response received!"
Case icDisconnecting
lblStatus.Caption = "Disconnecting.."
Case icDisconnected
lblStatus.Caption = "Disconnected!"
Case icError
lblStatus.Caption = "Error " & InetGb.ResponseCode & " " & InetGb.ResponseInfo
Screen.MousePointer = vbArrow
Exit Sub
'Make sure the complete response has been received
Case icResponseCompleted
'get the first chunk
chData = InetGb.GetChunk(1024, icString)
'if there is nothing on the document
If Len(chData) = 0 Then
 flagDone = True
End If
'Loop until everything extracted
Do While Not flagDone
myData = myData & chData
chData = InetGb.GetChunk(1024, icString)
If Len(chData) = 0 Then
flagDone = True
End If
Loop
'display server response
MsgBox myData, 64, "Info"
End Select
End Sub

Uji Coba

  1. Silahkan dihias sesuka hati lalu compile dengan nama inetGB.exe atau dengan nama terserah Anda.Berikut hasil akhir kreasi saya:
    {Image: Hasil akhir InetGB}

    Tampilan InetGB

    Pastikan Anda terhubung internet, lalu isikan nama dan alamat Anda. Klik tombol {Send}

  2. Anda bisa melihat proses yang sedang terjadi di pojok kiri bawah. Setelah request terkirim, akan tampil sebuah Message Box yang memberikan status dari index.php

    {Image: inetGB result}

    InetGB result

  3. Lihat hasilnya pada file inetGB.txt yang otomatis tercipta di lokasi yang sama dengan inetGB.exe. Karena inetGB.exe saya berada di C:\, maka inetGB.txt berada di tempat yang sama, yaitu C:\inetGB.txt

    {Image: File inetGB.txt}

    File inetGB.txt

  4. Sekarang, mari kita lihat apakah web sudah terupdate. Klik http://www.spyrozone.net/playground/inetgb/
    {Image: InetGB Web}

    InetGB Web

    Nah, tampil tuch hasilnya. Datanya sama dengan data di komputer lokal :D

Note: Karena project ini menggunakan MSINET.OCX, anda harus menyertakan file tersebut dalam distribusi file exe Anda untuk antisipasi Error pada komputer yang tidak memiliki MSINET.OCX

Penutup

Cukup sederhana dan menyenangkan bukan? Klik tombol Download di bawah jika Anda ingin mencicipi langsung project sederhana ini ;)

{Image: Download Project}

Selamat belajar, selamat mencoba, semoga bermanfaat :D


//E.O.F