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 :

encodage et requete sql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Par défaut encodage et requete sql
    Bonjour à tous,

    Ca fait un bail que je n'ai pas touché au php/mysql et je m'y remets doucement

    voici mon fichier php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
    header('Content-Type: text/html; charset=utf-8');
    include("connect.php");
    $famille = $_POST['famille'];
     
    $requete = "SELECT id_animal FROM animal WHERE famille='".$famille."'"; 
    echo $requete;
    $quer = mysql_query($requete); 
    $result = mysql_fetch_array($quer) or die("<br><br>fetch array ne fonctionne pas "); 
    echo $result['id_animal'];
    ?>
    Ma BDD est en utf-8

    si j'enlève ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=utf-8');
    j'ai au lieu de "félidés" ==> félidés

    donc en fait, mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $result['id_animal'];
    ne me renvois rien si pour famille j'ai félidés et canidés mais si j'ai autre chose sans "é" ça fonctionne..

    dans la BDD j'ai mes champs en "utf8_general_ci" idem pour ma table "animal"

    je tourne en rond depuis quelque temps donc je viens vers vous pour trouver une solution, je ne sais pas quoi faire

    merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    "félidés" comment est enregistré dans ta base "félidés" ou félidés

  3. #3
    Membre éprouvé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Par défaut
    comme ça "félidés"

    c'est pour ça que je ne comprends pas

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Par défaut
    Les donnés doivent être enregistré encodé.

    tu doit seulement ajouté la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    Si le Charset est en utf8, quand tu post un formulaire avec des accents ils sont directement encodé alors tu doit enlevé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=utf-8');
    pour que les valeur ne soit pas décodé

  5. #5
    Membre éprouvé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Par défaut
    dans ma page html j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    et dans mon fichier php, si j'enlève ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=utf-8');
    j'ai comme résultat
    ça me gonfle car j'ai jamais eut de problème comme ça avant

  6. #6
    Membre éprouvé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Par défaut
    j'ai viré
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=utf-8');
    et ça à l'air de fonctionner...

  7. #7
    Membre éprouvé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Par défaut
    bon et bien non ça ne fonctionne pas...

    on reprend

    j'ai enlevé ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=utf-8');
    et gardé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    le problème est que si je rentre dans l'input "noémie" il me dit "ok", alors que dans la base il existe
    si je mets "noemie", il me dit que le pseudo est déjà pris
    SAUF que dans la BDD c'est "noémie" et non "noemie"

    je redonne mon code (j'ai changé la requête)

    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
     
    include("connect.php");
    $pseudo = $_POST['pseudo'];
     
     
    $requete = "SELECT * FROM personne WHERE pseudo='".$pseudo."'"; 
     
    $quer = mysql_query($requete); 
     
    $row = mysql_fetch_array($quer);
    if($row) {
    	echo "pseudo déjà utilisé";
    }
    else {
    	echo "OK";	
    }
    ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM personne WHERE pseudo='noémie'
    bref, je tourne en rond avec cet encodage de m....

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Bon je t'ai déjà répondu sur un autre forum mais je te redonne la réponse ici.

    IL FAUT GARDER CETTE LIGNE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=utf-8');
    car l'entête du serveur a la priorité sur l'entête html meta et le serveur est encore aujourd'hui configuré par défaut en iso.

    Le problème de ta requête est une autre histoire qui n'a rien à voir avec l'encodage. Si quand tu cherche "noemie" la requête te répond que le nom est déjà pris et qu'il y a en fait "noémie" (avec l'accent) c'est dû au fait que le champ de ta bdd a l'interclassement "utf8_general_ci" qui est à la fois casse insensitive et insensible aux accents. Si tu veux faire une différence utilise l'interclassement "utf8_bin".

  9. #9
    Membre éprouvé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Par défaut
    effectivement l'interclassement était en "utf-8 general_ci"
    j'ai changé par de l' "utf8_bin"
    mais ça ne fonctionne pas...

  10. #10
    Membre éprouvé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Par défaut
    sauf que maintenant, il ne me prend pas "noemie" donc normal
    ni "noémie" pas normal

    si je prends un mot comme "gertrude" présent dans la BDD, ça fonctionne

  11. #11
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Tu as fais la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_set_charset ("utf8");
    avant ta requête de sélection ?

  12. #12
    Membre éprouvé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Par défaut
    vi
    mais j'ai eu ça comme erreur
    Fatal error: Call to undefined function: mysql_set_charset()

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Oui c'est que tu n'a pas lu complètement le tuto dont je te parlais sur l'autre forum.
    Si cette requête ne fonctionne pas il faut faire à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("SET NAMES 'utf8'");
    car "mysql_set_charset" n'est utilisable que sur PHP 5 >= 5.2.3 et MySQL version 5.0.7 ou supérieure, donc tu dois avoir des versions antérieures.

  14. #14
    Membre éprouvé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Par défaut
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    biiiingo!!

    c'est cool merci beaucoup !

    suis chez free et ils sont encore en php4
    donc j'essayais de trouver une soluce avec le htaccess mais la tienne est radicale!

    en tout cas merci encore !

    ps : j'ai dejà fait du php mysql il y a quelques années, et j'ai jamais rencontré ce genre de problème.. comme ça se fait?

  15. #15
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Citation Envoyé par oceane751 Voir le message
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    biiiingo!!

    c'est cool merci beaucoup !

    suis chez free et ils sont encore en php4
    donc j'essayais de trouver une soluce avec le htaccess mais la tienne est radicale!

    en tout cas merci encore !

    ps : j'ai dejà fait du php mysql il y a quelques années, et j'ai jamais rencontré ce genre de problème.. comme ça se fait?
    Il me semble que chez free tu peux avoir php 5.1.4 en nommant tes extensions de fichier .php5

    L'utf8 complique un peu le problème car les serveurs et la base de donnée travaillent encore par défaut en iso d'où la nécessité du header php header('Content-Type: text/html; charset=utf-8'); pour le serveur et la requête set_name ou set_charset pour la bdd. Il y a quelques années tu travaillais sans doute en iso.

    Je te conseille de bien relire le tuto que je t'ai conseillé car il explique d'autres pb que tu pourrais avoir avec certaines fonctions comme strpos, l'utilisation de htmlspecialchars à la place de htmlentities, etc.

    Sinon tu devrais mettre un point (le pouce levé) sur les réponses qui t'ont aidées car c'est plus clair pour ceux qui reliront le sujet et c'est un sujet assez délicat pour les débutants en utf8

  16. #16
    Membre éprouvé Avatar de oceane751
    Profil pro
    Intégrateur Web
    Inscrit en
    Novembre 2004
    Messages
    1 280
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 280
    Par défaut
    le truc c'est que j'ai jamais eu de problème avec l'utf-8

    j'ai tout noté dans un coin...

    le pouce est fait

    Il y a quelques années tu travaillais sans doute en iso.
    ça c'est fort possible!

    et pis free, je m'en sers pour m'auto former sur des langages web
    un peu galère parfois (surtout pour le php5) mais c'est gratos donc bon

    en tout cas merci beaucoup!

  17. #17
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Citation Envoyé par oceane751 Voir le message
    le pouce est fait
    Il y a aussi mon premier message dont le contenu était indispensable à la résolution de ton problème. Tu vas dire que je chipote mais la remarque sur l'interclassement du champ de la table était important sinon même avec les pb d'encodage résolus cela n'aurait pas fonctionner comme tu le souhaite.

    Au passage l'interclassement general_ci (qui ne convient pas dans ton cas) est très pratique pour pouvoir faire des recherches insensibles aux accents et aux majuscules car cela permet d'avoir le même comportement que dans un moteur de recherche comme google.
    Ce qui implique qu'il faut absolument éviter d'utiliser des fonctions comme htmlentities pour insérer des données en bdd sinon les caractères accentués étant encodés, le système de recherche ne pourra plus être insensible aux caractères accentués. C'est une petite remarque en passant mais qu'il vaut mieux savoir sinon en cas de besoin, la correction du code et des données peut être assez laborieuse

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

Discussions similaires

  1. Probleme d'encodage dans une requete SQL
    Par kedare dans le forum Général Python
    Réponses: 1
    Dernier message: 25/03/2009, 17h52
  2. Encodage bizare des resultats des requetes sql
    Par bastien03 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/06/2007, 13h18
  3. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 11h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 13h43

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