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

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

Auteur
Sujet : guillemets, $_POST et input !
B2000



 






Message du 28-03-2007 @ 11:37


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...
- Haut de page -
Chani



 






Message du 28-03-2007 @ 12:02

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 ?
- Haut de page -
B2000



 






Message du 28-03-2007 @ 13:31

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]
- Haut de page -
Chani



 






Message du 28-03-2007 @ 13:35

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]
- Haut de page -
Soulmanto



 






Message du 28-03-2007 @ 13:35

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]
- Haut de page -
B2000



 






Message du 28-03-2007 @ 14:37

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
- Haut de page -
Chani



 






Message du 28-03-2007 @ 14:55

mais tu repasse tout par post ?...
tu ne fais pas un echo simple de ta chaîne de caractère généré ?
- Haut de page -
B2000



 






Message du 28-03-2007 @ 15:11

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]
- Haut de page -
Chani



 






Message du 28-03-2007 @ 15:44

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.
- Haut de page -
B2000



 






Message du 28-03-2007 @ 23:36

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 ?
- Haut de page -
Chuck.hc



 






Message du 28-03-2007 @ 23:54

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



 






Message du 29-03-2007 @ 10:24

é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)
- Haut de page -

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.116 secondes