Apakah Anda pernah mengalami kesulitan saat mengimport data dari file .csv di aplikasi web yang dihasilkan oleh PHPMaker? Saat proses import data, muncul pesan error “Invalid field value”, dan semua data gagal total di-import. Setelah dicek ulang, ternyata nilai pada field yang tidak valid tersebut adalah data tanggal.
Pernah mengalami kejadian tersebut? Lalu apa yang Anda lakukan? Bingung, lalu menyerah begitu saja? Hmmm… sebaiknya jangan, karena kita akan menemukan solusinya melalui tulisan ini.
Supaya lebih mudah dipahami, saya akan mencoba menerangkan melalui sebuah contoh yang sederhana. Katakanlah Anda memiliki struktur table sebagai berikut di database MySQL:
CREATE TABLE `test_import` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `My_Date` date NOT NULL, `Description` varchar(50) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
Lalu Anda ingin data di tabel test_import tersebut tidak dientri satu per satu, melainkan melalui proses import data. Karena PHPMaker sudah memiliki fitur Import Data, maka kita tinggal mengaktifkan pilihan Import dari Table setup -> List Page dari dalam project PHPMaker.
Selanjutnya, Anda sudah mempunyai data dalam sebuah file data_import.csv yang isinya sebagai berikut:
"My_Date", "Description" "22/10/2020", "One" "23/10/2020", "Two" "24/10/2020", "Three" "25/10/2020", "Four" "26/10/2020", "Five" "27/10/2020", "Six" "28/10/2020", "Seven"
Perhatikanlah kembali data di file .csv tadi. Apa kesimpulannya setelah Anda melihat data di field My_Date? Yes, betul… jika Anda menjawab bahwa formatnya adalah dd/mm/yyyy.
Nah, inilah penyebab mengapa error di atas terjadi. Format data yang akan di-import tidak sama dengan format tanggal default di database MySQL yaitu yyyy-mm-dd. Lantas bagaimana dong solusinya?
Hehe… tenang… tenang… hal ini bisa diatasi dengan sangat mudah dan cepat, jika Anda menggunakan PHPMaker 2021, yaitu versi terakhir saat artikel ini saya buat.
PHPMaker sudah menyedikan sebuah server event bernama Row_Import milik dari List Page. Server Event ini dieksekusi sebelum sebuah record di-import. Ada dua argumen dalam server event ini. Argumen pertama adalah $row, yaitu array data yang akan di-import. Sedangkan argumen kedua adalah $cnt, merupakan nilai Integer yang mengandung jumlah record yang akan di-import.
Secara standar, server event ini mengembalikan nilai true. Jika kita ingin mengabaikan proses import, maka cukup dengan mengembalikan nilai false. Tapi bukan itu yang akan kita bahas di sini.
Kembali kepada persoalan di atas. Kita dapat menggunakan server event Row_Import untuk mengubah atau menyesuaikan format tanggal data yang akan di-import, supaya sama dengan format yyyy-mm-dd. Caranya bagaimana?
Cukup dengan menulis sedikit kode PHP berikut pada server event tersebut:
$dTanggal = $row["My_Date"]; // tampung dulu ke variabel $dTanggal $sTanggal = str_replace('/', '-', $dTanggal); // ganti separator "/" dengan "-", lalu tampung ke $sTanggal $row["My_Date"] = date('Y-m-d', strtotime($sTanggal)); // ubah format tanggal menjadi yyyy-mm-dd, lalu proses!
Hanya dengan 3 baris kode PHP itu saja, maka permasalahan di atas sudah bisa kita atasi dengan sangat mudah dan cepat. Tidak perlu menulis kode sampai ratusan atau ribuan baris untuk menciptakan fitur Import Data.
Selengkapnya kode di dalam server event Row_Import tadi seharusnya 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 $dTanggal = $row["My_Date"]; // tampung dulu ke variabel $dTanggal $sTanggal = str_replace('/', '-', $dTanggal); // ganti separator "/" dengan "-", lalu tampung ke $sTanggal $row["My_Date"] = date('Y-m-d', strtotime($sTanggal)); // ubah format tanggal menjadi yyyy-mm-dd, lalu proses! return true; }
O iya, jangan lupa generate ulang semua file script seperti biasa, lalu cobalah lagi sekarang meng-import data melalui aplikasi web yang sudah di-generate tadi.
Seharusnya sekarang sudah tidak error lagi. Semua data berhasil di-import, yang ditandai dengan pesan: Imported 7 of 7 records from data_import.csv successfully.
Luar biasa memang fleksibelnya PHPMaker!
Tinggalkan Balasan