|
Tutorial Perl:
Mengenal Variabel Lingkungan
Oleh : Yohanes Nugroho
Input
dengan metode GET
Input
form yang dikirim dengan metode GET akan dilewatkan
sebagai variabel lingkungan QUERY_STRING oleh
webserver, jadi sekalian topik ini dibahas di
tutorial bagian kedua ini. Sekarang coba buat
file html dengan body berisi baris-baris seperti
ini:
<form method ="get" actioan="http://langitbiru.hypermart.net/demos/env.pl">
Nama : <input type="text" name="nama"><br>
e-mail : <input type="text" name="mail"<br>
<input type="submit" value="kirim">
</form>
Yang
seharusnya akan tampil seperti ini:
Ketikkan
sembarang untuk input nama dan email, lalu klik
'kirim'. Jika saya masukkan input nama : Yohanes
Nugroho dan emailnya webmaster@langitbiru.hypermart.net,
maka nilai query string akan seperti ini:
QUERY_STRING = nama=Yohanes+Nugroho&mail=webmaster@langitbiru.hypermart.net
Dari
sana bisa dilihat bahwa teks dikirim dengan format
seperti ini:
-
antara setiap variabel dipisahkan dengan ampersand
(&)
-
spasi akan diubah menjadi plus (+)
Kalau
begitu Anda pasti bertanya, lalu + dan & dikodekan
jadi apa?. Mari kita coba ubah inputnya menjadi,
nama adalah Lia & Bob, email menjadi lb@langitbiru.hypermart.net.
Nilai query string akan seperti ini:
QUERY_STRING
= nama=Lia+%26+Bob&mail=lb@langitbiru.hypermart.net
jadi
ada tambahan lagi, karakter-karakter khusus akan
di-encode menurut nilai ascii-nya dalam heksadesimal.
Skrip berikut ini akan melakukan pemrosesan sehingga
nilai-nilainya dipisahkan dan dikembalikan (di-decode)
kebentuk asalnya agar bisa diproses:
#!/usr/local/bin/perl
print "Content-type: text/plain\n\n";
$input = $ENV{'QUERY_STRING'};
@data = split(/&/, $input);
foreach $datum (@data){
($key, $nilai)= split (/=/,$datum);
#plus dijadikan spasi
$nilai =~ tr/+/ /;
#lalu bil hexanya dipack
$nilai =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c",hex($1))/ge;
$FORM{$key}=$nilai;
}
foreach $var (keys %FORM){
print "$var = $FORM{$var}\n";
}
Sekarang
hasil keluarannya sudah lebih baik. Anda bisa
mencoba mengetikkan sembarang data dan elihat
hasilnya.
Sekarang saya jelaskan bagaimana pemrosesan ini
dilakukan. pertama kita ambil input dari variabel
lingkungan QUERY_STRING, lalu pisahkan setiap
variabel (yang dibatasi oleh &) dengan split.
Hasilnya ada di varibel array @data. Lalu untuk
setiap pasangan nama dan nilai variabel kita proses
lagi dalam loop foreach. Pisahkan nama dari nilai
dengan memakai split, lalu isi variabel nilai
akan diproses.
$nilai =~ tr/+/ /;
akan
mengubah plus menjadi spasi. Lalu untuk mem-pack
bilangan heksanya dilakukan dengan:
$nilai =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c",hex($1))/ge;
artinya,
ubah untaian karakter % yang diikuti dua bilangan
heksa (0-9, A-F) menjadi representasinya dalam karakter
ascii. Selanjutnya nilainya dimasukkan dalam variabel
%FORM, untuk bisa digunakan pada bagian selanjutnya
(sebenarnya kalau mau bisa langsung diproses).
|