J'ai la page HTML / PHP suivante:
<?php
if(empty($_SERVER['CONTENT_TYPE'])) {
$type = "application/x-www-form-urlencoded";
$_SERVER['CONTENT_TYPE'] = $type;
}
echo "<pre>";
var_dump($_POST);
var_dump(file_get_contents("php://input"));
echo "</pre>";
?>
<form method="post" action="test.php">
<input type="text" name="test[1]" />
<input type="text" name="test[2]" />
<input type="text" name="test[3]" />
<input type="submit" name="action" value="Go" />
</form>
Comme vous pouvez le voir, le formulaire sera soumis et la sortie attendue est un tableau POST avec un tableau contenant les valeurs remplies et une entrée "action" avec la valeur "Go" (le bouton). Cependant, quelles que soient les valeurs que j'entre dans les champs; le résultat est toujours:
array(2) {
["test"]=>
string(0) ""
["action"]=>
string(2) "Go"
}
string(16) "test=&action=Go&"
D'une manière ou d'une autre, le tableau nommé test est vidé, la variable "action" le fait.
J'ai utilisé l'extension Live HTTP Headers pour Firefox pour vérifier si les champs POST sont soumis, et ils le font. Les informations pertinentes des en-têtes HTTP en direct (avec a, b et c remplis comme valeurs dans les zones de texte):
Content-Type: application/x-www-form-urlencoded
Content-Length: 51
test%5B1%5D=a&test%5B2%5D=b&test%5B3%5D=c&action=Go
Quelqu'un at-il une idée de pourquoi cela se produit? Je flippe sur celui-ci, cela m'a déjà coûté tellement de temps ...
Mise à jour:
Nous avons essayé cela sur différents serveurs, sur les boîtes Windows, cela fonctionne, sur le serveur Ubuntu avec PHP version 5.2.4 (avec Suhosin), ce n'est pas le cas. Il fonctionne même sur un serveur différent, également avec Ubuntu et la même version PHP, également avec Suhosin installé.
J'ai différencié les deux fichiers, voici la sortie ( diff php.ini phps.ini
):
270c270
< memory_limit = 32M
---
> memory_limit = 16M ; Maximum amount of memory a script may consume (16MB)
415c415
< variables_order = "EGCSP"
---
> variables_order = "EGPCS"
491d490
< include_path = ".:"
1253a1253,1254
> extension=mcrypt.so
>
Dans ce phps.ini est celui du serveur sur lequel il fonctionne et php.ini est l'actuel. On dirait qu'il n'y a pas de problème ici, non?