O estranho caso da matriz POST desaparecida em PHP

Pergunta
Em toda a minha trajetória como pesquisador de informática nunca encontrei nada tão misterioso como o que me disponho a contar.

Era em principio algo trivial, um formulário que se autopassa (pelo método POST) os dados de um formulário, obtidos para seu posterior tratamento.

Este é o cabeçalho de definição do formulário:

<form action="visitas.html" method="post">

Um momento! HTML? Em realidade não é assim. Trata- se de "visitas.php", mas está redirecionado por meio de .htaccess, camuflando a verdadeira extensão do arquivo.

Esse redirecionamento funciona perfeitamente em outras páginas do site, e nesta página do formulário também.

No entanto, quando se preenchia o formulário e se apertava o botão de enviar, a página se comportava como se não se tivesse enviado nada.

Valorize esta FAQ:
A FAQ O estranho caso da matriz POST desaparecida em PHP tem Pertence à categoria:
Resposta
Eu mesmo respondo esta pergunta, pois já resolvi o problema.

Odeio os trabalhos de rastreamento, embora nesta profissão freqüentemente sejam inevitáveis. Coloquei no início do script um print_r($_POST), para ver o que estava acontecendo. Resultado: array(). Ou seja, os dados não chegavam a seu destino. A matriz com os dados do formulário desaparecia pelo caminho. Como era possível?

No começo não sabia onde procurar. Estava tudo ali, nesse simples arquivo. Tudo estava correto, os dados eram enviados, mas não eram recebidos.

Depois de uma árdua pesquisa descobri que o formulário realmente enviava os dados a http://midominio.com/visitas.html, e, no entanto, tentavam ser recebidos em http://www.midominio.com/visitas.html (a extensão html ou php aqui não tem transcendência). Ou seja, havia outro redirecionamento, além do especificado em .htaccess, cujo objetivo era acrescentar o triplo w, e era nesse processo que desaparecia matriz.

Li em algum site que alguém pensava que era um bug de PHP, algo que não me importou, pois o que eu necessitava não era colocar a culpa em alguém, mas encontrar uma solução. Uma vez localizado o problema, o resto foi fácil: eliminei o indesejado redirecionamento. Substituí a definição do formulário por:

<form action="http://www.meudominio.com/visitas.html" method="post">

Dessa maneira, ao especificar os www no domínio, como por arte de magia, os dados apareceram onde deviam estar.

Para analisar os redirecionamentos que estão sendo produzidos no acesso a uma web, recomendo o complemento de Firefox Live HTTP Headers.

Por Rafael Muñoz Polonio

Voltar à árvore de categorias Voltar à árvore de categorias

Comentários da faq
Foram enviados 2 comentários à faq
2 comentários não revisados
0 comentários revisados
 
FAQs relacionadas
  + Escolher um action para o form
  + Comprovação de formulários
  + Textarea em formulários
  + Consulta sobre formulários
  + Enviar formulário por e-mail e a uma página php
  + Identificar domínio de empresa
  + Função password em PHP
  + Inserir dados em combobox dinamicamente com php
  + Passar valor text a uma função PHP
  + Select name dependendo de outro select
  + [...]

Ver todas las FAQS de Formulários e PHP

Usuários :    login / registro

Home | Sobre nós | Copyright | Anuncie | Entrar em contato