2011-07-04 6 views
1

J'ai vu quelques articles ici qui ont le même problème mais aucun d'eux n'est aussi simple que le mien et donc le poste.

Je suis nouveau sur php et je vois que les variables $_POST et $_REQUEST sont vides. Je peux obtenir les en-têtes en utilisant le apache_request_headers() et suis capable de voir les en-têtes correctement. C'est juste que la variable $_POST est vide.

Mon client est une application Android et génère le message correctement. J'ai utilisé tcpdump pour le tester. De plus, les journaux apache montrent que le PHP prévu est appelé. J'utilise Apache 2.2.14 et PHP 5.2.12 l'installation standard, rien de spécial.

Quelqu'un peut-il penser à une raison quelconque pour laquelle la variable $_POST est vide?

Aussi, je n'utilise pas de classe dans mon code. C'est juste du code qui appelle des fonctions d'autres classes si nécessaire. Je mentionne cela parce que j'ai vu un autre poste qui suggère d'utiliser $this->input->post() mais ce n'est pas possible dans mon cas.

EDIT: J'ai trouvé le problème grâce à Sean ci-dessous. Le "Content-Type" n'a pas été défini correctement et cela a causé les valeurs réelles n'atteignant pas le code PHP. Assez curieusement, les en-têtes de la demande vide sont ce que je leur ai donné. Pourquoi les données seraient-elles dépouillées?

+0

Montrez-nous votre décharge. Je suppose que vous ne générez pas correctement les en-têtes. – Brad

+2

Avez-vous vérifié si $ _GET est vide aussi? – vascowhite

+0

@vascowhite: Dans ce cas, $ _REQUEST n'aurait pas été vide aussi. –

Répondre

3

Assurez-vous que votre client Android envoie le bon type de contenu sur POST. Il doit être défini sur application/x-www-form-urlencoded.

 url = new URL("your URL"); 
     connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoOutput(true); 
     connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     connection.setRequestMethod("POST"); 
+0

J'ai effectivement rencontré ce même problème lorsque j'écrivais une application iOS qui communiquait avec une application Microsoft ASP.NET. –

+0

Vous avez raison! Le type de contenu était erroné.Le régler correctement le fait fonctionner. – user220201

1

D'abord, je vérifier que votre serveur ne réoriente vos données POST avec un code 301 'déplacé de façon permanente. Ouvrez votre fichier journal pour le vérifier. Si cela fonctionne bien, vous devriez voir un code 200 (ou 201 au pire). Vous remarquerez que pour chaque appel au serveur, un code POST et GET sera généré. Assurez-vous que les deux sont 200. Si seulement GET est 200, mais POST est 301 alors votre serveur redirige pour une raison quelconque (par exemple, vous appelez http://mysite.com, mais le serveur redirige vers http://www.mysite.com).

Si vous devez tester GET sans quelque chose comme ceci en utilisant la valeur de retour android essayer HttpPost dans Android:

HttpPost httppost = new HttpPost("http://www.mysite.com?somevarname=somevalue"); 
httpclient.execute(httppost); 

ensuite du côté serveur essayer de faire quelque chose comme la création d'un fichier, ou quelque chose si GET vars sont présents.

Toutefois, si votre journal contient un code de redirection pour GET et POST, vous devez remplacer la redirection par un fichier .htaccess ou configurer votre hôte pour arrêter toute redirection.

Bonne chance!