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

PHP: Výchozí hodnota formulářů



O tom jak správně doplňovat již odeslané hodnoty z formulářových polí jako jejich value hodnoty.

 

Reklama

Pokud mě chcete podpořit a jste milovník jedné stopy, navštivte můj projekt: MotoArena.cz

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>';

?>

 

 


linkuj topclanky
Komentáře (7)

Autor: Zaachi
Publikováno: 25.3.2008 22:12:29


Mohlo by vás zajímat:
Dynamické přidávání elementů formuláře
Hodnota proměnné v metodě
TOPLIST.cz
rss coments img img img