Kapitola 51. PHP a HTML

PHP a HTML mají hodně společného : PHP generuje HTML , a HTML informace , které budou poslány PHP .

1. Jaké zakódování/dekódování potřebuji, když posílám hodnotu přes formulář? A v URL?
2. Zkouším použít tag input type="image" , ale proměnné $foo.x a $foo.y nejsou dostupné. Kde jsou?
3. Jak vytvořím pole ("array") v HTML formuláři?
4. Jak získám všechna data z HTML elementu pro vícenásobný výběr?

Je více situací , pro které je zakódování důležité . Za předpokladu , že máte string $data , který obsahuje řetězec , jenž máte nezakódovaný a chcete ho poslat , je třeba se zabývat těmito relevantními problémy :

  • HTML interpretace . Pokud specifikujete náhodný ( obecný ) řetězec , musíte ho dát do uvozovek a celý ho zpracovat funkcí htmlspecialchars( ) (aby se odstranily / převedly speciální znaky jazyka HTML ) .

  • URL : sestává z několika částí . Pokud chcete , aby vaše data byla interpretována jako jedna položka , musíte je zakódovat pomocí urlencode( ) .



Příklad 51-1 . Skrytý element HTML formuláře




Poznámka : Je chybou použít urlencode( ) pro $data , protože prohlížeče samy zajišťují zpracování dat shodné s funkcí urlencode( ) . Všechny oblíbené prohlížeče to dělají korektně . Uvědomte si , že toto není závislé na použité metodě ( např . GET nebo POST ) . Všimnete si toho však pouze v případě GET , protože požadavky POST jsou obvykle skryté .

Příklad 51-2 . Data k editaci uživatelem




Poznámka : Data jsou v prohlížeči zobrazena tak , jak bylo zamýšleno , protože prohlížeč bude správně interpretovat speciální symboly .

Po odeslání , již pomocí GET nebo POST , data budou zakódována způsobem urlencode pro přenos a následně přímo dekódována v PHP . Takže vůbec nepotřebujete provádět žádné zakódování / dekódování ručně , vše je prováděno automaticky .

Příklad 51-3 . Uvnitř URL

 
?php

 
echo

 
"

 
a

 
href=\"

 
"

 
.

 
htmlspecialchars("

 
/

 
nexpage.php?stage=23

 
data=

 
"

 
.

 
urlencode($data)

 
)

 
.

 
"\

 
"

 
\n"

 
;

 
?



Poznámka : V tomto případě již opravdu vytváříte GET požadavek , proto je nutné data kódovat ručně pomocí urlencode( ) .

Poznámka : Musíte také použít htmlspecialchars( ) na celý URL , protože URL je zde hodnotou HTML atributu . V tomto případě prohlížeč nejdříve odstraní speciální znaky a pak zpracuje URL . PHP správně pochopí posílaný URL , protože jste data zakódovali pomocí urlencoded( ) .

Můžete se všimnout , že symbol v URL je nahrazen amp ; . Přestože to většina prohlížečů opraví . pokud na to zapomenete , není to vždy možné . Takže pokud váš URL není dynamický , musíte použít htmlspecialchars( ) .



Jak vytvořím pole ( "array" ) v HTML formuláři ?

Aby výsledky odeslání vašeho formuláře byly umístěny v poli ( array ) , nazvěte elementy input , select nebo textarea tímto způsobem :




Všimněte si hranatých závorek po názvu proměnné, to je to, co z toho dělá pole. Můžete seskupovat elementy do různých polí spojením stejného jména s různými elementy:



Toto produkuje dvě pole, MyArray a MyOtherArray, která budou zaslána PHP skriptu. Je také možné dát do polí specifické klíče:



Pole AnotherArray bude nyní obsahovat klíče 0, 1, email a phone.

Poznámka : Specifikace klíců polí je v HTML nepovinné . Pokud klíče nespecifikujete , pole bude vyplněno podle pořadí elementů ve formuláři . Náš první příklad obsahuje klíče 0 , 1 , 2 a 3 .



Viz také Funkce pro práci s poli a Proměnné z vnějšku PHP .