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 caractère accentué [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut Problème de caractère accentué
    Bonjour,
    Je programme un site Web en php permettant de gérer des inventaires.
    Lors de la création d'un nouvel article, je transmet par un formulaire post la catégorie d'un article.
    Il s'agit dans mon cas de la catégorie "Publicité". Je fais ensuite la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql = 'SELECT page FROM textes WHERE categorie = "'.$categorie.'" LIMIT 1';
    $query = mysql_query($sql)or die(mysql_error());
    if($data = mysql_fetch_assoc($query)){
        $page = $data['page'];
    }else{
        $page = NULL;
    }
    J'arrive toujours dans la partie NULL. Pourtant si je copie-colle ma requête dans phpMyAdmin, tout marche.
    J'ai donc essayé de comparer ma variable $categorie avec le String "Publicité" ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var_dump($categorie == "Publicité"); // bool(false)
    var_dump($categorie) // String(16)"Publicité"
    var_dump("Publicité") // String(10)"Publicité"
    J'ai donc deux même String, mais ils n'ont pas la même longueur !
    J'ai essayé les fonctions classiques du genre de html_entity_decode etc. mais ça ne fonctionne pas... encore

    Si vous avez des idées je suis preneur,

    Merci d'avance et bonne soirée

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 99
    Par défaut
    Bonjour,

    Essaie ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    sql = 'SELECT page FROM textes WHERE categorie = "'.trim($categorie).'" LIMIT 1';
    $query = mysql_query($sql)or die(mysql_error());
    if($data = mysql_fetch_assoc($query)){
        $page = $data['page'];
    }else{
        $page = NULL;
    }
    J'espère que ca pourra t'aider

  3. #3
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    D'où vient ta variable $categorie? tu devrais essayer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql = 'SELECT page FROM textes WHERE categorie = "'.$categorie).'" LIMIT 1';
     
    echo $sql."<br>";
    $query = mysql_query($sql)or die(mysql_error());
    if($data = mysql_fetch_assoc($query)){
        $page = $data['page'];
    }else{
        $page = NULL;
    }
    Ceci devrait te permettre de si ta requête ressemble vraiment à ce que tu doit transmettre. Il est propable que des caractères invisibles se soit glisser devant ou/et derrière la variable.

    2/ Un petit coup de addslashes(trim($categorie)), ne fera pas de mal.

    3/ Es tu certain que ton code va vers $page = NULL ? fais un petit echo pour en être certain.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut
    Bonjour tout le monde,

    Peut être que si tu utilise tout simplement mysql_escape_string devant ta variable $categorie cela résoudra le problème.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT page FROM textes WHERE categorie = "'.mysql_escape_string($categorie).'" LIMIT 1';
    Cordialement.

  5. #5
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Quand j'ai des accents, moi j'utilise toujours les fonctions utf8_encode et utf8_decode sinon ça cause plein d'erreurs.

    Essaye un truc du genre pour ta requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql = 'SELECT page FROM textes WHERE categorie = "'.utf8_decode($categorie).'" LIMIT 1';
    $query = mysql_query($sql)or die(mysql_error());
    if($data = mysql_fetch_assoc($query)){
        $page = $data['page'];
    }else{
        $page = NULL;
    }
    Ou bien, si ça marche pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql = 'SELECT page FROM textes WHERE categorie = "'.utf8_encode($categorie) .'" LIMIT 1';
    $query = mysql_query($sql)or die(mysql_error());
    if($data = mysql_fetch_assoc($query)){
        $page = $data['page'];
    }else{
        $page = NULL;
    }
    Je crois que ça devrait régler ton problème. Au pire, si tu veux être certain de ta requête, tu peux faire un echo de cette dernière avec:

    Là tu verrais exactement ce qui est transmis à la base de données et pourquoi est ce que ça donne toujours le mauvais résultat.

    Sur ce, bonne chance .

    Osu

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut Essais de vos propositions
    Bonjour,
    Merci de m'avoir répondu si vite...

    J'ai essayé toutes vos fonctions, sans succès. Le problème venait du fait que j'utilisais une fonction pour récupérer ma variable $categorie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    function getPost($var){
    	$result = NULL;
    	if(!empty($_POST[$var])){
    		$result = $_POST[$var];
    		$result = htmlentities($result);
    		$result = mysql_real_escape_string($result);
    		}
    	return $result;
    }
    J'ai récupère donc désormais ma variable en ne la passant pas par htmlentites, et ça marche. Le html_entity_decode aurait dû marcher, je crois.

    Dans tous les cas, merci à tous , j'ai pu découvrir trim(), que je ne connaissais pas.

    Bonne journée

  7. #7
    Membre Expert Avatar de riete
    Homme Profil pro
    DevWeb - Oléiculteur
    Inscrit en
    Avril 2006
    Messages
    1 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : DevWeb - Oléiculteur
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 193
    Par défaut
    @Chantelane c'est un peu ce que je te disais
    D'où vient ta variable $categorie?
    Je ne sais pas si c'est toi qui a mis un point de réputation négatif à toutes les personnes qui t'ont donné une réponse ? En tous cas voici comment fonctionne cette notation.

    Peut être que cette remarque mérite un point négatif de réputation .

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/07/2010, 16h20
  2. Problème de Stockage des caractère accentué
    Par westside-99 dans le forum JPA
    Réponses: 0
    Dernier message: 22/05/2009, 16h30
  3. Problème de caractère accentué SELECT
    Par Invité dans le forum MySQL
    Réponses: 3
    Dernier message: 09/03/2009, 22h04
  4. Réponses: 0
    Dernier message: 21/07/2008, 14h09
  5. [JEditorPane] Problème avec caractère accentué
    Par scifire dans le forum Composants
    Réponses: 6
    Dernier message: 14/09/2005, 14h58

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