+7

Compartilhando informações entre páginas com GET e POST

criado por Ricardo Guedes em 23/04/2003 8:27am
As vantagens do POST em relação ao GET:

- É mais seguro que o GET porque as informações passadas pelos usuários nunca é visivel na URI.
- Limite muito maior, uns 2 kbytes de informação, podem ser passadas.

Como usar o POST:

O POST é mais utilizado para tratamento de formulários. Usa-se de forma muito semelhante ao GET em formulários, por exemplo:

<form action="http://www.metodoget.br/pagina.php" method="POST">
  <input name="argumento" type="text" value="valor">
  <input name="enviar" type="submit" value="enviar">
</form>

Repare que agora o atributo "method" do formulário é igual a "POST". Se eu digitar algo na caixa e apertar o botão "enviar" a minha URI continuará da mesma forma pois o POST não trabalha com a URI. Certo, mais onde foram parar os dados?

Os argumentos GET podem ser recuperados pelo PHP através das seguintes variáveis:

<?php
echo $HTTP_POST_VARS['nome_do_argumento'];
echo $_POST['nome_do_argumento'];
?>

A dica mais importante: Nunca utilize o metodo GET para formulários de login, ou para quaisquer dados sigilosos, pois os mesmos serão visíveis pela URL.

Exemplos completos: arquivo-> pagina.php

Usando POST:

<html>
<body>
<?php
if (isset($HTTP_POST_VARS['enviar'])) { 
    $texto = $HTTP_POST_VARS['argumento'];
    // será impresso o que for digitado no campo
    echo($texto);
} else {
?>
<form action="http://www.metodoget.br/pagina.php" method="POST">
  <input name="argumento" type="text">
  <input name="enviar" type="submit" value="enviar">
</form>
<?php
}
?>
</body>
</html>

Usando GET:

<html>
<body>
<?php
if (isset($HTTP_GET_VARS['enviar'])) { 
    $texto = $HTTP_GET_VARS['argumento'];
    // será impresso o que for digitado no campo
    echo($texto);
} else {
?>
<form action="http://www.metodoget.br/pagina.php" method="GET">
  <input name="argumento" type="text">
  <input name="enviar" type="submit" value="enviar">
</form>
<?php
}
?>
</body>
</html>

ou:

<html>
<body>
<?php
if (isset($HTTP_GET_VARS['argumento'])) { 
    $texto = $HTTP_GET_VARS['argumento'];
    // será impresso quando o link for clicado
    echo("Este é mais um ".$texto." do que o GET é capaz");
} else {
?>
<a href="http://www.metodoget.br/pagina.php?argumento=exemplo">Meu Link</a>
<?php
}
?>
</body>
</html>

Comentários:

Mostrando 1 - 10 de 26 comentários
kennedy paulo disse:
cara quero um scrip para comentar em galeria e ficar tudo em uma pagina que o internalta pode ver como os 10 utimos comentario manda resposta para meu msn se vc tem isso ai kennedipaulo@hotmail.com
30/04/2006 5:13pm (~18 anos atrás)

utilizei um listBox que postou os seguintes valores (http://servidor/sis/orcamento/TMPxitljk958x.php?lstCampoVisual=02&lstCampoVisual=03&lstCampoVisual=04&Submit=Submit)

gostaria de saber como posso recuperalas.

obrigado.
26/07/2005 5:22pm (~19 anos atrás)

Gustavo Villa disse:
Em muitas situações eu quero passar dados entre páginas (sem usar sessão) e acabo precisando usar campos hidden (o que acho inseguro). Alguém sabe se dá para enviar via POST sem ser com uso de forms?

TKS!
05/02/2004 9:44am (~20 anos atrás)

Oi Diogo,

Primeiramente, obrigado.

Bom, na época que foi feito o artigo a utilização das variáveis $_VARIÁVEL (disponível a partir do PHP 4.1.0) não era um coisa padrão ainda adotada por muitos programadores e até mesmo pelo TEAM PHP, tanto que só foi tida como padrão na versão 4.2.0. O artigo foi feito um pouco depois deste lançamento, porém postado no site PHP outros meses depois.

Para saber como iniciar o artigo fiz uma pesquisa na net para saber onde estavam os verdadeiros problemas dos iniciantes com a utilização do métodos POST e GET e então o escrevi.

Ainda hoje vejo muitos código *NOVOS* de usuários iniciantes usando $HTTP_*_VARS.

Reconheço que o artigo foi um pouco incompleto, porém os comentários referentes a ele encobriram todos os buracos, deixando-o completo.

Com relação a sua pergunta sobre o porquê de se usar as variáveis superglobais, a resposta é única SEGURANÇA.

Entendendo melhor isso acesse:
http://us4.php.net/register_globals

Quaisquer dúvidas entre em contato.

Abraços
03/09/2003 1:29am (~20 anos atrás)

Diogo Gomes disse:
Ótimo artigo, mas faltou comentar o porquê de se usar as variáveis superglobais, $_POST, etc... O famoso register_globals "off"
02/09/2003 7:11pm (~20 anos atrás)

Oi Ferdinando,

Se eu bem entendi, você possui o seguinte problema:
1. Faz a seleção dos Nomes no campo select e em seguida preenche com o endereço e telefone.
2. Em seguida tem as opções de incluir, alterar e excluir os dados.
3. Ao final de tudo isso clicando em gravar ele executaria todas as operações feitas e concluiria.

Seria isso?

Se for tenho uma pequena solução:
1. Crie uma tabela temporária.
-> id (index, primaria e autoincrementada)
-> nome
-> telefone
-> operacao

Cada clique nos botões incluir, alterar, ou excluir devem inserir estes dados na tabela temporária. Este tipo de coisa é semelhante a um sistema comprar (Submarino, Cultura... e outras)
PS: Seria interessante colocar uma listagem. (como se fosse para ver o carrinho de compras)

EX:
Nome: Ricardo
End: Av. dos Anônimos
Tel: 555-5555
-> Operação Incluir

Na tabela:
| id | Nome | Endereco | Telefone | Operacao |
1 Ricardo Av. dos Anônimos 555-5555 incluir

Quando terminar de fazer tais operações clico em gravar.

Ao clicar em gravar é feita uma leitura linha-a-linha da tabela temporária.

Primeiro selecionar a operação exclusão.
Comparar o campo nome da tabela temporária com a tabela mãe. Os dados encontrados excluir

Faça a mesma ideia para alterar e depois para incluir.

Acho que é isso...
09/07/2003 9:30pm (~21 anos atrás)

Ola, como faço para passar todo o conteudo de um campo SELECT do formulario?
Criei um FORM com os seguintes caracteristicas

Nome do cliente
Endereco
Telefone

Só que o nome do cliente esta na forma de um SELECT, carregado apartir dos dados cadastrados em um BD.

Criei 3 botoes, uma para INCLUIR, ALTERAR E EXCLUIR e um quarto para gravar..

Misturei rotinas PHP e JAVASCRIPT.

Consigo alterar os dados, excluir e incluir sem precisar sair da tela do FORM, e deixo para o final quando clicar sobre GRAVAR a devida alteração. O problema esta ai, eu preciso passar todo o conteudo existente no SELECT. Sei como acessar ele mais não sei como passar para o PHP para que o mesmo possa gravar novamente no MYSQL.
Se puder me ajudar???
09/07/2003 2:23pm (~21 anos atrás)

> Sender: André Bianchi
> Olá!
> Estava lendo o seu artigo sobre GET e POST
> e achei que talvez você pudesse resolver
> uma dúvida minha:
> Por que existe GET se POST é melhor em
> todos os sentidos?
> Até,
> André.

Caro André,

O GET existe para que você possa passar parâmetros via URI (URL) como no caso de se clicar em um link.
EX: http://www.meusite.com/index.php?palavra=1

Usando links você só consegue passar parâmetros GET.
Usando formulários consegue ambos.

É isso.

Espero ter sido claro. Em alguns caso é mais prático usar o GET.

Ricardo Guedes
03/07/2003 12:58am (~21 anos atrás)

Obrigado.
03/07/2003 12:53am (~21 anos atrás)

Muito bom o artigo, parabéns! ;-)
30/06/2003 10:17am (~21 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)