$_POST vide.

paro
Invité n'ayant pas de compte PHPfrance

28 août 2009, 14:34

Bonjour à tous,

J'ai un souci assez "étrange" : lorsque je soumet mon formulaire : $_POST et $_FILES sont vides avec Internet Explorer. Par contre, si je rafraichit, les bonnes valeurs réapparaissent! Aucun problème avec Firefox.

Voici mon code :

Le formulaire:

Code : Tout sélectionner

echo ' <form action="savenote.php" method="post" enctype="multipart/form-data" id="formu" name="formu" > <input value="Objet de la note interne" type="text" name="nom" id="nom" class="formulaire" onfocus="' . $focus1 . '" onblur="' . $blur1 . '" /> <input onKeyUp="completeur(this.value);" value="Emetteur de la note interne (3 caractères min.)" type="text" name="emetteur" class="formulaire" id="emetteur" onfocus="' . $focus2 . '" onblur="' . $blur2 . '" > <br /><div id="completion"></div> <input value="Date de l\'émission" type="text" class="w4em highlight-days-67 range-low-2005-08-11 range-high-2015-09-1 split-date" id="date-1" name="date-1" value="" maxlength="4" onchange="' . $date . '" onblur="' . $blurdate . '" /><label for="date-1"></label> <input value="Mots clés (séparés par des points-virgules)" type="text" name="keywords" class="formulaire" id="keywords" onfocus="' . $focus4 . '" onblur="' . $blur4 . '" style="margin-left: 100px;" > <input value="Envoi du fichier" type="file" name="fichier" class="formulaire" id="fichier" style="margin-left: 123px; width: 400px;" > <br /><br /> <input type="button" name="ajout" style="border: 1px solid #c0c0c0; width: 200px; margin-left: 100px;" value="Enregistrer" onClick="checkSubmit();" /> <br /><br /> <div id="incomplet"></div> </form> ';
La page qui traite le formulaire:

Code : Tout sélectionner

echo "post:" ; print_r($_POST); echo "<br />"; echo "files:" ; print_r($_FILES); echo "<br />";
Vous auriez une idée? :roll:

paro
Invité n'ayant pas de compte PHPfrance

28 août 2009, 14:39

pardon, ce n'est pas la bonne version de mon formulaire, voici la derniere :

Code : Tout sélectionner

echo ' <form action="savenote.php" method="POST" enctype="multipart/form-data" id="formu" name="formu" > <input value="Objet de la note interne" type="text" name="nom" id="nom" class="formulaire" onfocus="' . $focus1 . '" onblur="' . $blur1 . '" /> <input onKeyUp="completeur(this.value);" value="Emetteur de la note interne (3 caractères min.)" type="text" name="emetteur" class="formulaire" id="emetteur" onfocus="' . $focus2 . '" onblur="' . $blur2 . '" > <br /><div id="completion"></div> <input value="Date de l\'émission" type="text" class="w4em highlight-days-67 range-low-2005-08-11 range-high-2015-09-1 split-date" id="date-1" name="date-1" value="" maxlength="4" onchange="' . $date . '" onblur="' . $blurdate . '" /><label for="date-1"></label> <input value="Mots clés (séparés par des points-virgules)" type="text" name="keywords" class="formulaire" id="keywords" onfocus="' . $focus4 . '" onblur="' . $blur4 . '" style="margin-left: 100px;" > <select id="niveau" name="niveau" style="margin-left: 100px; width: 305px;"> <optgroup name="opt" label="Niveau d\' autorisation"> <option id="0" name="0" value="0" selected="true" >Tout le monde</option> <option id="1" name="1" value="1" >Responsables</option> <option id="2" name="2" value="2" >Comité de Direction</option> </optgroup> </select> <input value="Envoi du fichier" type="file" name="fichier" class="formulaire" id="fichier" style="margin-left: 123px; width: 400px;" > <br /><br /> <input type="button" name="ajout" style="border: 1px solid #c0c0c0; width: 200px; margin-left: 100px;" value="Enregistrer" onClick="checkSubmit();" /> <br /><br /> </form>

Avatar du membre
ViPHP
ViPHP | 3008 Messages

28 août 2009, 15:00

J'ai remplacé ton input BUTTON par un SUBMIT car la fonction checkSubmit n'est pas dispo. Ca marche très bien sous IE.

L'erreur ne proviendrait donc pas de cette fonction ?

paro
Invité n'ayant pas de compte PHPfrance

28 août 2009, 15:26

Eh bien non! Car j'ai fait de multiples essais en virant ma fonction et en mettant directement un input type="submit", ca me fait pareil!
Et j'ai cerné un peu le problème :
Lorsque je ne remplit aucun champs et que j'envoi : ca marche. Si, par contre, je remplit le input type="file", $_POST et $_FILES deviennent vides.

Peut-etre cela vient-il de ma configuration de PHP ?
Pourtant, j'ai mis ca:

upload_max_filesize = 164M
post_max_size = 164M

Avatar du membre
ViPHP
ViPHP | 3008 Messages

28 août 2009, 17:30

C'est étonnant, j'ai laissé la configuration de base à savoir upload_max_filesize = 2M et j'arrive quand même à voir toutes les informations avec le code fourni...

Eléphant du PHP | 369 Messages

28 août 2009, 17:33

Salut,
Je t'invite à poser un header de cache dans index.php on sait jamais.
header ("Cache-control:no-cache, must revalidate");

Je sais pas si ca peut t'aider mais... et pas taper si j'ai faux, @+ ;)

EDIT: nah, ca doit pas être ca, désolé

Mammouth du PHP | 991 Messages

29 août 2009, 11:26

Il faudrait peut etre voir le temps d'éxécution de la page ... car s'il envoi des gros fichiers, le serveur peut etre pas le temps de tout faire :)
DevOps, Symfony4, Hoa

Eléphant du PHP | 369 Messages

29 août 2009, 12:54

Salut,
Eh bien non! Car j'ai fait de multiples essais en virant ma fonction et en mettant directement un
input type="submit", ca me fait pareil! Et j'ai cerné un peu le problème :
Lorsque je ne remplit aucun [*]champs et que j'envoi : ca marche. Si, par contre, je remplit le
input type="file", $_POST et $_FILES deviennent vides. Peut-etre cela vient-il de ma configuration de PHP ?
Pourtant, j'ai mis ca: upload_max_filesize = 164M post_max_size = 164M
Bon, je crois que j'ai saisi d'ou vient ton problème: Les fonction JS.

Tu dois en avoir une qui vide le document.form et le retourne donc vide d'éléments.
J'y pense de plus en plus au vu de ton post ci-dessus.

Essai en mettant en "rem" tous tes appels JS je pense que ca devrait marcher.
Après, si c'est bien ca, t'auras plus qu'a trouver l'endroit ou ca merde et réparer ;)

@+ bon code ;)

paro
Invité n'ayant pas de compte PHPfrance

31 août 2009, 10:11

Il faudrait peut etre voir le temps d'éxécution de la page ... car s'il envoi des gros fichiers, le serveur peut etre pas le temps de tout faire :)
Ben, j'ai testé avec des petits fichiers (138ko) et ca me fais exactement la meme chose, alors que je suis en lan avec le serveur.

Bon, je crois que j'ai saisi d'ou vient ton problème: Les fonction JS.
A vrai dire, il n'y en a qu'une, et elle ne fais que vérifier que les cases sont bien remplies avant d'envoyer, la voici :

Code : Tout sélectionner

function checkSubmit() { //verification du formulaire var echec = 0; document.getElementById("incomplet").innerHTML = ''; if (document.getElementById("nom").value == 'Objet de la note interne') { document.getElementById("incomplet").innerHTML += "-Vous n'avez pas renseigné l'objet de la note.<br />"; echec = 1; } if (document.getElementById("emetteur").value == 'Emetteur de la note interne') { document.getElementById("incomplet").innerHTML += "-Vous n'avez pas renseigné l'émetteur de la note.<br />"; echec = 1; } if (document.getElementById("date-1").value == 'Date de l\'émission') { document.getElementById("incomplet").innerHTML += "-Vous n'avez pas renseigné la date d'émission de la note.<br />"; echec = 1; } if (document.getElementById("keywords").value == 'Mots clés (séparés par des points-virgules)') { document.getElementById("incomplet").innerHTML += "-Vous n'avez pas renseigné de mots-clés pour cette note.<br />"; echec = 1; } if (document.getElementById("fichier").value == '') { document.getElementById("incomplet").innerHTML += "-Vous n'avez pas spécifié de fichier à envoyer.<br />"; echec = 1; } //on envoie le formulaire si tout est ok if(echec == 0) { document.getElementById("formu").submit(); } }
Ce qui est vraiment étonnant, c'est que, aleatoirement, lorsque j'envoie le formulaire, $_POST et $_FILES sont vides, mais si je rafraichit la page, elles redeviennent pleines avec les bonnes valeurs!

Invité
Invité n'ayant pas de compte PHPfrance

31 août 2009, 10:17

Salut,
Je t'invite à poser un header de cache dans index.php on sait jamais.
header ("Cache-control:no-cache, must revalidate");

Je sais pas si ca peut t'aider mais... et pas taper si j'ai faux, @+ ;)

EDIT: nah, ca doit pas être ca, désolé
Ben, je viens de rajouter ca, et pour le moment ca marche!
Merci :)

paro
Invité n'ayant pas de compte PHPfrance

31 août 2009, 10:27

Désolé du triple-post, faut vraiment que je m'inscrire pour pouvoir éditer.

Bon, en fait, c'est pour faire réponse à mon propre post : j'ai parlé trop vite, ca a marché 2-3, mais en fait comme c'est aléatoire, ben 15secondes après rebelotte...

Eléphant du PHP | 369 Messages

31 août 2009, 11:28

Salut,
Désolé du triple-post, faut vraiment que je m'inscrire pour pouvoir éditer.
Bon, en fait, c'est pour faire réponse à mon propre post : j'ai parlé trop vite, ca a marché 2-3, mais en fait comme c'est aléatoire, ben 15secondes après rebelotte...
Et en jouant sur le header, en ajoutant ca?
header('Pragma: no-cache');
header('Expires: 0');
header('Cache-Control: no-cache, must-revalidate');
Je ne sais si ca va mieux marcher mais, au moins, tu sais que c'est le cache qui est en cause.
N'étant pas un "gourou header" je ne peux te donner plus d'infos mais... on sait jamais ;)

@+ bon code ;)

Invité
Invité n'ayant pas de compte PHPfrance

31 août 2009, 11:46

Malheureusement, ca n'y fait rien...

J'ai l'impression que c'est vraiment aléatoire :
-un coup j'envoie le formulaire et c'est ok, et si je rafraichit (en renvoyant les données) et $_POST $_FILES sont vides
-le coup d'après, les deux tableaux sont vides, et si je rafraichit, ils se remplissent...

Par contre, j'ai remarqué que si j'enlevais le : enctype="multipart/form-data" $_POST était tout le temps rempli avec les bonnes valeurs, mais évidemment, $_FILES, lui est vide...

Mammouth du PHP | 2937 Messages

31 août 2009, 11:54

As-tu essayé en écrivant method="post" en minuscules dans l'élément form ?

Normalement, les deux valeurs possibles de l'attribut method ne sont pas sensibles à la casse ; mais, bon… :-k

Eléphanteau du PHP | 20 Messages

31 août 2009, 12:10

Oui, effectivement, c'est une bonne remarque, et je l'ai déjà testé.

Je viens de remarquer quelquechose d'autant plus surprenant :

Sur mon poste (avec IE8) le remplissage de $_FILES et $_POST est aléatoire. Mais sur tous les autres postes (avec IE7), ces deux tableaux sont vides TOUT LE TEMPS. :shock:

Edit: En copiant-collant tous mes fichiers php sur un autre serveur, tout marche parfaitement... il y a donc bien un probleme de configuration au niveau de ce serveur, mais quoi ?