Author Topic: Kolaborasi VFP + PHP + XML (data online) SESI-2 "cursortoxml() in action.."  (Read 36337 times)

0 Members and 1 Guest are viewing this topic.

Offline hanstedjakusuma

  • Senior Member
  • *
  • Posts: 698
  • echo "VisualFoxpro";
    • demo.ossbp.com
Kolaborasi VFP + PHP + XML (data online) SESI-2 "cursortoxml() in action.."

Pemanfaatan cursortoxml() dalam kaitannya dengan penyimpanan data online (hosting)



Dengan memanfaatkan cursortoxml() akan sangat mudah sekali dalam menyimpan lebih dari 1 record dalam sekali proses ke data online (hosting).
Berikut ini adalah implementasinya pada koding program..

Koding program VFP untuk melakukan proses simpan data xml ke hosting

*/ cursor 'csr_grdinput' berisi data yang akan disimpan ke hosting
*/ cursor 'csr_grdinput' dirubah ke format data xml dan dimasukan lcdataxml
cursortoxml('csr_grdinput','lcdataxml')

*/ membuat object "Microsoft.XMLHttp" untuk proses POST ke PHP
ohttp = createobject("Microsoft.XMLHttp")
&& alamat url file PHP
local lcurl
lcurl='http://untukanda.com/vfpphpxml/olahdata_xmlinsert.php'

*/ data xml di urlencode (pengubahan huruf2 tertentu menjadi kode-kode, karena huruf2 tersebut tersebut dapat mengganggu proses POST)
*/ dan nama varibel "dv_dataxml" yang akan menampung data xml pada PHP dipersiapkan
local lcparam
lcparam='dv_dataxml='+thisform.urlencode(lcdataxml)

*/ pemilihan metode transfer data GET/POST dan ketentuan2 lainnya
ohttp.open("POST", lcurl, .f.)
ohttp.setrequestheader('Content-Type', 'application/x-www-form-urlencoded;')
ohttp.setrequestheader('Content-length', alltrim(str(len(lcparam))) )
ohttp.setrequestheader('Connection', 'close')
*/ proses POST dijalankan
ohttp.send(lcparam)

*/ status mengembalikan nilai berhasil tidak/selesainya proses tranfer data ke PHP, bila nilai 200 berarti berhasil
if not ohttp.status=200
   wait window 'Error Http Status '+transform(ohttp.status)
   return .f.
endif



Koding program PHP untuk menerima data xml dari VFP

<?php
$db_server="localhost";
$db_database="********";
$db_username="********";
$db_password="********";

// membuka database
$db_connection = mysql_connect($db_server, $db_username, $db_password);
mysql_select_db($db_database, $db_connection);
if (!$db_connection) { echo "ERROR#".mysql_error(); exit; }

// menerima data xml dan dimasukkan ke dalam variabel $dv_dataxml
if (isset($_POST["dv_dataxml"])) {$dv_dataxml=urldecode($_POST["dv_dataxml"]);} else {$dv_dataxml="";}

// proses pembacaan data XML
$dv_dataxml=str_replace('\"', '"', $dv_dataxml);
$dataxml = simplexml_load_string($dv_dataxml);

foreach($dataxml->csr_grdinput as $data) {
    if ($data->keterangan!='') {
   // proses insert data ke mysql
   $ds_result=false; $ds_error=''; $ds_query='';
   $creation_ts=date('Y-m-d H:i:s');
   $ds_query.="insert into xmlinsert ".
   "(`keterangan`, `creation_ts` )".
   "VALUES ".
   "("."'".addslashes($data->keterangan)."'".", "."'".$creation_ts."'"." ".")";
   $ds_result = mysql_query($ds_query, $db_connection);
   $ds_error = mysql_error($db_connection);
   if (!$ds_error=='') { echo "ERROR#".$ds_error; mysql_close($db_connection); mysql_close($db_connection); exit; }
    }
}

// tutup database
mysql_close($db_connection);
?>


Link kode program VFP selengkap nya dapat di donlod disni.. http://www.4shared.com/file/SYhPk3rQ/frm_browsimp01.html

Mudah bukan.. :icon_biggrin: :thumbsup:
Silahkan dicoba dan dipelajari, smoga bermanfaat..

PS. Terima Kasih buat Pak DM yang telah memberi pengarahan mengenai pembahasan Topic di atas. :icon_salut:

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
Baru deh nongol tombol reply-nya ... mau komen apa ya.. ga ada tuh, udah asyik sistimatika penjelasan dan sampelnya, nunggu posting berikut aja tentang proses baca data balik dari remote online dan display di klien  :thumbsup:

Offline hanstedjakusuma

  • Senior Member
  • *
  • Posts: 698
  • echo "VisualFoxpro";
    • demo.ossbp.com
Mau saya posting proses berikutnya tapi sepertinya udah pada bisa nih Pak DM.. ga ada satupun pertanyaan/komen di proses ini.. hehehe.. :icon_biggrin:

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
heheheh nggak ada foxers yang tertarik masalah online-internet ala VFP, semua udah setengah kaki berada di rumah tetangga... PHP atau Java...  atau ato Sulavesi kali

Offline spion

  • Junior Member
  • *
  • Posts: 277
Wah, saya justru tertarik banget. Nggak komen karena memang nggak ngerti apa yang harus ditanya. Belom nyampe sama sekali kesitu. Lanjutkan !!!

Offline fansul

  • Hero Member
  • *
  • Posts: 894
@dv saya tertarik online ala vfp, berhubung saya konek nya dari vfp langsung ke server tidak via php
hanya menyimak aja. lagi tunggu lanjutan cara browse data per paging dan lookup table lain waktu input data.
contoh2 paging vfp yang ada itu pakai mysql sedangkan saya pakai oracle, oracle tidak punya limit adanya rownum.
di oracle ada fungsi OWA_UTIL.TABLEPRINT() menghasilkan data berbentuk html, tapi masih bingung bagaimana caranya supaya bisa di tarik ke vfp
udah beberapa hari obok2, udah ada sedikit titik terang.
silakan di lanjut.

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
@spion: tidak ada yang rumit atau super khusus tentang semua ini... kita tau bahwa dari lama juga VFP sudah menggunakan mySql tapi biasanya database hanya terpasang pada server di jaringan lokal (LAN), atau web-server lokal LAN juga dengan konfigurasi Apache server pakai XAMPP atau Wampserver. Untuk menggunakan mySql di hosting yang bukan co-location (=server fisik punya kita) timbul masalah karena perusahaan hosting tidak mengijinkan sebuah program dari luar server mereka mengakses database di server tanpa melalui pages yang ada di server yang sama. Maka itu VFP mengirim data ke halaman PHP di server dan halaman PHP itu yang berinteraksi dengan mySQL lalu mengirim balik ke VFP hasilnya. Tapi karena VFP tidak ngerti PHP dan begitu juga sebaliknya, maka media umum berupa XML yang sama2 dimengerti oleh keduanya dipakai sebagai pengantar data, gitu aja

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
@fansul.. tidak ada masalah sebenarnya, karena Oracle yang anda maksud adalah database yang fully Sql compatible juga kan, .. bahkan itu sebabnya Oracle membeli habis Sun Microsystems, karena ada kesamaan dan akan dikembangkan untuk menjadi kompatibel penuh antara mySql dan Oracle.. PHP dapat dan biasa aja mengakses Oracle jadi tidak ada hal yang terlalu khusus, dianggap aja semua pembicaraan ini menyangkut Oracle juga

Offline tejos

  • SET STUDY ON
  • Global Moderator
  • Hero Member
  • *
  • Posts: 1.702
weeee.... lanjutkan terus..
Tetaplah dalam kebaikan....
Meski sekarang gak ada comment termasuk saya....
Tetap sangat sangat berguna...
Mungkin yang mau comment (termasuk saya).. bingung... mau comment apa ya...
Sama saja to dulu ada project-nya Armen... Scanner LJK..
Tetap semangat dan harus sampai selesai..
Tengkiu deh...
http://www.isakomputer.com


Salam,
***BTGL - Belajar Terus Gitu Lhoh.....***

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
@Fansul/Tejos: salah satu tombol di form yang diposting oleh hansteja di atas sudah memberikan contoh gimana mempersiapkan XML yang akan dikirim ke PHP melalu object xmlhttprequest..  Untuk membuat halaman PHP memparsing XML yang bakal diterimanya lihat link-link yang saya berikan di thread Sesi satu, dan contoh khususnya pelajari PHP pages yang diposting oleh Hans pertama kali,  atau pada 3 tripel spoilers oleh saya yang agak salah/kurang isinya dikit tapi intinya itu cara nya meng-XML-kan tabel dengan dua fields yaitu bernama "date" dan "text"...  juga banyak sekali tentang itu sebenarnya di google.. kan PHP tidak perduli darimana asal request dan kemana dia akan kirim .. PHP hanya mau tau satu: si pak Pos adalah orang asal XML, itu aja.. nah kebetulan fungsi cursortoxml() dan xmltocursor() nya VFP itu muantabz dan lengkap buangetzzzz maka jadi deh perselingkuhan VFP dan PHP ini,  Hans dan saya cuman nyari receh jadi mak comblangnya aja.. hehehe
« Last Edit: April 09, 2011, 06:33:36 AM by davidmustakim »

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
.....
di oracle ada fungsi OWA_UTIL.TABLEPRINT() menghasilkan data berbentuk html, tapi masih bingung bagaimana caranya supaya bisa di tarik ke vfp
udah beberapa hari obok2, udah ada sedikit titik terang.
silakan di lanjut.
...
nah ini... coba anda perhatikan bahwa menu File di VFP itu saat modifikasi form punya item bernama Save as HTML .. itu tandanya VFP itu udah lama kenal dan berniat jadi pacarnya HTML juga sambil selingkuhan dengan PHP yang emang sodara tiri satu atap dengan HTML.   Kalau mau lihat/display html di browser tetapi pada halaman form VFP kan mudah aja, tinggal create object browser pada form VFP itu atau drop ocx/dll browser IE ke halaman form VFP, saya posting ulang nih:
Sorry but you are not allowed to view spoiler contents.
kalau anda copy paste ke "command window" VFP prg diatas, lalu blok semuanya dan tekan <Enter>,  maka yang anda lihat adalah halaman ini di browser tapi pada form VFP
« Last Edit: April 09, 2011, 07:13:36 AM by davidmustakim »

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
form dan kontrol2 VFP bahkan bisa berinteraksi langsung bolak-balik, meng-edit isi HTML bahkan meng-klik tombol yang ada pada halaman browser yang sedang aktif pada halaman VFP itu.. hampir keseluruhan webpage dari "West-Wind"-nya Rick Strahl dibuat dengan metode itu .. cuman emang Rick yang dulu maen gundu bareng saya di pantai Hawaii udah kaya-raya dan maenannya kebetulan lebih mengarah ke .Net sekarang, bukan ke PHP.. nggak soal lah yang penting nanti lihat aja deh kedepannya.. Microsoft sekarang lagi pendekatan intensif ke community open source dan banyak loh membiayai pengembangan PHP melalui kelompok2 komunitas terkaitnya
« Last Edit: April 09, 2011, 09:44:02 AM by davidmustakim »

Offline hanstedjakusuma

  • Senior Member
  • *
  • Posts: 698
  • echo "VisualFoxpro";
    • demo.ossbp.com
Proses baca data balik dari data online (hosting) dan menampilkannya pada VFP..

Adalah sebagai berikut :

Koding program VFP pada tombol "Browse Data pada Hosting"
berfungsi mengakses halaman PHP yang akan mengirimkan balik ke VFP data dalam bentuk XML

*/ membuat object "Microsoft.XMLHttp" untuk mengakses halaman PHP
ohttp = createobject("Microsoft.XMLHttp")
*/ alamat halaman PHP yang akan diakses dari VFP
local lcurl
lcurl='http://untukanda.com/vfpphpxml/browsedata_xmlinsert.php'

*/ parameter POST ke halaman PHP dikosongkan (karena proses kali ini tidak memerlukannya)
local lcparam
lcparam=''

*/ pemilihan metode transfer data GET/POST dan ketentuan2 lainnya
ohttp.open("POST", lcurl, .f.)
ohttp.setrequestheader('Content-Type', 'application/x-www-form-urlencoded;')
ohttp.setrequestheader('Content-length', alltrim(str(len(lcparam))) )
ohttp.setrequestheader('Connection', 'close')
*/ proses POST dijalankan
ohttp.send(lcparam)

*/ status mengembalikan nilai berhasil tidak/selesainya proses tranfer data ke PHP, bila nilai 200 berarti berhasil
if not ohttp.status=200
   wait window 'Error Http Status '+transform(ohttp.status)
   return .f.
endif

*/ property responsetext pada object ohttp akan berisi data yang dikirimkan dari halaman PHP
if not empty(ohttp.responsetext)
*/ data yang dikirimkan dari halaman PHP berupa data yang berformat  XML dimasukkan ke dalam variabel "lcdataxml"
*/ menggunakan xmltocursor() untuk mengubah dari format XML menjadi data dalam bentuk cursor
   lcdataxml='<root>'+strextract(ohttp.responsetext,'<root>','</root>')+'</root>'
   xmltocursor(lcdataxml, 'csr_grdbrowse')
*/ cursor di tampilkan pada grid
   thisform.grdbrowse.recordsource='csr_grdbrowse'
endif


Koding pada halaman PHP ("browsedata_xmlinsert.php")
berfungsi mengirimkan balik ke VFP data berformat XML

<?php
// Settingan koneksi database
$db_server="localhost";
$db_database="********";
$db_username="********";
$db_password="********";

// Membuka database
$db_connection = mysql_connect($db_server, $db_username, $db_password);
mysql_select_db($db_database, $db_connection);
if (!$db_connection) { echo "ERROR#".mysql_error(); exit; }

// Proses baca data dari data MySQL
$ds_result=false; $ds_error=''; $ds_query='';
$ds_query.="select a.id, a.keterangan ".
    " from xmlinsert a ".
    " where true ".
    " order by id desc ";
// Melakukan query ke MySQL
$ds_result = mysql_query($ds_query, $db_connection);
// Cek bila ada error
$ds_error = mysql_error($db_connection);
if ($ds_error!='') { echo "ERROR#".$ds_error; mysql_close($db_connection); exit; }

// Variabel $data_start dan $data_end berisi suatu kode standar untuk mengapit suatu nilai data
// tujuannya agar nilai data ini tidak merusak tatanan format data XML (yang bisa menimbulkan error saat pembacaan XML)
$data_start="<![CDATA["; $data_end="]]>";
$cr=chr(13).chr(10);
// Variabel $xmldump akan menampung data yang diformat dalam bentuk XML
$xmldump="";
// Memasukkan Standar Kode untuk header data XML
$xmldump.="<?xml version='1.0' encoding='ISO-8859-1'?>";
// Memasukkan element pembuka untuk data XML ke variabel $xmldump
$xmldump.=$cr."<root>";
// Membaca per record data hasil query MySQL
while($row = mysql_fetch_array($ds_result)) {
// Memasukkan data hasil query MySQL ke variabel $xmldump
    $xmldump = $xmldump.$cr."<xmldata>";
    $xmldump = $xmldump."<id>".$data_start.$row['id'].$data_end."</id>";
    $xmldump = $xmldump."<keterangan>".$data_start.$row['keterangan'].$data_end."</keterangan>";
    $xmldump = $xmldump.$cr."</xmldata>";
}
// Memasukkan element penutup untuk data XML ke variabel $xmldump
$xmldump = $xmldump.$cr."</root>";
// Nilai dari variabel $xmldump dikirim balik ke pengakses halaman PHP ini (dalam contoh ini ada ke VFP)
echo $xmldump;
// Tutup database
mysql_close($db_connection);
?>



@fansul
Pas jalan-jalan di "Mall" tadi ketemu ini..
The Underground PHP Oracle Manual!... http://www.oracle.com/technetwork/topics/php/underground-php-oracle-manual-098250.html

Offline davidmustakim

  • Fox-id M.V.P
  • Hero Member
  • *
  • Posts: 14.053
  • Awas ya...
sedikit perubahan pada page browsing php, bila ingin menghindari penulisan nama fields / kolom tabel
Sorry but you are not allowed to view spoiler contents.

- untuk tes sudah saya parkirkan script diatas beserta database dan tabel, silahkan dicoba
  pada alamat url: http://www.3shexyon.com/brwhans.php    (copy paste url ini ke koding Hans diatas)
  brwhans.php yang ada di url tersebut persis sama dengan diatas, kecuali tentunya: "***" pada baris2 pertama
  yang anda seharusnya dapatkan adalah tabel sederhana 2 fields berisi 6 records

Offline fansul

  • Hero Member
  • *
  • Posts: 894
@hans tks atas linknya.