Page 1 sur 1

Formulaire en 'Post' à tranformer en 'Get' cause RegisterGlo

Posté : 24 nov. 2008, 21:51
par SebbC
Bonsoir,

Je balbutie en php et j'avais adapté un formulaire il y a quelques temps qui fonctionnais très bien jusqu'à ce que mon hébergeur passe en Register Global Off, en cherchant sur la toile, il s'avère que je dois passer l'envoi des données saisie en Get et plus en POST... et la ça se complique, je n'ai aucune idée des changements à effectuer... ci dessous le code de mon formulaire, si une âme charitable voulais bien m'aiguiller ce serais sympa..

Code : Tout sélectionner

<?php // Couleur du texte des champs si erreur saisie utilisateur $color_font_warn="#FF0000"; // Couleur de fond des champs si erreur saisie utilisateur $color_form_warn="#FFCC66"; // Ne rien modifier ci-dessous si vous n? ?tes pas certain de ce que vous faites ! $list['f_2']=array("S?lectionnez","M.","Mme","Mlle"); if(isset($_POST['submit'])){ $erreur=""; // Nettoyage des entrées while(list($var,$val)=each($_POST)){ if(!is_array($val)){ $$var=strip_tags($val); }else{ while(list($arvar,$arval)=each($val)){ $$var[$arvar]=strip_tags($arval); } } } // Formatage des entrées $f_1=trim(ucwords(eregi_replace("[^a-zA-Z0-9?????\ -]", "", $f_1))); $f_3=trim(ucwords(eregi_replace("[^a-zA-Z0-9?????\ -]", "", $f_3))); $f_4=trim(ucwords(eregi_replace("[^a-zA-Z0-9?????\ -]", "", $f_4))); $f_5=trim(ucwords(eregi_replace("[^a-zA-Z0-9?????\ -]", "", $f_5))); $f_6=trim(eregi_replace("[^0-9+]", "", $f_6)); $f_7=trim(ucwords(eregi_replace("[^a-zA-Z0-9?????\ -]", "", $f_7))); $f_8=strip_tags(trim($f_8)); // Verification des champs if($f_2==0){ $erreur.="<li><span class='txterror'>Le champ &laquo; Civilité &raquo; n'a pas été d?fini.</span>"; $errf_2=1; } if(strlen($f_3)<2){ $erreur.="<li><span class='txterror'>Le champ &laquo; Nom &raquo; est vide ou incomplet.</span>"; $errf_3=1; } if(strlen($f_4)<2){ $erreur.="<li><span class='txterror'>Le champ &laquo; Prénom &raquo; est vide ou incomplet.</span>"; $errf_4=1; } if(strlen($f_5)<2){ $erreur.="<li><span class='txterror'>Le champ &laquo; Adresse &raquo; est vide ou incomplet.</span>"; $errf_5=1; } if(strlen($f_6)<2){ $erreur.="<li><span class='txterror'>Le champ &laquo; Code Postal &raquo; est vide ou incomplet.</span>"; $errf_6=1; } if(strlen($f_7)<2){ $erreur.="<li><span class='txterror'>Le champ &laquo; Ville &raquo; est vide ou incomplet.</span>"; $errf_7=1; } if($erreur==""){ // Cr?ation du message $titre="Demande de renseignements"; $tete="From:".$f_8."\n"; $corps.="Soci&eacute;t&eacute; : ".$f_1."\n"; $corps.="Civilit&eacute; : ".$list['f_2'][$f_2]."\n"; $corps.="Nom : ".$f_3."\n"; $corps.="Pr&eacute;nom : ".$f_4."\n"; $corps.="Adresse : ".$f_5."\n"; $corps.="Code Postal : ".$f_6."\n"; $corps.="Ville : ".$f_7."\n"; $corps.="Courriel : ".$f_8."\n"; $corps.="Message : ".$f_9."\n"; if(mail("[email protected]", $titre, stripslashes($corps), $tete)){ $ok_mail="true"; }else{ $erreur.="<li><span class='txterror'>Une erreur est survenue lors de l'envoi du message, veuillez refaire une tentative.</span>"; } } } ?> <html> <head> <meta http-equiv="content-type" content="text/html;charset=iso-8859-1"> <title></title> <link href="../../css/style.css" type="text/css" rel="stylesheet" media="all"> <style type="text/css" media="screen"><!-- INPUT { color: #000; font-size: 11px; font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; background-color: white; border-color: #808080 } SELECT { color: #000; font-size: 11px; font-family: verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; background-color: white } TEXTAREA { color: #000; font-size: 11px; font-family: verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular; background-color: white } .txterror { color: black; font-size: 11px; font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular } .txtform { color: black; font-size: 11px; font-family: Verdana, Arial, Helvetica, Geneva, Swiss, SunSans-Regular } --></style> </head> <body bgcolor="#e5e5e5" leftmargin="0" marginheight="0" marginwidth="0" topmargin="0"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="right"> <div class="texte_accueil" align="right"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td> <div align="justify"></div> <div align="right"> <table width="100%" border="0" cellspacing="2" cellpadding="0"> <tr> <td> <div align="center"> <? if($ok_mail=="true"){ ?> <table width="100%" border="0" cellspacing="1" cellpadding="1"> <tr> <td> <div align="center"> <span class="txtform">Votre message ci-dessous<br> nous a bien &eacute;t&eacute; transmis, et nous vous en remercions.</span></div> </td> </tr> <tr> <td>&nbsp;</td> </tr> <tr> <td> <div align="center"> <table width="70%" border="0" cellspacing="2" cellpadding="0"> <tr> <td> <div align="left"> <?echo nl2br(stripslashes($corps));?></div> </td> </tr> </table> </div> </td> </tr> <tr> <td>&nbsp;</td> </tr> <tr> <td> <div align="center"> <span class="txtform">Nous allons y donner suite dans les meilleurs d&eacute;lais.<br> </span></div> </td> </tr> </table> <? }else{ ?> <form action="<? echo $PHP_SELF ?>" method="post" name="Form"> <table width="100%" border="0" cellspacing="1" cellpadding="1"> <? if($erreur){ ?> <tr> <td colspan="2" bgcolor="red"> <div align="center"> <span class="txterror"><font color="white"><b>&nbsp;ERREUR, votre message n'a pas &eacute;t&eacute; transmis</b></font></span></div> </td> </tr> <tr> <td colspan="2"> <ul> <div align="center"> <?echo$erreur?></div> </ul> </td> </tr> <?}?> <tr> <td colspan="2"> <div align="center"> <span class="txterror">Les champs marqu&eacute;s d'un * sont obligatoires</span></div> </td> </tr> <tr> <td align="right" width="30%"> <div align="right"> <span><font color="black">Soci&eacute;t&eacute; :</font></span></div> </td> <td class="txtform"><input style='width:200 <?if($errf_1==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' type="text" name="f_1" value="<?echo stripslashes($f_1);?>" size="24" border="0"></td> </tr> <tr> <td align="right" width="30%"> <div align="right"> <font color="black">Civilit&eacute;* :</font></div> </td> <td class="txtform"><select class="txtform" style='width:100 <?if($errf_2==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' name="f_2" size="1"> <? for($id=0;$id<count($list['f_2']);$id++){ if($id==$f_2){$ct="selected";} print("<option ".$ct." value=".$id.">".$list['f_2'][$id]."</option>"); unset($ct); }?> </select></td> </tr> <tr> <td align="right" width="30%"> <div align="right"> <font color="black">Nom* :</font></div> </td> <td class="txtform"><input style='width:200 <?if($errf_3==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' type="text" name="f_3" value="<?echo stripslashes($f_3);?>" size="24" border="0"></td> </tr> <tr> <td align="right" width="30%"> <div align="right"> <font color="black">Pr&eacute;nom* :</font></div> </td> <td class="txtform"><input style='width:200 <?if($errf_4==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' type="text" name="f_4" value="<?echo stripslashes($f_4);?>" size="24" border="0"></td> </tr> <tr> <td align="right" width="30%"> <div align="right"> <font color="black">Adresse* :</font></div> </td> <td class="txtform"><input style='width:200 <?if($errf_5==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' type="text" name="f_5" value="<?echo stripslashes($f_5);?>" size="24" border="0"></td> </tr> <tr> <td align="right" width="30%"> <div align="right"> <font color="black">Code Postal* :</font></div> </td> <td class="txtform"><input style='width:50 <?if($errf_6==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' type="text" name="f_6" value="<?echo stripslashes($f_6);?>" size="24" border="0"></td> </tr> <tr> <td align="right" width="30%"> <div align="right"> <font color="black">Ville* :</font></div> </td> <td class="txtform"><input style='width:200 <?if($errf_7==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' type="text" name="f_7" value="<?echo stripslashes($f_7);?>" size="24" border="0"></td> </tr> <tr> <td align="right" width="30%"> <div align="right"> <font color="black">Courriel :</font></div> </td> <td class="txtform"><input style='width:200 <?if($errf_8==1){print("; background-color: ".$color_form_warn."; color: ".$color_font_warn);}?>;' type="text" name="f_8" value="<?echo stripslashes($f_8);?>" size="24" border="0"></td> </tr> <tr> <td align="right" width="30%"> <div align="right"> <font color="black">Votre message :</font></div> </td> <td><textarea class="txtform" name="f_9" rows="6" cols="40"></textarea></td> </tr> <tr> <td align="right" width="30%"></td> <td><input type="submit" name="submit" value="Envoyer" border="0"></td> </tr> </table> </form> <? } ?></div> </td> </tr> </table> </div> </td> </tr> </table> </div> </td> </tr> </table> </body> </html>

Merci,

Seb

Posté : 24 nov. 2008, 23:25
par djtec
Il suffit juste de remplacer:

Code : Tout sélectionner

<form action="<? echo $PHP_SELF ?>" method="post" name="Form">
Par:

Code : Tout sélectionner

<form action="<? echo $PHP_SELF ?>" method="get" name="Form">
Et de remplacer tout les $_POST par $_GET.

Mais apparament sur google ils disent que tu peux contourner le problème en mettant un .htacess avec php_flag register_globals on dedans et aussi en php en fesant ini_set('register_globals', '1').

Peut-être que je me trompe avec le htacess et le ini_set() mais je pense que c'est à tester cela t'éviterais de tout modifier.

Posté : 24 nov. 2008, 23:58
par Victor BRITO
Mais apparament sur google ils disent que tu peux contourner le problème en mettant un .htacess avec php_flag register_globals on dedans et aussi en php en fesant ini_set('register_globals', '1').

Peut-être que je me trompe avec le htacess et le ini_set() mais je pense que c'est à tester cela t'éviterais de tout modifier.
ini_set() ne sert à rien pour la directive register_globals. On utilise soit un fichier .htaccess soit un fichier php.ini soit le fichier httpd.conf (tout dépend, bien entendu, des permissions de l'hébergeur à ce sujet).

Quant à la directive register_globals en soi, il vaut d'autant mieux la mettre à Off qu'elle sera supprimée en PHP 6, rappelons-le (afin d'être d'éventuelles mauvaises surprises ;) ), et qu'elle apporte plus d'inconvénients que d'avatages.

Posté : 25 nov. 2008, 00:34
par AB
Au passage je ne vois pas dans quelle mesure choisir d'envoyer tes variables par la méthode GET plutôt que par la méthode POST résoudrait en quoi que ce soit ton problème :shock: Très mauvaise méthode qui de surcroît ne résoudra rien (à moins qu'on m'explique).

Posté : 25 nov. 2008, 12:03
par Ryle
Je rejoint AB... y a quelque chose de pas logique entre la modification de Register Globals et le fait de devoir envoyer des données en GET ou en POST.

D'abord, il faut comprendre à quoi sert la directive register_globals : lorsque php récupères des données qui lui sont transmises par GET, POST, SESSION ou via un COOKIE, si register_globals est à ON, alors il va automatiquement générer les variables correspondantes, en perdant de vue leur origine.
En gros, si j'ai une variable "toto" en session, et une variable "titi" envoyée en get, je peux utiliser directement $toto et $titi pour récupérer leurs valeurs. Ceci est effectivement un problème de sécurité dans la mesure où si en get, je modifie le nom de la variable et la renomme en "toto", utiliser $toto ne permet pas de savoir s'il s'agit de la valeur en session ou de celle transmise en get.

Le fait de passer la directive à OFF oblige le développeur à spécifier à chaque fois l'origine de la variable pour pouvoir y accéder. Plus d'appel à $toto, mais à $_SESSION['toto'] ou $_GET['toto'], ainsi pas de confusion possible pour php et plus de sécurité également :)
Ceci étant, il est tout à fait possible, ensuite, de regénérer les variables comme tu le fais avec ta boucle while(list($var,$val)=each($_POST)), mais la différence, c'est que tu en es conscient, c'est pas php qui fait ça dans son coin sans te prévenir :)

Maintenant, quoi que tu ais pu lire sur le net, il n'y a rien qui t'oblige à passer de POST à GET pour l'envoi de tes données (de GET à POST éventuellement, car le GET est limité en taille, mais c'est à peu près tout :))


Donc avant d'essayer tout et n'importe quoi, peux-tu nous dire exactement les problèmes que tu rencontres ? Quels sont les messages d'erreurs ? Quel est le comportement souhaité, quel est celui obtenu ? :)

Posté : 25 nov. 2008, 16:00
par SebbC
Bonjour et merci d'avoir pris le temps de me répondre.

J'ai remplacé les Post par Get, mais sans succès, le formulaire ne me parviens pas... je sèche.

Seb

Posté : 25 nov. 2008, 23:06
par AB
Ah bah non seulement je t'avais prévenu que ça n'arrangerait rien mais en plus Ryle a pris le temps de t'expliquer pourquoi. Et ensuite tu t'étonnes... on doit avoir un problème de communication :roll:

Posté : 25 nov. 2008, 23:13
par SebbC
Bonsoir,

En fait le formulaire indiqué lors de mon premier post fonctionnait très bien. Hasard ou bizarrerie, l'hébergeur passe le registerGlobal sur Off, et le formulaire ne me parviens jamais. Le message de confirmation apparait, tout semble ok coté site, sauf que dans ma boîte mail je ne reçois rien.

Voilà le problème.

Merci,

Seb

Posté : 25 nov. 2008, 23:52
par AB
Testes ton code en local (avant l'envoi de mail) et php t'indiquera les erreurs à corriger.

Par exemple si tu as une variable de formulaire $_POST['toto'], avec register global désactivé, tu ne peux pas la récupérer directement dans ton script avec $toto.
Il faut écrire par exemple $toto = isset($_POST['toto'])? $_POST['toto'] : 'une valeur par défaut';

Ce qui revient à dire : Si $_POST['toto'] existe alors $toto = $_POST['toto'] sinon $toto = 'une valeur par défaut que tu choisis'

EDIT Et le principe serait le même pour des variables GET ce qui fait que tu ne gagne rien à passer tes variables par GET plutôt que par POST pour résoudre ce problème.