2009-09-14 8 views
0

Je me sens stupide en posant cette question, mais je me bats dessus depuis des heures et je ne sais pas où aller.Les champs HTTP Post ne sont pas reçus par le script PHP

J'ai un formulaire flash qui fait une requête POST à ​​un script php, puis affiche la sortie du script. Par souci de simplicité, disons que c'est le script php:

echo 'Mail sent to: ' . $_POST['recipientEmail']; 

Quand je soumets la forme, je vois cela dans l'onglet net de Firebug dans la ligne faite par la requête POST:

Referer: http://example.com/my.swf 
Content-type: text/html 
Content-length: 68 

[email protected] 

Tout va bien à la surface. Le message a été fait, il a envoyé la bonne variable au script. Mais quand la réponse revient, ce que je vois dans mon traceur Flash:

Mail sent to: 

En d'autres termes, la demande $ _POST [ « recipientEmail »] a été perdue après la sortit de mon navigateur.

Que pensez-vous qu'il se passe ici? Le script et le fichier swf sont tous les deux dans le même domaine, le même serveur.

EDIT: J'ai juste essayé de frapper le même script à partir d'un formulaire HTML, et il attrape l'en-tête $ _POST. Donc, il ne l'attrape que lorsqu'il est envoyé par Flash. L'onglet de poste Firebug semble un peu différent de ce qu'il est avec flash:

recipientEmail [email protected] 
submit   Submit 

avis chaque variable est dans sa propre ligne.

EDIT: Voici le code AS3 pertinent qui fait la soumission:

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."); 
    } 
+0

Utilisez-vous des frameworks ou du PHP pur? Certains cadres effacent le tableau $ _POST. – jimyi

+0

@jimyi, non je n'utilise pas de frameworks. – picardo

+0

J'ai juste essayé de frapper le même script à partir d'un formulaire HTML, et miraculeusement, il a attrapé l'en-tête $ _POST. Donc, il ne l'attrape que lorsqu'il est envoyé par Flash. Hm. – picardo

Répondre

5

Vérifiez soigneusement les en-têtes pour la requête faite par le formulaire HTTP par rapport à la demande de votre applet Flash. En un coup d'oeil, ma première supposition serait que le type de contenu "text/html", ce qui n'est pas correct pour les données envoyées - il devrait être "application/x-www-form-urlencoded". Rappelez-vous, je n'ai jamais testé pour voir si PHP réellement se soucie de ce détail particulier, mais il est certainement suspect.

+0

Cela me semble juste. J'ai le texte/html défini comme type de contenu. Laisse moi vérifier. – picardo

+0

HURRAY! Tu avais raison. C'est pourquoi j'aime Stackoverflow.Merci beaucoup. – picardo

+0

Vous êtes les bienvenus. ;-) –

0

Pouvez-vous var_dump($_POST); (ou print_r($_POST);) pour voir ce qu'il contient?

+0

C'est vide quand je fais ça. Mais voir mon édition, le $ _POST est seulement vide lorsque la soumission de formulaire est faite à partir de FLash. Je vais également poster le code Flash correspondant. – picardo

0

Essayez de remplacer $ _POST par $ _REQUEST. J'ai eu des problèmes avant où j'attendais l'information dans $ _POST, mais cela ne fonctionnerait pas. Le changer en $ _REQUEST introduit les valeurs pour POST, GET et COOKIE.

0

Utilisez-vous .htaccess? Assurez-vous que .htaccess ne réécrit pas votre URL de demande. Si vous envoyez à http://example.com et que .htaccess le réécrit pour être http://example.com/, par exemple, vous perdrez vos variables.

Questions connexes