Jika pada tiga posting yang lalu ( ini dan ini ) telah dipost tentang tutorial penggunaan PHP untuk keperluan export data ke file berformat Excel, maka kini sebaliknya. Kita akan coba lakukan import data dari Excel ke dalam tabel MySQL. Cara lama yang biasa digunakan untuk melakukan import data dari excel ke dalam MySQL adalah dengan menyimpan file excel tersebut sebagai file berformat CSV ( Comma Separated Value ). Namun diyakini bahwa format CSV ini tidak akan valid karena batas antar sel dan batas antar baris masih menggunakan karakter huruf alfabet. Semisal, ditentukan sebuah cara bahwa batas sel adalah dengan tanda koma, maka jika dalam konten sel terdapat koma, maka akan terjadi kesalahan dalam pembacaan jumlah sel.
Cara paling baik yaitu membiarkan saja dalam bentuk XLS file yang dibuka encoding datanya, dan kemudian direstore dalam bentuk text yang bisa dibaca dengan normal oleh PHP. Untuk membuka encoding data ini telah disediakan sebuah tools yang terkenal yang dinamakan Excel Reader. Biasanya filenya bernama excel_reader2.php. Disini dapat di download di : https://blogit.bimosaurus.com/demo/excel_reader2.php.zip. Silakan di download dan letakkan dalam direktori libs anda. Di dalam excel reader ini telah terdapat class dan fungsi-fungsi untuk melakukan pembacaan file excel sehingga data yang kita upload akan langsung diparsing konversi ke bentuk excel. Kita selaku developer tinggal menggunakan. Bagaimana contoh penggunaan dan penjelasannya?
Langkah pertama adalah biasanya kita perlu bantuan sebuah form yang berfungsi sebagai upload data. Misal kita buat sebuah file bernama : import.php, kira-kira berisi :
Nip | Nama | Honor | Status Ambil |
---|---|---|---|
MasterFile Disini
Selanjutnya,dibuat juga file tujuan uploadnya yang pada form di atas diarahkan ke file : import-do.php. File tersebut akan berisi : menangkap file,dan memparsing data yang ada di dalamnya dengan tools excel_reader2.php, dan melakukan restore data dalam database MySQL.
Saya masih menggunakan tabel yang telah digunakan dalam posting sebelumnya yaitu tabel pegawai :
nip | nama | honor | status_ambil |
---|---|---|---|
10001 | Susanto | Rp. 1000000 | Belum |
10002 | Susanti | Rp. 1000000 | Sudah |
10003 | Marwoto | Rp. 2000000 | Sudah |
10004 | Gunadi | Rp. 1500000 | Belum |
10005 | Nur Eko | Rp. 1000000 | Belum |
Selanjutnya saya mempersiapkan sebuah master file excel seperti berikut ini : https://blogit.bimosaurus.com/demo/master_excel.xls. Master file ini berfungsi untuk panduan user penginput data dalam melakukan inputing data. Sedangkan file import-do.php berisi demikian :
rowcount($sheet_index=0);
$i = 2; // dimulai dari ke dua karena baris pertama berisi title
while( $i<=$jumlah ){
//$cell->val( baris,kolom )
$nip = $cell->val( $i,1 );
$nama = $cell->val( $i,2 );
$honor= $cell->val( $i,3 );
$status_ambil = $cell->val( $i,4 );
$sql ="INSERT INTO `pegawai` (`nip`,`nama`,`honor`,`status_ambil`) VALUES ('$nip','$nama','$honor','$status_ambil')";
mysql_query( $sql );
$i++;
}
}
header("Location:https://blogit.bimosaurus.com/demo/import.php");
?>
Penjelasannya adalah sebagai berikut, file yang diupload hanya akan diletakkan dalam direktori temporary, dan mulai dibaca. Sheet_index merupakan nomer worksheet yang dibaca. 0 adalah worksheet pertama. Selanjutnya pembacaan baris dimulai dari nomer 2 (dua) karena baris pertama berisi header kolom. Pembacaan akan dimulai dengan proses looping yang dimulai dengan angka dua dan berakhir pada jumlah baris excel yang terbaca oleh php. Urutannya adalah $cell->val( baris,kolom ); Data diinisiasi dalam variabel masing-masing, dan dimasukkan dalam query, dan dieksekusi.
Nah file ini dapat dilihat di https://blogit.bimosaurus.com/demo/import.php. Kemudian perhatikan juga dalam posting sebelumnya, tentunya dalam demo terjadi perubahan, karena saya dalam hal ini menggunakan tabel yang sama. Dua script ini bisa saja disatukan jadi satu, dengan catatan bahwa form html diletakkan di bagian bawah dari aksi uploading, dan tentunya pengubahan arah form action. Permasalahan yang sering terjadi dalam proses uploading adalam masalah format cell, yang biasanya dapat bervariasi sekitar Text, Numeric, dan lain sebagainya. Oleh karena itu user perlu diarahkan untuk menggunakan format cell dengan benar.
Sebenarnya masih terdapat satu hal terkait excel ini, yaitu penggunaan PEAR. Dimana dalam PEAR telah lengkap untu segala library termasuk upload download excel. Namun tutorial ini berguna untuk semua server tanpa PEAR ataupun ada PEAR. Karena tidak selalu server berinstalkan PEAR.
Selamat Mencoba, semoga berguna
gan…saya udah jalankan sesuai dengan punye agan,…tp ko yg tampil ” C:\WINDOWS\TEMP\PHP 1 not ready “..
tolong gan solusinya…thx.
Hal itu disebabkan karena direktori C:\Windows\Temp\PHP tidak ada. Sedang secara default, php.ini, sepertinya menset ke arah sana. Coba mas, dibuat dulu ya, kalau memang sudah ada, cek di dalam PHP ini. Kalau ini sudah ada dan tetep error, silakan pada bagian script anda , bagian awal sendiri ditambahkan ini :
hal itu terjadi karena PHP gagal menuliskan Temporary process ke dalam direktorinya.. Silakan dicoba semoga bermanfaat, ditunggu umpan baliknya..
Salam…
The filename C:\WINDOWS\TEMP\php18.tmp is not readable
nip nama honor status
tampilan’y sperti ini gan, dan bgm caranya buat direkktorynya.? dan sy jg sudh copy script yg dr agan….tolong solusinya gan..
Cara buat direktorinya biasa saja mas, dengan cara membuat dari windows explorer. kemudian direstart servicenya .
gan….sy ambil inisiatif utk instal ulang localhost nya dan ternyata sdh bisa gan…thx
skrg pertanyaanya bgm cara utk paging nya krn data pasti byk gan…tolong ya gan…thx
Oh Syukurlah. Untuk Paging, silakan melihat bagian lain dari blog ini, sepertinya telah ada tiga posting tentang paging 🙂
maaf gan…yg bs di instal ulang dan jalan hanya di PC bukan di laptop ane, knp ya gan…padahal sama pk xp sdh di instal ulang jg.
dan sy sdh buat directory’y jg C:\WINDOWS\TEMP\php …
mhon solusinya gan, apakah ada msalah di laptop ane, shingga ga bs…thx.
Coba gunakan cara ini:
– Bukalah command prompt anda, Start -> Run -> CMD
– Ketik :
Silakan dicoba, semoga bermanfaat
saya sdh coba pak dan saya pun instal ulang dg ganti di drive: D tdk di C; lagi.
tp lagi2 ga bs dan ttp ke C:\Windows/TEMP/php 1 notready
the ACE does not apply to the current file/directory.
ini tampilan stelah dicoba di cmd…
Kali ini cobalah dengan klik : Tools -> Folder Option, pilih View, dan hilangkan centang pada Just Enable Simple File Sharing. Pilih OK, selanjutnya carilah direktori Windows\Temp pada windows Explorer, klik kanan, dan pilihlah pengaturan Security and Sharing. Pada bagian Security, settinglah agar user Everyone dapat melakukan akses ke sana.
Jika tidak, carilah file PHP.ini anda, dan carilah bagian ini :
Ubahlah setting upload_tmp_dir ke arah direktori lain yang dapat anda buat misal jika anda menggunakan xampp adalah : C:\xampp\temp, dan pastikan direktori itu telah anda buat
Atau langkah lain adalah : pada awal script berilah seperti ini :
Letakkan itu pada bagian awal script anda.. Sebenarnya inti dari apa yang kita lakukan adalah membuat agar PHP dapat menyimpan upload file sementara dalam direktori tertentu. Jika direktori C:\windows\temp tidak dapat ditulisi, dan kita gagal membuat permissionnya, maka kita akan membuat direktori temp yang lain dan akan kita setting baik dari PHP ini ataupun dari code.
Selamat mencoba semoga sukses, semoga bermanfaat
maaf gan, sebelumnya sy sdh merepotkan agan2…saya kira windows xp nya perlu diinstal lg deh…krn qt sdh berusha msh ttp lum bisa.
gmn menrut agan..? yg terbaik solusi sperti apa..?
thx ya…
hehehe tidak ada yang direpotkan, kita suka dengan kegiatan. Sebenarnya kemungkinan ada konfigurasi yang kita juga belum bisa melihat untuk kasus komputer anda seperti apa. Mohon maaf keterbatasan visual kami 🙂 tapi kami berusaha untuk terus berbagi..
mas,mau tanya kalau di php ada script untuk buat visualisasi grafik seperti diagram batang ?
C:\xampplite\tmp\php266.tmp is not readable
ane ada tulisan kek gt, gimana nih gan solusinya?
kalau di excelnya ada colu merger gimana ya gan?
a
1 b
c
_____
a
2 d
f
angka 1 dan 2 merger colum pada excelnya dan ketika sudah di import hasilnya dalam database sudah dipasangkan:
angka|huruf
1 a
1 b
1 c
2 a
2 d
2 e
mohon bantuannya
maaf pak..koq saya ada error
di
Assigning the return value of new by reference is deprecated in D:\Project\Mplik\includes\excel_reader2.php on line 525
mohon pencerahannya
terima kasih
Oh ya mas, mohon maaf, hal itu karena excel_reader2.php terdapat sintaks yang tidak lagi didukung oleh versi PHP anda. Oleh karena itu saya siapkan artikel yang lain lagi. Langkah lain yang lebih cepat adalah : anda mendowngrade versi PHP
mas untuk php versi 5 bisa apa tidak ?
krna saya pkek php versi 5
Saya juga menggunakan PHP5 mas. Detailnya php5 berapa mas? misal php 5.2 atau berapa? Karena permasalahan PHP adalah pola deprecated untuk fungsi yang dianggap memiliki bug issue. Tapi silakan dicoba dulu, bisa berfungsi atau tidak. Jika tidak berfungsi, errornya dimunculkan saja, lantas kita analisa. Jika ada fungsi yang terdeprecated oleh PHP yang terbaru, kadang masih bisa kita usahakan secara manual.
oke mkasih bnyak saya coba dulu deh mas klo gtu…
saya pkek PHP/5.4.7
sdh saya ikuti langkah-langkah dari tutor yg diatas, tpi ketika saya upload muncul notifikasi sperti ini :
Deprecated: Assigning the return value of new by reference is deprecated in C:\xampp\htdocs\telkom_dbs\libs\excel_reader2.php on line 916
apa mngkin permasalahannya gara” versi php yg saya gunakan ya mas ?
mhon infonya, maaf jika terlalu sering bertanya hehehe
mas, saya juga mengalami seperti itu,,, lalu solusinya gimana y mas? tolong jawab via email saya : heru.alkhoir@gmail.com
maaf nih pak
hasil di komputer seperti ini kenapa ya?
<
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\phpexcel\import-do.php:1) in C:\xampp\htdocs\phpexcel\import-do.php on line 24
makasi
Disini sudah ada mas 🙂
https://blogit.bimosaurus.com/2012/04/21/tips-pesan-error-cannot-modify-header-information-headers-already-sent-by/
hal itu disebabkan bahwa secara default php tidak mau mengerjakan multiheader karena buffernya dibatasi. Untuk hal itu bisa ditambahkan perintah di bawah tag ob_start();
pak, pesan error hilang.
brower lgs menuju ke import-do.php namun blank ga ada apa2.
saya cek di phpmyadmin data ga masuk pak.
apa yang salah??
Mas, klo import dengan excel 2007 bagaimana? dengan ext. .xlsx bukan dengan ext. .xls.!
gan kalo ane tipe data excelnya .csThe filename C:\xampp\tmp\php9069.tmp is not readablev gimana gan, masa muncul tulisan
Apakah formatnya memang xls? Karena untuk Excel Reader ini hanya membaca berformat Excel dengan extension xls.
yg sy mw tanyakan bagaimana caranya mengambil data dr excell,tapi perkolom(menyamping)? di tutorial yg bapak buat kan perbaris (mulai dari baris ke2 sampai kebawah)
terima kasih sebelumnya
gan, tolong bisa bantu ada error gini:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 2304 bytes) in C:\xampp\htdocs\eamd\config\excel_reader2.php on line 1384
Makasih