cvs: phpdoc /cs/faq html.xml
| From: | Lukas Jelinek | Date: | Sun, 10 Mar 2002 21:57:25 +0000 |
| Subject: | cvs: phpdoc /cs/faq html.xml | ||
| Groups: | php.doc | ||
| Request: | Send a blank email to phpdoc+get-969342922@lists.php.net to get a copy of this message | ||
luk Sun Mar 10 16:57:25 2002 EDT
Added files:
/phpdoc/cs/faq html.xml
Log:
Index: phpdoc/cs/faq/html.xml +++ phpdoc/cs/faq/html.xml <?xml version="1.0" encoding="iso-8859-2"?> <!-- EN-Revision: 1.13 Maintainer: luk Status: ready --> <chapter id="faq.html"> <title>PHP a HTML</title> <titleabbrev>PHP a HTML</titleabbrev> <para> PHP a HTML mají hodnì spoleèného: PHP generuje HTML, a HTML má informace, které budou poslány PHP. </para> <qandaset> <qandaentry id="faq.html.encoding"> <question> <para> Jaké zakódování/dekódování potøebuji, kdy¾ posílám hodnotu pøes formuláø? A v URL? </para> </question> <answer> <para> Je více situací, pro které je zakódování dùle¾ité. Za pøedpokladu, ¾e máte <type>string</type> <varname>$data</varname>, 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: <itemizedlist> <listitem> <para> HTML interpretace. Pokud specifikujete náhodný (obecný) øetìzec, <emphasis>musíte</emphasis> ho dát do uvozovek a celý ho zpracovat funkcí <function>htmlspecialchars</function> (aby se odstranily/pøevedly speciální znaky jazyka HTML). </para> </listitem> <listitem> <para> URL: sestává z nìkolika èástí. Pokud chcete, aby va¹e data byla interpretována jako jedna polo¾ka, <emphasis>musíte</emphasis> je zakódovat pomocí <function>urlencode</function>. </para> </listitem> </itemizedlist> </para> <para> <example> <title>Skrytý element HTML formuláøe</title> <programlisting role="php"> <![CDATA[ <?php echo "<input type=hidden value=\"" . htmlspecialchars($data) . "\">\n"; ?> ]]> </programlisting> </example> <note> <simpara> Je chybou pou¾ít <function>urlencode</function> pro <varname>$data</varname>, proto¾e prohlí¾eèe samy zaji¹»ují zpracování dat shodné s funkcí <function>urlencode</function>. 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é. </simpara> </note> <example> <title>Data k editaci u¾ivatelem</title> <programlisting role="php"> <![CDATA[ <?php echo "<textarea name=mydata>\n"; echo htmlspecialchars($data)."\n"; echo "</textarea>"; ?> ]]> </programlisting> </example> <note> <simpara> Data jsou v prohlí¾eèi zobrazena tak, jak bylo zamý¹leno, proto¾e prohlí¾eè bude správnì interpretovat speciální symboly. </simpara> <simpara> Po odeslání, a» 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. </simpara> </note> <example> <title>Uvnitø URL</title> <programlisting role="php"> <![CDATA[ <?php echo "<a href=\"" . htmlspecialchars("/nexpage.php?stage=23&data=" . urlencode($data)) . "\">\n"; ?> ]]> </programlisting> </example> <note> <simpara> V tomto pøípadì ji¾ opravdu vytváøíte GET po¾adavek, proto je nutné data kódovat ruènì pomocí <function>urlencode</function>. </simpara> </note> <note> <simpara> Musíte také pou¾ít <function>htmlspecialchars</function> 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í <function>urlencoded</function>. </simpara> <simpara> Mù¾ete se v¹imnout, ¾e symbol <literal>&</literal> v URL je nahrazen <literal>&amp;</literal>. 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ý, <emphasis>musíte</emphasis> pou¾ít <function>htmlspecialchars</function>. </simpara> </note> </para> <!-- TODO: a note about addgpcslashes? --> </answer> </qandaentry> <qandaentry id="faq.html.form-image"> <question> <para> Zkou¹ím pou¾ít tag <input type="image">, ale promìnné $foo.x a $foo.y nejsou dostupné. Kde jsou? </para> </question> <answer> <para> Kdy¾ odesíláte formuláø, lze namísto standardního tlaèítka pou¾ít obrázek pomocí tagu jako <programlisting role="html"> <![CDATA[ <input type="image" src="image.gif" name="foo"> ]]> </programlisting> Kdy¾ u¾ivatel klikne nìkde na obrázku, pøíslu¹ný formuláø se ode¹le na server s dvìma promìnnými navíc: foo.x a foo.y. </para> <para> Proto¾e $foo.x a $foo.y jsou v PHP neplatné názvy promìnných, jsou automaticky pøevedeny na $foo_x a $foo_y. Tzn. teèky jsou nahrazeny podtr¾ítky. </para> </answer> </qandaentry> <qandaentry id="faq.html.arrays"> <question> <para>Jak vytvoøím pole ("array") v HTML formuláøi?</para> </question> <answer> <para> Aby výsledky odeslání va¹eho formuláøe byly umístìny v poli (<link linkend="language.types.array">array</link>), nazvìte elementy <input>, <select> nebo <textarea> tímto zpùsobem: <programlisting role="html"> <![CDATA[ <input name="MyArray[]"> <input name="MyArray[]"> <input name="MyArray[]"> <input name="MyArray[]"> ]]> </programlisting> 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: <programlisting role="html"> <![CDATA[ <input name="MyArray[]"> <input name="MyArray[]"> <input name="MyOtherArray[]"> <input name="MyOtherArray[]"> ]]> </programlisting> Toto produkuje dvì pole, MyArray a MyOtherArray, která budou zaslána PHP skriptu. Je také mo¾né dát do polí specifické klíèe: <programlisting role="html"> <![CDATA[ <input name="AnotherArray[]"> <input name="AnotherArray[]"> <input name="AnotherArray[email]"> <input name="AnotherArray[phone]"> ]]> </programlisting> Pole AnotherArray bude nyní obsahovat klíèe 0, 1, email a phone. </para> <para> <note> <para> 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. </para> </note> </para> <para> Viz také <link linkend="ref.array">Funkce pro práci s poli</link> a <link linkend="language.variables.external">Promìnné z vnìj¹ku PHP</link>. </para> </answer> </qandaentry> <qandaentry id="faq.html.select-multiple"> <question> <para> How do I get all the results from a select multiple HTML tag? </para> </question> <answer> <para> The select multiple tag in an HTML construct allows users to select multiple items from a list. These items are then passed to the action handler for the form. The problem is that they are all passed with the same widget name. ie. <programlisting role="html"> <![CDATA[ <select name="var" multiple> ]]> </programlisting> Each selected option will arrive at the action handler as: <programlisting> var=option1 var=option2 var=option3 </programlisting> Each option will overwrite the contents of the previous <varname>$var</varname> variable. The solution is to use PHP's "array from form element" feature. The following should be used: <programlisting role="html"> <![CDATA[ <select name="var[]" multiple> ]]> </programlisting> This tells PHP to treat <varname>$var</varname> as an array and each assignment of a value to var[] adds an item to the array. The first item becomes <varname>$var[0]</varname>, the next <varname>$var[1]</varname>, etc. The <function>count</function> function can be used to determine how many options were selected, and the <function>sort</function> function can be used to sort the option array if necessary. </para> <para> Note that if you are using JavaScript the <literal>[]</literal> on the element name might cause you problems when you try to refer to the element by name. Use it's numerical form element id instead, or enclose the variable name in single quotes and use that as the index to the elements array, for example: <programlisting> variable = documents.forms[0].elements['var[]']; </programlisting> </para> </answer> </qandaentry> </qandaset> </chapter> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: -->
Index: phpdoc/cs/faq/html.xml +++ phpdoc/cs/faq/html.xml <?xml version="1.0" encoding="iso-8859-2"?> <!-- EN-Revision: 1.13 Maintainer: luk Status: ready --> <chapter id="faq.html"> <title>PHP a HTML</title> <titleabbrev>PHP a HTML</titleabbrev> <para> PHP a HTML mají hodnì spoleèného: PHP generuje HTML, a HTML má informace, které budou poslány PHP. </para> <qandaset> <qandaentry id="faq.html.encoding"> <question> <para> Jaké zakódování/dekódování potøebuji, kdy¾ posílám hodnotu pøes formuláø? A v URL? </para> </question> <answer> <para> Je více situací, pro které je zakódování dùle¾ité. Za pøedpokladu, ¾e máte <type>string</type> <varname>$data</varname>, 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: <itemizedlist> <listitem> <para> HTML interpretace. Pokud specifikujete náhodný (obecný) øetìzec, <emphasis>musíte</emphasis> ho dát do uvozovek a celý ho zpracovat funkcí <function>htmlspecialchars</function> (aby se odstranily/pøevedly speciální znaky jazyka HTML). </para> </listitem> <listitem> <para> URL: sestává z nìkolika èástí. Pokud chcete, aby va¹e data byla interpretována jako jedna polo¾ka, <emphasis>musíte</emphasis> je zakódovat pomocí <function>urlencode</function>. </para> </listitem> </itemizedlist> </para> <para> <example> <title>Skrytý element HTML formuláøe</title> <programlisting role="php"> <![CDATA[ <?php echo "<input type=hidden value=\"" . htmlspecialchars($data) . "\">\n"; ?> ]]> </programlisting> </example> <note> <simpara> Je chybou pou¾ít <function>urlencode</function> pro <varname>$data</varname>, proto¾e prohlí¾eèe samy zaji¹»ují zpracování dat shodné s funkcí <function>urlencode</function>. 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é. </simpara> </note> <example> <title>Data k editaci u¾ivatelem</title> <programlisting role="php"> <![CDATA[ <?php echo "<textarea name=mydata>\n"; echo htmlspecialchars($data)."\n"; echo "</textarea>"; ?> ]]> </programlisting> </example> <note> <simpara> Data jsou v prohlí¾eèi zobrazena tak, jak bylo zamý¹leno, proto¾e prohlí¾eè bude správnì interpretovat speciální symboly. </simpara> <simpara> Po odeslání, a» 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. </simpara> </note> <example> <title>Uvnitø URL</title> <programlisting role="php"> <![CDATA[ <?php echo "<a href=\"" . htmlspecialchars("/nexpage.php?stage=23&data=" . urlencode($data)) . "\">\n"; ?> ]]> </programlisting> </example> <note> <simpara> V tomto pøípadì ji¾ opravdu vytváøíte GET po¾adavek, proto je nutné data kódovat ruènì pomocí <function>urlencode</function>. </simpara> </note> <note> <simpara> Musíte také pou¾ít <function>htmlspecialchars</function> 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í <function>urlencoded</function>. </simpara> <simpara> Mù¾ete se v¹imnout, ¾e symbol <literal>&</literal> v URL je nahrazen <literal>&amp;</literal>. 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ý, <emphasis>musíte</emphasis> pou¾ít <function>htmlspecialchars</function>. </simpara> </note> </para> <!-- TODO: a note about addgpcslashes? --> </answer> </qandaentry> <qandaentry id="faq.html.form-image"> <question> <para> Zkou¹ím pou¾ít tag <input type="image">, ale promìnné $foo.x a $foo.y nejsou dostupné. Kde jsou? </para> </question> <answer> <para> Kdy¾ odesíláte formuláø, lze namísto standardního tlaèítka pou¾ít obrázek pomocí tagu jako <programlisting role="html"> <![CDATA[ <input type="image" src="image.gif" name="foo"> ]]> </programlisting> Kdy¾ u¾ivatel klikne nìkde na obrázku, pøíslu¹ný formuláø se ode¹le na server s dvìma promìnnými navíc: foo.x a foo.y. </para> <para> Proto¾e $foo.x a $foo.y jsou v PHP neplatné názvy promìnných, jsou automaticky pøevedeny na $foo_x a $foo_y. Tzn. teèky jsou nahrazeny podtr¾ítky. </para> </answer> </qandaentry> <qandaentry id="faq.html.arrays"> <question> <para>Jak vytvoøím pole ("array") v HTML formuláøi?</para> </question> <answer> <para> Aby výsledky odeslání va¹eho formuláøe byly umístìny v poli (<link linkend="language.types.array">array</link>), nazvìte elementy <input>, <select> nebo <textarea> tímto zpùsobem: <programlisting role="html"> <![CDATA[ <input name="MyArray[]"> <input name="MyArray[]"> <input name="MyArray[]"> <input name="MyArray[]"> ]]> </programlisting> 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: <programlisting role="html"> <![CDATA[ <input name="MyArray[]"> <input name="MyArray[]"> <input name="MyOtherArray[]"> <input name="MyOtherArray[]"> ]]> </programlisting> Toto produkuje dvì pole, MyArray a MyOtherArray, která budou zaslána PHP skriptu. Je také mo¾né dát do polí specifické klíèe: <programlisting role="html"> <![CDATA[ <input name="AnotherArray[]"> <input name="AnotherArray[]"> <input name="AnotherArray[email]"> <input name="AnotherArray[phone]"> ]]> </programlisting> Pole AnotherArray bude nyní obsahovat klíèe 0, 1, email a phone. </para> <para> <note> <para> 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. </para> </note> </para> <para> Viz také <link linkend="ref.array">Funkce pro práci s poli</link> a <link linkend="language.variables.external">Promìnné z vnìj¹ku PHP</link>. </para> </answer> </qandaentry> <qandaentry id="faq.html.select-multiple"> <question> <para> How do I get all the results from a select multiple HTML tag? </para> </question> <answer> <para> The select multiple tag in an HTML construct allows users to select multiple items from a list. These items are then passed to the action handler for the form. The problem is that they are all passed with the same widget name. ie. <programlisting role="html"> <![CDATA[ <select name="var" multiple> ]]> </programlisting> Each selected option will arrive at the action handler as: <programlisting> var=option1 var=option2 var=option3 </programlisting> Each option will overwrite the contents of the previous <varname>$var</varname> variable. The solution is to use PHP's "array from form element" feature. The following should be used: <programlisting role="html"> <![CDATA[ <select name="var[]" multiple> ]]> </programlisting> This tells PHP to treat <varname>$var</varname> as an array and each assignment of a value to var[] adds an item to the array. The first item becomes <varname>$var[0]</varname>, the next <varname>$var[1]</varname>, etc. The <function>count</function> function can be used to determine how many options were selected, and the <function>sort</function> function can be used to sort the option array if necessary. </para> <para> Note that if you are using JavaScript the <literal>[]</literal> on the element name might cause you problems when you try to refer to the element by name. Use it's numerical form element id instead, or enclose the variable name in single quotes and use that as the index to the elements array, for example: <programlisting> variable = documents.forms[0].elements['var[]']; </programlisting> </para> </answer> </qandaentry> </qandaset> </chapter> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"../manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: -->