Logo du forum
 

Forum TTH-News

| 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

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


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

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

Messages :
9760 (1.43 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...
----------
Intel i5 8600K | Noctua NH-U14S | Asus Prime Z370-P | Ballistix Sport LT 16Go DDR4-2666MHz | PNY GeForce GTX 1060 XLR8 OC 6 Go | SAMSUNG 840 Pro 256Go | Western Digital WD Blue 1To | Sony AD-7280S | Corsair STRAFE RGB | Roccat Kova | SteelSeries QcK | Corsair Gaming Void USB | iiyama ProLite E2472HDD

Ryzen 7 1800x | MSI X370 Gaming Pro Carbon | 2x 8Go DDR4 | MSI GeForce 1060GTX 3Go | SAMSUNG 960Pro NVME 512Go | SAMSUNG 840 Pro 512Go | LG 34um95 3440x1440 34" | 2x SAMSUNG SyncMaster SA450 1920x1200 24" | Clavier Lenovo Ultraslim sans fil | Souris Logitech MX Anywhere 2

Lenovo T430s : i5 3320m | 2x8Go | Toshiba 120Go | station Mini Dock serie 3

Nexus 6 64Go Android 7.1.1 | Garmin Forerunner 720XT | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL Freebox Révolution

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 :
4161 (0.72 par jour)


Score :

Message du 28-03-2007 @ 12:02   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 ?
----------
chani_tth sur PSN ;)
- Haut de page -
B2000
Administrateur
Membre # 185

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

Messages :
9760 (1.43 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]
----------
Intel i5 8600K | Noctua NH-U14S | Asus Prime Z370-P | Ballistix Sport LT 16Go DDR4-2666MHz | PNY GeForce GTX 1060 XLR8 OC 6 Go | SAMSUNG 840 Pro 256Go | Western Digital WD Blue 1To | Sony AD-7280S | Corsair STRAFE RGB | Roccat Kova | SteelSeries QcK | Corsair Gaming Void USB | iiyama ProLite E2472HDD

Ryzen 7 1800x | MSI X370 Gaming Pro Carbon | 2x 8Go DDR4 | MSI GeForce 1060GTX 3Go | SAMSUNG 960Pro NVME 512Go | SAMSUNG 840 Pro 512Go | LG 34um95 3440x1440 34" | 2x SAMSUNG SyncMaster SA450 1920x1200 24" | Clavier Lenovo Ultraslim sans fil | Souris Logitech MX Anywhere 2

Lenovo T430s : i5 3320m | 2x8Go | Toshiba 120Go | station Mini Dock serie 3

Nexus 6 64Go Android 7.1.1 | Garmin Forerunner 720XT | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL Freebox Révolution

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 :
4161 (0.72 par jour)


Score :

Message du 28-03-2007 @ 13:35   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]
----------
chani_tth sur PSN ;)
- Haut de page -
soulmanto
Codeur du forum
Membre # 5373

 Avatar du membre
Lieu : Lille

Messages :
13839 (2.29 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]
----------
Desktop : Core i7 2600 | Gigabyte GA-Z68MA-D2H-B3 | 8 Go DDR3 PC10600 | SSD UltraPlus 128 Go / HDD 500 Go / 1 To | Sapphire R9 280 3 Go | CoolerMaster RC690 | Windows 7
Asus MemoPad 10

Stromille powered !!!
- Haut de page -
B2000
Administrateur
Membre # 185

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

Messages :
9760 (1.43 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
----------
Intel i5 8600K | Noctua NH-U14S | Asus Prime Z370-P | Ballistix Sport LT 16Go DDR4-2666MHz | PNY GeForce GTX 1060 XLR8 OC 6 Go | SAMSUNG 840 Pro 256Go | Western Digital WD Blue 1To | Sony AD-7280S | Corsair STRAFE RGB | Roccat Kova | SteelSeries QcK | Corsair Gaming Void USB | iiyama ProLite E2472HDD

Ryzen 7 1800x | MSI X370 Gaming Pro Carbon | 2x 8Go DDR4 | MSI GeForce 1060GTX 3Go | SAMSUNG 960Pro NVME 512Go | SAMSUNG 840 Pro 512Go | LG 34um95 3440x1440 34" | 2x SAMSUNG SyncMaster SA450 1920x1200 24" | Clavier Lenovo Ultraslim sans fil | Souris Logitech MX Anywhere 2

Lenovo T430s : i5 3320m | 2x8Go | Toshiba 120Go | station Mini Dock serie 3

Nexus 6 64Go Android 7.1.1 | Garmin Forerunner 720XT | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL Freebox Révolution

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 :
4161 (0.72 par jour)


Score :

Message du 28-03-2007 @ 14:55   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é ?
----------
chani_tth sur PSN ;)
- Haut de page -
B2000
Administrateur
Membre # 185

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

Messages :
9760 (1.43 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]
----------
Intel i5 8600K | Noctua NH-U14S | Asus Prime Z370-P | Ballistix Sport LT 16Go DDR4-2666MHz | PNY GeForce GTX 1060 XLR8 OC 6 Go | SAMSUNG 840 Pro 256Go | Western Digital WD Blue 1To | Sony AD-7280S | Corsair STRAFE RGB | Roccat Kova | SteelSeries QcK | Corsair Gaming Void USB | iiyama ProLite E2472HDD

Ryzen 7 1800x | MSI X370 Gaming Pro Carbon | 2x 8Go DDR4 | MSI GeForce 1060GTX 3Go | SAMSUNG 960Pro NVME 512Go | SAMSUNG 840 Pro 512Go | LG 34um95 3440x1440 34" | 2x SAMSUNG SyncMaster SA450 1920x1200 24" | Clavier Lenovo Ultraslim sans fil | Souris Logitech MX Anywhere 2

Lenovo T430s : i5 3320m | 2x8Go | Toshiba 120Go | station Mini Dock serie 3

Nexus 6 64Go Android 7.1.1 | Garmin Forerunner 720XT | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL Freebox Révolution

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 :
4161 (0.72 par jour)


Score :

Message du 28-03-2007 @ 15:44   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.
----------
chani_tth sur PSN ;)
- Haut de page -
B2000
Administrateur
Membre # 185

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

Messages :
9760 (1.43 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 ?
----------
Intel i5 8600K | Noctua NH-U14S | Asus Prime Z370-P | Ballistix Sport LT 16Go DDR4-2666MHz | PNY GeForce GTX 1060 XLR8 OC 6 Go | SAMSUNG 840 Pro 256Go | Western Digital WD Blue 1To | Sony AD-7280S | Corsair STRAFE RGB | Roccat Kova | SteelSeries QcK | Corsair Gaming Void USB | iiyama ProLite E2472HDD

Ryzen 7 1800x | MSI X370 Gaming Pro Carbon | 2x 8Go DDR4 | MSI GeForce 1060GTX 3Go | SAMSUNG 960Pro NVME 512Go | SAMSUNG 840 Pro 512Go | LG 34um95 3440x1440 34" | 2x SAMSUNG SyncMaster SA450 1920x1200 24" | Clavier Lenovo Ultraslim sans fil | Souris Logitech MX Anywhere 2

Lenovo T430s : i5 3320m | 2x8Go | Toshiba 120Go | station Mini Dock serie 3

Nexus 6 64Go Android 7.1.1 | Garmin Forerunner 720XT | Nikon COOLPIX S9200 + Transcend SDHC 8GB | Canon PIXMA IP4850 | ADSL Freebox Révolution

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 :
4244 (0.73 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 :
4161 (0.72 par jour)


Score :

Message du 29-03-2007 @ 10:24   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)
----------
chani_tth sur PSN ;)
- Haut de page -


Aller dans le forum :  

Plan du forum | Contacter l'administrateur

Powered by SoulBB 3.0.1
© Soulmanto, 2003-2010

Valid XHTML 1.0 Transitional

Page générée en 0.048 secondes