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 :

apostrophe bloquant en saisie


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut apostrophe bloquant en saisie
    Bonjour,

    j'ais un probléme une variable venant de Mysql et récupérée avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?PHP
    while ($row=mysql_fetch_array($result)) 
             {
              $designation= stripslashes($row['designation']);
             }
    Je vous fait grace du reste code

    derriére cette récupération je fais un FORM pour modifier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo "<br />VOUS MODIFIEZ  ".$designation." ";
    echo "<br />texte<input  type='text' size='30' name='designation' value='".$designation."'>";
    Je vous fait grace du reste code

    alors mystére j'ais

    VOUS MODIFIEZ l'age de pierre a l'aire des...
    texte l

    falait' il ne pas faire le stripslashes

    merci d'avance.

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Et sans stripslashes, ça donne quoi ?

    Ton problème (parceque j'ai eu du mal à comprendre ), c que l'affichage ne donne que le 'l', c ça ... et toi tu crois que c à cause du ' ?
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour,
    Et sans stripslashes, ça donne quoi ?
    Ton problème (parceque j'ai eu du mal à comprendre ), c que l'affichage ne donne que le 'l', c ça ... et toi tu crois que c à cause du ' ?
    En fait le plus curieux est que sans stripslashes c'est pareil pff...
    je ne l'avais pas testé mais grâce a toi je vois que ça ne changes rien !

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Et avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<br />texte<input  type='text' size='30' name='designation' value='".htmlentities($designation, ENT_NOQUOTES, 'ISO-8859-1')."'>";
    ?

    C'est de l'HTML donc l'échappement type PHP ça ne marche pas, il faut utiliser les entités prévues.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par julp Voir le message
    Et avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<br />texte<input  type='text' size='30' name='designation' value='".htmlentities($designation, ENT_NOQUOTES, 'ISO-8859-1')."'>";
    ?

    C'est de l'HTML donc l'échappement type PHP ça ne marche pas, il faut utiliser les entités prévues.
    Merci, je testes ça et te tiens au courant ! SUPER SYMPA

    JE REEDITES

    Rien a faire ! c'est tout de même curieux ce phénoméne.

    Bien sur dans mon echo, je peux inverser les " et les ' mais alors j'aurais le même probléme si je mets une sitation entre " " pfff...

    Je n'avais jamais vu cela !
    Dernière modification par Invité ; 18/02/2010 à 18h01.

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Il y a quoi dans ta Bdd exactement ? (Visuellement via PhpMyAdmin par exemple).
    Y a t'il des slash ou pas entre les " ou/et ' ?
    N'y aurait il pas des saut de lignes ?
    Fait un essai dans un textarea au lieu d'un input type text, ça coute rien.

    Regarde le HTML généré (code source de la page).
    N'y a t-il pas quelque chose d'anormal ?

    Remplace ENT_NOQUOTES par ENT_QUOTES du htmlentities.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Salut
    Il y a quoi dans ta Bdd exactement ? (Visuellement via PhpMyAdmin par exemple).
    Y a t'il des slash ou pas entre les " ou/et ' ?
    N'y aurait il pas des saut de lignes ?
    Fait un essai dans un textarea au lieu d'un input type text, ça coute rien.
    Regarde le HTML généré (code source de la page).
    N'y a t-il pas quelque chose d'anormal ?
    Qu'en est il de la config magic_quotes_gpc ? On ou Off ?
    Bon tour d'horizon sur le probléme

    je vais regarder les retours ligne mais presque impossible.
    dans phpmyadmin j'ais un simple ' par contre bien sur si j' exportes
    la table par phomyadmin il fait un fichier texte (sql) avec deux ' comme toujours.

    Toujours dans phpmyadmin quand j'édites j'ais bien tout et ça marche !

    Par contre enfin une piste car en affichant le html j'ais l'explication

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input  type='text' size='30' name='designation' value='l'art de l'air'>
    ors je ne veux pas récupérer les ' par des " en effet comme expliqué ce serait pareil si j'écrivais
    antoine dit "bonjour vous" et ...

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    J'avais modifié mon post entre temps, et rajouté ceci :
    Remplace ENT_NOQUOTES par ENT_QUOTES du htmlentities.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    J'avais modifié mon post entre temps, et rajouté ceci :
    Non, pas mieux,
    par contre je confirme que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<br /><br /><b> designation </b> <input  type="text" size="30" name="designation" value="'.$designation.'">';
    Marche
    Ce qui ne me vas pas comme expliqué !

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Le htmlentities devrait résoudre le problème pourtant, tout tient dans les paramètres.
    Il y en a 3 :
    ENT_COMPAT : Convertit les guillemets doubles, et ignore les guillemets simples
    ENT_QUOTES : Convertit les guillemets doubles et les guillemets simples
    ENT_NOQUOTES : Ignore les guillemets doubles et les guillemets simples

    La doc : htmlentities
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Le htmlentities devrait résoudre le problème pourtant, tout tient dans les paramètres.
    Il y en a 3 :
    ENT_COMPAT : Convertit les guillemets doubles, et ignore les guillemets simples
    ENT_QUOTES : Convertit les guillemets doubles et les guillemets simples
    ENT_NOQUOTES : Ignore les guillemets doubles et les guillemets simples

    La doc : htmlentities
    Non htmlentities n'est pas du tout nescessaire ici, si j'avais du html j'utiliserais le BBCODE mais ici il sagit de texte simple pas besoins de

    htmlentities addslashes et htmlspecialchars du reste
    les séniors ICI disent de tout traiter a la main, et protéger les Mysql par

    mysql_real_escape_string() qui fait une connexion a la base
    de données pour vérifier le charset utilisé.Et protéger les donn‚es.

    bien sur sur un numérique entier intval() suffit !

    Pour relire Mysql c'est stripslashes

  12. #12
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    A ben, tout va pour le meilleur des mondes alors.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    A ben, tout va pour le meilleur des mondes alors.
    Non rien ne va car je ne comprends pas comment j'ais pu manquer un truc pareil depuis que je fais du MySql

  14. #14
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Ca n'a rien à voir avec MySQL, aucun rapport, de même que Php, mais ce sera grâce à php que tu vas pouvoir régler le problème.

    Citation Envoyé par julp
    C'est de l'HTML donc l'échappement type PHP ça ne marche pas, il faut utiliser les entités prévues.
    C'est un problème de HTML, et tu auras beau échapper ou supprimer les échappements, ça ne marchera jamais.

    Si tu as une quote ( ou guillemet -> " ) dans ta chaine cela "casse" la structure HTML, le navigateur perd la boule, il ne parvient plus a interpréter correctement l'intégralité de cet attribut value="".

    La solution est encoder les quotes par des entités HTML.
    - Soi tu utilise un htmlentities, mais l'inconvénient c'est que cela va encoder l'intégralité de la chaine, pas seulement les quotes.
    - Soit tu te crée une fonction qui va se contenter d'encoder uniquement les quotes, du moins le remplacer par son entité, si le htmlentities ne te satisfait pas.

    Il te faut produire un html comme ceci dans le cas où il y a des quotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" value="Un &-quot; guillemet" />
    (J'ai rajouté un tiret sinon on ne vois pas l'entité)


    Si tu utilise des apostrophes comme séparateurs pour les attributs HTML : value='une valeur' et bien ce sera les apostrophes qui causeront problèmes.

    Le plus simple c'est d'utiliser les quotes value="une valeur" comme cela doit être fait, ensuite encoder les quotes de la chaine (de la valeur).


    Si les séniors ICI connaissent une autre solution, et bien on sera au moins 2 à apprendre quelque chose de nouveau
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  15. #15
    Invité
    Invité(e)
    Par défaut
    Merci pour ta longue explication, je vais en fait opter pour une fonction "a ma façon" , mais vraiment c'est assez inexplicable que PHP et MYSQL ,n'ait pas la puissance de traiter ces problémes.

    Je mets résolu mais le coeur n'y est pas

    Encore un grand merci a vous deux pour votre gentilesse et patience.

  16. #16
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    mais vraiment c'est assez inexplicable que PHP et MYSQL ,n'ait pas la puissance de traiter ces problémes.
    Ben non, ce n'est absolument pas un problème de Php ni de MySQL, mais alors aucun.
    C'est un pure problème de HTML, et rien que du HTML.


    Pour mieux t'en rendre compte, crée toi une pure page html (genre essai.html), et essai de mettre ce contenu (un input), comme dans ton cas :
    <input type="text" value="Une apostrophe ' et un guillemet " pour un essai" />

    Visualise dans ton navigateur, tu verras que ça va coincer.

    Il n'y a pourtant pas de Php ni de MySQL ici, non ?
    Conclusion ?


    Si tu as à la fois dans chaine une apostrophe et un guillemet, ça va coincer.
    La solution c'est d'encoder.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Il n'y a pourtant pas de Php ni de MySQL ici, non ?
    Conclusion ?
    Mais si !! car c'est bien le ECHO le coupable donc le PHP lorsqu'il généres son
    html !

    mais si je voulais écrire un html "a la main", oublions PHP MySql etc...
    je vois bien que j'aurais le même probléme écrivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <html><body>
    <input  type='text' size='30' name='ww' value=' l'art de dire "bien vu" est etc...'>
    et la ta réponse est encodage mais je vais le faire que pour ces symbolse !

  18. #18
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par mauriser Voir le message
    Mais si !!
    Mais non, et non, et non !!!
    C'est une idée fausse

    C'est toi qui génère du HTML en Php en utilisant l'apostrophe comme élément séparateur pour l'attribut value='une chaine'. dont la chaine contient une apostrophe.
    Mais c'est le résultat final qui cause problème, c'est à dire le HTML pure, c'est ça que tu ne comprend pas.


    Si tu reprend mon exemple avec une page en pure HTML, mais cette fois tu fais comme ci-dessous, tu vas rencontrer exactement le même problème, ce qui te démontras que ce n'est absolument pas un problème de Php ou de MySQL.

    Fais concrètement ces 2 exemples dans une page HTML pure, et visualise dans ton navigateur.
    Si tu ne le fais pas, tu ne seras jamais convaincu, et tu conserveras ton idée fausse sur ce point.

    1/ HTML avec comme séparateur d'attribut des apostrophes :
    <input type="text" value="Un guillemet " pour un essai" />


    2/ HTML avec comme séparateur d'attribut des guillemets :
    <input type='text' value='Une apostrophe ' pour un essai' />


    Les 2 cas causent problème et n'y a pourtant pas le moindre Php.
    Le HTML utilise des élément séparateurs pour justement délimiter un contenu.
    Si dans le contenu il y a le même séparateur, le navigateur est perturbé, il ne comprend plus. C'est cela que tu remarque.

    Php lui aussi à des délimiteurs, les mêmes que ceux du HTML, mais il ne faut pas confondre les délimiteurs de l'un et de l'autre.
    Le echo n'est pas la cause du phénomène que tu vois, en aucun cas.


    et la ta réponse est encodage mais je vais le faire que pour ces symbolse !
    Oui, je n'en vois pas d'autres.
    Tu as 2 fonctions en php : htmlspecialchars et htmlentities.
    Tu peux t'en servir aussi, le htmlspecialchars ne converti pas toutes les entités, seulement quelques unes, elle est théoriquement suffisante dans ce cas là.
    Rien t'empêche cependant de ne convertir que l'apostrophe ou le guillemet seulement avec ta propre fonction (tout dépend du séparateur HTML que tu utilise).
    Et le faire aussi uniquement lorsque que tu met du contenu dans un attribut comme : value="un contenu"
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

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

Discussions similaires

  1. [Oracle] Prendre en compte un apostrophe saisi dans un champ
    Par roswina dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/06/2015, 10h19
  2. Apostrophe lors de la saisie et problème avec insert
    Par angelevil dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/06/2009, 21h54
  3. Read non bloquant, repérer saisie backspace
    Par firemax dans le forum C
    Réponses: 7
    Dernier message: 18/05/2008, 10h00
  4. lecture stdin non bloquante et temps de saisie
    Par TabrisLeFol dans le forum C
    Réponses: 10
    Dernier message: 29/11/2006, 16h46
  5. saisie bloquante
    Par shaggadelic dans le forum C
    Réponses: 4
    Dernier message: 21/12/2005, 01h38

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