Logo du forum
 

Forum TT-Hardware

| Inscription | | Recherche | | FAQ | | Accueil | | Liste des membres |
| Calendrier |
 
Vous n'êtes pas identifié! [Connexion] ou [Inscription] Forum » Programmation » [PHP] » guillemets, $_POST et input !
Login Mot de passe

1 visiteurs sur ce topic (0 membre(s), 1 invité(s) )


Auteur
Sujet : guillemets, $_POST et input !
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9395 (3.17 par jour)




Message du 28-03-2007 @ 11:37   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   


dans le cadre d'un developpement (php/mysql) j'ai un soucis avec des guillemets qui disparaissent, voici le contexte :
j'ai un formulaire avec 5 champs de saisie (input type text), un bouton ok
en post traitement je verifie que les champs sont bien renseignés et si ce n'est pas le cas, je recupere le $_POST pour repasser les champs vers un nouveau formulaire permettant de corriger les anomalies de la saisie précédente

pour repasser les champs, j'utilise cette methode :
Code :

function recuperer_post ()
{
   $construction_affichage='';
   foreach ($_POST as $index => $valeur)
   {
      $$index = htmlentities($valeur);

      $construction_affichage.='<input type="hidden" name="'.$index.'" value="'.$$index.'">';
   }
   return $construction_affichage;
}



Le probleme, c'est apres qu'il arrive, quand j'affiche de nouveau le formulaire avec les valeurs ainsi récupérées(input type text value=$_POST['xxx']). Il se trouve que les champs qui comportent des guillemets a l'intérieur sont tronqués après la premiere guillemet. Rien ni fait, j'ai géré le cas des magic_quotes_gpc ON/OFF, appliqué des htmlentities/htmlspecialchars. J'ai aussi récupéré les valeurs du $_POST dans des variables intermediaires.
voici un exemple de ce que je fais :
Code :

$construction_zone_action.='login : <input type="text" name="login" value="'.$_POST['login'].'">
';



si vous voyez une erreur ou si vous avez l'explication... là je sèche

PS : la balise de code semble faire n'importe quoi...
----------
Barton 2600+| MSI K7N2 DELTA L| 1Go DDR400| Maxtor 160Go| Maxtor 60Go| LG GSA-4165B| Liteon LTD16X6S| LeadTek A280LE TD| SBLive! 1024| Logitech QuickCam Web| MICROSOFT Natural Ergonomic 4000| Logitech Cordless Optical Mouse| SAMSUNG SyncMaster 206BW

Nikon COOLPIX 5900 + Kingston Ultimate 120x 2GB | Canon PIXMA IP4000 | ADSL 100% Neuf Box

Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware

Rejoignez la team EBuyClub TTH !!!

Un jour j'ai mangé une pomme...
- Haut de page -
Chani
Vétéran
Membre # 9009

 Avatar du membre
Lieu : METZ

Messages :
3667 (1.9 par jour)


Score :

Message du 28-03-2007 @ 12:02   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Code :

function recuperer_post ()
{
$construction_affichage=':'::
foreach ($_POST as $index => $valeur)
{
$$index = htmlspecialchars($valeur, ENT_QUOTES, UTF-8):

$construction_affichage.=':<input type="hidden" name="':.$index.':" value="':.$$index.':">'::
}
return $construction_affichage:
}



Tu as essayé comme ça ?
Tiens c'est bizarre les ; de fin de ligne apparaisse : ?

ça te pose probléme avec les deux style de guillemet ? ' ou " ?
tu pourrais donner un exemple ?
----------
Mon site perso - le site de notre jeu (en développement) - Le forum du jeu
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9395 (3.17 par jour)




Message du 28-03-2007 @ 13:31   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

ca ne pose probleme qu'avec les ", pas avec les '
bin, un exemple, y a le 2eme morceau de code que j'ai mis plus haut... le champ n'est pas pré rempli avec la totalité de la variable si le contenu de la variable comporte un " :sic: et pourtant, un echo de cette meme variable affiche bien le contenu en integralité :!!!:

[message édité le 28-03-2007 @ 13:35 Par B2000]
----------
Barton 2600+| MSI K7N2 DELTA L| 1Go DDR400| Maxtor 160Go| Maxtor 60Go| LG GSA-4165B| Liteon LTD16X6S| LeadTek A280LE TD| SBLive! 1024| Logitech QuickCam Web| MICROSOFT Natural Ergonomic 4000| Logitech Cordless Optical Mouse| SAMSUNG SyncMaster 206BW

Nikon COOLPIX 5900 + Kingston Ultimate 120x 2GB | Canon PIXMA IP4000 | ADSL 100% Neuf Box

Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware

Rejoignez la team EBuyClub TTH !!!

Un jour j'ai mangé une pomme...
- Haut de page -
Chani
Vétéran
Membre # 9009

 Avatar du membre
Lieu : METZ

Messages :
3667 (1.9 par jour)


Score :

Message du 28-03-2007 @ 13:35   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

tiens je viens de tester ça :
Code :

<?php
echo "<Div id=h1> Nouveau Membre </div>


Vous n êtes pas encore membre ? Devenez le en renseignant le formulaire ci dessous.
Vous aurez alors accés aux section réservé.




<!--début du formulaire à remplir par les nouveaux membres-->
<table width='90%'>
<form action='Traittest.php' method='post'>
<tr>
<td width='30'% valign=right>
Nom de membre (login) [*]:
<td>
<td>
<input type='text' name='nvlogin' value='' size='20' maxlength='20'>
<td>
<tr>
<tr>
<td width='30'% valign=right>
Mot de passe [*]:
<td>
<td>
<input type='password' name='nvpass1' Value='' size='10' maxlength='8'>
<td>
<tr>
<tr>
<td width='30'% valign=right>
Confirmez votre mot de passe [*]:
<td>
<td>
<input type='password' name='nvpass2' Value='' size='10' maxlength='8'>
<td>
<tr>
<tr>
<td width='30'% valign=right>
Votre Nom [*]:
<td>
<td>
<input type='text' name='nvnom' Value='' size='40' maxlength='40'>
<td>
<tr>
<tr>
<td width='30'% valign=right>
Votre Prénom:
<td>
<td>
<input type='text' name='nvprenom' Value='' size='40' maxlength='40'>
<td>
<tr>

<tr>
<td width='30'% valign=right>
Votre E - mail [*]:
<td>
<td>
<input type='text' name='nvmail' Value='' size='50' maxlength='50'>
<td>
<tr>
<tr>
<td width='30'% valign=right>
Votre Site:
<td>
<td>
<input type='text' name='nvsite' Value='' size='50' maxlength='50'>
<td>
<tr>
<tr>
<td>
<td>
<td align = center>
<input type='submit' value='Valider'>

<input type='reset' value='Annuler'>
<td>
<tr>

</form>
<table>


[*] Les champs désignés sont obligatoire. Si vous avez des commentaires ou suggestions, vous pouvez nous contacter en envoyant un E-mail.
";
?>


et le fichier de traitement :
Code :

<?php
/**
* Date : 28 mars 2007
* Créateur : GBU. P.
* Nom de fichier : Traittest.php
* A faire : TODO
*
*
* Description :
*
* PHP versions 5
*
* LICENSE: This source file is subject to version 3.0 of the PHP license
* that is available through the world-wide-web at the following URI:
* <a href="http://www.php.net/license/3_0.txt." target="_blank">http://www.php.net/license/3_0.txt.</a> If you did not receive a copy of
* the PHP License and are unable to obtain it through the web, please
* send a note to license@php.net so we can mail you a copy immediately.
**/

session_start();
$_SESSION['tabe'] = $_POST;
foreach ($_SESSION['tabe']as $clef=>$val) {
   $val2=htmlspecialchars($val, ENT_QUOTES,'UTF-8');
   echo $clef.' = '.$val.' html = '.$val2.'
';
      
}

?>



et ça remplace bien les ', ou " par & #039 ; , ou & quot ;
donc no soucy.... du moins ici

EDIT : ra, ba il ne me le's affiche pas forcément :D...

[message édité le 28-03-2007 @ 13:38 Par Chani]
----------
Mon site perso - le site de notre jeu (en développement) - Le forum du jeu
- Haut de page -
Soulmanto
Codeur du forum
Membre # 5373

 Avatar du membre
Lieu : Lille

Messages :
12731 (5.86 par jour)


Score :

Message du 28-03-2007 @ 13:35   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

Si tu utilises les " dans les attributs HTML, ça posera problème avec les ' et inversement. Pour ma part, j'encode ces deux caractères au format HTML avant de les réinjecter (parmi d'autres)...


[message édité le 28-03-2007 @ 13:37 Par Soulmanto]
----------
Core 2 Duo E6750 2,66 GHz | Asrock Conroe 1333 D667 | 2 Go DDR-II 667 | GeForce 8800 GT 512 Mo | Acer X192W (qui marche bien, sisi spook' :p )
Dell Inspiron 6400 | Core2Duo T5500 | 1 Go DDR-II | ATI X1300 128 Mo

Enfin!! 300 au bowling sur Wii Sports :classe:
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9395 (3.17 par jour)




Message du 28-03-2007 @ 14:37   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

j'ai trouvé :D !!!
faut utiliser htmlspecialchars dans la fonction recuperer_post () et aussi dans le formulaire d'affichage
chaque passage par le POST transforme les " et ses codes
----------
Barton 2600+| MSI K7N2 DELTA L| 1Go DDR400| Maxtor 160Go| Maxtor 60Go| LG GSA-4165B| Liteon LTD16X6S| LeadTek A280LE TD| SBLive! 1024| Logitech QuickCam Web| MICROSOFT Natural Ergonomic 4000| Logitech Cordless Optical Mouse| SAMSUNG SyncMaster 206BW

Nikon COOLPIX 5900 + Kingston Ultimate 120x 2GB | Canon PIXMA IP4000 | ADSL 100% Neuf Box

Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware

Rejoignez la team EBuyClub TTH !!!

Un jour j'ai mangé une pomme...
- Haut de page -
Chani
Vétéran
Membre # 9009

 Avatar du membre
Lieu : METZ

Messages :
3667 (1.9 par jour)


Score :

Message du 28-03-2007 @ 14:55   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

mais tu repasse tout par post ?...
tu ne fais pas un echo simple de ta chaîne de caractère généré ?
----------
Mon site perso - le site de notre jeu (en développement) - Le forum du jeu
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9395 (3.17 par jour)




Message du 28-03-2007 @ 15:11   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

je repasse par POST ce qui etait arrivé par POST (seulement quand c'est necessaire, ici, renvoi vers un formulaire identique devant etre pré rempli avec les memes valeurs pour corrections)

par POST je ne recoit que les champs de saisie du formulaire, les commandes sont passées par GET

[message édité le 28-03-2007 @ 15:12 Par B2000]
----------
Barton 2600+| MSI K7N2 DELTA L| 1Go DDR400| Maxtor 160Go| Maxtor 60Go| LG GSA-4165B| Liteon LTD16X6S| LeadTek A280LE TD| SBLive! 1024| Logitech QuickCam Web| MICROSOFT Natural Ergonomic 4000| Logitech Cordless Optical Mouse| SAMSUNG SyncMaster 206BW

Nikon COOLPIX 5900 + Kingston Ultimate 120x 2GB | Canon PIXMA IP4000 | ADSL 100% Neuf Box

Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware

Rejoignez la team EBuyClub TTH !!!

Un jour j'ai mangé une pomme...
- Haut de page -
Chani
Vétéran
Membre # 9009

 Avatar du membre
Lieu : METZ

Messages :
3667 (1.9 par jour)


Score :

Message du 28-03-2007 @ 15:44   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

bizarre comme façon de faire.... enfin non je vais reformuler :D.. je n'aurais pas fait comme ça :D
généralement, je récupére bien les info du post, mais je les envois par variable de session aprés filtre de celle qui ne sont pas valide.
----------
Mon site perso - le site de notre jeu (en développement) - Le forum du jeu
- Haut de page -
B2000
Administrateur
Membre # 185

 Avatar du membre
Lieu : France/Poitiers/juste à côté...

Messages :
9395 (3.17 par jour)




Message du 28-03-2007 @ 23:36   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

mouais, j'ai essayé de faire un truc comme ca mais ca n'est pas tres concluant...

en passant, comment gérez vous les appels sauvages ? j'entends par là, demander par la barre d'adresse d'un navigateur une page qui aurait due necessiter le passage par un formulaire auparavant pour recevoir des infos par le POST par ex ?
----------
Barton 2600+| MSI K7N2 DELTA L| 1Go DDR400| Maxtor 160Go| Maxtor 60Go| LG GSA-4165B| Liteon LTD16X6S| LeadTek A280LE TD| SBLive! 1024| Logitech QuickCam Web| MICROSOFT Natural Ergonomic 4000| Logitech Cordless Optical Mouse| SAMSUNG SyncMaster 206BW

Nikon COOLPIX 5900 + Kingston Ultimate 120x 2GB | Canon PIXMA IP4000 | ADSL 100% Neuf Box

Pour dialoguer en live, le chat TTH ou par mIRC sur irc://porsche.webchat.org:6667/tt-hardware

Rejoignez la team EBuyClub TTH !!!

Un jour j'ai mangé une pomme...
- Haut de page -
Chuck.hc
Batteur du forum
Membre # 8772

 Avatar du membre
Lieu : Val d'oise

Messages :
3221 (1.65 par jour)


Score :

Message du 28-03-2007 @ 23:54   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

J'utilise un champ hiden : true / false pour voir si la page viens bien du form...
sinon tu peux aussi faire verifier de quel page l'utilisateur viens et valider en fonction ..


----------
- Haut de page -
Chani
Vétéran
Membre # 9009

 Avatar du membre
Lieu : METZ

Messages :
3667 (1.9 par jour)


Score :

Message du 29-03-2007 @ 10:24   Site personnel   Afficher le profil   Envoyer un message privé   Editer le message   Citer le message      Afficher l'adresse IP   Alerter les modérateurs   

étant donné que je vérifie les champs, s'il vienne à la sauvage, le POST ne sera pas donc je redirige vers la page du formulaire comme si j'avais une erreur de saisie d'un champs du formulaire.
Je compte mettre en place des conditions d'accés à certaine page et/ou traitement, style si la page précédente n'est pas celle prévue, le traitement ne se fera pas... (mais bon c'est en projet pour le moment)
----------
Mon site perso - le site de notre jeu (en développement) - Le forum du jeu
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2006

Valid XHTML 1.0 Transitional

Page générée en 0.129 secondes