Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de requête avec caractères accentués

    28 novembre 2011 à 11:20:16

    Bonjour.
    J'essaie de créer un formulaire d'inscription pour mon site.
    Quand je travaille en local, tout se passe bien. Mais quand je fais des tests en ligne, j'ai des problèmes avec les caractères accentués.
    Quand je rentre un mot avec un accent dans le champ "pseudo" et que je valide le formulaire, j'obtiens le message d'erreur suivant:
    Erreur : SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='
    Voici le bout de code où je pense qu'il y a un problème:
    <?php
    //Requête et traitement pour voir si le pseudo est disponible
    $req=$bdd->query('SELECT COUNT(*) AS nbrpseudo FROM comptes WHERE pseudo=\''.addslashes($_POST['pseudo']).'\'');
    $donnees=$req->fetch();
    $pseudo_dispo=($donnees['nbrpseudo']==0);
    $req->closeCursor();
    ?>
    


    Si vous savez d'où vient le problème, je suis tout ouïe.
    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2011 à 11:31:28

      Tu as une différence de configuration entre ta base en local et en ligne.

      Modifie les interclassaments de ta base en ligne.
      • Partager sur Facebook
      • Partager sur Twitter
      Ca ne marche pas, ça ne veut rien dire ! Qu'est ce qui ne marche pas ?
        28 novembre 2011 à 11:46:11

        J'ai fait quelques recherches avant de poster et j'étais tombé sur une page qui disait la même chose.
        J'ai alors changé mes interclassements, mais même après ça le problème persiste.

        Pour preuve, voici les structures de mes tables en local:
        Image utilisateur
        Et les structures des mes tables en ligne:
        Image utilisateur
        • Partager sur Facebook
        • Partager sur Twitter
          28 novembre 2011 à 11:50:36

          Il faut le faire également au niveau de la base de données.

          Image utilisateur

          • Partager sur Facebook
          • Partager sur Twitter
          Ca ne marche pas, ça ne veut rien dire ! Qu'est ce qui ne marche pas ?
            28 novembre 2011 à 14:07:42

            Il n'y a pas de différence entre le local et en ligne, les deux sont en utf8_general_ci.
            Screen de la bdd en ligne
            Screen de la bdd en local
            :o

            (Je ne sais pas si ça a à voir avec le problème, mais quand j'essaie de mettre latin1_swedish_ci en local, tout revient à utf8_general_ci une fois que je ferme la fenêtre.)
            • Partager sur Facebook
            • Partager sur Twitter
              28 novembre 2011 à 14:40:09

              Tes fichiers sont en utf-8 ?
              • Partager sur Facebook
              • Partager sur Twitter
              Ca ne marche pas, ça ne veut rien dire ! Qu'est ce qui ne marche pas ?
                28 novembre 2011 à 15:07:44

                Heu... joker :p
                Là on s'avance dans un domaine que je ne maitrise pas du tout...

                De quels fichiers parles-tu?
                Ceux dans lesquels sont stockés les données de ma base de données?
                Comment y accéder et comment savoir s'ils sont en utf-8?
                • Partager sur Facebook
                • Partager sur Twitter
                  28 novembre 2011 à 15:11:07

                  Tes fichiers PHP. Tu peux surement les convertir en utf-8 avec ton éditeur de fichier
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Ca ne marche pas, ça ne veut rien dire ! Qu'est ce qui ne marche pas ?
                    28 novembre 2011 à 15:26:38

                    D'accord, donc j'ai converti mes fichiers en utf-8.
                    Je n'ai plus de message d'erreur.
                    Par contre deux nouveau (petits?) problèmes:
                    1) Les caractères accentués passent mal sur mes pages: Image utilisateur
                    2) Ma requête ne fait plus la différence entre "zenseil" et "zénseil"
                    (Quand je vérifie si il existe déjà une entrée avec "zénseil" comme pseudo, il considère que c'est le cas car il y a déjà une entrée avec "zenseil" comme pseudo dans ma table...)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      28 novembre 2011 à 15:29:48

                      1/ Tu dois remodifier tes caractères accentués dans ta page php et sauvegarder.
                      2/ Je n'en ai aucune idée :)
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Ca ne marche pas, ça ne veut rien dire ! Qu'est ce qui ne marche pas ?
                        28 novembre 2011 à 15:40:21

                        Merci Rencoco, problème n°1 résolu :)

                        Reste toujours le problème n°2, qui n'est pas bien grave.
                        Cependant, si quelqu'un a une idée, je suis preneur.
                        PS: ce problème n'a pas lieu en local
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Problème de requête avec caractères accentués

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown