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 :

champ qui crée liste de mots (champ dynamique) [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut champ qui crée liste de mots (champ dynamique)
    bonjour, je voudrai que à partir de la saisie de quelques lettres dans un champ, une liste de noms appaisse et permette à l'uitlisateur de sélectionné un nom. Mais j'ai fais plusieurs tests, cela ne réagit pas. Commen faire? Merci.

    Voici le champ:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <tr> 
                <td>Déclarant</td>
                <td> <input type="text" onKeyDown="RempliChamp()"  id="declarant"  name="declarant" value=""></td>
              </tr>
    Voici la fonction RempliChamp dans javascript:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function RempliChamp() {
    document.form1.declarant.value= <?php
    									do {  
    				     					echo $row_rsdecl['Nom']; 
    									   } 
    									while ($row_rsdecl = mysql_fetch_assoc($rsdecl));
     			     				?>
    		alert("Ma valeur". $row_rsdecl['Nom']);
     
    }
    VOici la requete dand php:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query_rsdecl = "SELECT * FROM declarants where Nom like '%".$declarant."%' ORDER BY Nom ASC";

  2. #2
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Ca sent plus le AJAX. Voila la fonction javascript qui va envoyer en direct le traitement de la requête PHP:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    function RempliChamp() {
       /* Création de l'instance XMLHTTP (ne pas modifier)  */
       if (window.XMLHttpRequest) 
          http_request = new XMLHttpRequest();   
       else if (window.ActiveXObject)
          http_request = new ActiveXObject("Microsoft.XMLHTTP");   
       else {
          alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");   
          return false;   
       }  
     
       if (!http_request) {
           alert('Abandon :( Impossible de créer une instance XMLHTTP');
           return false;
       }
     
       /* Récupération de la valeur du champ */
       data = "lettre=" + document.getElementById("declarant").value;    
       /* Fichier de requête */
       http_request.open("POST", "requete.php", true);
       /* Traitement des résultats */
       http_request.onreadystatechange = function() { 
          if (http_request.readyState == 4) {
             tmp = http_request.responseText;
             alert(tmp);
          }
       }
     
       /* Lancement de la requête (ne pas modifier)  */
       http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  
       http_request.send(data);
    }
    C'est plutot simple: je récupère la contenance du champ, je l'envois au fichier requête.php pour executer la requête MySQL. Le fichier requete.php ne doit contenir que le code suivant, puisque par la suite je fais un alert de ce que affiche la page (la liste des noms):

    <?php

    &#160;&#160;&#160;
    // Connection à la base de donnée
    &#160;&#160;&#160;// Requête
    &#160;&#160;&#160;// le_nom est à remplacer selon ta table
    &#160;&#160;&#160;
    $query_rsdecl = "SELECT le_nom FROM declarants WHERE Nom LIKE '%".$_POST&#91;'lettre']."%' ORDER BY Nom ASC";
    &#160;&#160;&#160;while(list(
    $nom) = mysql_fetch_array($query_rsdec1)) {
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo
    $nom."\n";
    &#160;&#160;&#160;}
    &#160;&#160;&#160;
    &#160;&#160;&#160;
    ?>
    Colorez votre code PHP sur les forums grâce à Developpez.com

    Par contre je n'ai pas testé.

  3. #3
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    cela me renvoit le résultat dans une alerte, mais j'aimerai que ce soit dans le champ même.

  4. #4
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    j'aimerai avoir la possibilité de selectionné les éléménts

  5. #5
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Si c'est dans le champ même, au lieu de mettre un alert tu mets par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("Ton_Champ").value = tmp;
    Après, ça dépend le type de ton champ.

  6. #6
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    c'est à dire que il ya une liste avec des valeurs qui apparait et la personne peut sélectinner une valeur à l'intérieur

  7. #7
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Comme dans la Recherche de ce forum quand tu tappes un pseudo? Ou juste une liste déroulante?

  8. #8
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    c'est comme dans la recherche lorsque on tape un pseudo, c'est cela!

  9. #9
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    L'idée c'est d'avoir un div en position absolu et non visible auquel tu attribus un id. Apres la récupération des données dans le code javascript, au lieu du alert, tu remplis ce div avec la variable tmp, et tu l'affiche genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    document.getElementById("Le_Div").value = tmp;
    document.getElementById("Le_Div").style.display = 'block';
    Après, si tu veux que les noms soient cliquables, tu modifies mon code php pour faire un lien qui au OnClick cache le div et insere le mot dans le champ.

  10. #10
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    ben le div ne s'affiche pas!

    Voici son code dans la fonction RempliChamp()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    document.getElementById("Le_div").style.visibility="visible";
     document.getElementById("Le_div").value = tmp;
    document.getElementById("Le_div").style.display = "block";
    voici le div:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div id="Le_div" style=" position:absolute; visibility:hidden; "  ></div>

  11. #11
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    je n'arrive pas à faire l'affichage dans le div.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 102
    Points : 120
    Points
    120
    Par défaut
    Salut, si j'ai bien saisi votre demarche, il me semble que c'est la propriété innerHTML du div qu'il faut affecter du responseText de la requete HTTP.

    Il faudrait tenter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    document.getElementById("Le_div").style.visibility="visible";
    document.getElementById("Le_div").innerHTML = tmp;
    document.getElementById("Le_div").style.display = "block";
    il n'y a pas de sotte existence

  13. #13
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    j'ai pu afficher, seulement l'erreur ci-contre persiste:
    ma requete renvoit une erreur quand le champ declarant est vide ou on a rien saisit dans ce dernier. Ce champ declarant, c'est le champ dynamique. Je pensais qu'en le rendant dynamique, lorsqu'on valide le formulaire, sans le remplir au préalable, la requete ne me renverrait plus:
    Array ( [jour] => [heure] => [NumNat] => [NumClient] => [declarant] => [iddeclarant] => [description] => [envoi] => Valider [MM_insert] => form1 ) Erreur de syntaxe près de 'LIMIT 0, 2' à la ligne 1



  14. #14
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    Ca pourra peut être servir à un autre membre en recherche

    j'ai plutot utilisé ce lien:


    qui marche bien d'ailleurs chez moi . (avec accès à la bd)

  15. #15
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/08/2014, 18h14
  2. Champs alphanumériques et liste de mots
    Par sasmedit dans le forum SAS Base
    Réponses: 1
    Dernier message: 31/10/2013, 15h24
  3. Réponses: 5
    Dernier message: 07/05/2007, 08h16
  4. Réponses: 2
    Dernier message: 11/08/2006, 11h11
  5. Champs de texte qui affiche liste choix ?
    Par chakib.jlijel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/03/2006, 08h39

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