Kontrola formulářových polí se obvykle skládá ze dvou částí: kontrola na straně klienta (JavaScript apod.) a na straně serveru (ASP). Obě dvě jsou potřebné. Pokud klient udělá chybu, pomocí JavaScriptu ho rychle upozorníme. Druhý způsob se zase užitečný, když má uživatel vypnutý JavaScript. A protože tento seriál je o ASP, my se budeme zabývat tou druhou částí.
V našem formuláři máme dvě vstupní pole: jméno a věk. My chceme, aby pole jméno "něco obsahovalo" a pole věk obsahovalo jen číslo. Nic těžkého to nebude. Nejdříve však uděláme jednu změnu. Nyní máme tento formulář ve dvou souborech: formular.htm a formular.asp. My jej ale můžeme sloučit do jednoho souboru formular.asp. Stránka bude po sloučení a mírné upravě vypadat takto:
<html>
<head> <title>Pokus</title> </head> <body>
<% If Request.Form("Odeslano") Then
response.write "Jmenujete se " & Request.Form("jmeno") & " a je vám " & Request.Form("vek") & " let."
Else %>
<form action="formular.asp" method="post">
Vaše jméno: <input type="text" name="jmeno"><br>
Váš věk: <input type="text" name="vek"><br>
<input type="hidden" name="Odeslano" value="true"><br>
<input type="submit" value="Odeslat" name="odeslat">
</form>
<% End If %>
</body> </html>
|
Čeho si všimnete hned na začátku, bude příkaz If - Else. Stejně jako v každém jiném programovacím jazyce jsou i ve VBScriptu příkazy pro větvení aplikace. Vyskytují se skoro ve všech větších i menších aplikacích. Podmínka je výraz, který vrací logickou hodnotu True (pravda) nebo False (nepravda). Obvyklým výrazem bývá porovnávání. Pokud je výraz pravdivý, vykonají se příkazy za klíčovým slovem Then. V opačném případě se bude pracovat s příkazy mezi klíčovými slovy Else a End If. Naše aplikace začíná testem proměnné Odeslano. Proměnná Odeslano je skryté formulářové pole. Co to je? Je to pole, které se samo nezobrazuje, ale jeho hodnota je s ostatními posílána zpátky serveru. Pokud jde návštěvník na stránku poprvé, zobrazí se mu stránka, jejíž kód je za klauzulí Else, protože skryté pole nemá ještě žádnou hodnotu. Po zmáčknutí tlačítka Odeslat se tyto hodnoty předávají té samé stránce, ale pole hidden má již hodnotu true, takže po otestování podmínkou If se zjistí, že se data
posílají z formuláře a zpracují se. Poznámka: Pokud testujete, jest-li proměnná obsahuje hodnotu True (či 1), nemusíte psát Request.Form("Odeslano")=1, ale stačí jen Request.Form("Odeslano").
A nyní, když máme stránku formular.asp upravenou, se pustíme již do samotné kontroly. Pro kotrolu prvního pole použijeme funkci VBScritpu Len. Tato funkce nám spočítá délku řetězce. Jestliže bude délka řetězce nulová, aplikace vypíše chybové hlášení:
If Len(Request.Form("jmeno"))=0 Then
strChybaJmeno = "Nevyplněno!"
blnDobre = false
End If
|
Logickou proměnnou blnDobre používáme k tomu, abysme zjistili, jest-li je formulář vyplněn správně nebo špatně. Při zpracování formuláře bude správně vyplněný formulář podmínkou. My k tomu ještě přidáme kontrolu pole vek. V tomto případě použijeme další funkci IsNumeric. Tato funkce vrací True, pokud je zadaná hodnota číselná. V opačném případě vrátí hodnotu False:
If Len(Request.Form("vek"))=0 Then
strChybaVek = "Nevyplněno!"
blnDobre = false
ElseIf NOT IsNumeric(Request.Form("vek")) Then
strChybaVek = "Pole obsahovalo jinou než číselnou hodnotu!"
intVek=""
blnDobre = false
End If
|
Jsou tu další dvě novinky. Za prvé - logický operátor NOT. Ten se používá tehdy, když je třeba vykonat příkazy za klíčovým slovem Then při nesplnění podmínky. A také ElseIf - používá se, když potřebujete vybírat z více možností
Pro správný běh aplikace ji budeme muset znovu změnit:
<html>
<head>
<title>Pokus</title>
</head>
<body>
<%
If Request.Form("Odeslano") Then
blnDobre = true
strJmeno = Request.Form("jmeno")
intVek = Request.Form("vek")
If Len(strJmeno)=0 Then
strChybaJmeno = "Nevyplněno!"
blnDobre = false
End If
If len(intVek)=0 Then
strChybaVek = "Nevyplněno!"
blnDobre = false
ElseIf NOT IsNumeric(Request.Form("vek")) then
strChybaVek = "Pole obsahovalo jinou než číselnou hodnotu!"
intVek=""
blnDobre = false
End If
End If
If blnDobre Then
response.write "Jmenujete se " & strJmeno & " a je vám " & intVek & " let."
Else %>
<form action="formular.asp" method="post">
Vaše jméno: <%= strChybaJmeno %> <input type="text" name="jmeno" value=<%=strJmeno %>><br>
Váš věk: <%= strChybaVek %> <input type="text" name="vek" value=<%= IntVek %>><br>
<input type="hidden" name="Odeslano" value="true"><br>
<input type="submit" value="Odeslat" name="odeslat">
</form>
<% End If %>
</body>
</html>
|
Jak to funguje? Na začátku se zjistí, jest-li je zde návštěvník poprvé, anebo již odesílá vyplněný formulář. Následuje kontrola polí. Pokud je vše dobře, tak se formulář zpracuje. V opačném případě se formulář objeví znovu s upozorněními. Pole vylněné dobře nemusí návštěvník vyplňovat znovu - hodnota zůstává.
Zbývá poslední krok. Úprava češtiny - aby aplikace fungovala i pro čtyřleté děcko. Nic těžkého, když jsme již zvládli kontrolu formulářovách polí. Upravíme jen jednu část kódu:
...
If blnDobre Then
If intVek<5 AND intVek>1 Then
strText = " a jsou vám " & intVek & " roky."
ElseIf intVek>4 Then
strText = " a je vám " & intVek & " let."
Else
strText = " a je vám jeden rok."
End If
response.write "Jmenujete se " & strJmeno & " " & strText
Else %>
...
|
Celý zdrojový kód formuláře si můžete stáhnout zde.
Liška Adam
|