You are on page 1of 30

CaraMengirimkanNilaiFormHTMLkedalamPHP

UntukmemahamiCaraMengirimkanNilaiFormHTMLkedalamPHP,kitaakanlangsungpraktek
denganmembuat2buahfile,yaknihalamanHTMLyangberisiformdengannamafileform.html,dan
halamanPHPyangakanberisikodeuntukmenampilkanhasilformdengannamafile:proses.php.
KarenakitaakanmengeksekusikodePHP,keduafileiniharusdijalankandenganXAMPPdan
beradadidalamfolderhtdoc.Untukcontohkaliinisayaakanmembuatfolderbelajar_formdidalam
folderhtdocXAMPP,sehinggauntukmengakseskeduahalamanadalahdarialamat
:http://localhost/belajar_form/form.htmldanhttp://localhost/belajar_form/proses.php(mengenaicara
installdanmenggunakanXAMPPtelahsayabahaspadatutorialCaraMenjalankanFilePHPdengan
XAMPP)
Sebagailangkahpertama,kitaakanmembuatfileform.htmlyangberisikodeHTMLsebagaiberikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

<!DOCTYPEhtml>
<head>
<metahttpequiv="ContentType"
content="text/html;charset=UTF8"/>
<title>BelajarFormPHP</title>
</head>

<body>
<h2>TutorialBelajarFormHTMLPHP
</h2>
<formaction="proses.php"method="get">
Nama:<inputtype="text"name="nama"
/>
<br/>
EMail:<inputtype="text"
name="email"/>
<br/>
<inputtype="submit"value="Proses
Data">
</form>
</body>
</html>

KodeHTMLdiatashanyaberisistrukturkodeHTMLsederhanadengan1buahformyangberisi2
textinputanuntuknamadanemail.Strukturforminipersissamadenganformkitabahaspada
bagianawaltutorialini.
Sebelumlangsungmembuathalamanproses.php,kitaakanmencobamelakukansedikitpercobaan
denganformHTMLini.Silahkancobainputkeduakotakisianforminidengannilaiapapundanklik
tombolsubmit.Ketikaandamenkliktombolsubmit,andaakanmendapatihalamanerrorseperti
berikutini:

Halamanerrortersebutmemberitahukitabahwahalamanproses.phptidakditemukan(yangmemang
belumkitabuat),namunperhatikanalamatURLpadaaddressbarwebbrowser,kitabisamelihatada
penambahansepertiberikutini:
http://localhost/belajar_form/proses.php?nama=duniailkom&email=duniailkom%40gmail.com
PerhatikanbahwaalamatURLsekarangtelahbergantimenjadiproses.php,yangkemudiandiikuti
dengan?nama=duniailkom&email=duniailkom%40gmail.com.Pesaninilahyangsebenarnyadi
kirimolehhalamanform.htmlsewaktukitamenkliktombolsubmit.
2

Tanda?menandakanawaldaridataform,dankemudiandiikutidengannamadariobjekformdan
nilainya,dalamcontohini,nilaiyangakandikirimadalahnama=duniailkom.Tanda&digunakan
sebagaitandapemisahnilaiobjekformyang1denganyanglain,kemudiandiikutidengannilai
keduaemail=duniailkom%40gmail.com.Tanda%40dalamkodeiniadalahkode
karakterHTMLuntukkarakter@yangbiasadigunakandidalamemail.
Jikaandamenambahkanobjekformketiga,makaalamatURLakansemakinpanjang.Kitabisa
melihatdatayangdikirimkarenapadasaatpembuatanform,sayamenggunakanmethod=get.
NamunjikaandamerubahformHTMLkitadenganmenggunakanmethod=post,makaandatidak
akanmelihatkarakterkarakterinididalamURL.
SelanjutnyakitaakanmencobamenampilkannilaiinidenganPHPpadahalamanproses.php.

CaraMenampilkannilaiFormHTMLdenganPHP
($_GETdan$_POST)
Setelahmembuathalamanform.htmlyangberisiformHTML,kitaakanmembuat
halamanproses.phpyangberisikodePHPuntukmenanganinilaidariformini.
Silahkanbuatfileproses.phpdengankodeprogramsebagaiberikut,dansavelahdidalamfolder
yangsamadenganform.htmlberada:
1
2
3
4
5

<?php
echo$_GET['nama'];
echo"<br/>";
echo$_GET['email'];
?>

SebelumkitamembahaskodeprogramPHPtersebut,silahkanbukakembalihalamanform.html,isi
kotakinputnamadanemail,lalukliktombolProsesData.Apabilatidakadaerror,makaakantampil
hasilberikutini:

Tampilandiatasadalahhasildari3bariskodeprogramPHPyangkitabuatdidalam
halamanproses.php.
3

UntukmengambilnilaiformHTML,PHPmenyediakan2buahvariabelglobalyaitu
variabel$_GETdan$_POST.Kitamenggunakanvariabel$_GETjikapadasaatpembuatanform
menggunakanatributmethod=get,danmenggunakanvariabel$_POSTjikaformdibuat
denganmethod=post.
Keduavariabelinisebenarnyaadalaharray,sehinggacaramengaksesnilaidariformadalahdengan
cara:$_GET[nama_objek_form].
nama_objek_formadalahnilaidariatributnamedidalamform.Jikakitamemilikitagdengankode
HTML<inputtype=textname=nama/>,makauntukmengaksesnilainyaadalah
dengan$_GET[nama],danuntuktag<inputtype=textname=email/>diaksesdengan
nilai$_GET[email].
Sebagailatihan,silahkanandamenggantiatributmethoddalamfileform.htmlmenjadi:

<formaction="proses.php"method="post">
Laluubahjugafileproses.phpmenjadi:

1
2
3
4
5

<?php
echo$_POST['nama'];
echo"<br/>";
echo$_POST['email'];
?>

DanPHPakanmenampilkanhasilyangsama,namunkaliiniformdikirim
menggunakanmethod=post.

DidalamtutorialkaliinikitatelahmembahasdasarCaraMenampilkanHasilFormHTMLdengan
PHP,namunapayangkitabahasdisinihanyacarapalingdasaruntukmenampilkannilaiform
denganPHP.DalamtutorialFormPHPselanjutnyakitaakanmembahaslebihdalamtentang
perbedaanpengirimanformdenganmethodGETdanPOST.

KeunggulandanKelemahanMethodFormGET
Kelemahanyangpalingjelasjikakitamenggunakanmethod=getadalahnilaidariformdapatdilihat
langsungdidalamURLyangdikirimkan.Jikaandamembuatformuntukdatadatayangsensitif
sepertipassword,makaformdenganmethod=getbukanlahpilihanyangtepat.
Formdenganmethod=getdisarankanuntukformyangberfungsimenampilkandata,yaitudimana
hasilisianformhanyadigunakanuntukmenampilkandata,sesuaidenganartikatagetyangbisa
berarti:ambil.Sehinggamethod=getsebaiknyadigunakanuntukformyangmengambildatadari
database.
Salahsatupenggunaanmethod=getyangumumdigunakanadalahpadaformpencarian(form
search).DenganmembuathasilinputanformterlihatjelasdalamURL,pengunjungwebbisadengan
mudahmenebakalurkerjadarisituskita.Bahkanpengunjungbisamembuataplikasipencarian
sendiridenganmemanfaatkanfasilitasini.
Sebagaicontoh,didalamsitusduniailkom,kotakinputsearchdikananatashalamaninidibuat
denganmethod=get.MisalkankitainginmencariseluruhpostinganyangberkaitandenganForm
PHP,makakitabisamengetikkankataFormPHP,kemudianmenkliktombolenterdikeyboard.
Beberapasaatkemudian,hasilpencarianakanditampilkan.JikadiperhatikanalamatURLpadaweb
browser,akanberubahmenjadi:
http://www.duniailkom.com/?s=form+php&submit=Search
HasilURLinimerupakanquerypencariandefaultyangdigunakanolehwordpress(CMSyag
digunakandiduniailkom).
Setelahnamadomainwww.duniailkom.com,selanjutnyakitamelihatkarakter?
s=form+php&submit=Search.Karakterkarakteriniadalahhasilformatformdenganmetode=get.
Tanda?menandakanawalnilaiform,tanda+untukmenandakanspasi,dantanda&untuk
memisahkanobjekform.Denganmemanfaatkanketeranganini,kitabisamelakukanpencarian
hanyamelaluiURLsecaralansung,tanpaharusmelaluiform.
Sebagaicontoh,jikaandainginmencarisemuapostingandengankatakunciIntegerdalamPHP,
makaandabisamenggunakanlinkberikut:
http://www.duniailkom.com/?s=integer+dalam+php&submit=Search
Untukmengujinya,silahkancopypastetexttersebutkeaddressbarwebbrowser,dan
situsduniailkomakanlangsungmenampilkanhasilpencariandengankatakunciIntegerdalam
PHP.Halinimembuathalamanwebmenjadilebihfleksibel.
Untukcontohlainnya,jikaandamengikutitutorialFormHTMLinidariPart1,makakitamemiliki
fileproses.phpyangberfungsiuntukmemproseshasilform.Fleksibilitasyangdiberikanoleh
variabel$_GETmembuatkitabisamenampilkannilaidalamproses.phptanpamenggunakanform
5

samasekali.
Jikaisidarifileproses.phpadalah:
1
2
3
4
5

<?php
echo$_GET['nama'];
echo"<br/>";
echo$_GET['email'];
?>

KitabisamembuatlangkahyangsamaseperticontohdidalampencarianIntegerdalam
PHPsebelumnya.SekarangcopypasteURLberikutinikedalamaddressbarweb
browser(pastikanaplikasiXAMPPsudahberjalandanfileproses.phpberadadidalam
folderbelajar_form):
http://localhost/belajar_form/proses.php?nama=fajar&email=fajar%40gmail.com

Danhasiltampilanhalamanproses.phpakanmenampilkannamafajardanalamat
emailfajar@gmail.com.HasilinididapathanyadenganmenginputnamatersebutdenganURL(tanpa
form).
DaricontohinikitabisamelihatbahwaPHPmendeteksinilaidarimethod=get,hanyaberdasarkan
URLyangdiberikan.Caramengakalivariabel$_GETtanpaforminiseringdigunakansebagai
saranauntukmengirimsebuahnilaidarisatuhalamanPHPkehalamanlainnya(seringdigunakan
untukmenampilkanpesanerrorkepadauser).
Karenasifatmethod=getyangharusmenggunakanURLuntukmengirimdataform,PHPmembatasi
hanyabisamemproses1024karaktersaja.Sehinggajikaandamemilikiformyangisinya
kemungkinanakanmelebihi1024karakter,sebaiknyamenggunakanmethod=post.

KeunggulandanKelemahanMethodFormPOST
Keuntunganmengunakanmethod=postdalampembuatanformPHPadalahbahwaisidariform
tidakditampilkandiURL,sehinggamethodinisesuaiuntukdatadatayangbersifatsensitif
sepertiusernamedanpassword.
Sesuaidengannamanya,method=postdisarankandigunakanuntukformyangdigunakanuntuk
6

menambahdata(postingdata)atausebuahprosesyangakanmengubahisidatabase,seperti
queryInsert,Delete.Contohpenggunaanmethod=postiniseringdigunakanuntukform
registerdanformloginyangdiaggapbersifatrahasia.
Jikakitamembuatformuntukkeperluanuploadfile(menggunakantag<inputtype=file>),makakita
harusmembuatformdenganmethod=post.

Sebagaikesimpulanterakhir,pilihanantaramethod=getdenganmethod=postbergantungkepada
tingkatsensitifitasdata.Untukdatayangsensitifsepertipasswordatauyangmelakukansuatu
perubahankedatabase,sebaiknyamenggunakanmethod=post.Namununtukdatayangditujukan
untukmenampilkan,ataumengambilsesuatudaridatabase,sebaiknyamenggunaanmethod=get.

PengertianVariabelSuperGlobaldalamPHP
Variabel$_GETdan$_POST(danjuga$_REQUEST)didalamPHPtermasukkedalamkelompok
variabelyangdikenaldenganVariabelSuperGlobal.
VariabelSuperGlobalsadalahvariabelkhususdidalamPHPyangbisadiaksesdarihalamanPHP
manapuntanpaperlumendefinisikannyaterlebihdahulu,danuntukmengaksesvariabelinikitajuga
tidakperlumenggunakankeywordglobal(sebagaimanavariabelglobalpadaumumnya)
Selainvariabel$_GET,$_POSTdan$_REQUEST,PHPmasihmemilikibeberapa
variabelsupergloballainnyaseperti$_COOKIE,$_SESSION,dan$_SERVER.Cirikhususuntuk
variabelglobaldidalamPHP,diawalidengantanda$_.Namunpadatutorialinikitahanyafokus
kepadavariabel$_GET,$_POSTdan$_REQUEST.
Variabel$_GET,$_POSTdan$_REQUESTmerupakantipedataarray,sehinggauntuk
mengaksesnilainya,kitamenggunakancaraaksesarrayyaknidenganmenggunakankurungsiku
seperti:$_GET[nama]dimananamaadalahnilaidariatributnamepadaobjekformyangakan
diakses.

Perbedaanvariabelglobal$_GET,$_POSTdan
$_REQUEST
SepertiyangtelahkitapraktekkandalamtutorialCaraMenampilkanHasilFormHTMLdenganPHP,
kitatelahmengetahuibahwajikaformdikirimmenggunaanmethod=getmakadidalamPHPkita
mengaksesnyadenganvariabel$_GET,namunjikaformdibuatmenggunakanmethod=post,kita
mengaksesnyadenganvariabel$_POST.
Bagaimanajikapadasaatmemprosesformkitatidakmengetahuidenganpastiapakahformdikirim
denganGETatauPOST?PHPmenyediakanvariabel$_REQUESTsebagaisalahsatusolusinya.
Variabel$_REQUESTmenampungnilaiformyangdikirimdenganmethod=get,
maupunmethod=postsecarabersamaan.
Untukmencobanya,silahkanjalankanfileform.htmldenganisikodeHTMLsebagaiberikut:

1
2
3
4
5
6
7
8
9
10
11
12
13

<!DOCTYPEhtml>
<head>
<metahttpequiv="ContentType"
content="text/html;charset=UTF8"/>
<title>BelajarFormPHP</title>
</head>
<body>
<h2>TutorialBelajarFormHTMLPHP
</h2>
<formaction="proses.php"method="get">
Nama:<inputtype="text"name="nama"
/>
<br/>
8

14
15
16

EMail:<inputtype="text"
name="email"/>
<br/>
<inputtype="submit"value="Proses
Data">
</form>
</body>
</html>

Halamanform.htmldiataspersissamadenganyangkitagunakanpadatutorialsebelumnya,namun
untukhalamanproses.php,kitaakanmodifikasidenganmenggunakanvariabel$_REQUEST:

1
2
3
4
5

<?php
echo$_REQUEST['nama'];
echo"<br/>";
echo$_REQUEST['email'];
?>

Jikaandamenjalankanform.htmldanmenkliktombolProsesData,makahasilformakan
ditampilkansebagaimanamestinya.Andajugabisamengubahmethodformmenjadipost,dan
variabel$_REQUESTakantetapmenampilkanhasilform.
Jadi,variabelapayangsebaiknyadigunakan?apakah$_GET,$_POSTatau$_REQUEST?
Jawabannyatergantungkepadadesainkodeprogramyangdirancang.Jikaandadapatmemastikan
bahwaformakandikirimdenganmethod=get,makagunakanvariabel$_GET,jikafromanda
menggunakanmethod=post,makagunakan$_POST,namunjikametodanyatidakdapatdipastikan,
variabelsuperglobal$_REQUESTbisamenjadisolusi.
Selainmenampunghasilformgetdanpost,variabel$_REQUESTjugamenampung
nilaidaricookie,atauvariabelsuperglobals$_COOKIE.Kitaakanmembahas
tentangcookiedalamtutorialPHPlainnya.

PentingnyaMelakukanValidasiNilaiForm
Nilaiyangtelahdiinputolehuserataupengunjungweb,tidakbisabegitusajadisimpanlangsungke
dalamdatabase.Karenakitatidaktahuapakahnilaitersebuttelahsesuaidengannilaiyangkita
kehendaki.Misalkanapakahnilaitersebutharusberupaangka,atauhanyabisaberupahuruf,atau
apakahhanyabisadiinputdalamrangetertentusaja.
Dalamkasusyangekstrim,seoranguserbisasajamemasukkankodescriptatautagHTMLyang
bisamerusaksituskita,halinidikenaldenganCrosssiteScripting.Sebuahprosesvalidasinilai
merupakanhalyangsangatpentingdalammerancangform.Khususuntukvalidasi
mencegahCrosssiteScriptingdanjugaHTMLinjectioniniakansayabahaspadatutorialform
PHPberikutnya.
Dalampembahasantutorialvalidasiformini,sayamasihmenggunakancontoh
halamanform.htmlyangpernahkitabuatpadatutorialsebelumnya,berikutadalahkodeHTML
untukhalamanform.html:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<!DOCTYPEhtml>
<head>
<metahttpequiv="ContentType"content="text/html;
charset=UTF8"/>
<title>BelajarFormPHP</title>
</head>
<body>
<h2>TutorialBelajarFormHTMLPHP</h2>
<formaction="proses.php"method="get">
Nama:<inputtype="text"name="nama"/>
<br/>
EMail:<inputtype="text"name="email"/>
<br/>
<inputtype="submit"value="ProsesData">
</form>
</body>
</html>

10

MemeriksaKetersediaanVariabelFormdenganFungsi
isset()
Validasipertamayangpalingsederhanadanhampirselaluadadalamtiapprosesvalidasiform
dalamPHPadalahmemeriksaapakahobjekformtersebutsudahtersediaatautidak.Sebagai
contohsederhananya:apakahvariabel$_GET[nama]tersediauntukdiprosesatautidak.
ProsesmemeriksaketersediaanvariabelinimenjadipentingkarenaPHPakanmengeluarkanpesan
peringatanjikakitamengaksesnilaisebuahvariabelyangbelumdidefenisikanterlebihdahulu.
Sebagaicontoh,jikakitamengakseslangsunghalamanproses.php(tanpamelalui
halamanform.html)dantanpamenambahkanURL(sepertipembahasanpadatutorialPerbedaan
MetodePengirimanFormGETdanPOST)PHPakanmenampilkanpesanperingatansepertiberikut
ini:

Notice:Undefinedindexadalahpesanerroryangterjadikarenakitalangsungmenampilkan
variabel$_GET[nama]dan$_GET[email]yangmemangbelumdisetsebelumnya.
Untukmemeriksaapakahsebuahobjekformtelahdidefenisikanatautelahdisetsebelumnya,kita
bisamenggunakanfungsibawaanPHP:isset().Fungsiisset()akanmenghasilkannilaitruejika
sebuahvariabeltelahdidefenisikan,danfalsejikavariabeltersebutbelumdibuat.
Sebagailangkahantisipasi,sayaakanmembuatprosesvalidasiuntukmenangani
variabel$_GETyangbelumdiset,berikutadalahmodifikasifileproses.php:

1
2
3
4
5
6
7

<?php
if(isset($_GET['nama']))
{
echo$_GET['nama'];
}

echo"<br/>";
11

8
9
10
11
12
13

if(isset($_GET['email']))
{
echo$_GET['email'];
}
?>

Sekarang,fileproses.phptidakakanmenghasilkanerrorapabiladiaksestanpamelaluiform.html.
Namunperubahankodetersebuttidakterlalubergunakarenatidakmemberikanpesanerroryang
jelas.Berikutadalahmodifikasifileproses.phpagarlebihinformatif:

1
2
3
4
5
6
7
8
9
10
11

<?php
if(isset($_GET['nama'])ANDisset($_GET['email']))
{
echo$_GET['nama'];
echo$_GET['email'];
}
else
{
echo"Maaf,andaharusmengakseshalamaninidari
form.html";
}
?>

PadakodePHPdiatassayamengharuskannilai$_GET[nama]dan$_GET[email]tersedia,baru
nilaiditampilkan,namunjikatidakada,akanditampilkanpesanbahwahalamaninihanyabisa
diaksesdariform.html.

MemeriksaApakahVariabelFormTelahDiisi
Fungsiisset()yangkitabahassebelumnyahanyamemeriksaapakahsebuahobjekformadaatau
tidak.Fungsiisset()tetapbernilaitruemeskipunusertidakmengisiformsamasekali(variabelform
bernilaikosong,namunvariabeltersebutdianggaptelahdiset).
Untukmemeriksaapakahsebuahobjekformtelahdiisiatautidak,kitabisamenggunakan
fungsi:empty().
Fungsiempty()akanmenghasilkannilaifalsejikasebuahvariabeltelahdiisi,danbernilaitruejika
variabeltersebutbelumdiisi.DenganmenggunakanstukturIFdanfungsiempty(),kitabisa
12

membuatlogikavalidasiobjekformmanasajayangdianggapperlu(harusdiisi)danmanayang
bolehdikosongkan.Dankemudianmenampilkanpesanerroryangsesuai.
Sebagaicontoh,sayaakanmemodifikasifileproses.phpagarmenampilkanpesanerrorjikakotak
inputnamatidakdiisi.BerikutadalahkodePHPpadahalamanproses.php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

<?php
if(isset($_GET['nama'])ANDisset($_GET['email']))
{
$nama=$_GET['nama'];
$email=$_GET['email'];
}
else
{
die("Maaf,andaharusmengakseshalamaninidari
form.html");
}

if(!empty($nama))
{
echo"Nama:$nama<br/>Email:$email";
}
else
{
die("Maaf,andaharusmengisinama");
}
?>

DalamkodePHPdiatas,sayamemodifikasibeberapabagiankodeprogram.
PadalogikaIFpertama,sayamelakukanpengecekanapakah
variabel$_GET[nama]dan$_GET[email]tersediaatautidak.Jikatersediamakapindahkan
nilainyakevariabel$namadan$emailagarlebihmudahuntukdiproses.Namunjikatidak,
fungsidie()akanmenghentikanprosesdanmenampilkanpesankesalahan.
PadalogikaIFkedua,sayamemeriksaapakahvariabel$namakosongatautidakdengan
fungsi!empty().Fungsi!empty($nama)akanmenghasilkannilaitruehanyajika
variabel$namatidakkosong(perhatikantanda!sebagaipembaliklogikaempty()).Namun
jika$namaternyatakosong(tidakdiisi),makatampilkanpesankesalahan.

13

MenyeleksiTipeDataObjekForm
Setelahobjekformdipastikantersedia,tidakkosong,validasiberikutnyayangbiasanyadilakukan
adalahmemastikantipedatadanrangedatayangdiinputolehuser.
Untukmengecektipedatasebuahvariabel,PHPmenyediakanbeberapafungsitergantungtipe
datanya,yaknifungsiis_string(),is_int(),is_float(),is_numeric(),is_bool(),
is_array(),danis_object().Sesuaidengannamanya,masingmasingfungsitersebutakan
mengecektipedatadarivariabelyangditest.
Diantarafungsifungsidiatas,fungsiis_numeric()mungkinbutuhsedikitpenjelasan.
Fungsiis_numeric()akanmengecekapakahsebuahtipedatamerupakanangkabaik
itufloatatauinteger.
Khususobjekformvariabelangkasepertiumur,biasanyaselainmenyeleksiapakahnilainyaberupa
angkainteger,kitamungkinjugamenambahkanaturanbahwanilaiumurharusdiatas17tahun.
Untukmenambahkanfungsiini,fungsiis_int()dapatdikombinasikandenganstrukturIF.
Sebagaicontohsayaakanmenambahkanvalidasiuntuktaginputnamabahwanamatidakboleh
diisidenganangka.Untukkeperluaninisayaakanmenggunakanfungsiis_numeric().Berikut
adalahmodifikasifileproses.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

<?php
if(isset($_GET['nama'])ANDisset($_GET['email']))
{
$nama=$_GET['nama'];
$email=$_GET['email'];
}
else
{
die("Maaf,andaharusmengakseshalamaninidari
form.html");
}

if(empty($nama))
{
die("Maaf,andaharusmengisinama");
}
else
{
if(is_numeric($nama))
{
die("Maaf,namaharusberupahuruf");
}
else
{
echo"Nama:$nama<br/>Email:$email";
}
}
?>

Dalamkodediatas,sayamenambahkan1lagilogikaIFuntukmenyeleksiapakah
variabel$namaberisiangkanumerik(integerataufloat).Jika$namabertipenumerik,maka
14

tampilkanpesanerror.

DidalamtutorialformPHPkaliinikitatelahmempelajaricaramenvalidasinilaiinputanform.Namun
apayangtelahkitapelajaridisinihanyasebagiankecildariprosesvalidasiyangsebenarnyaharus
dilakukan.Misalnya,untukmenfiltervariabel$namadiatas,akanlebihcocokmenggunakanregular
expressiondaripadafungsiis_numeric(),namunyangpentingkitatelahbisamenangkapcara
pembuatanvalidasiform.
Didalamtutorialberikutnya,masihberkaitandenganprosesvalidasiform,kitaakanmempelajari
tentangCaraMencegahCrosssiteScriptingdanHTMLinjection.

15

PengertianCrosssiteScriptingdanHTMLinjection
CrosssiteScriptingatauseringdisingkatdenganXSSadalahjenisserangankesebuahsitus
dengancaramenyisipkankodescript(biasanyaJavaScript)kedalamsebuahsitus.Halinihanya
akanberhasiljikasitustersebutmemilikifituruntukmenampilkankembaliisianformkewebbrowser,
sepertiformkomentar.SedangkanHTMLinjectionadalahistilahyanglebihspesifikkepada
caramenyisipkankodeHTMLkedalamsebuahsitus.
Sebagaiprogrammerweb,penangananuntukCrosssiteScriptingmaupunHTML
injectionmerupakanhalyangsangatpenting,terutamadalampembuatankodeformdenganPHP.
Karenaformpadadasarnyadapatdiinputolehsiapasaja,makakitaperlumemproteksisitusdari
kodekodeberbahayayangbisadiinputolehusermelaluiform.

ContohCrosssiteScriptingdanHTMLinjection
AgarlebihmemahamimaksuddariCrosssiteScriptingdanHTMLinjection,kitaakancoba
menginputnyamelaluicontohhalamanform.htmldanproses.phpdaritutorialsebelumnya.
Silahkanbukahalamanformkita(form.html),laluinputkodedibawahinikedalamdalamsalahsatu
kotakinputanform:

<script>alert('Selamatdatangdiduniailkom')
</script>
Danandaakanmendapatitampilanberikut:

TampilantersebutadalahhasildarikodeJavaScriptyangbarusajakitainputmelaluiform.Kode
tersebutdapatberjalankarenapadahalamanproses.phpkitalangsungmenampilkandatayang
16

diinputolehusertanpamelakukanprosesfilter.
HalinisangatberbahayakarenadengankodeJavaScriptseseorangbisamelakukanhampir
segalanyadengansituskita.Tidakhanyasekedarmenampilkanucapanselamatsepertikodediatas,
tetapiseseorangjugabisamerubahbackground,mengubahtampilanseluruhweb,bahkan
mengarahkanpengunjungkesituslain(redirect).
Hasildiatassayaperolehmenggunakanwebbrowsermozillafirefox.Ketikasaya
menggunakangooglechrome,tampilanjavascripttersebuttidakmunculkarenagoogle
chromememilikimekanismepencegahankodejavascriptinternalketikadiinputmelalui
form.
Sebagaicontohlainnya,seseorangbisamenginputkodeberikutkedalamkotakinputnama:
Dunia<br><br><br><br><br><br><br><br>
<br><br>Ilkom

Walaupunkodediatastidakmengandungscript,namunkodeHTMLtersebutakanmembuattampilan
hasilformmenjadiberantakan(bayangkanjikakitamemilikihalamanyangberisitabelberisinama
namaseluruhuser,dankodediatasakanmenghancurkandesainwebyangtelahdirancang).

CaraMencegahCrosssiteScriptingdanHTML
injection
SalahsatucarasederhanauntukmenghindariCrosssiteScriptingdanHTMLinjectionadalah
denganmembuatkarakterkarakteryangmemilikimaknadidalamHTMLdanJavaScriptuntuk
17

diubahmenjadinamedentity,yaitumenkonversikarakterkhususseperti<menjadi&lt,dan
karakter>menjadi&gt.Ataucaralainnyaadalahdenganmenghilangkansamasekaliseluruhtag
HTMLatauscriptdariinputanuser.
Penjelasanlebihlanjuttentangnamedentity(danjuganumericentity)karakterHTML
pernahkitabahaspadatutorialCaraMemasukkanKarakterKhususkedalamHTML.
Untukkeduakeperluanini,PHPmemilikifungsihtmlspecialchars()danfungsistrip_tags().
Fungsihtmlspecialchars()akanmengkonversiseluruhkarakterkhususHTMLmenjadinamed
entitysehinggatidakakandiprosesolehwebbrowser.Sedangkanfungsistrip_tags()akan
menghapusseluruhtagHTMLdariinputanuser.
Sebagaicontoh,kitaakanmengupdatehalamanproses.phpagarbisamencegahseseorang
menyisipkanCrosssiteScriptingdanHTMLinjection.BerikutadalahperintahPHPpadafile
proses.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

<?php
if(isset($_GET['nama'])AND
isset($_GET['email']))
{
$nama=$_GET['nama'];
$email=$_GET['email'];
$nama=htmlspecialchars($nama);
$email=strip_tags($email);
}
else
{
die("Maaf,andaharusmengakseshalaman
inidariform.html");
}

if(empty($nama))
{
die("Maaf,andaharusmengisinama");
}
else
{
if(is_numeric($nama))
{
die("Maaf,namaharusberupa
huruf");
}
else
{
echo"Nama:$nama<br/>Email:
$email";
}
}
?>

Didalamkodediatas,sayahanyamenambahkanfungsihtmlspecialchars()untukvariabel$nama,
danfungsistrip_tags()untukvariabel$email.
18

Untukmengujinya,silahkanandacobamemasukkankodeJavaScriptkitasebelumnyakedalam
kotakinputnama,yakni:
<script>alert('Selamatdatangdiduniailkom')
</script>

dannilaiberikutkedalamkotakinputemail:
Dunia<br><br><br><br><br><br><br><br>
<br><br>Ilkom

Kemudianperhatikanhasiltampilandariproses.php.Sepertiyangdirancang,kaliinihasilinputan
tersebutakandifilteragarlebihaman.
Jikaandamelihatkodeyangdihasilkan,makaakanterlihatbahwafungsihtmlspecialchars()akan
mengubah

<script>alert('Selamatdatangdiduniailkom')
</script>
menjadi

&lt;script&gt;alert('Selamatdatangdi
duniailkom')&lt;/script&gt;
Perhatikanbahwakarakterkhususseperti<dan>telahdiubahmenjadinamedentity.
Sedangkanuntukkotakinputanemail,seluruhtag<br>telahdifilterdandihapussecaraotomatis.

19

Validasidenganhtmlspecialcharsataustrip_tags?
Pilihanapakanmenggunakanfungsihtmlspecialchars()ataustrip_tags()tergantungkepadaalur
logikaformyangkitabuat.Untukisianformsepertiuser_name,email,danalamatakanlebihaman
jikakitatidakmembolehkantagHTMLsamasekali(menggunakanfungsistrip_tags()),namununtuk
kotakformkomentar,mungkinkitaakanmembolehkanbeberapataguntukdiprosessepertitag<b>,
tag<i>,ataumungkinjugatag<a>.
Fungsistrip_tags()memilikiargumenkeduayangbisadiisidengantagtagHTMLapasajayang
dibolehkan.Jikakitamembolehkantag<a>,<b>dantag<i>untukvariabel$komentar,maka
penulisannyabisadibuatmenjadi:

$komentar=strip_tags($komentar,'<a><b><i>').
Sedangkanuntukfungsihtmlspecialchars(),jikaandainginkaraktertandakutip()jugadiubah
menjadinamedentity,kitabisamenambahkan1parameteroptionaluntuk
fungsihtmlspecialchars(),denganpilihanENT_QUOTES.Sehinggadalamcontohvariabel$nama,
kitabisamenulisnyamenjadi:

$nama=htmlspecialchars($nama,ENT_QUOTES);
Dengandemikian,jikadiinput:

<script>alert('Selamatdatangdiduniailkom')
</script>
Akandiprosesmenjadi:

&lt;script&gt;alert(&#039;Selamatdatangdi
duniailkom&#039;)&lt;/script&gt;
20

Perhatikanbahwakarakterkutip()digantimenjadikode&#039.

Dalamtutorialkaliini,kitatelahmembahaspenggunaanfungsihtmlspecialchars(),dan
fungsistrip_tags()untukmembuatformkitalebihaman.Dalamtutorialberikutnya,kitaakan
membahastrikdalammenampilkanpesankesalahandihalamanform.html,bukandi
halamanproses.phpsepertiyangkitatampilkanpadatutorialinidantutorialformPHPsebelumnya.

21

CaraMengirimVariabelAntarHalamanPHP
DalamPHPterdapatbeberapacarauntukmengirimvariabelantarhalaman.Salahsatunyaadalah
denganmemanfaatkancarapengirimanformdenganmethod=GET.Jikakitamengirimformdengan
metodeGET,makahasildariformakanditambahkandidalammenggunakanvariabel
superglobal$_GET.
Sebagaicontoh,jikadidalamformterdapatkotakinputdenganatributname=user_nameyangdiisi
denganduniailkom,makaketikadikirimuntukdiproseskehalamanproses.php,di
dalamURLakanmenjadi:

proses.php?user_name=duniailkom
dandidalamhalamanproses.php,variabel$_GET[user_name]akanberisiduniailkom.
Dengancarainikitabisamengirimvariabeldarisebuahhalamankehalamanlain.Misalkankita
membuatsebuahkondisilogikadenganPHP,danjikalogikanyasalahmakatampilkansebuahlink
yangmenyatakanbahwaalamattidaklengkap.Pengirimanpesaninibisaditulissebagaiberikut:

proses.php?pesan=alamat+tidak+lengkap.
Ketikausermenkliklinktersebut,padahalamanproses.phpakanmemilikisebuah
variabel$_GET[pesan]yangberisi:alamattidaklengkap.
Kitabisamemanfaatkaniniuntukberbagaihal,dandalamtutorialkaliinikitaakanmenggunakancara
iniuntukmenampilkanpesankesalahandariform.

UntukdapatmengirimkanvariabelmelaluiURL,terdapatbeberapaaturanpenggunaan
karakter.Berikutadalahcontohhasilpengirimandarisebuahhalaman:

proses.php?
nama=dunia_ilkom&email=duniailkom@gmail.com&pesan=welcome
perhatikanbahwatanda?digunakanuntukmengawalipengirimanvariabel,
tanda=digunakansebagaipengisinilaivariabel,tanda&untukmemisahkanantara
variabelyangsatudenganyanglain,dantanda+sebagaipenggantikarakterspasi.

Redirecthalamandenganfungsiheader(Location:)
Fungsiheader()didalamPHPdigunakanuntukmemprosesHTTPheader.Fungsiheader()memiliki
banyakfitur,namunyangakankitamanfaatkanadalahfituruntukmengirimuserkehalamanlainatau
dikenaldenganistilah:redirect.
Untukmengirimuserkesebuahhalaman,kitamenggunakanLocation:halaman.htmlsebagai
22

argumenfungsiheader().Misalkankitainginmengirimuserkehalamanpendaftaran.htmlpada
situsduniailkom.com,makapenulisanfungsiheader()adalahsebagaiberikut:
header("Location:
http://www.duniailkom.com/pendaftaran.html")
HalamanyangditujutidakharusberupahalamanHTML,tetapijugahalamanPHP,ataubahkanfile
multimediasepertigambar.Fituriniakankitamanfaatkanuntukmenampilkanpesankesalahanform
dalamPHP.

CaraMenampilkanPesanKesalahanForm
DalamtutorialsebelumnyatentangValidasiFormuntukMencegahCrosssiteScriptingdanHTML
injection,kitatelahmembuatprosesvalidasiformdanmenampilkanpesankesalahanform
berdasarkankondisiyangterjadi.Namunpesankesalahantersebuthanyaditampilkanpada
halamanproses.php.Jikauseringinmengubahisianform,iaterpaksakembali
kehalamanform.htmluntukmemperbaikikesalahanformtersebutdengancaramengetikmanual
diwebbrowser.
Salahsatufiturpengisianformyangumumdigunakanadalahketikaisianformditemukankesalahan,
makauserakandikembalikankehalamanawalform,besertapesankesalahan.Untukmenghasilkan
fitursepertiini,kitaakanmemanfaatkanfungsiPHP:header().
Kembalimenggunakanhalamanform.htmldanproses.phpyangkitagunakandalamtutorialtutorial
sebelumnya,kaliinisayaakanmemodifikasihalamanproses.phpagarbisamemanfaatkan
fungsiheader().Berikutadalahmodifikasifileproses.php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

<?php
if(isset($_GET['nama'])AND
isset($_GET['email']))
{
$nama=$_GET['nama'];
$email=$_GET['email'];
$nama=htmlspecialchars($nama);
$email=strip_tags($email);
}
else
{
header("Location:form.php?
error=variabel_belum_diset");
}

if(empty($nama))
{
header("Location:form.php?
error=nama_kosong");
}
else
{
if(is_numeric($nama))
{
header("Location:form.php?
23

26
27
28
29

error=nama_harus_huruf");
}
else
{
echo"Nama:$nama<br/>Email:
$email";
}
}
?>

Darikodeproses.phpkitasebelumnya,sayahanyamengubahbagianerrormenggunakan
fungsiheader().Namunperhatikanbahwasayamengirimkanvariabelerrorkepada
halamanform.php,pesaninilahyangakandiprosespadahalamanform.php.
Untukhalamanform.html,sayaakanmengubahnamafilemenjadiform.php.Perubahanini
diperlukankarenapadahalamanform.htmlmemerlukanprosesPHPuntukmenanganivariabelerror
yangdikirimdarihalamanproses.php.
Berikutadalahkodedarihalamanform.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

<?php
//ambilnilaivariabelerror
if(isset($_GET['error']))
{
$error=$_GET['error'];
}
else
{
$error="";
}

//siapkanpesankesalahan
$pesan="";
if($error=="variabel_belum_diset")
{
$pesan="<h3>Maaf,andaharusmengakses
halamaninidariform.php</h3>";
}
if($error=="nama_kosong")
{
$pesan="<h3>Maaf,andaharusmengisi
nama</h3>";
}
if($error=="nama_harus_huruf")
{
$pesan="<h3>Maaf,namaharusberupa
huruf</h3>";
}
?>

<!DOCTYPEhtml>
<head>
<metahttpequiv="ContentType"
content="text/html;charset=UTF8"/>
<title>BelajarFormPHP</title>
</head>
<body>
<h2>TutorialBelajarFormHTMLPHP
24

39
40
41
42
43
44
45
46

</h2>
<?php
echo$pesan;
?>
<formaction="proses.php"method="get">
Nama:<inputtype="text"name="nama"
/>
<br/>
EMail:<inputtype="text"
name="email"/>
<br/>
<inputtype="submit"value="Proses
Data">
</form>
</body>
</html>

Padahalamanform.phpsayamenambahkanbeberapakodePHPdiawalhalaman.KodePHPini
berfungsiuntukmenanganivariabelerroryangdikirimkandarihalamanproses.php.
Setelahmemindahkanvariabel$_GET[error]kedalamvariabel$erroragarmudahdiakses,
selanjutnyasayamembuatbeberapalogikaIFuntukmemeriksapesanerror,danmemberikan
pesankesalahanyanginginditampilkankedalamvariabel$pesan.
Variabel$pesaninikemudianakandisisipkandiawaltagform.
Untukmengujinya,silahkanandamencobaform.phptersebutdankliktombolProsesDatatanpa
memberikaninputapaapadidalamform,dansekarangpesankesalahanakantampildi
halamanform.php.

Andabisamengeksplorasipenggunaanfungsiheader()inilebihjauh.Misalkanjikaisian
formtelahsesuai,makaandabisameneruskanuserkehalamanlain,
25

sepertisukses.php,sehinggapengaturankodePHPlebihrapidimana
halamanproses.phpmurnidigunakanuntukpenangananprosesform.Dari
halamanproses.phpinikitabisamembawauserkehalamanlainyangkhusus
menanganihaltersebut.

Penanganancarakesalahanformsepertiinimembuatformmenjadilebihuserfriendly.Jikaanda
memahamiCSS,biasanyapesankesalahaniniditampilkandenganstyleyangberbedadarijudul
formagarlebihpas,namundalamtutorialiniandasetidaknyatelahmengetahuitrik
untukmenampilkanpesankesalahanformdenganPHP.Silahkanberekplorasidanmenambahkan
objekobjekformlainsebagaibahanlatihan.

26

FormyangOtomatisTerisijikaTerjadiKesalahan
Padasaatkitamendaftarsuatusitusmenggunakanform,ketikaadasuatukesalahan(misalnyauser
nameyangdiinginkansudahadayangmenggunakan),makakitadikembalikankehalamanregister
semuladenganpesankesalahan.Jikaandaperhatikan,seluruhformyangtelahdiisisebelumnya
secaraotomatisterisikembalisehinggakitatidakperlumenginputsemuaform,namunhanya
memperbaikibagianyangsalah.
Formyangterisisendiriiniakansangatmembantuuseruntukmengoreksiisianformyangsalah.
Bayangkanjikakitamengisiformdengan15kotakinputan,hanyakemudianterpaksamenginput
kembalisemuakotakinputantersebutkarenasalahmengisiformattanggalpadasalahsatuinputan.

Memanfaatkanvariabel$_GETdanfungsiheader
Untukdapatmembuatformyangotomatisterisiketikaterjadikesalahan,kitaakanmemanfaatkan
fiturvariabel$_GETdanfungsiheader()sepertidalamtutorialsebelumnya.
TriknyaadalahmenyambungURLdenganisianformsebelumnya,lalumenampilkannyakembalidi
dalamform.Agarlebihmudah,marikitalangsungkecontohprogram.
Kaliinisayaakanmemodifikasikodeprogramproses.phpagarbisamengembalikannilaiisianform
ketikaterjadikesalahan.Berikutadalahcontohprogramproses.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

<?php
if(isset($_GET['nama'])AND
isset($_GET['email']))
{
$nama=$_GET['nama'];
$email=$_GET['email'];
$nama=htmlspecialchars($nama);
$email=strip_tags($email);
$isi_form="&nama=$nama&email=$email";
}
else
{
header("Location:form.php?
error=variabel_belum_diset");
}
if(empty($nama))
{
header("Location:form.php?
error=nama_kosong".$isi_form);
}
else
{
if(is_numeric($nama))
{
header("Location:form.php?
error=nama_harus_huruf".$isi_form);
}
else
{
27

echo"Nama:$nama<br/>Email:
$email";
}
}
?>
Perhatikanpadabariske..dimanasayamenambahkanvariabel$isi_formyangditujukanuntuk
menyambungURL.Jikavariabel$namaberisiduniailkom,dan
variabel$emailberisiduniailkom@gmail.com,makaisivariabel$_isiformakanmenghasilkan
stringsebagaiberikut:

&nama=duniailkom&email=duniailkom@gmail.com
Stringtersebutselanjutnyaakanditambahkankedalamfungsiheader()untukdikirimke
halamanform.php(dikembalikankehalamanasalform)
Padahalamanform.phpkitaakanmenampungnilaidarivariabel$_isiforminidanmenampilkannya
didalamkotakinput.Berikutadalahmodifikasihalamanform.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38

<?php
//ambilnilaivariabelerror
if(isset($_GET['error']))
{
$error=$_GET['error'];
}
else
{
$error="";
}
//siapkanpesankesalahan
$pesan="";
if($error=="variabel_belum_diset")
{
$pesan="<h3>Maaf,andaharusmengakses
halamaninidariform.php</h3>";
}
if($error=="nama_kosong")
{
$pesan="<h3>Maaf,andaharusmengisi
nama</h3>";
}
if($error=="nama_harus_huruf")
{
$pesan="<h3>Maaf,namaharusberupa
huruf</h3>";
}

//Siapkanisianformjikaterjadi
kesalahan
if(isset($_GET['nama'])AND
isset($_GET['email']))
{
$nama=$_GET['nama'];
$email=$_GET['email'];
}
else
{
28

39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56

$nama="";
$email="";
}
?>
<!DOCTYPEhtml>
<head>
<metahttpequiv="ContentType"
content="text/html;charset=UTF8"/>
<title>BelajarFormPHP</title>
</head>
<body>
<h2>TutorialBelajarFormHTMLPHP
</h2>
<?php
echo$pesan;
?>
<formaction="proses.php"method="get">
Nama:<inputtype="text"name="nama"
value="<?phpecho"$nama"?>"/>
<br/>
EMail:<inputtype="text"
name="email"value="<?phpecho"$email"?
>"/>
<br/>
<inputtype="submit"value="Proses
Data">
</form>
</body>
</html>

Dalamhalamanform.phpinisayamenambahkodePHPuntukmenampunghasilkirimandari
halamanproses.phpdenganfungsi$_GET[nama]danfungsi$_GET[email],kemudian
memindahkannyakedalamvariabel$namadan$emailagarmemudahkanpenulisanprogram.
Selanjutnyapadatiapobjekform,sayamenambahkanatributvalueyangdiisidengannilai
variabel$namadan$email.Dengandemikian,ketikahalamanform.phpmenerima
pesannamadanemaildarihalamanproses.php,kotakisiantersebutakanlangsungterisi.
Untukmencobanya,kitaharusmembuatisianformnamadenganangkadanmengisiisianemail.
Kenapaharusmengisikotakisiannamadenganangka?Karenadenganmengisiformsecarasalah
(dimananamaseharusnyatidakbolehdiisidenganangka)makalogikaIFuntukmenanganipesan
kesalahanakanaktifdanuserakandikembalikankehalamanform.phpbesertaisianform.
Ketikauserdikembalikankehalamanform.php,perhatikanbagianwebaddresspadawebbrowser,
makakitabisamelihatpesanyangditeruskandarihalamanproses.php.Karenakitatelahmembuat
kodeuntukmenampungpesanini,kotakisianformnamadanemailakanterisisendirisecara
otomatis.

29

Dalamtutorialkaliini,kitatelahmempelajarisalahsatutipsuntukmembuatformmenjadilebihmudah
digunakan.Walaupuntidakharus,namunformyangterisisendiriakanmembuatpengunjungsitus
lebihefisiendalammengisiformketikaterjadikesalahan.
Dalamtutorialinisayahanyamenggunakan2buahkotakisiansematamatauntuk
menyederhanakanpembahasan,namunandabisamengembangkannyauntukseluruhkotakisian
yangadadidalamform,termasuksepertiradiobutton,textarea,danobjekformlainnya.

30

You might also like