Page 1 sur 2
$_POST vide.
Posté : 28 août 2009, 14:34
par paro
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?

Re: $_POST vide.
Posté : 28 août 2009, 14:39
par paro
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>
Re: $_POST vide.
Posté : 28 août 2009, 15:00
par charabia
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 ?
Re: $_POST vide.
Posté : 28 août 2009, 15:26
par paro
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
Re: $_POST vide.
Posté : 28 août 2009, 17:30
par charabia
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...
Re: $_POST vide.
Posté : 28 août 2009, 17:33
par FuZZyLine
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é
Re: $_POST vide.
Posté : 29 août 2009, 11:26
par thehawk
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

Re: $_POST vide.
Posté : 29 août 2009, 12:54
par FuZZyLine
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

Re: $_POST vide.
Posté : 31 août 2009, 10:11
par paro
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!
Re: $_POST vide.
Posté : 31 août 2009, 10:17
par Invité
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

Re: $_POST vide.
Posté : 31 août 2009, 10:27
par paro
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...
Re: $_POST vide.
Posté : 31 août 2009, 11:28
par FuZZyLine
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

Re: $_POST vide.
Posté : 31 août 2009, 11:46
par Invité
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...
Re: $_POST vide.
Posté : 31 août 2009, 11:54
par Victor BRITO
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…

Re: $_POST vide.
Posté : 31 août 2009, 12:10
par paro
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.
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 ?