www.www.zaachi.com » Blog/Php » PHP: Výchozí hodnota formulářů

O tom jak správně doplňovat již odeslané hodnoty z formulářových polí jako jejich value hodnoty.
Pomocí PHP můžeme kontrolovat hodnoty vyplněné uživatelem ve formuláři, ale bohužel až po jeho odeslání. Často tak nastane situace, kdy musíme uživateli vypsat stejný formulář znova a vyzvat jej aby opravil překlepy, kterých se dopustil.
Pokud vypisujeme formulář znova, tak bychom měli zachovat hodnoty, které již jednou byly vyplněné a tyto hodnoty doplnit do formuláře jako výchozí hodnoty.
Výchozí hodnotu ve formulářových polích určuje většinou atribut value (mimo select a textareu), který obsahuje jeho hodnotu.
Pokud chceme doplnit výchozí hodnoty do formuláře, musíme to udělat pomocí tohoto atributu, do kterého nastavíme jako hodnotu hodnotu uloženou po odeslání v globálním poli GET nebo POST:
print '<form method="GET" action="index.php">'; print '<input type="text" name="name" value="' . $_GET['name'] . '"/>'; print '<input type="submit" value="Send Form (Method GET)" name="submit" />'; print '</form>';
Tento jednoduchý způsob není moc praktický, protože vykazuje chybu typu Notice:
Notice: Undefined index: name in C:wwwwwwdataindex.php on line 2
Tato chyba se bude objevovat po načtení formuláře a je způsobena tím, že index pole GET při načtení formuláře neexistuje (formulář doposud nebyl odeslán a proto neexistuje pole GET ani POST).
Můžeme tento základní příklad rozšířit a chyby notice se snadno vyvarovat:
print '<form method="GET" action="index.php">'; print '<input type="text" name="name" value="' . ( isset( $_GET['form1'] ) ? $_GET['form1'] : NULL ) . '" />'; print '<input type="submit" value="Send Form (Method GET)" name="submit" />'; print '</form>';
Nyní jsme se konečně zbavily chybových hlášení, a poslední věc, kteru musíme udělat je ošetřit vstup. Vstup musíme ošetřit hlavně proti chybám typu XSS a to uděláme jednoduše například použitím funkce htmlspecialchars:
function default_value( $string ){
return ( htmlspecialchars(
get_magic_quotes_gpc() == 1
? stripslashes( $string )
: $string
));
}
print '<form method="GET" action="index.php">';
print '<input type="text" name="form1" value="' . ( isset( $_GET['form1'] ) ? default_value( $_GET['form1'] ) : NULL ) . '"/>';
print '<input type="submit" value="Send Form (Method GET)" name="submit" />';
print '</form>';
V případě pole POST by bylo všechno obdobné, jak je vidět na tomto příkladu:
<?php
error_reporting(15);
function default_value( $string ){
return ( htmlspecialchars(
get_magic_quotes_gpc() == 1
? stripslashes( $string )
: $string
));
}
print 'GET: ';
print_r( $_GET );
print '<br />';
print 'POST: ';
print_r( $_POST );
print '<br />';
print '<form method="GET" action="index.php">';
print '<input type="text" name="form1" value="' . ( isset( $_GET['form1'] ) ? default_value( $_GET['form1'] ) : NULL ) . '"/>';
print '<input type="submit" value="Send Form (Method GET)" name="submit" />';
print '</form>';
print '<form method="POST" action="index.php">';
print '<input type="text" name="form1" value="' . ( isset( $_POST['form1'] ) ? default_value( $_POST['form1'] ) : NULL ) . '"/>';
print '<input type="submit" name="submit" value="Send Form (Method POST)" />';
print '</form>';
?>
