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

jQuery Discussion :

Encodage dans un champ type input


Sujet :

jQuery

Vue hybride

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Par défaut Encodage dans un champ type input
    Bonjour, tous d'abord je tiens a remercier la ou les personnes qui m'aideront.
    Je suis sur un gros projet et j'ai un soucis avec un script d'autocompletion.

    J'ai trouvé un bon de code que j'ai adapté a ma sauce pour faire de l'autocomplétion en javascript, php et mysql.

    Le script est assez simple, il va cherche dans une table et affiche des valeurs sous le champ input.

    les valeurs affichée apparaisse parfaitement mais lorsqu'on la sélection et qu'elle s'affiche dans le champs pour lancer la requet, la valeur s'affiche avec ces $eacute a la place des accent, des ' a la place des '

    J'ai essayé de transformer ma valeur php par un nl2br ou un html_entity_decode mais ca ne marche pas. A mon avis le problèem est dans le script javascript et la, je ne maitrise pas assez !

    Je vous met le code ci-dessous.

    AFFICHAGE DU CHAMPS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $(document).ready(function() {
    	$('#langages').autocomplete('autocompletion/query.php');
    });
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" NAME="critereRecherche" id="langages" class="search"  placeholder="Votre recherche..." />

    FICHIER QUERY.PHP QUI FAIT LA REQUET SQL
    --------------------------------------------

    Code php : 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
    20
    21
    <?php
    // si on reçoit une donnée
    if(isset($_GET['q'])) {
        $q = htmlentities($_GET['q']); // protection
     
        // connexion à la base de données
        try {
            $bdd = new PDO('mysql:host=localhost;dbname=myBase', 'test', 'test');
        } catch(Exception $e) {
            exit('Impossible de se connecter à la base de données.');
        }
        // écriture de la requête
        $requete = "SELECT SHOP_NOM FROM shop WHERE SHOP_NOM LIKE '". $q ."%' LIMIT 0, 10";
        // exécution de la requête
        $resultat = $bdd->query($requete) or die(print_r($bdd->errorInfo()));
        // affichage des résultats
        while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
            echo $donnees['SHOP_NOM'] ."\n";
        }
    }
    ?>

    Fichier javascript je le met en pieces jointes car il fait quasi 1000 lignes !

    Merci infiniment pour votre aide.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonjour

    Je pense qu'il s'agit d'un simple problème d'encodage, tous vos fichiers et sources de données ne sont pas en UTF-8.

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Par défaut
    Merci pour votre réponse.

    Alors concernant l'encodage des pages. J'ai tenté de forcé avec

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

    Mais rien ne change, cependant le server est configuré en ISO Latin 1 (ISO-8859-1).

    Quand aux champ dans la base Mysql il s'agit de latin1_swedish_ci

    Y a t'il des incohérence dans tout cela ? Comment corrigeriez-vous cela ?

    Personnellement je pense plus qu'il faut faire un moment donné une conversion de caractère.
    Par exemple, dans le php si au moment de renvoyé la chaine de caractère je lui ajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo htmlentities($donnees['SHOP_NOM']) ."\n";
    Alors le resultat de ma recherche aura les accents converti en &eacute

    Donc si on peux faire l'inverse de htmlentites mais probablement dans le javascript au moment ou l'ont affiche la valeur dans l'input, ca devrai marcher mais je ne trouve pas ou ni comment le faire !

    Merci

  4. #4
    Membre expérimenté Avatar de elfamine
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 113
    Par défaut
    Moi personnellement j'utiliserais jQuery ui autocomplete : link


    Code php : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    header('Content-type: application/json');
    // si on reçoit une donnée
    if(isset($_GET['q'])) {
        $q = htmlentities($_GET['q']); // protection
     
        // connexion à la base de données
        try {
            $bdd = new PDO('mysql:host=localhost;dbname=myBase', 'test', 'test');
        } catch(Exception $e) {
            exit('Impossible de se connecter à la base de données.');
        }
     
        // exécution de la requête
    try { 
        $resultat = $bdd->query("SELECT SHOP_NOM FROM shop WHERE SHOP_NOM LIKE :q LIMIT 0, 10");
     $resultat->bindValue(':q', $q, PDO::PARAM_STR);
     $resultat->execute();
     
    } catch(PDOException $e) {  
      print_r($bdd->errorInfo());
    } 
        // affichage des résultats
        while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
            $list[]= $donnees['SHOP_NOM'];
        }
    echo json_encode($list);
    }
    ?>
    et je récupere le résultat avec ajax
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    $.ajax({
      type: 'GET',
      url: 'autocompletion/query.php',
    data: {   q: q
          },
    success:function(list){
      $('#langages').autocomplete({
        source: list
      });
    },
    error:function(){
    // msg d'erreur
    }
    });

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Par défaut
    J'ai jetter un oeil a jQuery ui autocomplete mais je n'ai pas reussi a l'adapter a un appel de base Mysql.

    Je comprend pas bien l'exemple que tu me donne, est-ce tu aurai un exemple fonctionnel stp ? Désolé mais Ajax c'est tout frais pour moi... 24h que je m'y interesse et je comprend pas tout !

    Merci beaucoup

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Je suis de l'avis de Daniel ...
    jette plutot un oeil sur ce lien http://j-willette.developpez.com/tut...-site-en-utf8/

    si ton serveur ne retourne pas de l'utf-8 que ce soit à cause de la base, ou des fichiers, et si tu ne peux pas tout mettre ne utf-8, regarde alors du coté des fonctions de conversion iconv() utf8_encode ou utf8-decode ou mb_convert coté serveur...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre expérimenté Avatar de elfamine
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 113
    Par défaut
    Il y a l'exemple donné sur le site de jQuery UI dans la partie "Remote datasource" qui semble convenir le plus à tes besoins... mais il y a des choses qui ne sont pas clair pour moi non plus. Ceci dit je vais devoir l'adapter moi meme à un projet sur lequel je travail actuellement. Je n'ai pas énormément de mot clé pour le moment mais ca risque de changer... donc je mettrais mon code commenté une fois que j'aurais réussis à le faire fonctionner.

    mais le principe est plus tot simple à priori

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $( "#birds" ).autocomplete({
          source: "search.php",
    //minLenght pour dire qu'il ne va faire une requete qu'au 2eme caractère saisi
          minLength: 2,
    //bon apparemment ca c'est un événement pour lui dire quoi faire de l'élément choisi
          select: function( event, ui ) {
            log( ui.item ?
              "Selected: " + ui.item.value + " aka " + ui.item.id :
              "Nothing selected, input was " + this.value );
          }

    reste plus qu'a voir ce qu'il y a comme code dans le fameux search.php

    PS : J'ai proposé jQuery UI parce selon ce lien jQuery Autocomplete plugin 1.1 est déconseillé

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2013
    Messages : 6
    Par défaut
    Bonjour, alors j'ai passé le server en UTF-8 ainsi que toutes les pages.
    Parcontre aucun changement.

    Est-ce qu'il y aurai une adaptation a faire dans le php ?

    Ce qui me surprend un peu c'est que lorsqu'on affiche une variable "utf-8" sur une page encodée en ISO a la place des accents on a des losange noir avec un ? or la j'ai des &eacute, &eagrave etc...

    Ca me rend dingue ce problème !

  9. #9
    Membre expérimenté Avatar de elfamine
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2011
    Messages : 113
    Par défaut
    En espérant que ca t'aide :

    Code html : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <!doctype html>
     
    <html lang="fr">
    <head>
      <meta charset="utf-8" />
      <title>jQuery UI Autocomplete - Remote datasource</title>
      <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
      <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
      <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
     
      <script>
      $(function() {
        $( "#langages" ).autocomplete({
          source: "search.php",
          minLength: 2,
          select: function( event, ui ) {
        //TODO
          }
        });
      });
      </script>
    </head>
    <body>
     
    <input type="text" NAME="critereRecherche" id="langages" class="search"  placeholder="Votre recherche..." />
     
    </body>
    </html>

    search.php
    Code php : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    <?php
    header('Content-type: application/json');
    // si on reçoit une donnée
    if(isset($_GET['term'])) {
        $q = htmlentities($_GET['term']); // protection
     
        // connexion à la base de données
        try {
            $bdd = new PDO('mysql:host=localhost;dbname=myBase', 'test', 'test');
        } catch(Exception $e) {
            exit('Impossible de se connecter à la base de données.');
        }
     
        // exécution de la requête
    try { 
        $resultat = $bdd->query("SELECT SHOP_NOM FROM shop WHERE SHOP_NOM LIKE :q LIMIT 0, 10");
     $resultat->bindValue(':q', $q, PDO::PARAM_STR);
     $resultat->execute();
     
    } catch(PDOException $e) {  
      print_r($bdd->errorInfo());
    } 
        // affichage des résultats
        while($donnees = $resultat->fetch(PDO::FETCH_ASSOC)) {
            $list[]= $donnees['SHOP_NOM'];
        }
    echo json_encode($list);
    }

Discussions similaires

  1. comment créer une date dans un champ input de type text
    Par le maire dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 05/06/2014, 11h58
  2. import de données texte dans un champ type date
    Par n.amavic dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 12/04/2012, 21h38
  3. rajouter des - dans mon champs input type texte "telephone"
    Par kaking dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 17/07/2009, 09h49
  4. trouver un mot dans un champs type rs(info)
    Par delavega dans le forum ASP
    Réponses: 4
    Dernier message: 14/11/2008, 15h54
  5. empecher saisie de caractères dans champ de type input text
    Par mussara dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/06/2006, 14h09

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