Home » PHP » Form Handling PHP: Contoh dan Source Code

Form Handling PHP: Contoh dan Source Code

by Bagus Dharma Iswara
by Bagus Dharma Iswara

Superglobals variabel pada PHP yaitu variabel $ _GET dan variabel $ _POST digunakan untuk mengumpulkan data formulir. Kita dapat membuat dan menggunakan formulir di PHP. Untuk mendapatkan data formulir, kita perlu menggunakan variabel PHP superglobals $ _GET dan $ _POST.

Permintaan formulir atau form dapat berupa get atau post. Untuk mengambil data dari get request, kita perlu menggunakan $ _GET, untuk post request harus menggunakan $ _POST.

Situs web saat ini telah menyediakan banyak fungsionalitas yang dapat digunakan untuk menyimpan, memperbarui, mengambil, dan menghapus data dalam database.

Sekarang pertanyaannya adalah Apakah Form atau Formulir itu? Form adalah dokumen yang berisi banyak data, yang dimana datanya dapat diisi pengguna atau pengguna dapat memilih datanya, Biasanya data tersebut akan disimpan di database suatu sistem.

Form Sederhana dengan HTML

Contoh di bawah ini menampilkan formulir HTML sederhana dengan dua input masukan dan sebuah tombol submit yang dapat dilihat pada kode dibawah ini

<html>
<body>

<form action="welcome.php" method="post">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html>

Ketika pengguna mengisi formulir di atas dan mengklik tombol submit, maka data formulir akan dikirim untuk diproses ke file PHP bernama “welcome.php”. Data formulir dikirim dengan metode HTTP POST. Untuk menampilkan data yang dikirimkan, Anda cukup memanggil semua variabelnya pada “Welcome.php” yang dapat terlihat seperti kode dibawah ini

<html>
<body>

Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>

</body>
</html>

Maka akan menghasilkan output dengan hasil yaitu Welcome John Your email address is [email protected]

Metode Get Request

GET Request adalah permintaan atau request formulir secara default di PHP. Data yang melewati permintaan sebuah metode get akan terlihat di browser. Yang akan terlihat pada browser disini adalah URL dari input user sehingga tidak diamankan. Anda dapat mengirim data dalam jumlah terbatas melalui permintaan get. Kita akan buat sebuah contoh sederhana dari metode get request di PHP

Mari kita lihat contoh sederhana untuk menerima data dari get request di PHP

<form action="welcome.php" method="get">  
Name: <input type="text" name="name"/>  
<input type="submit" value="visit"/>  
</form>  

Kemudian kita dapat buat file PHP nya dengan kode berikut

<?php  
$name=$_GET["name"];//receiving name field value in $name variable  
echo "Welcome, $name";  
?>  

Metode POST Request

Post request banyak digunakan untuk submit form yang memiliki banyak data seperti upload file, upload gambar, form login, form pendaftaran dan lainnya. Data yang dikirimkan melalui permintaan post maka data input dari user ini tidak terlihat di browser . Jadi URL yang dimasukkan saat mengirimkan sebuah data dari form akan lebih diamankan. Anda dapat mengirim data dalam jumlah besar melalui permintaan post.

Mari kita lihat contoh sederhana untuk menerima data dari permintaan post di PHP.

<form action="login.php" method="post">   
<table>   
<tr><td>Name:</td><td> <input type="text" name="name"/></td></tr>  
<tr><td>Password:</td><td> <input type="password" name="password"/></td></tr>   
<tr><td colspan="2"><input type="submit" value="login"/>  </td></tr>  
</table>  
</form>   

Kemudian kita dapat buat file PHP nya dengan kode berikut

<?php  
$name=$_POST["name"];
$password=$_POST["password"];
echo "Welcome: $name, your password is: $password";  
?>  

Perbedaan Metode GET dan POST

Baik itu adalah Metode GET dan POST dalam membuat sebuah array (misalnya array (key1 => value1, key2 => value2, key3 => value3, …)). Array ini akan menampung pasangan kunci (key) / nilai (value), di mana kunci adalah nama dari form controll yang ada dan nilai adalah data masukan dari pengguna. Baik GET dan POST diperlakukan sebagai $ _GET dan $ _POST. Ini adalah variabel superglobals, yang artinya selalu dapat diakses, apa pun cakupannya – dan Anda dapat mengaksesnya dari fungsi, kelas, atau file apa pun tanpa harus melakukan sesuatu yang khusus.

  1. $ _GET adalah array variabel yang diteruskan ke skrip saat ini melalui parameter URL.
  2. $ _POST adalah array variabel yang diteruskan ke skrip saat ini melalui metode HTTP POST.

Kapan menggunakan GET?
Informasi yang dikirim dari formulir dengan metode GET dapat dilihat oleh semua orang (semua nama dan nilai variabel ditampilkan di URL). GET juga memiliki batasan jumlah informasi yang akan dikirim. Batasannya sekitar 2000 karakter. Namun, karena variabel ditampilkan di URL, dimungkinkan untuk menandai halaman. Ini dapat berguna dalam beberapa kasus. GET dapat digunakan untuk mengirim data non-sensitif. Catatan penting yaitu metode GET TIDAK PERNAH digunakan untuk mengirim sandi atau informasi sensitif lainnya.

Kapan menggunakan POST?
Informasi yang dikirim dari formulir dengan metode POST tidak terlihat oleh orang lain (semua nama / nilai disematkan di dalam body suatu permintaan HTTP) dan tidak memiliki batasan jumlah informasi yang akan dikirim. Selain itu, POST mendukung fungsionalitas lanjutan seperti dukungan untuk input biner multi-bagian saat mengunggah file ke server. Namun, karena variabel tidak ditampilkan di URL, maka tidak mungkin untuk menandai suatu halaman. Pengembang program saat ini lebih memilih POST untuk mengirim data form.

Pikirkan KEAMANAN dari suatu data saat kita memproses form di PHP! Halaman ini tidak berisi validasi formulir apa pun, ini hanya menunjukkan bagaimana Anda dapat mengirim dan mengambil data formulir. Namun, selanjutnya kita akan menunjukkan bagaimana memproses formulir PHP dengan mempertimbangkan keamanan dengan sebuah validasi. Validasi data formulir yang tepat penting untuk melindungi formulir Anda dari peretas dan pengirim spam.

Form Validation

Form yang harus diisi akan memeriksa apakah form tersebut harus diisi atau tidak dengan cara yang benar. Sebagian besar kasus kita saat akan mengharuskan mengisi kolom form maka dapat menggunakan simbol * untuk input wajib. Validasi berarti memeriksa masukan yang dikirimkan oleh pengguna. Ada dua jenis validasi yang tersedia di PHP. Jenis validasi disini adalah sebagai berikut

  • Client-Side Validation yaitu Validasi yang dilakukan di browser web mesin klien.
  • Server-Side Validation yaitu Setelah data terkirim dari pengguna, maka data akan dikirim ke server dan melakukan pemeriksaan validasi di mesin server.

Beberapa Aturan Validasi yang biasanya harus digunakan yaitu

FieldValidation Rules atau Aturan Validasi
NamaHarus (Required) diisi huruf dan spasi
EmailHarus (Required) diperlukan @ dan . (titik). Email disini yaitu Sintaks yang akan memverifikasi apakah alamat Email yang diberikan berbentuk baik atau tidak. Jika tidak, itu akan menampilkan pesan kesalahan.
WebsiteTidak Harus (Optional) membutuhkan URL yang valid, kalu tidak ada tidak masalah. Valid URL disini adalah Sintaks yang akan memverifikasi apakah URL yang diberikan valid atau tidak. Ini harus mengizinkan beberapa kata kunci seperti https, ftp, www, a-z, 0-9, .. dan lainnya ..
RadioHarus (Required) dapat dipilih setidaknya sekali
Check BoxHarus (Required) dapat dicentang setidaknya sekali
Drop Down menuHarus (Required) dapat dipilih setidaknya sekali

Jenis variabel dan fungsi lainnya yang ada dan dapat diketahui pada form validation ini adalah sebagai berikut

  • Variabel $ _SERVER [“PHP_SELF”] adalah variabel super global yang mengembalikan nama file dari skrip yang sedang dieksekusi. Jadi, variabel $ _SERVER [“PHP_SELF”] mengirimkan data formulir yang dikirimkan ke halaman itu sendiri, alih-alih melompat ke halaman lain. Dengan cara ini, pengguna akan mendapatkan pesan kesalahan di halaman yang sama dengan formulir.
  • Fungsi htmlspecialchars() yaitu sebuah Fungsi htmlspecialchars () yang dapat mengubah karakter khusus menjadi entitas HTML. Ini berarti fungsi ini dapat menggantu karakter HTML seperti < dan > menjadi &lt dan &gt. Fungsi ini akan mencegah penyerang mengeksploitasi kode dengan memasukkan kode HTML atau Javascript (serangan Cross-site Scripting) ke dalam formulir.

Catatan Besar dan sangat penting tentang Form Validation di PHP yaitu variabel $ _SERVER [“PHP_SELF”] dapat digunakan oleh peretas. Jika PHP_SELF ini digunakan di halaman Anda, maka pengguna dapat memasukkan garis miring (/) dan kemudian memasukkan beberapa perintah Cross Site Scripting (XSS) untuk dijalankan dan dapat meretas situs anda. Cross Site Scripting (XSS) adalah jenis kerentanan keamanan komputer yang biasanya ditemukan di aplikasi Web. XSS memungkinkan penyerang memasukkan skrip sisi klien ke halaman Web yang dilihat oleh pengguna lain. Untuk memperjelas penyerangan ini maka kita dapat membuat sebuah ilustrasi untuk memudahkannya.

Asumsikan kita memiliki formulir berikut di halaman bernama “test_form.php”

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Sekarang, jika pengguna memasukkan URL normal di bilah alamat seperti “http://www.example.com/test_form.php”, kode di atas akan diterjemahkan menjadi berikut

<form method="post" action="test_form.php">

sejauh ini sudah lebih baik. Namun, pertimbangkan bahwa pengguna memasukkan URL berikut di browser

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

Dalam hal ini, kode di atas akan diterjemahkan menjadi berikut ini

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

Kode peretasan ini digunakan dengan menambahkan tag skrip dan perintah peringatan alert. Dan saat halaman dimuat, kode JavaScript akan dijalankan (pengguna akan melihat kotak peringatan). Ini hanyalah contoh sederhana dan tidak berbahaya bagaimana variabel PHP_SELF dapat dieksploitasi. Ketahuilah bahwa kode JavaScript apa pun dapat ditambahkan di dalam tag <script> .

Seorang peretas dapat mengarahkan pengguna ke file yang berada di server lain, dan file itu dapat menyimpan kode berbahaya yang dapat mengubah variabel global atau mengirimkan formulir ke alamat lain untuk menyimpan data pengguna. Cara Menghindari Eksploitasi $ _SERVER [“PHP_SELF”] adalah dengan menggunakan fungsi htmlspecialchars () yang telah dijelaskan sebelumnya. Fungsi htmlspecialchars () mengubah karakter khusus menjadi entitas HTML.

Validasi Form Data dengan PHP

Hal pertama yang akan kita lakukan adalah meneruskan semua variabel melalui fungsi htmlspecialchars () yang ada di PHP. Saat kita menggunakan fungsi htmlspecialchars () ini dan jika pengguna mencoba mengirimkan hal berikut ini di input teks yang ada, misalkan input user ini pada kolom input adalah <script>location.href(‘http://www.hacked.com’)</script> ini tidak akan dijalankan, karena akan disimpan sebagai kode pelolosan dari HTML, dan akan menjadi seperti ini: &lt;script&gt;location.href(‘http://www.hacked.com’)&lt;/script&gt;

Kode sekarang ini akan menjadi aman untuk ditampilkan di halaman atau di dalam email. Kami juga akan melakukan dua hal lagi saat pengguna mengirimkan formulir yaitu

  1. Hapus karakter yang tidak perlu (spasi ekstra, tab, baris baru) dari data input pengguna (dengan fungsi trim () PHP)
  2. Hapus garis miring terbalik atau backslash (\) dari data input pengguna (dengan fungsi PHP stripslashes ())

Langkah selanjutnya adalah membuat fungsi yang akan melakukan semua pemeriksaan untuk kita (yang jauh lebih nyaman daripada menulis kode yang sama berulang kali). Kami akan menamai fungsi test_input (). Sekarang, kita dapat memeriksa setiap variabel $ _POST dengan fungsi test_input (), dan skripnya dapat dibuat seperti ini

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

Perhatikan bahwa di awal skrip, kami memeriksa apakah formulir telah dikirimkan menggunakan $ _SERVER [“REQUEST_METHOD”]. Jika REQUEST_METHOD adalah POST, maka formulir telah dikirim – dan harus divalidasi. Jika belum dikirimkan, lewati validasi dan tampilkan formulir kosong. Namun, pada contoh di atas, semua kolom input bersifat opsional. Skrip berfungsi dengan baik meskipun pengguna tidak memasukkan data apa pun.

You may also like