Tutorial PHP Web
Menulis ke File
Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.
Kita akan melanjutkan video sebelumnya dimana kita sudah berhasil melakukan validasi terhadap data yang dikirimkan oleh user melalui form. Di video ini, kita akan menyimpan data tersebut pada web server. Di proyek yang sebenarnya, biasanya data disimpan pada database, namun berhubung sampai saat ini kita masih belum membahas mengenai database, maka kita akan menggunakan proses penyimpanan yang lebih sederhana, yaitu menyimpan ke file.
Untuk melakukan operasi terhadap file, kita bisa menggunakan filesystem functions. Dokumentasinya bisa diakses pada link berikut ini:
https://www.php.net/manual/en/ref.filesystem.php
Kalau teman-teman mengunjungi link tersebut, kita bisa melihat ada banyak sekali function yang telah disediakan oleh PHP. Namun di dalam video ini, kita tidak akan membahas semua function-nya ya. Kita hanya mengambil beberapa function yang kita butuhkan saja.
Untuk menulis ke file, kita perlu menjalankan 3 langkah. Yang pertama kita harus buka dahulu filenya menggunakan fungsi fopen. Setelah itu barulah kita bisa menulis ke dalam file dengan menggunakan fungsi fwrite. Jangan lupa di langkah terakhir kita harus menutup kembali file tersebut dengan menggunakan fungsi fclose.
Kita langsung coba praktek. Kita buka kembali proyek sebelumnya. Untuk mencoba filesystem functions, kita buat file baru dan kita beri nama file.php. Kita buat tag pembuka PHP.
Kemudian kita buka dokumentasi filesystem functions ya. Teman-teman bisa menggunakan link pada slide barusan. Atau bisa juga dengan menggunakan google search, kita cari php filesystem functions. Kemudian kita buka halaman dokumentasi dari situs php.net.
Ingat lagi tadi untuk menulis ke file, kita mesti melakukan 3 langkah ya. Langkah pertama adalah kita buka dahulu file-nya dengan menggunakan fungsi fopen. Kita cari fopen. Kita baca dokumentasinya ya. Fopen digunakan untuk membuka file atau URL. Kemudian ada deskripsinya, fopen memiliki 4 buah parameter namun yang wajib diisi hanya 2 saja ya, yaitu nama file dan mode. Apabila berhasil membuka file, maka fopen mengembalikan tipe data resource. Sedangkan kalau gagal maka fopen mengembalikan nilai false.
Kita lihat ke bagian mode. Ada banyak mode yang tersedia ya. Namun yang sering digunakan ada 3, yaitu 'r' untuk read atau membaca, 'w' untuk write atau menulis dan 'a' untuk append atau menulis di bagian akhir file.
Kita kembali ke kode. Kita coba untuk membuka file dengan nama 'register.dat', dengan menggunakan mode 'w'. Hasil dari function kita simpan dalam variable $handle. Kemudian kita var_dump nilai $handle.
$handle = fopen('register.dat', 'w'); var_dump($handle);
Kita buka terminal. Kita coba jalankan dengan perintah php file.php. Perhatikan bahwa kita mendapatkan kembalian dari fungsi fopen dengan tipe data resource. Artinya file berhasil dibuka. Perhatikan lagi pada daftar file di folder PHP. Sekarang sudah ada file baru dengan nama register.dat. Kalau kita klik, maka hasilnya masih kosong.
Bagi teman-teman yang menggunakan sistem operasi linux atau mac, perhatikan bahwa file dan directory pada komputer memiliki owner dan hak akses. Terkadang PHP dijalankan menggunakan user lain sehingga tidak memiliki hak akses untuk menulis folder yang sedang digunakan. Apabila hal ini terjadi, maka proses fopen menjadi gagal dan mengembalikan nilai false.
Kita buka kembali halaman dokumentasi. Kali ini kita baca mengenai function fwrite. Fungsi ini digunakan untuk menulis ke file. Fungsi memiliki 3 buah parameter, namun yang wajib diisi adalah parameter $stream untuk menunjuk file yang akan ditulis. Dan parameter kedua adalah data yang hendak ditulis ke dalam file. Apabila berhasil, maka fungsi mengembalikan tipe data integer untuk menunjukkan jumlah karakter yang berhasil ditulis ke dalam file. Atau mengembalikan nilai false apabila gagal menulis ke file.
Kita kembali ke source code. Sebelum kita panggil fungsi fwrite, kita mesti memastikan dahulu bahwa fungsi fopen berhasil. Oleh karena itu kita mesti periksa dahulu nilai yang dikembalikannya dengan menggunakan if($handle). Di dalamnya barulah kita memanggil fwrite dengan argument $handle dan misalkan kita hendak menulis "Hello World\n".
Kita lanjutkan ke langkah ketiga, yaitu menutup file. Kita lihat lagi dari dokumentasi. Kita cari fclose. Fungsi ini lebih sederhana dari yang langkah pertama dan kedua ya. Kita cukup memberikan satu argument yaitu resource file yang sedang dibuka. Fungsi mengembalikan true apabila berhasil dan mengembalikan false apabila gagal.
Kita kembali lagi ke source code. Untuk menutup file, kita cukup menulis kode fclose($handle).
Kita simpan dan jalankan. Sekarang kalau kita buka file register.dat, maka kita mendapatkan isinya adalah kalimat "Hello World".
Misalkan kita ganti kalimat menjadi "Selamat Datang". Kita simpan dan jalankan kembali. Sekarang isi dari file register.dat berubah menjadi "Selamat Datang". Tulisan "Hello World" yang sebelumnya hilang dan diganti menjadi kalimat baru. Hal ini terjadi karena pada saat kita memanggil fopen, kita menggunakan mode 'w' atau mode 'write'.
Kita coba ganti mode menjadi 'a' atau mode 'append'. Kemudian tulisannya kita ganti kembali menjadi "Hello World\n". Kita buka kembali register.dat. Perhatikan bahwa tulisan "Selamat Datang" masih tetap ada. Sedangkan tulisan baru "Hello World" ditambahkan di bagian akhir file.
Jadi ini adalah perbedaan antara mode 'write' dengan mode 'append'. Kalau kita menggunakan mode 'write', maka semua data di dalam file akan dihapus dan diganti menjadi data baru. Sedangkan kalau kita menggunakan mode 'append', maka semua data lama tetap ada, sedangkan data baru akan ditambahkan di bagian akhir file.
Kita kembalikan mode ke 'w', karena pada video ini kita akan menggunakan mode 'write'.
Kita lanjutkan materi. Ternyata PHP menyediakan satu buah function yang bisa meringkas pekerjaan kita, yaitu file_put_contents. Satu function ini bisa langsung mengerjakan ketiga langkah untuk menulis file, yaitu memanggil fopen, fwrite, dan fclose. Function file_put_contents hanya memerlukan 2 buah parameter. Yang pertama adalah nama file, sedangkan yang kedua adalah data yang hendak ditulis ke dalam file. Apabila dibutuhkan, kita bisa menambahkan konstanta FILE_APPEND sebagai parameter ketiga, apabila kita ingin menggunakan mode Append.
Kita buka kembali halaman dokumentasi. Kita cari function file_put_contents. Penjelasan disini mirip dengan slide tadi ya. Function ini akan mengembalikan tipe data int apabila sukses, dimana angka yang dikembalikan menunjukkan jumlah byte yang ditulis ke dalam file. Sedangkan apabila function gagal, maka function mengembalikan nilai false.
Kita kembali ke source code. Kita komentari semua kode barusan ya. Karena semua kode ini bisa diganti menjadi satu kode file_put_contents, dengan argument pertama nama file-nya yaitu 'register.dat', sedangkan argument kedua adalah data yang hendak ditulis ke dalam file yaitu "Hello World\n".
Pertama kita hapus dahulu file register.dat. Kemudian kita coba jalankan file.php. Kita mendapatkan file baru register.dat. Kita periksa isinya, yaitu Hello World. Jadi satu function ini bisa langsung menjalankan fopen, fwrite dan fclose seperti kode kita sebelumnya.
Kita kembali ke form. Kita akan menyimpan data email dan password yang dikirimkan oleh pengguna. Namun berhubung data yang hendak disimpan ini tidak sesederhana sebuah string, maka kita harus menentukan dahulu struktur data yang hendak kita gunakan untuk menyimpan data. Struktur data yang bisa digunakan untuk menyimpan banyak data adalah array dan object, namun dalam video ini kita akan menggunakan struktur data object.
Pertama kita deklarasikan dahulu kelasnya. Kita tambahkan folder baru data. Di dalamnya kita tambahkan file Register.php. Kita buat tag pembuka PHP. Pertama kita tambahkan namespace dulu, dengan nama namespace Data. Kemudian kita buat kelas Register. Di dalamnya kita tambahkan 2 buah property, yaitu public string $email dengan nilai default string kosong dan public string $password dengan nilai default string kosong juga.
Kita kembali ke file form.php. Pertama kita tambahkan dahulu require_once ke file Register. Untuk argumentnya kita gunakan dahulu __DIR__ untuk merujuk ke folder atau directory script yang sedang kita gunakan. Lalu kita tambahkan '/data/Register.php'. Kemudian kita tambahkan use untuk menggunakan kelas Data\Register. Nah, untuk inisialisasi nilai awal email dan password ini bisa kita ganti menjadi inisialisasi object baru $register. Ingat tadi kita sudah mengatur nilai awal email dan password menjadi string kosong.
Kemudian di dalam if, apabila post email tidak kosong, maka nilai disimpan di dalam property $register->email. Begitu juga dengan password, disimpan di dalam property $register->password. Kita lanjutkan dahulu ke bagian form. Nilai yang ditampilkan pada attribute value email adalah $register->email. Sedangkan nilai yang ditampilkan pada attribute value password adalah $register->password.
Kita simpan dan coba jalankan dahulu. Kalau kita coba kirim data kosong, maka keluar 2 pesan error ya. Sedangkan kalau kita coba kirim data email admin, dengan password admin123. Maka tidak ada error, dan nilai email dan password tetap tampil kembali di form.
Sekarang kita tambahkan proses menulis ke file. Proses dilakukan setelah validasi, apabila tidak terjadi error. Bagaimana cara memeriksa apakah tidak terjadi error? Kita bisa memeriksa jumlah data di dalam array $errors. Apabila jumlah datanya 0, maka artinya tidak ada error validasi. Jadi kita tambahkan dahulu kondisi if(count($errors) === 0).
Di dalamnya, kita tuliskan data $register ke dalam file. Kita panggil function file_put_contents dengan argument 'register.dat'. Argument kedua adalah data yang hendak ditulis ke file. Namun data ini harus dalam bentuk string ya. Sedangkan data kita sekarang adalah dalam bentuk object. Ada beberapa cara untuk mengubah data object menjadi string. Kita coba cara pertama dahulu, yaitu dengan cara memanggil fungsi serialize.
Kita simpan dan kita coba jalankan lagi ya. Kita coba kirim data email admin dengan password admin123. Sekilas tidak ada perubahan dari kode sebelumnya ya. Kita kembali ke visual studio code.
Kita buka file register.dat. Disini isinya sudah berubah ya. Ini adalah hasil dari serialize object $register. Disini kita bisa melihat ada nama kelasnya yaitu Data\Register. Kemudian isinya ada 2 property. Yaitu email dengan nilai admin, dan password dengan nilai admin123.
Kita coba jalankan lagi form. Kali ini kita isi dengan email skysen, dengan password rahasia. Kita kirim datanya. Kemudian kita buka kembali file register.dat. Sekarang kita lihat bahwa datanya sudah diganti dengan data baru, yaitu email skysen dan password rahasia. Sedangkan data lama ditimpa dan sudah tidak ada lagi.
Jadi pada video ini, proses untuk menyimpan datanya disederhanakan ya. Kita menimpa data lama dengan data baru, sehingga data yang lama menjadi hilang. Kita masih belum membahas proses pengolahan data secara komplit atau yang sering disebut dengan istilah CRUD, dimana kita bisa menambah user baru, melihat daftar user yang ada, atau mengubah dan menghapus data user yang lama. Proses ini lebih rumit dan akan dibahas setelah kita menguasai materi database.
Kita lanjutkan materi ke bagian display. Kita buat file baru dengan nama display.php. Isinya kita copy dari bagian atas form.php. Mulai dari require_once, use dan inisialisasi variable $register. Kita paste ke display.php.
Namun disini mesti kita modifikasi sedikit ya. Karena variable $register bukan dibuat dari kelas Register, melainkan kita baca dari file register.dat. Kalau tadinya waktu menyimpan data kita menggunakan fungsi serialize, sekarang waktu membaca data kita menggunakan fungsi unserialize. Argument pertama yang berupa string ini diambil dari mana? Dibaca dari file register.dat ya.
Bagaimana cara membacanya? Kita bisa menggunakan fungsi file_get_contents, dengan argument nama file-nya ya, yaitu register.dat. Setelah itu kita coba var_dump dahulu nilai dari variable $register. Kita coba jalankan dari terminal dahulu ya. Kita ketik php display.php.
Disini kita mendapatkan hasil nilai dari variable $register. Kita bisa melihat bahwa $register adalah sebuah objek yang dibuat dari kelas Data\Register. $register memiliki 2 buah property yaitu email dengan nilai skysen dan password dengan nilai rahasia.
Nah, yang kerennya disini PHP bisa langsung membuat object-nya dari kelas Data\Register ya. Karena kalau kita perhatikan di dalam file register.dat, disini ada nama kelasnya. Jadi PHP bisa secara secara otomatis menyesuaikan ke kelas Data\Register asalkan kita ingat untuk memanggil require_once deklarasi kelasnya.
Bagaimana kalau lupa? Kita coba komentari require_once ya. Kita lihat hasilnya menjadi kelas __PHP_Incomplete_Class_Name. Hal ini disebabkan karena kita tidak menambahkan kode deklarasi kelas Data\Register sehingga PHP tidak tau harus membuat object dari kelas yang mana. Kita kembalikan dahulu kode require_once ya.
Kita hapus kode var_dump. Kemudian kita tambahkan tag penutup PHP dan kita lanjutkan dengan HTML Boilerplate. Kita ubah tag Title menjadi Berhasil. Kemudian pada bagian body, kita tambahkan tag h1 dengan teks Registrasi Berhasil.
Kemudian kita tambahkan div dengan isi Email : = $register->email ?>. Dan kita tambahkan lagi div baru dengan isi Password: = $register->password ?>. Kita simpan.
Nah, kalau kita coba jalankan dari terminal maka kita mendapatkan output yang berupa html ya. Namun yang penting disini kita bisa memeriksa bahwa pada bagian div, kita bisa melihat bahwa emailnya adalah skysen, dan passwordnya adalah rahasia. Jadi hasilnya sesuai dengan data kita ya.
Kita kembali ke form.php. Setelah kita menyimpan data ke file, maka kita harus pindah ke display.php. Kita bisa meminta browser untuk pindah ke halaman lain dengan menggunakan fungsi header. Sebagai argument-nya kita tambahkan string location: diikuti dengan nama script yang hendak dijalankan pada proses berikutnya, yaitu display.php. Setelah itu kita panggil function exit agar PHP tidak menjalankan kode selanjutnya.
Kita simpan dan kembali jalankan form.php di browser. Kita coba masukkan email hello, dengan password world. Lalu kita tekan tombol Kirim Data. Kemudian browser akan berpindah ke script display.php dengan menunjukkan data yang kita isi barusan ya. Kita mendapatkan email hello dengan password world. Jadi kita sudah berhasil menulis data ke file register.dat pada script form, dan kemudian membaca kembali data tersebut untuk ditampilkan di layar dengan menggunakan script display.
Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.
Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.