Form - variables jamais transmises en fonction du host !

Eléphanteau du PHP | 30 Messages

17 avr. 2009, 18:07

Salut,

je ne viens pas souvent, mais quand je viens... :wink:
Comment se fait-il que strictement le même code, hébergé sur deux serveurs différents, ne donne pas le même résultat ?

Code "Contact_TMP" (simplifié) :
echo "<FORM method=POST action='contact_chk_tmp.php' name='add_frm'>"  ;
     echo "<TR><TD><H2>Civilit&eacute;<BR><SELECT NAME='selcivi'><OPTION VALUE=0>Choisissez..." ;
     echo "<OPTION VALUE=1>Madame" ;
     echo "<OPTION VALUE=2>Mademoiselle" ;
     echo "<OPTION VALUE=3>Monsieur" ;
     echo "</SELECT></TD>"  ;
     echo "<TD><H2>Pr&eacute;nom<BR><INPUT TYPE='text' NAME='prenom' MAXLENGTH=32 SIZE=32></TD>"  ;
     echo "<TD><H2>Nom<BR><INPUT TYPE='text' NAME='nom' MAXLENGTH=32 SIZE=32></TD></TR>"  ;
   echo "<TR><TD><H2>Adresse mail</TD>"  ;
   echo "<TD><INPUT TYPE='text' NAME='mbmail' MAXLENGTH=60 SIZE=48 VALUE='Tapez votre adresse-mail ici' />"  ;
   echo "</TD></TR></FORM>"  ;
Un finalement bête form en Post... (comme on en a tous utilisé depuis toujours... :? )

Code "Contact_chk_TMP" (simplifié) :
echo "<H5>MbMail = ".$mbmail."<P>SelCivi = ".$selcivi."<P>"  ;
if ($okmail == 0 || $selsujet == 0 || $selcivi == 0 || empty($prenom) || empty($nom) || empty($mbmail)) {
     echo "<FORM method=POST action='contact_tmp.php' name='echec_frm'>"  ;
     echo "<INPUT TYPE='hidden' NAME='warning' VALUE=1 />"  ;        //   Flag d'échec
     $laraison1 = "Formulaire non recevable : merci de compléter les champs mis en valeur"  ;
     $laraison1 =  htmlentities($laraison1, ENT_QUOTES)  ;
}
Cas - 1 : chez NFrance, les variables INPUT TEXT ou HIDDEN passent et l'échec est contrôlé
Cas - 2 : chez Web66, aucune variable n'est transmise par le Form ! :evil:

Une idée ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

17 avr. 2009, 19:10

Comment se fait-il que strictement le même code, hébergé sur deux serveurs différents, ne donne pas le même résultat ?
Tout simplement parce que la configuration des serveurs est différente ;)

A vue de nez, l'un a activer register_globals pour te permettre d'appeler directement les variables $nom, $prenom sans se soucier de savoir si elles viennent de post, de get, de la session ou d'un cookie.. et l'autre plus sérieux à désactivé ce joyeux trou de sécurité et t'oblige à spécifier que tu veux utiliser $_POST['nom'] ou $_POST['prenom'], et pas une variable portant le même se trouvant dans la session ou dans un cookie :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 30 Messages

17 avr. 2009, 20:44

...et l'autre plus sérieux à désactivé ce joyeux trou de sécurité et t'oblige à spécifier que tu veux utiliser $_POST['nom']
Ok... je comprends mieux... je dois donc déclarer mes variables sous la forme $_POST['nom_dun_champs'] qui ira chercher dans le tableau des données de formulaire envoyées par la méthode.

J'essaie !
Merci ! :D

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

D'accord avec la note ! :)
Eh bien j'ai essayé... et ça ne marche pas (à ma grande surprise !) :cry:

Je poste rapidement les deux extraits du test :
echo "<FORM method='POST' action='contact_chk.php' name='add_frm'>" ;
echo "<TR><TD>"  ;
   if ($_POST['$m_mbmail'])  {    //  Recup Membre existant
      echo "<INPUT TYPE='text' NAME='mbmail' MAXLENGTH=60 SIZE=48 VALUE=".$_POST['$m_mbmail']." />"  ;
   }
   else {
      echo "<INPUT TYPE='text' NAME='mbmail' MAXLENGTH=60 SIZE=48 VALUE='Tapez votre adresse-mail ici' />"  ;
   }
   echo "</TD></TR></FORM>"  ;

... et dans le Check :
if (isset($_POST['$mbmail'])) {
   echo "<H6>Variable POST['mbmail'] : ".$_POST['$mbmail'].")<P>"  ;
}
else {
   echo "<H6>Variable POST['mbmail'] NON reconnue..."  ;
}
exit ;
Ben... elle n'est jamais reconnue... :oops:
C'est quand même ballot !

Eléphanteau du PHP | 30 Messages

21 avr. 2009, 10:09

Suite à ces conseils, et après avoir pris contact avec mon hébergeur, celui-ci a installé un Php.ini dans mon répertoire... et ça marche.

Note : register_globals était bien non-déclaré (ou à OFF).

Encore merci !