Tutorial Form PHP Part 5: Cara Membuat Validasi Form PHP (fungsi isset dan empty)

Setelah berhasil mengambil dan menampilkan nilai dari form, hal berikutnya yang harus kita lakukan terhadap data tersebut adalah melakukan proses validasi. Proses validasi dilakukan terhadap nilai yang dimasukkan melalui form.

Dalam tutorial kali ini kita akan membahas Cara Membuat Validasi Form dengan PHP menggunakan fungsi isset() dan fungsi empty().


Pentingnya Melakukan Validasi Nilai Form

Nilai yang telah diinput oleh user atau pengunjung web, tidak bisa begitu saja di simpan langsung ke dalam database. Karena kita tidak tahu apakah nilai tersebut telah sesuai dengan nilai yang kita kehendaki. Misalkan apakah nilai tersebut harus berupa angka, atau hanya bisa berupa huruf, atau apakah hanya bisa diinput dalam range tertentu saja.

Dalam kasus yang ekstrim, seorang user bisa saja memasukkan kode script atau tag HTML yang bisa merusak situs kita, hal ini dikenal dengan Cross-site Scripting. Sebuah proses validasi nilai merupakan hal yang sangat penting dalam merancang form. Khusus untuk validasi mencegah Cross-site Scripting dan juga HTML injection ini akan saya bahas pada tutorial form PHP berikutnya.

Dalam pembahasan tutorial validasi form ini, saya masih menggunakan contoh halaman form.html yang pernah kita buat pada tutorial sebelumnya, berikut adalah kode HTML untuk halaman form.html:

<!DOCTYPE html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
   <title>Belajar Form PHP</title>
</head>
<body>
   <h2>Tutorial Belajar Form HTML - PHP </h2>
   <form action="proses.php" method="get">
     Nama: <input type="text" name="nama" />
     <br />
     E-Mail: <input type="text" name="email" />
     <br />
     <input type="submit" value="Proses Data" >
   </form>
</body>
</html>

Tampilan Struktur Form Sederhana HTML


Memeriksa Ketersediaan Variabel Form dengan Fungsi isset()

Validasi pertama yang paling sederhana dan ‘hampir’ selalu ada dalam tiap proses validasi form dalam PHP adalah memeriksa apakah objek form tersebut sudah tersedia atau tidak. Sebagai contoh sederhananya: apakah variabel $_GET[‘nama’] tersedia untuk diproses atau tidak.

Proses memeriksa ‘ketersediaan’ variabel ini menjadi penting karena PHP akan mengeluarkan pesan peringatan jika kita mengakses nilai sebuah variabel yang belum didefenisikan terlebih dahulu.

Sebagai contoh, jika kita mengakses langsung halaman proses.php (tanpa melalui halaman form.html) dan tanpa menambahkan URL (seperti pembahasan pada tutorial Perbedaan Metode Pengiriman Form GET dan POST) PHP akan menampilkan pesan peringatan seperti berikut ini:

Pesan kesalahan (error) PHP karena variabel tidak tersedia - Undefined Index

Notice: Undefined index adalah pesan error yang terjadi karena kita langsung menampilkan variabel $_GET[’nama’] dan $_GET[’email’] yang memang belum diset sebelumnya.

Untuk memeriksa apakah sebuah objek form telah didefenisikan atau telah di-set sebelumnya, kita bisa menggunakan fungsi bawaan PHP: isset(). Fungsi isset() akan menghasilkan nilai true jika sebuah variabel telah didefenisikan, dan false jika variabel tersebut belum dibuat.

Sebagai langkah antisipasi, saya akan membuat proses validasi untuk menangani variabel $_GET yang belum di-set, berikut adalah modifikasi file proses.php:

<?php
if (isset($_GET['nama']))
{
   echo $_GET['nama'];
}
 
echo "<br />";
 
if (isset($_GET['email']))
{
   echo $_GET['email'];
}
?>

Sekarang, file proses.php tidak akan menghasilkan error apabila diakses tanpa melalui form.html. Namun perubahan kode tersebut tidak terlalu berguna karena tidak memberikan pesan error yang jelas. Berikut adalah modifikasi file proses.php agar lebih informatif:

<?php
if (isset($_GET['nama']) AND isset($_GET['email']))
{
   echo $_GET['nama'];
   echo $_GET['email'];
}
else
{
   echo "Maaf, anda harus mengakses halaman ini dari form.html";
}
?>

Pesan kesalahan yang diset saat variabel tidak tersedia dalam PHPPada kode PHP diatas saya mengharuskan nilai $_GET[‘nama’] dan $_GET[’email’] tersedia, baru nilai ditampilkan, namun jika tidak ada, akan ditampilkan pesan bahwa halaman ini hanya bisa diakses dari form.html.


Memeriksa Apakah Variabel Form Telah Diisi

Fungsi isset() yang kita bahas sebelumnya hanya memeriksa apakah sebuah objek form ada atau tidak. Fungsi isset() tetap bernilai true meskipun user tidak mengisi form sama sekali (variabel form bernilai kosong, namun variabel tersebut dianggap telah di-set).

Untuk memeriksa apakah sebuah objek form telah diisi atau tidak, kita bisa menggunakan fungsi: empty().

Fungsi empty() akan menghasilkan nilai false jika sebuah variabel telah diisi, dan bernilai true jika variabel tersebut belum diisi. Dengan menggunakan stuktur IF dan fungsi empty(), kita bisa membuat logika validasi objek form mana saja yang dianggap perlu (harus diisi) dan mana yang boleh dikosongkan. Dan kemudian menampilkan pesan error yang sesuai.

Sebagai contoh, saya akan memodifikasi file proses.php agar menampilkan pesan error jika kotak input nama tidak diisi. Berikut adalah kode PHP pada halaman proses.php:

<?php
if (isset($_GET['nama']) AND isset($_GET['email']))
{
   $nama=$_GET['nama'];
   $email=$_GET['email'];
}
else
{
   die("Maaf, anda harus mengakses halaman ini dari form.html");
}
 
if (!empty($nama))
{
   echo "Nama: $nama <br /> Email: $email";
}
else
{
   die("Maaf, anda harus mengisi nama");
}
?>

Dalam kode PHP diatas, saya memodifikasi beberapa bagian kode program.

Pada logika IF pertama, saya melakukan pengecekan apakah variabel $_GET[‘nama’] dan $_GET[‘email’] tersedia atau tidak. Jika tersedia maka pindahkan nilainya ke variabel $nama dan $email agar lebih mudah untuk diproses. Namun jika tidak, fungsi die() akan menghentikan proses dan menampilkan pesan kesalahan.

Pada logika IF kedua, saya memeriksa apakah variabel $nama kosong atau tidak dengan fungsi !empty(). Fungsi !empty($nama) akan menghasilkan nilai true hanya jika variabel $nama tidak kosong (perhatikan tanda ! sebagai pembalik logika empty()). Namun jika $nama ternyata kosong (tidak diisi), maka tampilkan pesan kesalahan.

Pesan kesalahan yang diset saat variabel form kosong dalam PHP


Menyeleksi Tipe Data Objek Form

Setelah objek form dipastikan tersedia, tidak kosong, validasi berikutnya yang biasanya dilakukan adalah memastikan tipe data dan range data yang diinput oleh user.

Untuk mengecek tipe data sebuah variabel, PHP menyediakan beberapa fungsi tergantung tipe datanya, yakni fungsi is_string(), is_int(),is_float(),is_numeric(),is_bool(), is_array(), dan is_object(). Sesuai dengan namanya, masing-masing fungsi tersebut akan mengecek tipe data dari variabel yang ditest.

Diantara fungsi-fungsi diatas, fungsi is_numeric() mungkin butuh sedikit penjelasan. Fungsi is_numeric() akan mengecek apakah sebuah tipe data merupakan angka baik itu float atau integer.

Khusus objek form variabel angka seperti umur, biasanya selain menyeleksi apakah nilainya berupa angka integer, kita mungkin juga menambahkan aturan bahwa nilai umur harus diatas 17 tahun. Untuk menambahkan fungsi ini, fungsi is_int() dapat dikombinasikan dengan struktur IF.

Sebagai contoh saya akan menambahkan validasi untuk tag input nama bahwa nama tidak boleh diisi dengan angka. Untuk keperluan ini saya akan menggunakan fungsi is_numeric(). Berikut adalah modifikasi file proses.php:

<?php
if (isset($_GET['nama']) AND isset($_GET['email']))
{
   $nama=$_GET['nama'];
   $email=$_GET['email'];
}
else
{
   die("Maaf, anda harus mengakses halaman ini dari form.html");
}
 
if(empty($nama))
{
   die("Maaf, anda harus mengisi nama");
}
else
{
   if (is_numeric($nama))
   {
      die("Maaf, nama harus berupa huruf");
   }
   else
   {
      echo "Nama: $nama <br /> Email: $email";
   }
}
?>

Dalam kode diatas, saya menambahkan 1 lagi logika IF untuk menyeleksi apakah variabel $nama berisi angka numerik (integer atau float). Jika $nama bertipe numerik, maka tampilkan pesan error.

Pesan kesalahan yang diset saat variabel nama diisi dengan angka


Di dalam tutorial form PHP kali ini kita telah mempelajari cara menvalidasi nilai inputan form. Namun apa yang telah kita pelajari disini hanya sebagian kecil dari proses validasi yang sebenarnya harus dilakukan. Misalnya, untuk menfilter variabel $nama diatas, akan lebih cocok menggunakan regular expression daripada fungsi is_numeric(), namun yang penting kita telah bisa ’menangkap’ cara pembuatan validasi form.

Di dalam tutorial berikutnya, masih berkaitan dengan proses validasi form, kita akan mempelajari tentang Cara Mencegah Cross-site Scripting dan HTML injection.


Tutorial Terkait:

90 Comments

  1. efandmar
    02 Oct 14
    • Andre
      02 Oct 14
  2. Rizky
    09 Apr 15
    • Andre
      09 Apr 15
  3. didit
    11 Apr 15
    • Andre
      12 Apr 15
  4. tajul
    05 May 15
    • Andre
      05 May 15
  5. adigugun
    04 Jul 15
    • Andre
      06 Jul 15
  6. Ihzan
    06 Jul 15
    • Andre
      08 Jul 15
  7. maximus
    18 Aug 15
    • Andre
      18 Aug 15
  8. Tri
    22 Sep 15
    • Andre
      22 Sep 15
  9. mitsuki
    24 Sep 15
    • Andre
      25 Sep 15
      • mitsuki
        25 Sep 15
      • Andre
        26 Sep 15
        • mitsuki
          26 Sep 15
        • Andre
          28 Sep 15
        • mitsuki
          28 Sep 15
  10. nolbyte
    27 Nov 15
    • Andre
      29 Nov 15
      • nolbyte
        30 Nov 15
        • Andre
          30 Nov 15
  11. farah
    04 Dec 15
    • Andre
      04 Dec 15
  12. eno
    08 Dec 15
  13. imam aris munandar
    22 Dec 15
    • Andre
      23 Dec 15
  14. arnoldganteng
    24 Dec 15
    • Andre
      26 Dec 15
  15. Rendy
    27 Dec 15
    • Andre
      29 Dec 15
  16. heryanto
    17 Mar 16
    • Andre
      17 Mar 16
  17. Samadi
    07 Apr 16
    • Andre
      07 Apr 16
  18. daniel
    08 Apr 16
  19. Adillah
    08 Apr 16
  20. Lukman
    26 Apr 16
    • Andre
      27 Apr 16
  21. Braja
    09 May 16
    • Andre
      11 May 16
  22. Edkin
    15 May 16
    • Andre
      17 May 16
  23. alex
    15 May 16
    • Andre
      17 May 16
  24. Anonymous
    17 May 16
    • Andre
      18 May 16
  25. Ajis Mosleem
    04 Jun 16
    • Andre
      04 Jun 16
  26. Anonymous
    13 Jun 16
    • Andre
      14 Jun 16
  27. dony
    15 Jun 16
    • Andre
      15 Jun 16
  28. Justin
    15 Jun 16
    • Andre
      16 Jun 16
  29. eghaa
    18 Jun 16
  30. ojay
    22 Jun 16
    • Andre
      23 Jun 16
  31. almira
    26 Jun 16
    • Andre
      26 Jun 16
  32. Farhan
    24 Aug 16
    • Andre
      24 Aug 16
  33. dev dojo
    05 Oct 16
    • Andre
      06 Oct 16
  34. Diky Oktafian
    19 Oct 16
    • Andre
      19 Oct 16
      • Anonymous
        28 Oct 16
  35. Agny Lomanledo
    06 Nov 16
    • Andre
      06 Nov 16
  36. Dean
    01 Dec 16
  37. farid
    20 Jan 17
    • Andre
      20 Jan 17
  38. bin zaenudin
    16 Feb 17
    • Andre
      16 Feb 17
  39. Budi
    08 Mar 17
    • Andre
      09 Mar 17
  40. Henta
    09 Mar 17
    • Andre
      10 Mar 17
  41. Mochamad Arif
    05 May 17
    • Andre
      05 May 17
  42. adnan
    14 May 17
  43. alex
    26 May 17
    • Andre
      27 May 17
      • Bagus
        02 Jul 17
        • Andre
          03 Jul 17

Add Comment