Array $_POST vide

J’ai été confronté au problème suivant deux fois avec un CMS fait maison : poster un formulaire avec la méthode post n’envoyait aucune information à la page définie dans l’attribut action du formulaire. Afficher $_POST :

print_r($_POST);

donnait systématiquement le même résultat :

array();

Mon fichier .htaccess définit Magic_quotes à 0, Register_Globals à 0 et PHP_VER à 5. Puis il contient quelques redirections 301 :

SetEnv MAGIC_QUOTES 0
SetEnv REGISTER_GLOBALS 0
SetEnv PHP_VER 5
Options +FollowSymlinks -MultiViews
RewriteEngine on
rewritecond %{http_host} ^mydomain.be [nc]
rewriterule ^(.*)$ http://www.mydomain.be/$1 [r=301,nc]
Et le problème de $_POST vide vient des redirections 301 redirect. En effet, mon formulaire était posté à http://mydomain.be/index.php à cause d’une balise « base » définie à l’intérieur de la balise « head » de mon document :
<base href=’http://mydomain.be/’ />
et l’attribut action de la balise « form » était le suivant :
<form method=’post’ action=’./index.php’>
A cause des redirections 301 qui font pointer mydomain.be vers www.mydomain.be et le formulaire qui pointe vers mydomain.be/index.php, Apache n’associe pas le tableau $_POST avec www.mydomain.be mais avec le domaine domain.be. D’où le problème de $_POST vide.
J’espère que cet article vous épargnera quelques longues minutes de debugging.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>