Postar e obter solicitações são o que mais. Aprendendo a trabalhar com solicitações GET e POST

Existem dois conceitos comuns a quase todos os programas - este é o processamento de dados de entrada e a saída de resultados. Nesta página, vamos nos concentrar em lidar com entradas de programas CGI. Primeiro, de onde vem a entrada e, segundo, como a entrada é passada para o servidor. Para escrever programas CGI eficazes, você deve ser claro sobre essas coisas.

Um pouco sobre HTTP

O servidor aceita três tipos de solicitações: GET, POST e HEAD. A solicitação do programa para o servidor Web se parece com isso:

GET /index.html HTTP/1.0

A primeira parte, em este caso GET , é o método de solicitação, o segundo, index.html , é a URL solicitada, o terceiro, HTTP/1.0 , é o protocolo usado pelo cliente.

Os dois principais métodos de solicitação são GET e POST. Esses são os mesmos métodos que estão disponíveis para você ao criar um formulário. O método HEAD raramente é usado pelo navegador porque ele solicita apenas um cabeçalho de resposta e nenhum corpo de resposta é enviado. Por exemplo, para verificar se a página foi alterada, o navegador pode solicitar um cabeçalho, mas isso não gera uma troca de dados completa.

Método GET

Por padrão, o método de solicitação é GET. O método POST só é usado quando especificado explicitamente na solicitação de formulário. É muito importante para um programador CGI entender que quando uma solicitação GET é feita, os dados do formulário são passados ​​para o servidor junto com a URL. Servidores da Web que suportam CGI copiam esses dados para uma variável de ambiente chamada QUERY_STRING . Depois disso, cabe ao programa CGI cuidar de obter os dados da variável de ambiente e processá-los.

O URL com a string de consulta é assim:

http://www.domen-name.com/login.pl?nick=maks&psw=parol

Sinal? separa a string de consulta da URL do recurso real; nick e psw são variáveis ​​passadas para o servidor, maks e parol são seus valores respectivamente.

Método POST

O método POST é usado quando especificado explicitamente no atributo METHOD do formulário. Ao contrário do método GET, POST coloca dados não na URL, mas no corpo da solicitação. Uma solicitação POST é semelhante a uma resposta HTTP de várias maneiras. A primeira linha é o padrão solicitação HTTP, que especifica o método POST. Ele pode conter os cabeçalhos adicionais necessários, separados do corpo da solicitação por uma linha vazia.

O corpo da solicitação ao usar o método POST é passado para o programa como entrada padrão.

Escolhendo entre GET e POST

É claro que ao desenvolver formulários, o programador CGI enfrentará a questão: qual desses métodos usar. Na maioria dos casos, ambos os métodos são aplicáveis ​​e ambos funcionarão bem. No entanto, existem situações em que a utilização de um ou outro método proporciona certas vantagens.

Vejamos algumas situações em que faz sentido preferir o método GET ou POST.

  • Se você deseja que seu programa seja chamado a partir de um link, o método GET deve ser preferido.
  • Se você não quiser que os argumentos passados ​​ao seu programa sejam gravados no arquivo de relatório do servidor, use o método POST. Por exemplo, se um formulário requer um nome de usuário e senha, você provavelmente não deseja que os nomes de usuário e as senhas sejam armazenados no arquivo de relatório. Além disso, não é aconselhável passar a senha como parte do URL.
  • Se o seu formulário for grande, como caixas de texto com notas e comentários, você deve usar o método POST. De um modo geral, você também pode usar o método GET neste caso, mas pode encontrar limites de tamanho de URL diferentes para diferentes sistemas operacionais e navegadores (limitados pelo tamanho das variáveis ​​de ambiente). É mais fácil usar o método POST.
  • Se seu formulário contém um campo de arquivo, use o método POST. Além disso, neste caso, você precisa definir o valor do atributo ENCTYPE para multipart/form-data .

Os clientes do navegador podem enviar informações para um servidor web.

Antes de o navegador enviar as informações, ele as codifica usando um esquema chamado codificação de URL. Nesse esquema, os pares nome/valor são concatenados com sinais de igual e pares diferentes são separados por um e comercial.

Nome1=valor1&nome2=valor2&nome3=valor3

Os espaços são removidos e substituídos por um caractere + e quaisquer outros caracteres não alfanuméricos são substituídos valores hexadecimais. Depois que as informações são codificadas, elas são enviadas para o servidor.

Método GET

O método GET envia informações codificadas do usuário anexadas à solicitação de página. Páginas e informações codificadas são separadas umas das outras? ponto de interrogação.

http://www.test.com/index.htm?name1=value1&name2=value2

  • O método GET cria uma longa string que aparece nos logs do seu servidor no campo "Local" do navegador.
  • O método GET está limitado a enviar apenas até 1024 caracteres.
  • Nunca use o método GET se você tiver uma senha ou outro informação confidencial para enviar ao servidor.
  • GET não pode ser usado para enviar dados binários, como uma imagem ou documentos de texto, para o servidor.
  • Os dados enviados pelo método GET podem ser acessados ​​usando a variável de ambiente QUERY_STRING.
  • O PHP fornece o array associativo $_GET para acessar todas as informações enviadas usando o método GET.

if($_GET["nome"] || $_GET["idade"]) ( echo "Bem-vindo". $_GET["nome"]; echo "Você tem ". $_GET["idade"]. " anos de idade ."; saída(); )

Nome: Idade:

Método POST

Método PUBLICAR passa informações através de cabeçalhos HTTP. As informações são codificadas conforme descrito no caso do método PEGAR, e colocado no cabeçalho QUERY_STRING.

  • O método POST não tem limites no tamanho dos dados que precisam ser enviados.
  • O método POST pode ser usado para enviar dados ASCII e binários.
  • Os dados enviados pelo método POST passam pelo cabeçalho HTTP, portanto a segurança depende do protocolo HTTP. Ao usar HTTP seguro, você pode garantir que suas informações estejam seguras.
  • O PHP fornece o array associativo $_POST para acessar todas as informações enviadas usando o método POST.

Tente o exemplo a seguir colocando o código-fonte no script test.php.

if($_POST["nome"] || $_POST["idade"]) ( if (preg_match("[^A-Za-z"-]",$_POST["nome"])) ( die (" nome inválido e nome deve ser alfa"); ) echo "Bem-vindo ". $_POST["name"]; echo "Você tem ". $_POST["age"]. " anos."; exit(); )

Nome: Idade:

Variável $_REQUEST

Variável PHP $_REQUEST contém conteúdo como $_GET, $_POST, e $_COOKIE. Vamos discutir a variável $_COOKIE quando falamos de cookies.

A variável PHP $_REQUEST pode ser usada para obter o resultado dos dados do formulário enviados usando os métodos GET e POST.

O que eles têm em comum é que eles funcionam da mesma maneira. Não há diferença técnica entre eles. Mas há diferenças ideológicas.

Vou falar sobre eles no contexto do PHP. Observe que o protocolo HTTP para PHP está relacionado indiretamente porque foi criado para a troca páginas html e PHP apenas estende as possibilidades de ambos.

A solicitação GET é usada para obter dados e POST é usada para enviar. (Lembro que tecnicamente eles funcionam da mesma maneira).

Portanto, no contexto do PHP, com base nessa ideologia, eles fizeram o seguinte:
1. Toda vez que você inicia o PHP, arrays superglobais ($_GET, $_POST) são criados por padrão.
2. Se houver um ponto de interrogação (?) na string de consulta. Tudo depois conta parâmetros GET, eles são representados no formato "key"="value" e o sinal de e comercial (&) é usado como separador
Exemplo:
GET /index.php?name=Andrey&surname=Galkin
esta é uma string de consulta, existem 2 parâmetros. esses parâmetros terminarão no array $_GET.
3. $_POST é preenchido de forma diferente. o conteúdo desta matriz é preenchido a partir de "cabeçalhos de solicitação". Ou seja, de um lugar escondido dos olhos de forma explícita. O navegador cuida de toda a rotina de criação desses cabeçalhos. Embora às vezes algo seja editado nos títulos manualmente.

Na maioria das vezes, uma solicitação de postagem é usada em formulários (para envio de dados).

Por exemplo, temos um formulário de login com 2 campos login e senha.

Imagine que estamos usando o método GET. Então, ao enviar o formulário, iremos para o seguinte endereço /login.php?login=Andrey&password=123 concordamos que não é seguro transmitir tais informações desta forma. Qualquer um pode abrir seu navegador e começar a digitar o endereço do site, ele pode ver suas senhas e logins a partir do histórico.

Mas se especificássemos o método POST, receberíamos a seguinte solicitação:
POST /login.php (login=Andrey&password=123) o que está entre colchetes ficaria oculto e não seria salvo no navegador de forma alguma.

Resumindo em geral:
GET é obter uma determinada página de uma determinada maneira (classificação, pagina atual blog, barra de pesquisa, etc.).
POST - para envio de dados que não afetam a exibição da página, no sentido de que esses dados afetam apenas o resultado da execução do script (logins, senhas, números de cartão de crédito, mensagens, etc.).

E mais uma boa notícia, eles podem ser combinados, por exemplo
POST /index.php?page=login (login=Andrey&password=123) Acho que já expliquei o suficiente o que virá disso e quais parâmetros irão para qual array.

Os recursos modernos da web não apenas fornecem informações ao visitante, mas também interagem com ele. Para interagir com o usuário, você precisa receber algumas informações dele. Existem vários métodos para obter dados, métodos muito comuns são PEGAR E PUBLICAR. E consequentemente em PHP há suporte para esses métodos de transferência de dados PEGAR E PUBLICAR. Vamos ver como esses métodos funcionam.
Método GET Dados método GET são passados ​​adicionando-os à URL do script chamado para processar as informações recebidas. Para esclarecimento este método Digite na barra de endereços do seu navegador a URL do recurso e adicione primeiro um ponto de interrogação (?) e depois a linha num=10 . Por exemplo

http://domain.ru/script.php?num=10


Se você tem servidor local, então geralmente o domínio será localhost , caso em que a entrada anterior será semelhante

http://localhost/script.php?num=10


Neste caso, estamos passando o parâmetro num igual a 10. Para adicionar os seguintes parâmetros ao script, você precisa usar o separador e comercial (& ), por exemplo

http://domain.ru/script.php?num=10&type=new&v=text


Neste caso, passamos três parâmetros para o script: num com o valor 10, type com o valor "new" ev com o valor "texto".
Para obter esses parâmetros no script, você precisa usar o array embutido $_GET $_GET["num"], $_GET["tipo"],$_GET["v"]. Esses elementos do array conterão os valores dos parâmetros passados. Para demonstrar este exemplo, crie um arquivo script.php com o seguinte conteúdo



Validando o método GET em PHP


echo ($_GET["num"]."
");
echo ($_GET["tipo"]."
");
echo($_GET["v"]);
?>


E agora chame esse arquivo no navegador

http://path/script.php?num=10&type=new&v=text


e você verá os parâmetros passados ​​na janela do navegador. Mas se você chamar esse arquivo sem opções adicionais http://path/script.php , você verá os erros que o interpretador dará PHP, que não existem tais elementos no array $_GET. Mais de um artigo pode ser dedicado à verificação dos dados recebidos do usuário, portanto, neste artigo não tocarei nesse ponto.
Como você provavelmente entende, forçar o usuário a digitar dados na barra de endereços do navegador não é muito bom e nem um pouco inconveniente. Portanto, para receber dados do usuário, você precisa usar formulários html. Vamos escrever um formulário html simples.


Digite o número

Você tem um computador?

Seu comentário:





Vou comentar um pouco sobre o formulário criado. Os formulários são criados com a tag form. Os campos de formulário são criados por tags input , select , textarea (você pode ler mais). Na tag do formulário, o atributo action especifica a URL do script que receberá os dados do formulário. No nosso caso, especificamos o arquivo script.php que já temos. O atributo method especifica o método de envio de dados. Nós especificamos um método PEGAR. Agora sabemos para qual arquivo os dados do formulário serão transferidos e de que maneira resta descobrir onde procurá-los lá?!
Esses dados do formulário serão passados ​​para o recurso da web pelo navegador anexando-o à URL: primeiro haverá um ponto de interrogação (? ), depois os parâmetros serão apresentados separados por um e comercial (& ). O nome do parâmetro será retirado do atributo name, que deve ser especificado para qualquer campo do formulário. O valor do parâmetro dependerá do tipo de campo. Se o campo for um campo de texto, o valor será o texto inserido pelo usuário. Se o campo for uma lista, um grupo de botões de opção ou caixas de seleção, o valor do parâmetro será o valor do atributo value do elemento selecionado. Deixe-me explicar com um exemplo do nosso formulário. Se o usuário inserir o número 10 no campo de entrada, o nome do parâmetro será num (o valor do atributo name da tag de entrada) e o valor será 10 (o número inserido pelo usuário). Assim, o navegador irá gerar um par de "num=10". Se o usuário selecionar "Sim" na lista, o nome da opção será type (o valor do atributo name da tag select) e o valor será yes (o valor do atributo value da tag de opção ). Assim, o navegador formará um par de "type=yes".
Agora vamos colocar este formulário na página forma.php .



Formulário para transferência de dados pelo método GET e PHP



Digite o número

Você tem um computador?

Seu comentário:







Insira quaisquer valores nos campos do formulário e clique no botão "Enviar". Após clicar no botão, o navegador abrirá outra página (script.php ) e os dados inseridos serão exibidos na janela do navegador. Acho que está claro o porquê: o navegador passará os dados para o script script.php, e no script esses dados serão processados ​​e exibidos na tela.
Método POST Agora vamos ver como o método funciona PUBLICAR.
Para enviar dados por método PUBLICAR Você precisa usar formulários HTML. Como lembramos, o atributo method da tag form é responsável pelo método de envio dos dados do formulário. Portanto, você precisa especificar o valor POST no atributo method da tag do formulário. O resto do formulário pode ser igual ao do método GET. Vamos mudar nosso formulário, que já usamos para enviar dados pelo método GET, para enviar pelo método POST.


Digite o número

Você tem um computador?

Seu comentário:





Como você pode ver, o formulário permanece o mesmo, exceto pelos atributos de método e ação. Os dados agora serão passados ​​para o script script_post.php. Vamos colocar nosso formulário na página forma_post.php.



Formulário para transferência de dados pelo método POST e PHP



Digite o número

Você tem um computador?

Seu comentário:







Agora precisamos escrever um script que processará nossos dados de formulário.
Para receber dados no script pelo método passado PUBLICAR precisa usar array embutido $_POST. As chaves deste array serão os nomes dos parâmetros. No nosso caso, precisamos usar $_POST["num"], $_POST["tipo"],$_POST["v"]. Esses elementos da matriz conterão os valores dos dados transferidos. Como você pode ver, a diferença de usar o método GET é expressa apenas no uso do array $_POST. Portanto, não será difícil para nós escrever um arquivo script_post.php:



Verificando o método POST em PHP


echo ($_POST["num"]."
");
echo ($_POST["tipo"]."
");
echo($_POST["v"]);
?>


Agora abra o arquivo forma_post.php em um navegador. Insira alguns dados nos campos do formulário e clique no botão "Enviar". Até agora, você provavelmente notou a diferença entre o método POST e o método GET - os dados do formulário não apareciam na barra de endereços do navegador. Método de dados PUBLICAR não pode ser passado pela barra de endereços do navegador. Esta diferença essencial deve ser lembrada.
DENTRO PHP independentemente de como os dados foram enviados - usando o método POST ou o método GET - você pode obter os dados usando o array $_REQUEST. Comparação dos métodos GET e POST Ao usar o método GET, os dados são transferidos anexando à URL. Assim, eles ficarão visíveis para o usuário, o que nem sempre é bom do ponto de vista de segurança. Além disso, a quantidade máxima de dados transmitidos dependerá do navegador - do número máximo permitido de caracteres na barra de endereços do navegador.
Ao usar o método POST, os dados não ficarão visíveis para o usuário (não serão exibidos na barra de endereços do navegador). E, portanto, eles são mais seguros e, consequentemente, o programa que processa esses dados é mais seguro em termos de segurança. Além disso, a quantidade de dados transferidos é praticamente ilimitada.
Ao escolher um método de transferência de dados, você precisa levar em consideração os recursos acima e parar no método mais apropriado.

Formulários HTML. Matrizes $_POST e $_GET

Formulários HTML. Métodos para enviar dados para o servidor

Você provavelmente já se deparou com formulários HTML:

Digite seu nome:

Ao salvar este código em um arquivo HTML e visualizá-lo com seu navegador favorito, você verá um formulário HTML familiar:

Marcação

, que tem uma tag final pareada
, na verdade define o formulário. Seus atributos são opcionais:

  • ação - Especifica a URL (completa ou relativa) para a qual o formulário será enviado. Se esse atributo não for especificado, a maioria dos navegadores (mais precisamente, todos os navegadores que conheço) enviam o formulário para o documento atual, ou seja, "para ele mesmo". É uma abreviação conveniente, mas o padrão HTML requer o atributo action.
  • método - como o formulário é enviado. Existem dois deles.
    • GET - envia dados do formulário na barra de endereços.
      Você deve ter notado em vários sites a presença do símbolo "?" no final da URL. seguido por dados no formato parâmetro=valor. Aqui "parâmetro" corresponde ao valor do atributo name dos elementos do formulário (veja abaixo sobre a tag ) e "value" - para o conteúdo do atributo value (por exemplo, contém a entrada do usuário no campo de texto da mesma tag ).
      Por exemplo, tente pesquisar algo no Yandex e preste atenção na barra de endereços do seu navegador. Este é o método GET.
    • POST - os dados do formulário são enviados no corpo da solicitação. Se não estiver totalmente claro (ou completamente incompreensível) o que é - não se preocupe, retornaremos a esse problema em breve.
    Se o atributo de método não for especificado, GET será assumido.

Marcação - especifica o elemento de formulário definido pelo atributo type:

  • O valor "texto" especifica um campo de entrada de texto de linha única
  • O valor "submit" especifica o botão que, quando clicado, envia o formulário ao servidor

Outros valores são possíveis (e não é a única tag que define um elemento de formulário).

Então, o que acontece quando clicamos no botão "OK"?

  1. O navegador examina os elementos incluídos no formulário e gera dados de formulário a partir de seus atributos de nome e valor. Digamos que o nome Vasya seja inserido. Neste caso, os dados do formulário são name=Vasya&okbutton=OK
  2. O navegador estabelece uma conexão com o servidor, envia uma solicitação ao servidor para o documento especificado no atributo action da tag
    , usando o método de envio de dados especificado no atributo method (neste caso, GET), passando os dados do formulário na solicitação.
  3. O servidor analisa a solicitação recebida, gera uma resposta, envia para o navegador e fecha a conexão
  4. O navegador exibe o documento recebido do servidor

Enviar a mesma solicitação manualmente (usando telnet) se parece com isso (suponha que Nome do domínio site - www.exemplo.com):

Telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n Host: www.example.com\r\n \r\n

Como você já deve ter adivinhado, clicar em um botão de envio em um formulário com um método de envio "GET" é o mesmo que inserir o URL apropriado (com um ponto de interrogação e dados do formulário no final) na barra de endereço do navegador:

http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK

Na verdade, o método GET é sempre usado quando você solicita um documento do servidor simplesmente digitando sua URL ou clicando em um link. Usando , o URL é simplesmente anexado com um ponto de interrogação e dados de formulário.

Talvez todos esses detalhes técnicos e exercícios com telnet pareçam incrivelmente chatos e até desnecessários para você ("o que o PHP tem a ver com isso?"). Mas em vão. :) Estes são os fundamentos para trabalhar com o protocolo HTTP, que todo programador Web precisa saber de cor, e isso não é conhecimento teórico - tudo isso será útil na prática.

Agora vamos substituir a primeira linha do nosso formulário pelo seguinte:

Especificamos o método de envio "POST". Nesse caso, os dados são enviados ao servidor de uma maneira um pouco diferente:

Telnet www.example.com 80 POST /cgi-bin/form_handler.cgi HTTP/1.0\r\n Host: www.example.com\r\n Tipo de conteúdo: application/x-www-form-urlencoded\r\ n Content-Length: 41263\r\n \r\n name=Vasya&okbutton=OK

Ao utilizar o método POST, os dados do formulário são enviados após os "dois Enters" - no corpo da solicitação. Qualquer coisa acima é na verdade o cabeçalho da solicitação (e quando usamos o método GET, os dados do formulário foram enviados no cabeçalho). Para que o servidor saiba em qual byte terminar a leitura do corpo da solicitação, a linha Content-Length está presente no cabeçalho; sobre o fato de que os dados do formulário serão passados ​​no formulário parâmetro1=valor1&parâmetro2=valor2... , e os valores são transmitidos na forma de urlencode - ou seja, da mesma forma que com o método GET, mas em o corpo da solicitação - o cabeçalho Content informa o servidor -Type: application/x-www-form-urlencoded .

A vantagem do método POST é que não há limite no comprimento da string de dados do formulário.

Com o método POST, não é possível enviar o formulário simplesmente "seguindo o link", como foi o caso de GET .

Ao usar um formulário POST, em seu atributo de ação, você pode especificar os parâmetros do formulário GET após o ponto de interrogação. Assim, o método POST também inclui o método GET.

Matrizes $_GET e $_POST

Assim, os formulários são a principal forma de troca de dados entre um servidor web e um navegador, ou seja, eles proporcionam interação com o usuário - na verdade, para que serve a programação web.

Considere um exemplo simples:



if ($_SERVER [ "REQUEST_METHOD" ] == "POST" ) (
eco "

Ei, " . $_POST [ "nome" ] . "

!" ;
}
?>
">
Digite seu nome:




O formulário mostrado nas linhas 8-12 contém dois elementos: name e okbutton . O atributo method especifica o método de envio do formulário POST, enquanto o atributo action, que indica a URL para a qual o formulário é enviado, é preenchido com o valor da variável do servidor PHP_SELF, o endereço do script atualmente em execução.

- forma abreviada para .

Suponha que inserimos o valor Vasya no campo de nome e clicamos no botão OK. O navegador então envia uma solicitação POST para o servidor. Corpo da solicitação: name=Vasya&okbutton=OK . O PHP preenche automaticamente o array $_POST:

$_POST [ "nome" ] = "Vasya"
$_POST [ "botão ok" ] = "OK"

Na verdade, o valor "Vasya" é enviado pelo navegador na forma de urlencode; para a codificação do Windows-1251, esse valor se parece com %C2%E0%F1%FF . Mas como o PHP faz a decodificação necessária automaticamente, podemos "esquecer" esse recurso - até que tenhamos que trabalhar com solicitações HTTP manualmente.

Como o corpo da solicitação especifica apenas nomes e valores, não tipos de elementos de formulário, o PHP não tem idéia se $_POST["name"] corresponde a uma string de entrada, um botão ou uma lista. Mas nós realmente não precisamos dessa informação. :)

Como não precisamos saber o que está escrito no botão submit, na linha 11 podemos remover o atributo name, encurtando a descrição do botão para . Nesse caso, o navegador enviará uma solicitação POST name=Vasya.

E agora - a mesma coisa, mas para o formulário GET:



if (isset($_GET [ "nome" ])) (
eco "

Ei, " . $_GET [ "nome" ] . "

!" ;
}
?>
">
Digite seu nome:





Na linha 8 poderia muito bem ter escrito

: GET é o método padrão. Desta vez, o navegador envia uma solicitação GET, que equivale a inserir o endereço na barra de endereços: http://site-address/script-name.php?name=Vasya.

O PHP faz exatamente a mesma coisa com os formulários GET e com POST , com a diferença de que o array $_GET é preenchido.

A diferença principal está na linha 4. Como simplesmente inserir o endereço na linha do navegador é uma solicitação GET, a verificação if ($_SERVER["REQUEST_METHOD"] == "GET") não faz sentido. Portanto, recorremos à construção isset(), que retorna true se a variável fornecida estiver definida (ou seja, recebeu um valor) e false se a variável não estiver definida. Se o formulário foi preenchido - como você já entendeu, o PHP automaticamente atribui a $_GET["name"] o valor apropriado.

O método de verificação isset() é universal, também pode ser usado para um formulário POST. Além disso, é preferível, pois permite descobrir exatamente quais campos do formulário estão preenchidos.

Um exemplo um pouco mais complexo.




echo "Por favor, digite um nome!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
eco
"
;
) outro (

" ;

echo "Você" . $idade. " anos
" ;
}
eco "


" ;
}
?>
">
Digite seu nome:


Digite seu ano de nascimento:





Nenhum truque novo é usado aqui. Descubra, execute o código, tente modificar...

Vamos alterar o último exemplo para que o usuário não precise preencher novamente os campos. Para isso, vamos preencher os atributos de valor dos elementos do formulário com os valores que acabamos de inserir.



$nome = isset($_POST [ "nome" ]) ? $_POST["nome"]: "";
$ano = isset($_POST [ "ano" ]) ? $_POST["ano"]: "";

If (isset($_POST [ "nome" ], $_POST [ "ano" ])) (
if ($_POST [ "nome" ] == "" ) (
echo "Por favor, digite um nome!
" ;
) senão if ($_POST [ "ano" ]< 1900 || $_POST [ "year" ] > 2004 ) {
eco "Digite o ano de nascimento! Faixa válida: 1900..2004
"
;
) outro (
echo "Olá, " . $_POST["nome"] . "!
" ;
$idade = 2004 - $_POST["ano"];
echo "Você" . $idade. " anos
" ;
}
eco "


" ;
}
?>
">
Digite seu nome:


Digite seu ano de nascimento:





As linhas 4 e 5 podem se tornar um pouco incompreensíveis. É muito simples: a linha 4 pode ser escrita assim:

if (isset($_POST [ "nome" ]))
$nome = $_POST["nome"];
outro
$nome = "" ;

A questão pode surgir - por que não descartar as linhas 4-5 e escrever:

Digite seu nome: ">

Digite seu ano de nascimento: ">

O fato é que se essas variáveis ​​POST não estiverem definidas - e estarão se o formulário ainda não tiver sido preenchido - o PHP emitirá avisos sobre o uso de variáveis ​​não inicializadas (e, com razão: tal mensagem permite encontrar rapidamente erros de digitação difíceis de encontrar em nomes de variáveis ​​e também alerta sobre possíveis "buracos" no site). Você pode, é claro, colocar o código isset diretamente no formulário, mas será muito complicado.

Entendi? Agora tente encontrar o erro no código acima. Bem, não é bem um erro - mas uma falha.

htmlspecialchars()

Não encontrou? vou avisar. Digite, por exemplo, aspas duplas no campo "nome" e algum texto, por exemplo, Vasya. Envie o formulário e dê uma olhada no código-fonte da página recebida. A quarta linha será algo como:

Digite seu nome:

Ou seja, nada de bom. E se um usuário astuto digitasse um código JavaScript?

Para resolver esse problema, você precisa usar a função htmlspecialchars(), que substituirá os caracteres de serviço por sua representação HTML (por exemplo, uma aspa com "):



$nome = isset($_POST [ "nome" ]) ? htmlspecialchars ($_POST [ "nome" ]) : "" ;
$ano = isset($_POST [ "ano" ]) ? htmlspecialchars ($_POST [ "ano" ]) : "" ;

If (isset($_POST [ "nome" ], $_POST [ "ano" ])) (
if ($_POST [ "nome" ] == "" ) (
echo "Por favor, digite um nome!
" ;
) senão if ($_POST [ "ano" ]< 1900 || $_POST [ "year" ] > 2004 ) {
eco "Digite o ano de nascimento! Faixa válida: 1900..2004
"
;
) outro (
echo "Olá, " . $nome. "!
" ;
$idade = 2004 - $_POST["ano"];
echo "Você" . $idade. " anos
" ;
}
eco "


" ;
}
?>
">
Digite seu nome:


Digite seu ano de nascimento:





Repita o experimento e verifique se o código HTML está correto.

Lembre-se - a função htmlspecialchars() deve ser usada sempre que o conteúdo de uma variável que pode conter caracteres especiais HTML for exibido.

phpinfo()

A função phpinfo() é uma das funções mais importantes do PHP. Ele exibe informações sobre as configurações do PHP, os valores de várias variáveis ​​de configuração...

Por que eu menciono isso em um artigo sobre formulários? phpinfo() é a ferramenta de depuração mais conveniente. phpinfo() gera, entre outras coisas, os valores de todas as variáveis ​​$_GET , $_POST e $_SERVER. Portanto, se uma variável de formulário for "perdida", a maneira mais fácil de descobrir o que está errado é usar a função phpinfo(). Para que a função exiba apenas os valores das variáveis ​​(e você não precise rolar uma dúzia de páginas), ela deve ser chamada da seguinte forma: phpinfo(INFO_VARIABLES); , ou - que é exatamente o mesmo - phpinfo(32) ;.



">
Digite seu nome:


phpinfo(32);
?>

Ou, por exemplo, esta situação: você quer saber o endereço IP do visitante. Você lembra que a variável correspondente está armazenada no array $_SERVER, mas - azar - você esqueceu como exatamente a variável é chamada. Novamente, chamamos phpinfo(32); , procure seu endereço IP na tabela e encontre-o - na linha $_SERVER["REMOTE_ADDR"] .