Quando um formulário HTML é enviado para uma página PHP a dados ficam disponíveis para o script.
HTML
Um formulário HTML tem dois atributos action e method. O atributo ação/action especifica no script como os dados do formulário serão passados. Por exemplo, o seguinte formulário envia uma propriedade de entrada chamado myString a página MyPage.php.
<html> <body> <form action="MyPage.php" method="post"> <input type="text" name="myString" /> <input type="submit" /> </form> </body> </html>
O outro atributo obrigatório do elemento form e o que especifica o método de envio, que pode ser GET ou POST.
Envio com POST
Se o formulário é enviado usando o método POST, os dados estarão disponíveis através do array $_POST. Os nomes das propriedades serão as chaves em que matriz associativa. Os dados enviados pelo método post não é visível na URL da página, mas isso também significa que o estado da página não pode ser salvo, por exemplo, marcando a página.
echo $_POST['myString'];
Envio com GET
A alternativa para postar é enviar os dados do formulário com o método GET e para recuperá-lo usando o array $_GET. As variáveis são exibidas na barra de endereços, o que efetivamente mantém o estado da página, se for marcada e revisitado.
echo $_GET['myString'];
Porque os dados estão contidos na barra de endereços, isso significa que as variáveis não pode ser apenas passado através de formulários HTML, mas também através de links em HTML. A matriz $_GET pode então ser usado para alterar o estado da página atual. Isso fornece uma maneira de passar variáveis de uma página para outra.
<a href="MyPage.php?myString=Foo+Bar">link</a>
REQUEST
Se ele não importar com POST ou GET método foi utilizado para enviar os dados da matriz $_REQUEST podem ser utilizados. Este array tipicamente contém os $_GET e $_POST, mas também pode conter o $_COOKIE.
echo $_REQUEST['myString']; // "Foo Bar"
O conteúdo do $_REQUEST pode ser definido no arquivo de configuração do PHP e varia entre as distribuições PHP. Devido a preocupações de segurança, o $_COOKIE normalmente não é incluído.
As preocupações de segurança
Quaisquer dados fornecidos pelo usuário podem ser manipulados pelo que deve ser validado e limpo antes de ser usado. Validação significa que você tenha certeza que os dados estão na forma que você espera, em termos de tipo de dados, alcance e conteúdo. Por exemplo, o código a seguir valida um endereço de e-mail.
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) echo "Invalid email address";
Limpar o código é quando você desabilitar códigos potencialmente maliciosos na entrada do usuário. Isto é feito para escapar do código de acordo com as regras da língua, onde a entrada é para ser usado. Por exemplo, se os dados serão enviados para um banco de dados que precisa ser limpo com a função mysql_real_escape_string para desativar qualquer código SQL embutido.
// Limpar antes de guardar no banco $name = mysql_real_escape_string($_POST['name']); // Execute SQL command $sql = "SELECT * FROM users WHERE user='" . $name . "'"; $result = mysql_query($sql);
Quando o usuário fornecer os dados a saída para a página da Web como texto, a função htmlspecialchars deve ser usado. Ele irá desativar qualquer marcação HTML para a entrada do usuário, mas não interpretado.
// Sanitize for web page use echo htmlspecialchars($_POST['comment']);
Submetendo arrays
Dados de formulários podem ser agrupados em conjuntos, incluindo colchetes após os nomes das variáveis. Isso funciona para todos os elementos de entrada de formulário, incluindo <input>, <select> e <textarea>.
<input type="text" name="myArr[]" /> <input type="text" name="myArr[]" />
Os elementos também podem ser atribuídos as suas próprias chaves do array.
<input type="text" name="myArr[name]" />
Uma vez apresentado, o conjunto estará disponível para uso no script.
$val1 = $_POST['myArr'][0]; $val2 = $_POST['myArr'][1]; $name = $_POST['myArr']['name'];
A forma <select> elemento tem um atributo para permitir vários itens a serem selecionados a partir da lista.
<select name="myArr[]" size="3" multiple="true"> <option value="apple">Apple</option> <option value="orange">Orange</option> <option value="pear">Pear</option> </select>
Quando este elemento multi-seleção está incluído em um formulário, o “suporte de matriz” tornam-se necessárias para recuperar os valores selecionados no script.
foreach ($_POST['myArr'] as $item) echo $item . ' '; // ex "apple orange pear"
Upload de Arquivos
O formulário HTML fornece um tipo de arquivo de entrada que permite que arquivos sejam enviados para o servidor. Para o upload de arquivos para trabalhar, o atributo enctype opcional do formulário deve ser definido como “multipart/form-data“, como no exemplo abaixo.
<form action="MyPage.php" method="post" enctype="multipart/form-data"> <input name="myfile" type="file" /> <input type="submit" value="Upload" /> </form>
Informações sobre o arquivo enviado é armazenado no $_FILES. As chaves desse array associativo são vistos na tabela a seguir:
Nome | Descrição |
name | Nome original do arquivo carregado. |
tmp_name | Caminho da cópia do servidor temporário. |
type | tipo de MIME do arquivo. |
size | Tamanhodoarquivo em bytes. |
error | Código de erro. |
Um ficheiro recebido é temporariamente armazenado no servidor. Se ele não for salvo pelo script ele será excluído. Um exemplo simples de como salvar o arquivo é dado abaixo. O exemplo verifica o código de erro para ter certeza de que o arquivo foi recebido com sucesso, e se assim se move o arquivo da pasta temporária para salvá-lo. Na prática, você também gostaria de examinar o tamanho do arquivo e tipo, a fim de determinar se o arquivo deve ser mantido.
$dest = 'upload\\' . basename($_FILES['myfile']['name']); $file = $_FILES['myfile']['tmp_name']; $err = $_FILES['myfile']['error']; if($err == 0 && move_uploaded_file($file, $dest)) echo 'File successfully uploaded';
Duas novas funções são vistos neste exemplo. As verificações move_uploaded_filefunction para garantir o primeiro argumento contém um arquivo válido enviado, e se for ele se move para o caminho e renomeia para o nome do arquivo, especificado pelo segundo argumento. A pasta especificada já deve existir e se a função for sucedido em mover o arquivo, ele retorna true. A outra nova função é nome-base. Ele retorna o nome do arquivo componente de um caminho, incluindo a extensão de arquivo.
Superglobais
Como visto, há uma série de arrays incorporadas que fazem dados externos disponíveis para os scripts PHP. Essas matrizes são conhecidos como superglobals, porque eles são automaticamente disponíveis em qualquer escopo. Há um total de nove superglobias em PHP, cada um dos quais é descrito brevemente a seguir.
Nome | Descrição |
$GLOBALS | Contém todas as variáveis globais, incluindo outros superglobals. |
$_GET | Contém variáveis enviadas através de uma solicitação HTTP GET. |
$_POST | Contém variáveis enviadas através de uma solicitação HTTP POST. |
$_FILES | contém variáveis enviadas através de um upload de arquivos HTTP POST. |
$_COOKIE | Contém variáveis enviadas via cookies HTTP. |
$_SESSION | Contém variáveis armazenadas na sessão do usuário. |
$_REQUEST | Contém $_GET, $_POST e possivelmente $_COOKIE variáveis. |
$_SERVER | Contém informações sobre o servidor web e o pedido feito a ele. |
$_ENV | Contém todas as variáveis de ambiente definidas pelo servidor web. |
O conteúdo das variáveis $_GET, $_POST, $_COOKIE, $_SERVER e $_ENV é incluído na saída gerada pela função phpinfo. Esta função também irá mostrar as configurações gerais do arquivo de configuração do PHP, php.ini, juntamente com outras informações sobre PHP().;
phpinfo(); // display PHP information