Sekarang sudah jamannya pekerjaan dibikin serba mudah dan cepat. Termasuk entri data. Kalau dulu data dientri satu per satu ke dalam aplikasi. Sedangkan kalau sekarang, data sudah bisa dimasukkan sekaligus ke sistem, tanpa harus melalui proses entri satu per satu.
Import Data adalah fitur yang sering digunakan untuk mengatasi pekerjaan entri data yang sering kali cukup membosankan bagi sebagian besar Pengguna. Dengan menggunakan Import Data, maka waktu pekerjaan dapat dihemat, karena hanya dengan beberapa kali klik saja, data yang jumlahnya ratusan atau ribuan bisa langsung sekali masuk ke database.
Kalau dulu proses Import Data biasanya dilakukan oleh Pengguna dengan akses level admin atau si Developer itu sendiri, maka sekarang Import Data bisa diserahkan kepada Pengguna akhir. Lalu bagaimana dengan urusan validasi data? Serahkan saja kepada sistem!
Di artikel ini kita akan membahas lebih dalam lagi fitur Import Data melalui Aplikasi Web. Tentu saja Aplikasi Web yang di-generate oleh PHPMaker 2021. Untuk diketahui saja, fitur Import Data sudah disediakan oleh PHPMaker sejak versi 2019. Sampai dengan PHPMaker versi 2021, fitur tersebut pun masih ada.
Di artikel ini kita akan belajar bagaimana cara menangani data yang terdapat di file CSV, tanpa dilengkapi karakter quote yang mengapit setiap field, lalu seperti apa penanganannya di PHPMaker 2021.
Selain itu, kita juga akan sama-sama belajar, bagaimana cara mengimport nilai kosong di suatu field untuk tipe data numerik, dan seperti apa penanganan dari PHPMaker 2021, supaya data yang tersimpan di database adalah NULL.
Sekarang mari kita mulai dengan membuat sebuah database baru di MySQL, lalu jalankan script SQL berikut untuk membuat sebuah table baru yang bernama AccidentSurvey:
CREATE TABLE AccidentSurvey ( SurveyID INT(11) NOT NULL AUTO_INCREMENT, RegNum VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8_general_ci', Damaged VARCHAR(40) NULL DEFAULT NULL COLLATE 'utf8_general_ci', RepairCost INT(11) NULL DEFAULT NULL, RepairDescription LONGTEXT NULL DEFAULT NULL COLLATE 'utf8_general_ci', SurveyDate DATE NULL DEFAULT NULL, PRIMARY KEY (SurveyID) USING BTREE ) COLLATE='utf8_general_ci' ENGINE=InnoDB ROW_FORMAT=COMPACT AUTO_INCREMENT=1;
Kemudian buatlah sebuah project baru di PHPMaker 2021, lalu pastikan sudah terhubung dengan database dan table di atas. Setelah itu, pastikan kita sudah mengaktifkan opsi Import yang terdapat di Table setup -> List Page.
Berikutnya kita akan membuat contoh data di file CSV yang akan digunakan untuk meng-import data tersebut ke table tadi. Copy-paste data ini ke dalam Notepad atau Notepad++ lalu simpan dengan nama file accident_survey.csv:
RegNum,Damaged,RepairCost,RepairDescription,SurveyDate ABC123,Y,1000,Replace front doors and left wing,01/05/2021 ZEF212,N,,,01/05/2021 ZAS111,N,,,01/05/2021 ZDF321,Y,250,,01/05/2021 SED222,Y,,Awaiting full estimate,01/05/2021
Sekarang mari kita perhatikan data di file .csv ini. Di sana tidak kita temukan karakter quote yang mengapit nilai di setiap field atau kolom. Selain itu, terdapat data yang kosong di field RepairCost dan RepairDescription.
Pertanyaan selanjutnya, bagaimana cara kita menangani data yang tidak diapit oleh karakter quote tadi?
Jawabannya sangatlah mudah. Pastikan kita sudah mengosongkan pengaturan Import from CSV quote character dari menu Tools -> Advanced Settings. Nilai default pengaturan ini adalah “, yang artinya karakter quote yang digunakan adalah petik ganda.
Untuk mengatasi data yang tidak diapit sama sekali oleh karakter quote tadi, maka pastikan kita sudah mengosongkan pengaturan Import from CSV quote character tersebut. Sampai di sini, kita sudah berhasil menangani data yang tidak diapit oleh karakter quote dari PHPMaker 2021.
Selanjutnya, bagaimana cara meng-import data yang tipenya numerik di table AccidentSurvey untuk selanjutnya disimpan ke table tersebut dengan nilai NULL?
Jawabannya pun sangatlah mudah. Cukup dengan memasukkan sedikit kode berikut ke dalam server event Row_Import yang terdapat di bawah halaman List, sehingga kode selengkapnya menjadi seperti ini:
// Row Import event function Row_Import(&$row, $cnt) { //Log($cnt); // Import record count //var_dump($row); // Import row //return false; // Return false to skip import $date = strtotime(str_replace('/', '-', $row["SurveyDate"])); // timpa separator tanggal dari / ke - $row["SurveyDate"] = date("Y-m-d", $date); // supaya data tanggal tersimpan dengan format yyyy-mm-dd if (is_null($row["RepairCost"])) { $row["RepairCost"] = 0; // pastikan untuk data kosong, simpan nilai nol ke database } return true; }
Kode di atas berfungsi untuk memvalidasi sekaligus mengubah format tanggal menjadi yyyy-mm-dd. Selain itu, memeriksa jika tidak ada data pada kolom RepairCost, maka simpan nilai 0 ke database. Jika nilai 0 ini tidak kita tangani, maka sistem akan menampilkan pesan error saat proses import data berlangsung.
Pertanyaan selanjutnya, lalu bagaimana cara untuk mengubah nilai 0 di field RepairCost pada database menjadi NULL?
Jawabannya pun lagi-lagi sangatlah mudah dan cepat. Cukup masukkan sebaris kode berisi perintah SQL UPDATE ke dalam server event Page_Imported, sehingga kode selengkapnya di server event tersebut menjadi seperti ini:
// Page Imported event function Page_Imported($reader, $results) { //var_dump($reader); // Import data reader //var_dump($results); // Import results ExecuteUpdate("UPDATE accidentsurvey SET RepairCost = NULL WHERE RepairCost = 0"); // update 0 menjadi null }
Nah, kode di server event Page_Imported itu berfungsi untuk mengubah semua nilai 0 pada field RepairCost menjadi NULL di database. Server event ini dijalankan jika semua baris di file .csv tadi sudah selesai diproses.
Dari sini kita dapat mengambil kesimpulan bahwa kita tidak dapat langsung mengeset atau menugaskan nilai NULL ke field RepairCost di server event Row_Import tadi, karena jika itu kita lakukan, maka akan menimbulkan error saat proses import data dilakukan.
Solusinya, kita tugaskan terlebih dulu nilai 0 (nol) ke field tersebut di server event Row_Import, lalu setelah semua baris data selesai di-import, kita cukup meng-update nilai 0 tadi menjadi NULL di server event Page_Imported.
Betapa mudah dan cepatnya bukan? Bayangkan! Hanya dengan sedikit kode itu saja, kita sudah bisa meng-import data dengan business-logic yang bisa kita tentukan sendiri di kedua server event tersebut pada PHPMaker 2021.
Terima kasih Pak tutorialnya benar-benar sangat membantu karena saya pemula. Pak saya mau tanya bagaimana caranya agar web yang dihasilkan bisa import file txt/text? Saya juga coba web untuk import hasilnya Server error 200: OK apa yang menyebabkan hal ini
File .txt nya di-save as file .csv dengan mengubah format datanya menjadi .csv (comma separated values).
Setelah itu, ya di-import saja seperti biasa. Baca topik Import Data dari menu Help PHPMaker untuk info dan contoh lebih lanjut.
Hallo pak masino, izin bertanya kenapa ya saat saya import malah muncul eror type data tidak didukung.
padahal data yang saya import ada file csv ?
dan saya sudah mencoba dengan file csv,xls,xlsx
untuk eror xlx dan xlsx adalah ” Eroor (200) : OK “
Server error 200: OK
saat saya import xls atau xlsx, menampilkan eror yang sama
Kalau pakai PHPMaker 2022, coba baca-baca dulu manualnya di sini: PHPMaker 2022 – Import Data.