campos HTTP POST não são recebidos pelo script PHP
-
07-07-2019 - |
Pergunta
Sinto-me estúpido fazer esta pergunta, mas eu estive lutando com isso por horas e eu não sei para onde me virar.
Eu tenho um formulário flash que está fazendo uma solicitação POST para um script php, e, em seguida, exibe a saída do referido roteiro. Por uma questão de simplicidade, vamos dizer que este é o script php:
echo 'Mail sent to: ' . $_POST['recipientEmail'];
Quando eu enviar o formulário, eu vejo isso na guia net do Firebug na linha feita pela solicitação POST:
Referer: http://example.com/my.swf
Content-type: text/html
Content-length: 68
recipientEmail=example@example.com
Tudo muito bem na superfície. O post foi feito, ele enviou a variável direita para o script. Mas quando a resposta vem de volta, isso é o que eu vejo no meu marcador de inflamação:
Mail sent to:
Em outras palavras, o $ _POST [ 'recipientEmail'] foi perdida após o pedido saiu do meu navegador.
O que você acha que está acontecendo aqui? Tanto o script e o arquivo SWF estão no mesmo domínio, mesmo servidor.
EDIT: Eu apenas tentei bater o mesmo script de um formulário HTML, e ele pega o cabeçalho $ _POST. Por isso, só não é captura-lo quando ele é enviado pelo Flash. A guia cargo em Firebug parece um pouco diferente do que é com flash:
recipientEmail example@example.com
submit Submit
Observe cada variável está em sua própria linha.
EDIT: Aqui está o código AS3 relevante que faz a apresentação:
var _gateway:String = Share.getGateway();
var request:URLRequest;
var variables:URLVariables = new URLVariables();
var loader:URLLoader = new URLLoader();
request = new URLRequest(_gateway);
request.contentType = 'text/html';
request.method = URLRequestMethod.POST;
variables.senderName = senderName.text;
variables.recipientEmail = recipientEmail.text;
variables.senderMessage = senderMessage.text;
request.data = variables;
try {
loader.load(request);
}catch (error:Error) {
Debug.trace("Unable to load requested document.");
}
Solução
Verifique cuidadosamente os cabeçalhos para o pedido feito pelo formulário HTTP contra o pedido de seu applet flash. Num relance, o meu primeiro palpite seria que "text/html
" tipo de conteúdo, o que não é correto para os dados enviados - deve ser "application/x-www-form-urlencoded
". Veja você, eu nunca testei para ver se o PHP realmente se preocupa com esse detalhe particular, mas é certamente de aparência suspeita.
Outras dicas
Você pode var_dump($_POST);
(ou print_r($_POST);
) para ver o que ele contém?
Tente alterar o $ _POST, para US $ _REQUEST. Eu tive problemas antes, onde eu estava esperando as informações em $ _POST, mas que não iria funcionar. Mudá-lo para $ _REQUEST traz os valores para POST, GET e Cookie.
Você está usando .htaccess? Certifique-se que .htaccess não é re-escrever o seu pedido url. Se você estiver enviando para http://example.com e .htaccess é re-escrever que fosse http://example.com/ , por exemplo, você vai perder as suas variáveis.