IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème avec les caractères spéciaux suite à un formulaire


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut Problème avec les caractères spéciaux suite à un formulaire
    Bonjour,

    J'ai créé un formulaire POST en plusieurs étapes (=plusieurs pages) je transfère et récupère les données d'une page à l'autre comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $champ1=""; if(!empty($_POST["champ1"])) $champ1=$_POST["champ1"];
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input name="champ1" type="hidden" id="champ1" 
    value="<?php echo "$champ1"; ?>">
    et j'enregistre les infos dans la base en dernière étape. Celle-ci peut avoir lieu sur la page 3,4 ou 5 suivant les critères sélectionnés.

    Si par exemple l'utilisateur utilise le caractères spécial guillemets simples (') dans le champ1 en page 1 alors ca ajoute automatiquement le \ en étape 2 et en page 3 je j'utilise stripslasshes() avant de l'enregistrer dans la base. Le champ est enregistré correctement sans le \.

    Par contre si l'utilisateur utilise les double guillemets(") alors ca ajoute bien le \ en page 2 comme ceci

    par contre en page 3 quand je récupère les infos il manque le texte après les " et ca donne cela

    Les infos entre double guillemets ne sont pas transmises. Pourquoi? Que dois je changer pour éviter ce problème?

    Merci de votre support

  2. #2
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    As-tu Magic_quote activé sur ton serveur ?

    Si oui, alors NORMALEMENT, tu n'as pas besoin d'utiliser le stripslashes.

    Bon, en PHP les pbs avec les ' et les " sont fréquents : l'un donne une interprétation littéral, alors que l'autre permet l'interprétation "brut"....

    Dans ton echo, enlève les " !!!!! Et ca marchera

    Ecrit juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    value="<?php echo $champ1; ?>">
    Tu n'as pas besoin des " tant que tu n'utilise que des variables !!!!

    Le pb est simple
    : tu commence ton echo avec un ", alors à la première guillemet fermante, il ferme le echo. Je sais que l'échappement est sensé "échapper" la guillet, mais ca ne marche pas tout le temps...

    Ce qui donne, schématiquement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    value="<?php echo "champ\'1 \"test\" ?>
    C'est d'ailleur pour ca que perso, je n'utilise jamais l'échappement, sauf pour le simple quote. Je préfère utiliser des fonctions spécialisés de traitements de chaines de PHP : pour plus d'infos tu n'as qu'à voir ma signature !!

    ...Et n'oublie pas, quand tu utilise des variables ET des chaines, la concaténation, c'est super important :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    value="<?php echo "blabla ".$champ1." blabla"; ?>">

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    je pense que Magic_quote est activé car ca ajoute automatiquement les \\\\\\.

    J'ai remplacé comme tu m'as dit cad avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input name="champ1" type="hidden" id="champ1" 
    value="<?php echo $champ1; ?>">
    et quand j'arrive en étape 3 ca n'affiche toujours pas le texte apres les ".

    Autre problème si je supprime les stripslasshes ca rajoute des \\\.

    aurais je zapper quelque chose?

  4. #4
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Hum...

    Plutot bizzare. Peux tu en dire plus sur ton code ? L'étape 3 correspond à quoi ? C'est un troisième formulaire ? Ton echo $champ1 est-il suite à un appel BDD? Ou juste une variable que tu passes de formulaire en formulaire ?

    Car si c'est après un appel BDD, il faut que tu vérifie les valeurs enregistrés....

    Et sinon, le magic_quote est sensé ne fonctionner que lors d'un insert en BDD, donc désolé j'ai du t'induire en erreur : le stripslashes doit être mis, si tu ne te sers pas de la BDD pour cette variable.....

    Si tu peux donner un peux plus de code, notamment pour voir les entrées et les sorties....

    En effet, tu as changé la sortie, mais si tu ne change pas l'entrée au niveau de la synthaxe, il est possible que le PB vienne de là....

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    En étape 3 c'est un 3ème formulaire ou j'enregistre dans la bdd ca depend des options selectionnees en etape 1. Mais ce n'est pas apres un appel bdd. Je passe juste de formulaire en formulaire.

    Page 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <form name="form1" method="post" action="page2.php" 
    enctype="multipart/form-data" onSubmit="return check();">
     
    <input type="text" name="champ1" maxlength="55" size="60">
    <input type="submit" name="Submit" value="Etape suivante...">
    </form>
    Page 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    $champ1=""; if(!empty($_POST["champ1"])) $champ1=$_POST["champ1"];
    ?> 
    <?php echo champ1 ?>
     
    <form name="form1" method="post" action="page3.php" 
    enctype="multipart/form-data" onSubmit="return check();">
     
    <input type="text" name="champ2" maxlength="55" size="60">
    <input name="champ1" type="text" id="champ1" value="<?php echo $champ1; ?>">
    <input type="submit" name="Submit" value="Etape suivante...">
    </form>
    le echo de champ 1 dans le formulaire affiche :

    alors que au départ j'ai entré : champ'1 "test"

    Par contre le 1er echo affiche bien :


  6. #6
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    essaye ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $champ1=""; if(!empty($_POST["champ1"])) $champ1=$_POST['champ1'];
    
    echo $champ1; ?>
    Et surtout change ton $_POST["champ1"] avec $_POST['champ1'] !!!!

    L'erreur doit être là je pense (toujours ce conflit de "), si tu as les caractères d'échappements, naturellement tu utiliseras stripslashes...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    je ne comprends pas pourquoi sur la 2eme page le echo affiche bien : tes\'t \"vente\"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $champ1=""; if(!empty($_POST["champ1"])) $champ1=addslashes($_POST["champ1"]);
    echo stripslashes($champ1);
    par contre le echo de input affiche tes\'t \

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input name="champ1" type="text" id="champ1" value="<?php echo $champ1; ?>">

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    Je te conseillerais plutôt de faire ça : (j'ai corrigé au passage les erreurs XHTML)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $champ1 = isset($_POST['champ1']) ? $_POST['champ1'] : '';
    ?> 
     
    <form method="post" action="page3.php" 
    enctype="multipart/form-data" onsubmit="return check();">
    <input type="text" name="champ2" maxlength="55" size="60" />
    <input type="text" name="champ1" id="champ1" value="<?php echo htmlspecialchars(stripslashes($champ1)); ?>" />
    <input type="submit" value="Etape suivante..." />
    </form>

  9. #9
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    essaye avec ca, c'est toujours le même pb :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input name="champ1" type="text" id="champ1" value='<?php echo $champ1; ?>'>
    Car actuellement, en HTML, voila ce que tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <input name="champ1" type="text" id="champ1" value="tes\'t \"vente\"">
    C'est dans ton HTML que tes quotes gênent je pense. D'ailleur, tu devrais afficher le code source de ton formulaire pour voir, tu devrais observer que la chaine entière est présente, mais seulement ce qui est entre les premières guillemets est interprété.

    Va y, met le simple quote....

    Je sais c'est lourd, mais une fois que tu auras trouver, tu ne recommenceras plus les mêmes notations, c'est garantit

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    Non viviboss !
    D'une part les apostrophes ne sont pas valides (XHTML), et d'autre part, ça ne résoud pas le problème. Il faut simplement convertir les quotes et antislashes en entitées html, comme dans mon exemple, après avoir enlevé les slashes.

  11. #11
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    C'est ce que je fais aussi, mais on était partit dans une autre direction..... D'ailleurs, dans htmlentities, tu peux spécifier le degré d'interprétation des quotes, ce qui est assez pratique.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 175
    Points : 60
    Points
    60
    Par défaut
    merci j'ai solutionné le problème pour passer les données de page en page correctement. Maintenant j'ai un problème pour enregistrer dans la base. Ca n'enregistre pas. Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $table="matable";
    $query = "INSERT INTO 
    $table(champ1,champ2)";
    $query .="VALUES('$champ1','$champ2')"; 
    $result = mysql_query($query);

  13. #13
    Membre éprouvé
    Avatar de viviboss
    Profil pro
    Inscrit en
    Août 2006
    Messages
    943
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Août 2006
    Messages : 943
    Points : 1 248
    Points
    1 248
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $table="matable";
    $query = "INSERT INTO 
    ".$table." (champ1,champ2)";
    $query .="VALUES('$champ1','$champ2')"; 
    $result = mysql_query($query);
    if ($result==false){
    echo mysql_error();
    }
    Pour voir ce que ca donne comme mess d'erreur

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Points : 1 639
    Points
    1 639
    Par défaut
    Passe tes données par mysql_real_escape_string().

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec les caractère spéciaux netvibes
    Par alas70 dans le forum Langage
    Réponses: 1
    Dernier message: 02/03/2007, 11h59
  2. Problème avec les caractères spéciaux
    Par vincentj dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 01/09/2006, 15h49
  3. [MySQL] Probléme avec les caractéres accentués suite à un export
    Par UNi[FR] dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/05/2006, 09h10
  4. problème avec les caractères spéciaux
    Par jmarc1818 dans le forum Général Python
    Réponses: 1
    Dernier message: 16/03/2006, 15h55
  5. [SAX] Problème avec les caractères spéciaux
    Par abdou.sahraoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 18/07/2005, 10h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo