Obrazci so eden najpomembnejših delov sodobnih spletnih strani. Z njimi uporabnik vnese podatke, brskalnik jih pošlje strežniku, PHP pa jih prebere, preveri in obdela.
Pomni: Pri obrazcu vedno sodelujeta dva dela: HTML obrazec za vnos podatkov in PHP koda za branje ter obdelavo poslanih podatkov.
Osnovna pravila
- Obrazec zapišemo z elementom
<form>. - Z atributom
actiondoločimo datoteko, ki bo podatke obdelala. - Z atributom
methoddoločimo način pošiljanja podatkov, najpogostejegetalipost. - Vsako polje, katerega vrednost želimo prebrati v PHP, mora imeti atribut
name. - Za boljšo preglednost in dostopnost je priporočljivo uporabljati element
<label>. - Pred obdelavo podatkov je priporočljivo preveriti, ali je bil obrazec res oddan.
Pozor: Če vnosno polje nima atributa name, njegova vrednost po oddaji obrazca ne bo na voljo v polju $_GET ali $_POST.
Primer HTML obrazca
Spodnji primer prikazuje preprost obrazec za naročanje slikarskega pribora. Uporabljeni so oznake <label>, ustrezni atributi in metoda post.
<!doctype html>
<html lang="sl">
<head>
<meta charset="utf-8">
<title>Obrazec</title>
</head>
<body>
<h1>Obrazec za naročanje slikarskega pribora</h1>
<form action="obdelaj.php" method="post" autocomplete="on">
<label for="izbor">Izdelek:</label>
<select name="izbor" id="izbor">
<option value="platno">Platno</option>
<option value="copic">Čopič</option>
<option value="radirka">Radirka</option>
</select>
<br><br>
<label for="kolicina">Količina:</label>
<input name="kolicina" id="kolicina" type="number" min="1" required>
<br><br>
<button type="submit">Pošlji</button>
</form>
</body>
</html>
Obrazec za naročanje slikarskega pribora
Pomni: Za količino je primernejši type="number" kot navadni type="text", ker že v obrazcu nakaže, da pričakujemo število.
PHP obdelava podatkov
Ko uporabnik obrazec odda, PHP podatke prebere iz polja $_POST ali $_GET, odvisno od izbrane metode. Pred branjem je priporočljivo preveriti način pošiljanja in nato vhodne podatke še preveriti.
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$kolicina = filter_input(INPUT_POST, 'kolicina', FILTER_VALIDATE_INT);
$izbor = filter_input(INPUT_POST, 'izbor', FILTER_DEFAULT);
if ($kolicina !== false && $kolicina !== null && $izbor !== null && $izbor !== '') {
echo "Naročili ste: " . $kolicina . " × " . htmlspecialchars($izbor) . ".<br>";
echo "Zahvaljujemo se vam za naročilo!";
} else {
echo "Podatki v obrazcu niso pravilno izpolnjeni.";
}
}
?>
Pozor: Podatkov iz obrazca ne uporabljamo slepo. Vedno preverimo, ali obstajajo in ali imajo pričakovano obliko.
Primerjava dela obrazca in PHP obdelave
| Del | Naloga |
|---|---|
| HTML obrazec | uporabniku omogoča vnos podatkov |
action |
določa, kam se podatki pošljejo |
method |
določa način pošiljanja podatkov |
| PHP koda | prebere, preveri in obdela podatke |
$_POST ali $_GET |
vsebuje poslane vrednosti obrazca |
Priporočila
- uporabljamo jasna imena polj,
- polja vedno povežemo z oznakami
<label>, - izberemo primeren tip vnosnega polja, na primer
email,numberalipassword, - preverimo, ali je bil obrazec oddan z ustrezno metodo,
- vhodne podatke preverimo tudi na strežniku,
- pri izpisu uporabniškega vnosa uporabimo zaščito, na primer
htmlspecialchars().
Pomni: HTML preverjanje obrazca pomaga uporabniku, vendar ni dovolj samo po sebi. Pravilnost podatkov mora vedno preveriti tudi PHP na strežniku.
Pogoste napake
- izpuščanje atributa
namepri vnosnem polju, - uporaba metode
method="post"v obrazcu in hkratno branje podatkov iz$_GETv PHP-ju, - nepreverjanje, ali je bil obrazec dejansko oddan,
- uporaba navadnega besedilnega polja za številčni vnos brez dodatnega preverjanja,
- izpisovanje uporabniškega vnosa brez ustrezne zaščite pri izpisu,
- napačno prepričanje, da je preverjanje v HTML-ju že zadostno za varnost programa.
Pozor: Napačen ali zlonameren vnos lahko pride do strežnika tudi mimo običajnega obrazca, zato mora PHP vedno ponovno preveriti podatke.