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

MkFramework Discussion :

pb d'apostrophe et d'accent dans mysql


Sujet :

MkFramework

  1. #1
    Membre habitué
    Homme Profil pro
    Responsable SAV
    Inscrit en
    Mars 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable SAV

    Informations forums :
    Inscription : Mars 2010
    Messages : 122
    Points : 128
    Points
    128
    Par défaut pb d'apostrophe et d'accent dans mysql
    Bonjour,

    J'utilise PSPad et le code de la page est UTF-8, et l'interclassement
    de mes champs côté bd est utf8_unicode_ci.
    J'envoie un test directement à partir du contrôleur main.php,
    dans ma vue, le texte s'affiche correctement avec les accents
    et les apostrophe, alors que quand je regarde le texte dans la base
    de données (mysql), les accents sont bizarres, exemple : "je suis l'été"
    est stocké dans la base ainsi "je suis l'été".
    extrait du contrôleur main.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $tTagXml_test = array("droit" => "r", "titre" => "un mois ouvert", "cible" => "docs/page.pdf", "metatags" => "je suis l'été de tous les rêves") ;
          $tMk_tfis = model_mk_tfis::getInstance()->setTagsXml($tTagXml_test) ;
    extrait du model
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function setTagsXml($tTags)
    	{
        $this->execute('INSERT INTO '.$this->sTable.' (droit, titre, cible, metatags)'.
        ' VALUES ("'.$tTags['droit'].'", "'.$tTags['titre'].'", "'.$tTags['cible'].'", "'.$tTags['metatags'].'")'
        );
      }
    Ce qui est gênant dans l'affaire, ce que je ne peux pas lancer
    une recherche sur le mot "été". Si je tape "été" dans un formulaire,
    aucun résultat n'est trouvé.
    Je ne sais pas où trouver la solution.

    J'ai même modifié mon fichier conf/site.ini.php
    alors que mes données ne proviennent pas d'une page html.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [encodage]
    ;indique l'encodage des fichiers de code, utilise pour la protection des tableaux de contexte ($_GET,$_POST)
    charset=UTF-8
    Cordialement

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Plusieurs choses: de base le framework protège les valeurs envoyés par l'utilisateur en les encodant en html (via _root::getParam() )
    Lorsque vous cherchez avec le formulaire été, vous passer par _root::getParam() et récupéré ainsi été (traduit en html)

    Vous devriez encodez avant de mettre en base de donnée avec la foonction customHtmlentities()

    Voici par exemple le code que vous deviez avoir
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $tTagXml_test = array("droit" => "r", "titre" => "un mois ouvert", "cible" => "docs/page.pdf", "metatags" => "je suis l'été de tous les rêves") ;
    //on encode en html
    $tTagXml_test=customHtmlentities($tTagXml_test);
    $tMk_tfis = model_mk_tfis::getInstance()->setTagsXml($tTagXml_test) ;

    Deuxièmement, pour des raisons de sécurité également, on utilise des prepare statement: on ne concatene pas les valeurs au sein des requêtes (faille SQL injection)
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    public function setTagsXml($tTags){
        $this->execute('INSERT INTO '.$this->sTable.' (droit, titre, cible, metatags) VALUES (?,?,?,?)',
            $tTags['droit'],
            $tTags['titre'],
            $tTags['cible'],
            $tTags['metatags']
     
        );
      }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Membre habitué
    Homme Profil pro
    Responsable SAV
    Inscrit en
    Mars 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable SAV

    Informations forums :
    Inscription : Mars 2010
    Messages : 122
    Points : 128
    Points
    128
    Par défaut
    Bonjour,

    Merci pour cette réponse très rapide. Je garde ces conseils très pratiques pour la suite de mon projet.
    Entre temps j'avais mis à jour les fichiers chez mon hébergeur, car je code en local puis j'actualise mon site hébergé.
    Chez mon hébergeur tout fonctionne très bien sans utiliser la méthode customHtmlentities().
    Donc mon problème vient en partie de mon serveur en local "xampp" ; d'ailleurs en apportant les modifications proposées,
    j'ai constaté toujours en local que je perds le contenu de mon champ "sRechercher" après tout accent.
    Par exemple, quand je saisis dans le champ de recherche le mot "départ", la valeur
    que je récupère dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function _rechercher(){
    		// voir le tuto https://www.youtube.com/watch?v=tZPRlhXc-iw&list=UU4Od4-GF1zgCEQodrlDE_lg&index=1
    		$sRecherche =_root::getParam("sRecherche",null) ;
    		echo "<br/>valeur de recherche : ".$sRecherche ;
                   //...
     
    }
    est de : d
    et si c'est le mot "été", je n'ai rien du tout comme valeur.
    Puisque sur le site hébergé chez mon fournisseur fonctionne, je vais clôturer cette discussion et vous remercie du fond du coeur.
    Vous êtes une personne très généreuse, vous donnez tant aux autres, et quant à votre produit, il est vraiment adapté à ceux qui ne veulent pas se prendre la tête.

  4. #4
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Votre formulaire ne serait pas en méthode GET ?

    Préférez un formulaire en méthode POST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form action="" method="POST">
    Je pense que le & utilisé dans les caractères accentués est interprétés comme un nouvelle variable en GET
    monSite.com?page=accueil&search=d&eacute;but
    Equivaut à
    page : "accueil"
    search: "d"
    eacute;but: ""
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

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

Discussions similaires

  1. [MySQL] accents dans MySQL
    Par michaeljeru dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/12/2009, 13h47
  2. Réponses: 0
    Dernier message: 12/03/2008, 12h16
  3. gestion accents dans Mysql
    Par cyreel dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 12/04/2007, 13h44
  4. accent dans MYSQL
    Par lguittet dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 08/06/2006, 09h35
  5. insérer un apostrophe dans MySQL
    Par levraigreg dans le forum Débuter
    Réponses: 9
    Dernier message: 09/02/2006, 12h02

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