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

PHP & Base de données Discussion :

Base de données en Unicode mais les accents ne passent pas [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut Base de données en Unicode mais les accents ne passent pas
    Bonjour,
    Je fais un site et j'ai besoin de l'utf-8 (j'utilise Mysql avec PDO) donc j'ai mis toutes mes pages avec le doctype ci dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    Quand j'ai fait ma base de données j'ai mis la base et toutes les tables en utf8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE DATABASE nomdelabase
    DEFAULT CHARACTER SET utf8 
    COLLATE utf8_unicode_ci;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ENGINE = innodb CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    Et malgré tout ça, quand je rentre des accents dans les formulaires : ça foire !
    Quand je vais dans phpMyadmin les caractères sont transformés.
    ex : Les îles de Barnabé pour : les îles de Barnabé
    ça devrait marcher pour : ça devrait marcher.
    Il me semblait avoir suivi toutes les recommandations que j'avais trouvées sur le web mais j'ai dû oublier quelque chose.
    Merci d'avance pour vos suggestions

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Essai de lancer la requete :
    SET NAMES "UTF8"
    après ta connexion.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Après chaque insert?
    Si c'est le cas c'est énorme!!

  4. #4
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Je l'ai mis juste après l'instanciation de mon objet PDO (j'ai relu ta phrase) mais il me me met une erreur de syntaxe sur SET NAMES "UTF8".
    Ah je vais essayer sans guillemets peut-être...

  5. #5
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Non ça ne marche pas. Je vais chercher sur le net pour savoir comment on utilise cette instruction.

  6. #6
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    ALors voilà j'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $connexion->query('SET NAMES utf8');
    et ça a marché.
    Merci beaucoup, c'est cool mais ça veut dire que je dois mettre cette ligne après chaque instanciation de mon objet connexion?
    Et dans ce cas j'aimerais comprendre pourquoi, alors que j'ai mis la bdd et mes fichiers en utf8. Qu'est ce qui manque? Et il n'y a pas moyen de faire un truc une bonne fois pour toutes?

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux la mettre une fois pour toute dans la construction de l'objet.

    Si je lis bien la doc en diagonal on peut le parametrer dans la configuration de mysql :
    http://dev.mysql.com/doc/refman/5.0/...onnection.html
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Oui c'est vrai évidemment dans la construction de l'objet, suis je bête…
    Je vais jeter un oeil sur ton lien, comme c'est en anglais je vais prendre un peu de temps. Mais ça se paramètre où la configuration de mysql? En local je n'ai pas trouvé où ça pouvait être. Et en plus chez l'hébergeur c'est possible?

  9. #9
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Euh, concernant la configuration de mysql y aurait-il une bonne âme qui pourrait m'indiquer comment on fait et surtout où ça peut se trouver (je suis sous mac). Et chez l'hébergeur comment ça marche??
    Merci

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    A moins que tu aies un serveur dedié, tu ne pourras pas changer la configuration du serveur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Non ce n'est pas un serveur dédié.
    Donc je vais continuer avec la solution 'SET NAMES' même si je ne comprends pas pourquoi j'ai besoin de faire ça en local vu les précautions que j'ai prises. Vraiment ça me semble illogique!!!
    Et sinon est ce que tu c'est où il est ce fichier de configuration mysql en local pour info?

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    cherche un fichier my.cnf
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Pas de fichier my.cnf dans tout mon ordi par contre il y a :
    my-huge.cnf
    my-large.cnf
    my-medium.cnf
    my-small.cnf
    et enfin my-innodb-heavy-4G.cnf
    Bizarre, non?
    En plus à chaque fois il y a le même type d'infos. Je ne sais pas à quoi font référence les adjectifs : small, huge...
    Mais je suis sous mac donc il doit y avoir des différences avec windows sur ce point là.

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    ces fichiers sont des exemples de fichiers de configurations selon la taille de la base.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Ah bon des exemples? Et il faut en faire un autre sur le même modèle?
    Là je crois que je ne comprends plus trop.

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Comment demarres tu mysql ?

    le fichier a utiliser peut etre passé dans la ligne de commande avec l'argument --defaults-file
    ie : --defaults-file=mysql\bin\my.cnf

    donc regarde a ce niveau quel fichier de config est indiqué.

    Le serveur peut aussi demarrer sans fichier de config, auquel cas il prend les options par defaut.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Ah mais j'utilise mamp donc je n'ai jamais trop réfléchi à tout ça. Je suppose que dans mon cas c'est obligatoirement les options par défaut.

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 62
    Points : 35
    Points
    35
    Par défaut
    Bonsoir,

    J'ai exactement le même problème et n'étant pas très bon en objet j'aurai besoin d'un peu d'aide pour placer le SET NAMES UTF-8 au bon endroit.

    J'utilise Mysql + PDO.

    J'ai une classe MyPDO servant à simplifier mes requêtes PDO :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class MyPDO extends PDO
    {
        public function __construct($dsn, $user=NULL, $password=NULL)
        {
            parent::__construct($dsn, $user, $password);
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
     
        public function prepare($sql, $options=NULL)
        {
            $statement = parent::prepare($sql);
            if(strpos(strtoupper($sql), 'SELECT') === 0) //requête "SELECT"
            {
                $statement->setFetchMode(PDO::FETCH_ASSOC);
            }
     
            return $statement;
        }
    }
    Donc j'ai une classe User_session contenant mon modèle soit avec toutes mes requêtes SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class user_session extends id_user {
     
    	private $set_utf8_req;
     
    	public function __construct($db) {
    		$this->set_utf8_req = $db->prepare("SET NAMES utf8");
     
    	}
     
    	public function set_utf8() {
    		$this->set_utf8_req->execute();
    		return $this->set_utf8_req->fetch();
    	}
    J'ai une classe SESSION correspondant au constructeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class session {
     
    	private $hostname;
    	private $login;
    	private $password;
    	private $dbName;
     
    	public function __construct() {
    		$hostname = DB_HOSTNAME;
    		$login = DB_LOGIN;
    		$password = DB_PASSWORD;
    		$dbName = DB_NAME;
    		$db = new MyPDO('mysql:host=' . $hostname . ';dbname=' . $dbName, $login, $password);
    		$this->userTable = new user_session($db);
    		$this->userTable->set_utf8();
    	}
    Donc je ne sais pas trop ou mettre ce bout de code pour que ca fonctionne, j'ai essayé dans session en rajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->userTable->set_utf8();
    Pour appeller la méthode correspondant mais ca me fait planter mon code

    Merci par avance pour votre aide

  19. #19
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    N'oublie pas les guillemets
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  20. #20
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2008
    Messages : 55
    Points : 19
    Points
    19
    Par défaut
    Bon je suis débutante donc je te réponds comme je peux. En fait le set names utf 8 il faut le mettre après l'instanciation de ton objet PDO. Comme apparemment tu l'instancies dans le constructeur de ta classe session :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $db = new MyPDO('mysql:host=' . $hostname . ';dbname=' . $dbName, $login, $password);
    Je le mettrais sur la ligne suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $db->query('SET NAMES utf8');
    Mais il faudrait que quelqu'un de plus expérimenté confirme mes propos.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. comment manipuler une base de données paradox 7 avec les sockets?
    Par fahdmustapha dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/06/2011, 14h32
  2. [FPDF] Les accents ne passent pas avec FPDF
    Par beegees dans le forum Bibliothèques et frameworks
    Réponses: 13
    Dernier message: 02/03/2009, 09h16
  3. [SQL-Server] Les accents ne passent pas entre MS SQL et PHP ?
    Par stephane9422 dans le forum PHP & Base de données
    Réponses: 34
    Dernier message: 17/11/2008, 15h22
  4. Base de données ou fichier avec les stations de métro ?
    Par webtheque dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/09/2008, 15h50
  5. base de donnée sous excel: effacer les données
    Par eseb777 dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 03/05/2007, 09h32

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