Načrtovanje in razvoj spletnih aplikacij

Obrazci v PHP

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 action določimo datoteko, ki bo podatke obdelala.
  • Z atributom method določimo način pošiljanja podatkov, najpogosteje get ali post.
  • 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, number ali password,
  • 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 name pri vnosnem polju,
  • uporaba metode method="post" v obrazcu in hkratno branje podatkov iz $_GET v 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.