LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> PHP (25) - Formuláře - nikomu nevěřte

Při zpracování dat z formulářů musíme být opatrní - a data ověřovat. Uživatelé se totiž dříve nebo později pokusí podstrčit nám neplatná data.

16.7.2004 15:00 | Petr Zajíc | Články autora | přečteno 133653×

Komerční sdělení: Pořádáme Kurzy PHP

Je hezké, že umíme zpracovávat data pomocí formulářů - ale je tu ten lidský prvek. Data z formulářů nepocházejí od počítačů, ale od lidí. Protože v reálné aplikaci na tom většinou záleží, bude potřeba data ověřovat. E-mailové adresy, telefonní čísla, webové adresy a spousta dalších věcí se dají alespoň primitivně ověřit. Navíc, někdy může formulář být terčem útoku - a nedostatečné ověření může způsobit "díru" do naší aplikace.

Jednoduché ověřování

Protože data z formuláře jsou k dispozici jakožto proměnné ve skriptu, může nejjednodušší ověřování spočívat v kontrole těchto proměnných. Takže, primitivní skript který ověří e-mailovou adresu:

<?
  
function JeEmail ($cislo)
  {
    return
ereg("^.+@.+\..+$",$cislo);
  }

  if (empty (
$_POST))
  {
?>
<form method="post" action="26_simple.php">
  E-mail: <input name="email">
    <input type="Submit" name="odesli">
</form>
<?
  
}
  else
  {
    if (!
JeEmail($_POST["email"])) echo "Tohle nevypadá jako e-mail";
    else echo
"Zpracovávám ". $_POST["email"];
  }
?>

Spustit skript

Toto ověřování však má zásadní problém. Uživatele jsme sice prokouknuli, ale místo všeho jiného jsme mu jen poslali varovnou hlášku. Chtělo by to něco jiného - při chybě zobrazit opět původní formulář. Což nám celý skript trošku zamotá, protože budeme muset testovat jednak to, zda již byl formulář odeslán, a jednak to, zda byl odeslán se správnými daty. Nová verze by mohla vypadat nějak takto:

<?
  
function JeEmail ($cislo)
  {
    return
ereg("^.+@.+\..+$",$cislo);
  }
  
$BudemeZobrazovat=true;
  if (!empty(
$_POST)) // tak už se odesílalo a musíme kontolovat
  
{
    if (!
JeEmail($_POST["email"]))
    {
      
// kontrolou jsme neprošli
      
echo "Tohle nevypadá jako e-mail!";
    }
    else
    {
      
// kontolou jsme prošli
      
$BudemeZobrazovat=false;
      echo
"Zpracovávám ". $_POST["email"];
    }
  }
if (
$BudemeZobrazovat):?>
  <form method="post" action="source.php">
    E-mail: <input name="email">
      <input type="Submit" name="odesli">
  </form>
<?endif;?>

Spustit skript

Skript je poměrně dost překopaný a zalouží si rozsáhlý komentář. K celému problému přistupujeme pesimisticky: předpokládáme, že ve většině případů budeme muset formulář zobrazit. Takže si na to vytvoříme logickou proměnnou $BudemeZobrazovat. Tato proměnná je ze začátku nastavena na TRUE, tedy že formulář zobrazovat budeme.

Následuje podmínka testující, zda jsme již formulář odeslali. To je postup, který jsme detailně rozebrali v minulém díle seriálu. Pokud jsme ho neodesílali, tělo podmínky se neprovede a formulář se nám zobrazí. Jestliže jsme formulář ale již odeslali, dostáváme se dovnitř, do těla podmínky, kde máme vnořenou podmínku. ("dobře, něco jsme odeslali, ale je to správně"). Pokud, a pouze pokud projdeme kontrolou, nastavíme proměnnou $ZobrazitFormular na FALSE a můžeme formulář zpracovat.

Jestliže ale testem správnosti formulář neprojde, zobrazíme varovnou hlášku ("tohle nevypadá jako e-mail") a opustíme obě podmínky. Proměnná $BudemeZobrazovat zůstala nasatavena na TRUE, takže se nám po varovné hlášce formulář zobrazí, což je přesně to, co jsme chtěli.

Na celém přístupu je príma hlavně to, že samotná definice formuláře je až na konci skriptu a neplete se nám do jeho zpracování. Ono to na první pohled nevypadá, ale některé formuláře mají více vstupních prvků a musí se provést více kontrol, takže se kód protáhne.

Profi přístup

Nakolik se Vám možná chce jásat, má náš skript jednu dosti podstatnou vadu. Když se mají údaje opravovat, chybí tam předvyplněné ty původní. Za to Vás budou chtít uživatelé lynčovat, protože kdyby formulář obsahoval deset polí a chyba by byla jen v jednom, je jasné, že by museli vyplnit všech dest polí znova (brr). Jednoduchou úpravou skriptu ale dosáhneme toho, že když jej vyplňujeme již poněkolikáté, tak tam předchozí hodnoty zůstanou:


// začátek je stejný...
if ($BudemeZobrazovat):?>
  <form method="post" action="26_complex.php">
    E-mail: <input name="email" value="<?echo $_POST["email"]?>">
      <input type="Submit" name="odesli">
  </form>
<?endif;?>

Ukázat skript | Spustit skript

Skutečně to je takto jednoduché - když se má formulář zpracovávat po několikáté, tak jsou již prvky pole $_POST k dispozici a můžete tedy použít jejich hodnoty jako výchozí hodnoty prvků formuláře.

Verze pro tisk

pridej.cz

 

DISKUZE

Varovani 16.7.2004 15:33 Michal Čihař
L Re: Varovani 17.7.2004 19:41 Petr Zajíc
Taky neco dodam :-) 17.7.2004 17:09 mysql_php
|- Re: Taky neco dodam :-) 17.7.2004 19:47 Petr Zajíc
L Re: Taky neco dodam :-) 13.7.2010 13:21 Tomáš Kováčik
Display error 20.2.2008 21:54 Dan Pelíšek
L Re: Display error 20.2.2008 21:56 Dan Pelíšek
Dotaz na POST 12.6.2009 19:19 Jan Nepovim
ereg() 26.6.2010 14:25 Oleg Matskiv
  L Re: ereg() 25.1.2013 13:55 Jan joukercz Stejskal




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

27.2.2017 22:12 /František Kučera
Pozvánka na 137. sraz OpenAlt – Praha: Tentokrát jsme si pro vás připravili neobvyklou akci. Ve středu 1.3. v 17:30 nás přivítá sdružení CZ.NIC ve svých prostorách v Milešovské ulici číslo 5 na Praze 3, kde si pro nás připravili krátkou prezentaci jejich činnosti. Následně navštívíme jejich datacentrum pod Žižkovskou věží. Provedou nás prostory, které jsou běžnému smrtelníkovi nedostupné!
Po ukončení prohlídky se všchni odebereme do hostince U vodoucha, Jagelonská 21, Praha 3 pochutnat si na některém z vybraných piv či dát si něco na zub. Rezervaci máme od 19:30, heslo je OpenAlt.
Ale pozor! Do prostor datového centra máme omezený přístup, dostane se tam pouze 10 lidí! Takže kdo přijde dříve, ten má přednost, a občanky s sebou! Kdo nebude chtít na prohlídku datového centra, může se pomalu přesunout do hostince U vodoucha a u nepřeberné nabídky piv počkat na ostatní.
Přidat komentář

18.1.2017 0:49 /František Kučera
Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.
Přidat komentář

8.1.2017 17:51 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 19. ledna od 18:30 v pražském hackerspacu Brmlab. Tentokrát je tématem srazu ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. K vidění bude mechanická klávesnice dasKeyboard, trackball Logitech nebo grafický tablet (a velký touchpad) Wacom. Přineste i vy ukázat svoje zajímavé klávesnice a další HW. V 18:20 je sraz před budovou, v 18:30 jdeme společně dovnitř, je tedy dobré přijít včas. Podle zájmu se později přesuneme do nějaké restaurace v okolí.
Přidat komentář

1.12.2016 22:13 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.
Komentářů: 1

4.9.2016 20:13 /Pavel `Goldenfish' Kysilka
PR: Dne 22.9.2016 proběhne v Praze konference Cloud computing v praxi. Tématy bude např. nejnovější trendy v oblasti cloudu a cloudových řešení, provozování ERP v cloudu, o hostování různých typů softwaru, ale třeba i o zálohování dat nabízeném podnikům formou služby.
Přidat komentář

1.9.2016 11:27 /Honza Javorek
Česká konference o Pythonu, PyCon CZ, stále hledá přednášející skrz dobrovolné přihlášky. Máte-li zajímavé téma, neváhejte a zkuste jej přihlásit, uzávěrka je již 12. září. Konference letos přijímá i přednášky v češtině a nabízí pomoc s přípravou začínajícím speakerům. Řečníci mají navíc vstup zadarmo! Více na webu.
Přidat komentář

27.8.2016 8:55 /Delujek
Dnes po 4 letech komunitního vývoje vyšla diaspora 0.6.0.0
diaspora* je open-source, distribuovaná sociální síť s důrazem na soukromý
Více v oficiálním blog-postu
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

24.3.2017 11:54 / Hui
country cottages

16.3.2017 16:33 / BezvaDesign.cz
Re: Hledám grafika do teamu

9.3.2017 11:44 / Jaromir Obr
Re: chyba

18.1.2017 20:18 / martin horky
Spolupraca linuxu a microsoftu

17.1.2017 9:57 / Pavel Hrubeš
Re: Externí USB televizní karta

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze