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 :

Remplir des champs suite à une autocomplétion


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 17
    Points
    17
    Par défaut Remplir des champs suite à une autocomplétion
    Bonjour,

    Je suis en train de réaliser mon premier formulaire PHP. Il s'agit d'un formulaire permettant à des propriétaires d'enregistrer les dates d'occupations de leurs logements : demo

    Dans ce formulaire, j'ai réalisé une autocompletion sur le premier champs "logement" permettant de récupérer les logements insérés précédemment en base de données. Pour cela, j'ai utilisé le widget jquery.

    La prochaine étape consiste à récupérer les données du logement sélectionné dans le champ de l'autocompletion et de les ajouter dans les champs correspondants (adresse, cp, ville, propriétaire...). Mais je colle sur ce point...

    J'ai vue qu'il existait une option "select" sur la fonction "autocomplete" permettant d'exécuter une action à la sélection :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //Autocompletion logement
    $('#logement').autocomplete({
    	source : 'liste.php',
    	autoFocus: true,
    	select : function( event, ui ){
        		$( "#adresse" ).val( ui.item.value );
    	}
    });

    Code de "liste.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
    <?php
    include ('config.inc.php');
    try {
        $bdd = new PDO($hote, $user, $password);
    }
    catch (Exception $e){
        die('Erreur : ' . $e->getMessage());
    }
    $term = $_GET['term'];
    $requete = $bdd->prepare('SELECT * FROM logement WHERE nom LIKE :term'); // j'effectue ma requête SQL grâce au mot-clé LIKE
    $requete->execute(array('term' => '%'.$term.'%'));
    //STOCKAGE DES DONNEES
    $array = array(); // on créé le tableau
    while($donnee = $requete->fetch()) // on effectue une boucle pour obtenir les données{
        array_push($array, $donnee['nom']); // et on ajoute celles-ci à notre tableau
    }
    echo json_encode($array); // il n'y a plus qu'à convertir en JSON
    ?>


    Le soucis c'est que je ne sais pas comment faire le lien entre mon fichier JSON "liste.php" regroupant le nom de tous mes logements avec la fonction que j'applique sur le select.


    Quelqu'un pourrait m'aider afin d'avancer sur ce point ?

    Merci

  2. #2
    Membre confirmé
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Points : 549
    Points
    549
    Billets dans le blog
    1
    Par défaut
    Après avoir lu la documentation de l'Autocomplete jQuery il semblerait que ça ne soit pas possible de le réaliser directement avec ta source. En effet elle doit obligatoirement être de forme:

    - Tableau de string [ "valeur1", "valeur2", "..." ]
    - Tableau d'objet [ { label: "label1", value: "valeur1" }, { label: "label2", value: "valeur2" }, { label: "...", value: "..." } ]
    Et tu ne peux donc pas étendre le tableau d'objet avec plus de clé qu'il n'en faut.

    Tu as deux options soit tu utilises une autre solution que jQuery Autocomplete comme Bootstrap Typeahead ou alors tu récupères en JS un tableau d'objet te permettant de récupérer l'ensemble des valeurs associées après comparaison des values
    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
     
    //Récupération des données via AJAX ou au chargement de la page (si page PHP)
    var MyList;
     
    //Autocompletion logement
    $('#logement').autocomplete({
    	source : 'liste.php',
    	autoFocus: true,
    	select : function( event, ui ){
        		$( "#adresse" ).val( ui.item.value );
    		for( var a in MyList ) {
    			if( MyList[a].value === ui.item.value ) {
    				$( '#codepostal' ).val( MyList[a].codepostal )
    				$( '#ville' ).val( MyList[a].ville )
    				$( '#proprietaire' ).val( MyList[a].proprietaire )
    			}
    		}
    	}
    });
    une petite astuce consisterais a nommer tes clés et tes champs de la même manière (si tu en as plein c'est appréciable ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for( var a in MyList ) {
    	if( MyList[a].value === ui.item.value ) {
    		$.each( MyList[a], function( key, val ) {
    			$( '#'+key ).val( val )
    		} );
    	}
    }
    Je préfère fermer ma gueule et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.

  3. #3
    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 : 73
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par Darkaurora Voir le message
    Après avoir lu la documentation de l'Autocomplete jQuery il semblerait que ça ne soit pas possible de le réaliser directement avec ta source. En effet elle doit obligatoirement être de forme:

    - Tableau de string [ "valeur1", "valeur2", "..." ]
    - Tableau d'objet [ { label: "label1", value: "valeur1" }, { label: "label2", value: "valeur2" }, { label: "...", value: "..." } ]
    Et tu ne peux donc pas étendre le tableau d'objet avec plus de clé qu'il n'en faut.
    Bonjour

    Il doit y avoir au minimum les propriétés "label" et "value". Mais il peut y en avoir d'autres, voir le code source de cette démonstration.

    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.)

  4. #4
    Membre confirmé
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Points : 549
    Points
    549
    Billets dans le blog
    1
    Par défaut
    Autant pour moi, donc pour répondre plus correctement a Jibego, il te suffiras de passer plus d'informations que le simple $donnee['nom'] de ton script php et tu n'auras qu'a faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //Autocompletion logement
    $('#logement').autocomplete({
    	source : 'liste.php',
    	autoFocus: true,
    	select : function( event, ui ){
        		$( "#adresse" ).val( ui.item.value );
    		$( '#codepostal' ).val( ui.item.codepostal )
    		$( '#ville' ).val( ui.item.ville)
    		$( '#proprietaire' ).val( ui.item.proprietaire )
    	}
    });
    C'est bon cette fois ci Daniel ?
    Je préfère fermer ma gueule et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.

  5. #5
    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 : 73
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par Darkaurora Voir le message
    C'est bon cette fois ci Daniel ?
    Bonsoir

    Je suppose que oui, je n'ai pas assez de temps libre pour tester toutes les questions et les réponses.

    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.)

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Merci pour vos réponses.

    Du coup, il faut que j'ajoute les autres données de ma table "logement" dans le tableau json de "liste.php" ou alors je créé une nouvelle variable dans mon code "script.js" où j'associe les données du logement sélectionné avec une nouvelle requète ?

  7. #7
    Membre confirmé
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Points : 549
    Points
    549
    Billets dans le blog
    1
    Par défaut
    Oui tu as juste a ajouter les données dans ton tableau JSON et ça sera tout bon
    Je préfère fermer ma gueule et passer pour un con que de l'ouvrir et ne laisser aucun doute à ce sujet.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 17
    Points
    17
    Par défaut
    Bonjour à tous,

    Merci pour votre aide, j'ai pu réussir à faire ce que je voulais.
    Maintenant, lorsque l'on sélectionne un logement par l'autocompletion dans le champ "logement", les infos associées dans la BDD s'ajoutent dans les autres champs.

    Vous pouvez essayer directement sur cette page : http://www.jibego.com/rrps/reservation.php
    Essayez en tapant "r" dans le champs "logement" et sélectionnez le logement "résidence test 36".

    J'ai encore quelques bug à régler mais j'arrive au bout !


    Concernant le code, voici le js de l'autocompletion du fichier "script.js" :
    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
    $(function() {
     
    	//Autocompletion logement
    	$('#logement').autocomplete({
    		source : 'liste.php',
    		autoFocus: true,
    		select : function( event, ui ){
        		$( "#adresse" ).val( ui.item.adresse);
    			$( '#npa' ).val( ui.item.npa );
    			$( '#ville' ).val( ui.item.ville);
    			$( '#nom' ).val( ui.item.nom );
    			$( '#prenom' ).val( ui.item.prenom );
    			$( '#email' ).val( ui.item.email );
    		}
    	});
     
     
     
    	//Calendrier
    	$.datepicker.setDefaults( $.datepicker.regional['fr'] );
    	var datepickers = $('.date').datepicker({
    		dateFormat: "yy-mm-dd",
    		onSelect: function(date){
    			var option = this.id == 'arrivee' ? 'minDate' : 'maxDate';
    			datepickers.not('#'+this.id).datepicker('option',option,date);
    		}
    	})
    });
    Et le code pour obtenir le tableau JSON dans le fichier "liste.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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?php
    include ('config.inc.php');
    try {
        $bdd = new PDO($hote, $user, $password);
    }
    catch (Exception $e)
    {
        die('Erreur : ' . $e->getMessage());
    }
     
    $term = $_GET['term'];
     
    $requete = $bdd->prepare('SELECT * FROM logement WHERE nom LIKE :term'); // j'effectue ma requête SQL grâce au mot-clé LIKE
    $requete->execute(array('term' => '%'.$term.'%'));
     
    $requete2 = $bdd->prepare('SELECT * FROM occupant WHERE proprietaire =\'1\' AND logement LIKE :term'); // j'effectue ma requête SQL grâce au mot-clé LIKE
    $requete2->execute(array('term' => '%'.$term.'%'));
     
    //STOCKAGE DES DONNEES
    $return_arr = array(); // on créé le tableau
     
    while($donnee = $requete->fetch()) // on effectue une boucle pour obtenir les données
    {
    	$row_array['value'] = $donnee['nom'];
        $row_array['adresse'] = $donnee['adresse'];
        $row_array['npa'] = $donnee['npa'];
        $row_array['ville'] = $donnee['ville'];
     
        array_push($return_arr,$row_array);
    }
     
    while($donnee2 = $requete2->fetch()) // on effectue une boucle pour obtenir les données
    {
    	$row_array['proprietaire'] = $donnee2['proprietaire'];
        $row_array['nom'] = $donnee2['nom'];
        $row_array['prenom'] = $donnee2['prenom'];
        $row_array['email'] = $donnee2['email'];
     
        array_push($return_arr,$row_array);
    }
     
    echo json_encode($return_arr); // il n'y a plus qu'à convertir en JSON
     
     
    ?>
    Si vous voyez des erreurs, merci de me le souligner.

    Bonn journée,

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/08/2014, 18h14
  2. Commande automatiques pour remplir des champs d'une table
    Par Agent_mure_blanche dans le forum Access
    Réponses: 1
    Dernier message: 22/09/2013, 16h47
  3. Réponses: 2
    Dernier message: 23/09/2009, 15h40
  4. [MySQL] remplir un tableau avec les noms des champs d'une table
    Par solidaritok dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2007, 13h47
  5. [MySQL] Supprimer les informations des champs dans une table (suite)
    Par snakejl dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 26/05/2006, 15h37

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