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 :

Problème de requête dû aux caractères accentués


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 22
    Points
    22
    Par défaut Problème de requête dû aux caractères accentués
    Salut. Quand je crée une requête en php à exécuter dans mysql, elle plante.
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $type = "Entrée"
    $connexion = mysql_pconnect($pServeur, $pNom, $pMotPasse);
    $requete = "SELECT Libelle FROM Carte WHERE type=\"$type\"";
    $resultat = mysql_query($requete, $connexion);
    $ligne = mysql_fetch_object($resultat);
    echo $ligne->Libelle;
    Après plusieurs tests, je sais que le problème vient du "é" de "Entrée" dans ma requête car si je remplace "Entrée" par "Plat" alors ça fonctionne, et j'obtiens une valeur. De plus quand je test la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT Libelle FROM Carte WHERE type="Entrée";
    en invite de commande dans l'utilitaire mysql, la requête s'effectue normalement et me renvoi une bonne valeur. Est-ce que je dois convertir ma variable $type? et par quel moyen? Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 377
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 377
    Points : 15 729
    Points
    15 729
    Par défaut
    si tu fais un recherche utilise plutôt une clé. et si tu dois absolument faire une recherche textuelle utilise LIKE comme ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE type LIKE "%Entrée%"

  3. #3
    Membre actif Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Points : 221
    Points
    221
    Par défaut
    Utilile la fonction php addslashes sur ta variable avant de l'utiliser dans ta requete et ça devrait marcher.
    Ce fonction ajoute un caractere d'echapement devant tout les caracteres spéciaux.
    La fonction inverse c'est stripslashes ou un truc du genre je sais plus exactement.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 22
    Points
    22
    Par défaut
    Merci de m'avoir répondu mathieu et momo. J'ai utilisé like dans ma clause where mais toujours pas de résultat. Tu entends quoi, mathieu, par clé? c'est quoi la différence d'avec une variable? sinon le addslashes("Entrée") marche pas non-plus.

  5. #5
    Membre actif Avatar de Momodedf
    Inscrit en
    Juillet 2007
    Messages
    246
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations forums :
    Inscription : Juillet 2007
    Messages : 246
    Points : 221
    Points
    221
    Par défaut
    Non le probleme ne vient pas de là.

    En faisant WHERE type="Entrée" tu test si la chaine de caractere contenue dans le champ type est (exactement) Entrée.
    Alors qu'en faisant WHERE type LIKE "%Entrée%" tu test si la chaine de caractere contenue dans le champ type contient le mot Entrée.

    Par contre ce qui ne va pas c'est ça :

    $requete = "SELECT Libelle FROM Carte WHERE type=\"$type\"";

    J'étais passé un peut vite et je n'avais pas remarqué.
    Essaye plutot ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $type = addslashes($type);
    $requete = "SELECT Libelle FROM Carte WHERE type='$type'";

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 377
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 377
    Points : 15 729
    Points
    15 729
    Par défaut
    Citation Envoyé par conics
    Tu entends quoi, mathieu, par clé ?
    je parlais de faire une requête sur une clé primaire ou une clé étrangère au lieu d'un champ texte, comme ça tu n'as pas de problème d'accents et tu gagnes en performance

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 34
    Points : 22
    Points
    22
    Par défaut
    J'ai essayé LIKE '%Entrée%', LIKE "%Entrée%", mais toujours rien. Je pense que le problème est lié à l'accent mais je ne trouve pas une fonction qui pourrait parer cette erreur. J'ai essayé addslashes, mysql_real_escape_string mais toujours rien. En fait, je peux pas utiliser une clé primaire pour faire mon test car il peut y avoir plusieurs enregistrements de type "Entrée", et donc chaque type peuvent correspondre à plusieurs clés primaires. Je pense que je vais ajouter un attribut typeBis à ma table ou je mettrais les valeurs de type sans accent mais je trouve ça pas très pratique.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/07/2011, 15h12
  2. Probléme avec requétes contenant des caractéres spéciaux
    Par dragonfly dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/11/2007, 17h20
  3. Réponses: 7
    Dernier message: 09/10/2007, 16h47
  4. SELECT insensible aux caractères accentués
    Par kaptnkill dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 26/05/2006, 15h24
  5. [MiniPascal] Problème de caractères accentués
    Par Clandestino dans le forum Autres IDE
    Réponses: 3
    Dernier message: 03/10/2004, 13h12

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