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 variáveis de fontes externas. A página do manual neste tópico inclui muitos exemplos. Também preste atenção no que significa register_globals para você.
Existem muitos estágios para o qual a codificação é importante. Assumindo que você tenha uma string $data, o qual contém a string que você quer passar de um jeito não codificado, esses são os estágios relevantes:
Interpretção HTML. A fim de especificar uma string aleatória, você precisa incluá-la entre aspas, e converter todo o valor dos caracteres especiais para a realidade HTML usando htmlspecialchars().
URL: Uma URL consite de diversas partes. Se você quer que seus dados sejam interpretados como um item, você precisa codificá-los com urlencode().
Exemplo #1 Um elemento oculto formulário HTML
<?php
echo "<input type='hidden' value='" . htmlspecialchars($data) . "' />\n";
?>
Nota: É errado urlencode() $data, porque é a responsabilidade do navegador em urlencode() os dados. Todos os navegadores populares o fazem corretamente. Note que isso irá acontecer independentemente do método (i.e., GET ou POST).Você só vai perceber isso em caso de solicitação GET, porque as requisições POST são normalmente escondidos.
Exemplo #2 Dados a serem editados pelo usuário
<?php
echo "<textarea name='mydata'>\n";
echo htmlspecialchars($data)."\n";
echo "</textarea>";
?>
Nota: Os dados são mostrados no navegador como pretendido, porque o navegador irá interpretar os simbolos de escape do HTML. Em consequência do envio, tando 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.
Exemplo #3 Em uma URL
<?php
echo "<a href='" . htmlspecialchars("/nextpage.php?stage=23&data=" .
urlencode($data)) . "'>\n";
?>
Nota: De fato você está fingindo uma requisição HTML GET, portanto é necessário urlencode() os dados manualmete.
Nota: Você precisa htmlspecialchars() toda a URL, porque a URL ocorre como um valor de um atributo-HTML. Neste caso, o navegador irá primeiramente un-htmlspecialchars() o valor, e então passar a URL. O PHP vai entender a URL corretamente, porque você urlencoded() os dados. Você vai notar que & na URL é substituido por &. Embora a maioria dos navegadores vão se recuperar se vecê esquecer disto, isso nem sempre é possivel. Então, memso se a URL não é dinâmica, você precisa htmlspecialchars() a URL.
Ao enviar um formulário, é possivel usar uma imagem em vez de um botão submit padrão, como na tag:
<input type="image" src="image.gif" name="foo" />
Porque foo.x e foo.y faria nome de variáveis inválidas no PHP, elas são automaticamente convertidas para foo_x e foo_y. Ou seja, os periodos são substituidos por sublinhados. Então, você teria acesso a essas variáveis como qualquer outro descrito na seção sobre como recuperar variáveis de fontes externas. Por exemplo, $_GET['foo_x'].
Nota:
Os espaços nos nomes das variáveis requisitadas são convertidas para sublinhado.
Para obter o resultado do seu <form> enviado como um array para seu script PHP você nomeia os elementos <input>, <select> ou <textarea> como estes:
<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyArray[]" />
<input name="MyArray[]" /> <input name="MyArray[]" /> <input name="MyOtherArray[]" /> <input name="MyOtherArray[]" />
<input name="AnotherArray[]" /> <input name="AnotherArray[]" /> <input name="AnotherArray[email]" /> <input name="AnotherArray[phone]" />
Nota:
Especificar uma chave de array é opcional no HTML. Se você não especificar as chves, o array preenche na ordem em que os elementos aparecem no formulário. Nosso primeiro exemplo ira conter as chaves 0, 1, 2 e 3.
Veja também: Funções de Array e Variáveis de fontes Externas.
A seleção de multiplas tags em uma construção HTML premite os usuários selecionar multiplos itens de uma lista. Esses itens são então passados ao manipilador de ações para o formulário. O problema é que eles são todos passados com o mesmo nome widget. I.e.
<select name="var" multiple="yes">
var=option1 var=option2 var=option3
<select name="var[]" multiple="yes">
Note que se você esta usando JavaScript o [] 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:
variable = documents.forms[0].elements['var[]'];
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.
É , 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 especificas 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.
Exemplo #4 Gerando Javascript com PHP
<?php
if (isset($_GET['width']) AND isset($_GET['height'])) {
// output the geometry variables
echo "Screen width is: ". $_GET['width'] ."<br />\n";
echo "Screen height is: ". $_GET['height'] ."<br />\n";
} else {
// pass the geometry variables
// (preserve the original query string
// -- post variables will need to handled differently)
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();
}
?>