mirror of
https://github.com/php/doc-pt_br.git
synced 2026-03-23 22:52:12 +01:00
354 lines
13 KiB
XML
Executable File
354 lines
13 KiB
XML
Executable File
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!-- EN-Revision: 9e6c3416c5c285f807a734e4663c399612777d7e Maintainer: ae Status: ready --><!-- CREDITS: duan.trabalhohotmail.com,vagnerstrapassongmail.com,samirmachado,leonardolara -->
|
|
<chapter xml:id="faq.html" xmlns="http://docbook.org/ns/docbook">
|
|
<title>PHP e HTML</title>
|
|
<titleabbrev>PHP e HTML</titleabbrev>
|
|
|
|
<para>
|
|
PHP e HTML possuem muita interação: PHP pode gerar HTML, e o HTML
|
|
pode passar informações para o PHP. Antes de ler esses faqs, é importante
|
|
que você aprenda como recuperar <link linkend="language.variables.external">
|
|
variáveis de fontes externas</link>. A página do manual
|
|
neste tópico inclui muitos exemplos.
|
|
</para>
|
|
|
|
<qandaset>
|
|
<qandaentry xml:id="faq.html.encoding">
|
|
<question>
|
|
<para>
|
|
Que codificação/decodificação é preciso quando eu passo um valor através de um formulário/URL?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Existem muitos estágios para o qual a codificação é importante. Assumindo que
|
|
você tenha uma <type>string</type> <varname>$data</varname>, o qual contém
|
|
a string que você quer passar de um jeito não codificado, esses são os
|
|
estágios relevantes:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
Interpretação HTML. A fim de especificar uma string aleatória, você
|
|
<emphasis>precisa</emphasis> incluí-la entre aspas, e converter todo o valor dos caracteres especiais para a realidade HTML usando
|
|
<function>htmlspecialchars</function>.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
URL: Uma URL consiste de diversas partes. Se você quer que seus dados sejam
|
|
interpretados como um item, você <emphasis>precisa</emphasis> codificá-los com
|
|
<function>urlencode</function>.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Um elemento oculto de formulário HTML </title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
echo "<input type='hidden' value='" . htmlspecialchars($data) . "' />\n";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<note>
|
|
<simpara>
|
|
É errado usar <function>urlencode</function> com
|
|
<varname>$data</varname>, porque é a responsabilidade do navegador fazer a função de
|
|
<function>urlencode</function> nos dados. Todos os navegadores populares fazem isso
|
|
corretamente. Observe que isso acontecerá independentemente do método (ou seja,
|
|
GET ou POST). Mesmo assim, isso só será notado em caso de solicitação GET,
|
|
porque as requisições POST normalmente são escondidas.
|
|
</simpara>
|
|
</note>
|
|
<example>
|
|
<title>Dados a serem editados pelo usuário</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
echo "<textarea name='mydata'>\n";
|
|
echo htmlspecialchars($data)."\n";
|
|
echo "</textarea>";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<note>
|
|
<simpara>
|
|
Os dados são mostrados no navegador como pretendido, porque o navegador irá
|
|
interpretar os símbolos de escape do HTML.
|
|
</simpara>
|
|
<simpara>
|
|
Em consequência do envio, tanto via GET como POST, os dados vão ser urlencoded
|
|
pelo navegador para transferência, e urldecoded diretamente pelo PHP. Resumindo,
|
|
você não precisa fazer qualquer urlencoded/urldecoded pelo php,
|
|
tudo é feito automaticamente.
|
|
</simpara>
|
|
</note>
|
|
<example>
|
|
<title>Em uma URL</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
echo "<a href='" . htmlspecialchars("/nextpage.php?stage=23&data=" .
|
|
urlencode($data)) . "'>\n";
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<note>
|
|
<simpara>
|
|
De fato você está fingindo uma requisição HTML GET, portanto é necessário
|
|
<function>urlencode</function> os dados manualmente.
|
|
</simpara>
|
|
</note>
|
|
<note>
|
|
<simpara>
|
|
Você precisa <function>htmlspecialchars</function> toda a URL, porque a
|
|
URL ocorre como um valor de um atributo-HTML. Neste caso, o navegador
|
|
irá primeiramente un-<function>htmlspecialchars</function> o valor, e então passar
|
|
a URL. O PHP vai entender a URL corretamente, porque você codificou os dados com
|
|
<function>urlencode</function>.
|
|
</simpara>
|
|
<simpara>
|
|
Você vai notar que <literal>&</literal> na URL é substituído
|
|
por <literal>&amp;</literal>. Embora a maioria dos navegadores vão se recuperar
|
|
se vecê esquecer disso, isso nem sempre é possível. Então, mesmo se a URL
|
|
não é dinâmica, você <emphasis>precisa</emphasis>
|
|
<function>htmlspecialchars</function> a URL.
|
|
</simpara>
|
|
</note>
|
|
</para>
|
|
<!-- TODO: a note about addgpcslashes? -->
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.html.form-image">
|
|
<question>
|
|
<para>
|
|
Estou tentando usar uma tag <input type="image">, mas as variáveis
|
|
<varname>$foo.x</varname> e <varname>$foo.y</varname> não estão
|
|
disponíveis. <varname>$_GET['foo.x']</varname> não existem
|
|
também. Onde elas estão?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Ao enviar um formulário, é possível usar uma imagem em vez de
|
|
um botão submit padrão, como na tag:
|
|
<programlisting role="html">
|
|
<![CDATA[
|
|
<input type="image" src="image.gif" name="foo" />
|
|
]]>
|
|
</programlisting>
|
|
Quando o usuário clica em qualquer lugar na imagem, o formulário que o acompanha
|
|
será transmitido para o servidor com duas variáveis adicionais:
|
|
<varname>foo.x</varname> e <varname>foo.y</varname>.
|
|
</para>
|
|
<para>
|
|
Porque <varname>foo.x</varname> e <varname>foo.y</varname> faria
|
|
nome de variáveis inválidas no PHP, elas são automaticamente convertidas para
|
|
<varname>foo_x</varname> e <varname>foo_y</varname>. Ou seja, os
|
|
períodos são substituídos por sublinhados. Então, você teria acesso a essas variáveis
|
|
como qualquer outro descrito na seção sobre como recuperar
|
|
<link linkend="language.variables.external">variáveis de fontes
|
|
externas</link>. Por exemplo, <varname>$_GET['foo_x']</varname>.
|
|
<note>
|
|
<para>
|
|
Os espaços nos nomes das variáveis requisitadas são convertidas para sublinhado.
|
|
</para>
|
|
</note>
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.html.arrays">
|
|
<question>
|
|
<para>Como eu crio arrays em um HTML <form>?</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Para obter o resultado do seu <form> enviado como um
|
|
<link linkend="language.types.array">array</link> para seu script PHP
|
|
você nomeia os elementos <input>, <select> ou <textarea>
|
|
como estes:
|
|
<programlisting role="html">
|
|
<![CDATA[
|
|
<input name="MyArray[]" />
|
|
<input name="MyArray[]" />
|
|
<input name="MyArray[]" />
|
|
<input name="MyArray[]" />
|
|
]]>
|
|
</programlisting>
|
|
Observe os colchetes após o nome da variável, é isso que
|
|
torna uma variável um array. Você pode agrupar os elementos dentro de diferentes arrays,
|
|
atribuindo o mesmo nome a diferentes elementos:
|
|
<programlisting role="html">
|
|
<![CDATA[
|
|
<input name="MyArray[]" />
|
|
<input name="MyArray[]" />
|
|
<input name="MyOtherArray[]" />
|
|
<input name="MyOtherArray[]" />
|
|
]]>
|
|
</programlisting>
|
|
Isso produz dois arrays, MyArray e MyOtherArray, que serão enviados
|
|
para o script PHP. Também é possível atribuir chaves específicas
|
|
para seus arrays:
|
|
<programlisting role="html">
|
|
<![CDATA[
|
|
<input name="AnotherArray[]" />
|
|
<input name="AnotherArray[]" />
|
|
<input name="AnotherArray[email]" />
|
|
<input name="AnotherArray[phone]" />
|
|
]]>
|
|
</programlisting>
|
|
O array AnotherArray irá conter agora as chaves 0, 1, email e phone.
|
|
</para>
|
|
<para>
|
|
<note>
|
|
<para>
|
|
Especificar uma chave de array é opcional no HTML. Se você não especificar
|
|
as chaves, o array preenche na ordem em que os elementos aparecem
|
|
no formulário. Nosso primeiro exemplo irá conter as chaves 0, 1, 2 e 3.
|
|
</para>
|
|
</note>
|
|
</para>
|
|
<para>
|
|
Veja também:
|
|
<link linkend="ref.array">Funções de Array </link> e
|
|
<link linkend="language.variables.external">Variáveis de fontes
|
|
Externas</link>.
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.html.select-multiple">
|
|
<question>
|
|
<para>
|
|
Como eu faço para obter os resultados de uma múltipla seleção de uma tag HTML?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
A seleção de múltiplas tags em uma construção HTML permite aos usuários
|
|
selecionar múltiplos itens de uma lista. Esses itens são então passados
|
|
ao manipulador de ações para o formulário. O problema é que eles
|
|
são todos passados com o mesmo nome widget. I.e.
|
|
<programlisting role="html">
|
|
<![CDATA[
|
|
<select name="var" multiple="yes">
|
|
]]>
|
|
</programlisting>
|
|
Cada opção selecionada chegará ao manipulador de ações como:
|
|
<programlisting>
|
|
var=option1
|
|
var=option2
|
|
var=option3
|
|
</programlisting>
|
|
Cada opção irá substituir o conteúdo da variável anterior
|
|
<varname>$var</varname>. A solução é usar
|
|
a característica "array de elementos do formulário" do PHP. A seguir
|
|
devem ser usados:
|
|
<programlisting role="html">
|
|
<![CDATA[
|
|
<select name="var[]" multiple="yes">
|
|
]]>
|
|
</programlisting>
|
|
Isso diz ao PHP para tratar <varname>$var</varname> como um array e
|
|
cada atribuição de um valor para [var] acrescenta um item ao array.
|
|
O primeiro item se torna <varname>$var[0]</varname>, o próximo
|
|
<varname>$var[1]</varname>, etc. A função <function>count</function>
|
|
pode ser chamado para determinar quantas opções foram selecionadas,
|
|
e a função <function>sort</function> pode ser usada para classificar
|
|
o array de opções se necessário.
|
|
</para>
|
|
<para>
|
|
Note que se você está usando JavaScript o <literal>[]</literal>
|
|
no nome do elemento pode lhe causar problemas quando você tenta
|
|
se referir ao elemento pelo nome. Ao invés use o ID numérico do elemento
|
|
do formulário, ou coloque o nome da variável entre aspas simples e
|
|
use isso como um índice para os elementos do array, por exemplo:
|
|
<programlisting>
|
|
variable = document.forms[0].elements['var[]'];
|
|
</programlisting>
|
|
</para>
|
|
</answer>
|
|
</qandaentry>
|
|
|
|
<qandaentry xml:id="faq.html.javascript-variable">
|
|
<question>
|
|
<para>
|
|
Como eu posso passar uma variável do Javascript para o PHP?
|
|
</para>
|
|
</question>
|
|
<answer>
|
|
<para>
|
|
Uma vez que o Javascript é (normalmente) uma tecnologia da parte do cliente, e
|
|
o PHP é (normalmente) uma tecnologia da parte do servidor, e uma vez que o HTTP é um
|
|
protocolo "sem lado", as duas linguagens não podem compartilhar variáveis
|
|
diretamente.
|
|
</para>
|
|
<para>
|
|
É , no entanto, possível passar variáveis entre as duas.
|
|
Uma maneira de realizar isso é gerar um código Javascript
|
|
com PHP, e ter um navegador que se atualize, passando variáveis
|
|
específicas de volta para o script PHP. O exemplo abaixo mostra
|
|
precisamente como fazer isso -- isso permite ao código PHP capturar a altura
|
|
e largura da tela, algo que normalmente só é possível no
|
|
lado do cliente.
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Gerando Javascript com PHP</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
if (isset($_GET['width']) AND isset($_GET['height'])) {
|
|
// exibe as variáveis da geometria
|
|
echo "A largura da tela é: ". $_GET['width'] ."<br />\n";
|
|
echo "A altura da tela é: ". $_GET['height'] ."<br />\n";
|
|
} else {
|
|
// passar as variáveis de geometria
|
|
// (preserve a string de consulta original
|
|
// -- variáveis POST precisam ser manipuladas de forma diferente)
|
|
|
|
echo "<script language='javascript'>\n";
|
|
echo " location.href=\"{$_SERVER['SCRIPT_NAME']}?{$_SERVER['QUERY_STRING']}"
|
|
. "&width=\" + screen.width + \"&height=\" + screen.height;\n";
|
|
echo "</script>\n";
|
|
exit();
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</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:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|