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

Langage PHP Discussion :

deux listes Autocompletion sur meme page


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut deux listes Autocompletion sur meme page
    bonjour,

    je vous soumet mon problème

    j'ai un formulaire avec deux listes en auto-complétion tiré du tutoriel trouvé sur developpez.com

    http://x-zolezzi.developpez.com/tuto...utocompletion/

    je l'ai un peu modifié pour que ça m'affiche dans le même select la ville et le département , ainsi qu'une deuxième liste pour l'arrivé ça fonctionne bien. je peux donc envoyer pour une insertion dans la table la ville de départ , le département de départ et la ville d'arrivé.

    les deux liste interroge la même table "commune"( id_commune , villes, departement )


    hors le script insert dans la table , systématiquement le département d'arrivé au lieu du département de départ.
    je pense que la valeur du département renvoyé est celle du dernier select envoyé par le formulaire..

    le formulaire

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <label for="ville">Ville de départ :*</label>
    <input id="ville1" name="vil_depart" type="text"   />
    <input type="hidden" id="departement" name="departement" value="" />
    <label for="ville">Ville de déstination :*</label>
    <input id="villes" name="vil_arrive" type="text"/>

    le js

    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
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    var cache = {};
    $(function ()
    {
    	$("#departement, #villes,#ville1").autocomplete({
    		source: function (request, response)
    		{
    			//Si la réponse est dans le cache
    			if (('FR' + '-' + request.term) in cache)
    			{
    				response($.map(cache['FR' + '-' + request.term], function (item)
    				{
    					return {
    						label: item.departement + " / " + item.villes,
    						value: function ()
    						{
    							if ($(this).attr('id') == 'departement')
    							{
    								$('#villes').val(item.villes);
    								return item.departement;
    							}
    							else
    							{
    								$('#departement').val(item.departement);
    								return item.villes;
    							}
    						}
    					}
    				}));
    			}
    			//Sinon -> Requete Ajax
    			else
    			{
    				var objData = {};
    				if ($(this.element).attr('id') == 'departement')
    				{
    					objData = { departement: request.term, pays: 'FR', maxRows: 10 };
    				}
    				else
    				{
    					objData = { villes: request.term, pays: 'FR', maxRows: 10 };
    				}
    				$.ajax({
    					url: "./autocomplete.php",
    					dataType: "json",
    					data: objData,
    					type: 'POST',
    					success: function (data)
    					{
    						//Ajout de reponse dans le cache
    						cache[('FR' + '-' + request.term)] = data;
    						response($.map(data, function (item)
    						{
    							return {
    								label:item.villes + " / " +item.departement ,
    								value: function ()
    								{
    									if ($(this).attr('id') == 'departement')
    									{
    										$('#villes').val(item.villes);
    										return item.departement;
    									}
    									else
    									{
    										$('#departement').val(item.departement);
    										return item.villes;
    									}
    								}
    							}
    						}));
    					}
    				});
    			}
    		},
    		minLength: 3,
    		delay: 600
    	});
    });

    le fichier autocomplete.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
    //Construction de la requete
    $strQuery = "SELECT villes,departement,id_commune  FROM communes WHERE ";
    if (isset($_POST["villes"]))
    {
        $strQuery .= "villes LIKE :villes ";
    }
    else
    {
        $strQuery .= "departement LIKE :departement AND id_commune LIKE :id_commune   ";
     
    }
     
     
    if (isset($_POST["maxRows"]))
    {
        $strQuery .= "LIMIT 0, :maxRows";
    }
    $query = $db->prepare($strQuery);
    if (isset($_POST["villes"]))
    {
        $value = $_POST["villes"]."%";
        $query->bindParam(":villes", $value, PDO::PARAM_STR);
    }
    else
    {
        $value = $_POST["id_commune"]."%";
        $query->bindParam(":id_commune", $value, PDO::PARAM_STR);
    }
     
    if (isset($_POST["maxRows"]))
    {
        $valueRows = intval($_POST["maxRows"]);
        $query->bindParam(":maxRows", $valueRows, PDO::PARAM_INT);
    }
     
    $query->execute();
     
    $list = $query->fetchAll(PDO::FETCH_CLASS, "AutoCompletionCPVille");;
     
    echo json_encode($list);
    et le fichier AutoCompletionCPVille.class.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    class AutoCompletionCPVille {
    	public $villes;
    	public $departement;
    	public $id_commune;
    }
    ?>
    merci pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    je comprend pas trop le code surtout que je ne vois qu'une seule fonction d'autocomplétion pour deux listes. mais ce ne serait pas ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    if ($(this).attr('id') == 'departement')//je comprend pas ce if
    {
        $('#villes').val(item.villes);
        $('#departement').val(item.departement);
        return item.departement;
    }
    else
    {
        $('#departement').val(item.departement);
        return item.villes;
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    bonjour,

    voila la réponse que l'on trouve dans le tuto

    " il faut créer une variable que l'on nommera cache. Puis à chaque succès d'une requête Ajax, nous ajouterons dans notre variable, en clé la requête saisie et en valeur la valeur JSON de retour.

    Ensuite à chaque requête, nous regarderons s'il la requête saisie existe en clé de notre variable cache grâce au mot clé in. Si c'est le cas alors nous utiliserons la valeur du cache pour construire le tableau d'objet pour le plug-in d'autocomplétion. Et si elle n'est pas présente, nous ferons tout simplement la requête Ajax habituelle, qui je le rappelle sera enregistrée dans la variable cache."
    le problème doit venir de ce que j'utilise une seule fonction d'autocompletion pour deux listes.

    ça fonctionne bien quant on teste le formulaire ,mais il envoie en variable la valeur de la seconde liste ( ville d'arrivé ) concernant le département.

    si je supprime cette seconde liste du form ,il m'envoie bien le département de la première liste ( ville de départ )

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Points : 1 313
    Points
    1 313
    Par défaut
    ceci dit, si une ville a un département, tu peux récupérer son département lors du traitement de ton formulaire, et donc pas besoin de le transmettre en input hidden

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    pour ça je devrais transmettre id_commune non ?

    il faudrait récupèrer dans le traitement du js de l'autocompletion l'id-commune , mais je risque de me retrouver avec le même problème , une fonction pour deux listes


  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    j'ai mis un autre script d'autocompletion ( jquery )
    comme ça j'ai une fonction pour chaque input

    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
    <form action='' method='post'>
    		<p><label>Country:</label><input type='text' name='villedepart' value='' class='auto'></p>
     
            <p><label>Country:</label><input type='text' name='villearrive' value='' class='auto'></p>
     
            <input name="" type="submit">
     
    	</form>
     
     
    <script type="text/javascript">
    $(function() {
     
     
    	$(".auto").autocomplete({
    		source: "search.php",
    		minLength: 1
    	});				
     
    });
    </script>
     
    <script type="text/javascript">
    $(function() {
     
     
    	$(".auto").autocomplete({
    		source: "search.php",
    		minLength: 1
    	});				
     
    });
    </script>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/ui/1.10.1/jquery-ui.min.js"></script>
    maintenant pour regler mon probleme je dois passer par un regex

    par exemple mes deux listes affichent ceci

    Ville de depart : PRESLES / Isère
    et
    Destination = PONT-FARCY / Calvados

    ( j'ai besoin dans la liste qui s'affiche d'avoir la ville et le département )

    et le formulaire envoie ceci

    toto.php?villedepart=PRESLES+%2F+Isère&villearrive=PONT-FARCY+%2F+Calvados

    j'ai besoin maintenant dans ma page d'insertion de récupérer ces deux variable en les traitant avec un regex

    ainsi
    villedepart=PRESLES+%2F+Isère
    doit devenir
    villedepart=PRESLES&departementdepart=Isère

    et
    villearrive=PONT-FARCY+%2F+Calvados
    doit devenir
    villearrive=PONT-FARCY&departementarrive=Calvados

    bref dispatcher ce qui arrive pour avoir dans ma page d'insertion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $_POST["villedepart"]
    $_POST["departementdepart"]
    $_POST["villearrive"]
    $_POST["departementarrive"]
    si une cador des expressions régulières peut m'aider merci

    sinon je poserais ma question à la rubrique regex du site

    merci

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    j'ai posé ma question dans la partie regex du site et il fallait faire un explode dans la page qui traite l’insertion des données .

    http://www.developpez.net/forums/d13...le-formulaire/

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

Discussions similaires

  1. deux ou trois colonne sur meme page
    Par tunisien13 dans le forum IHM
    Réponses: 4
    Dernier message: 06/09/2012, 20h06
  2. Deux listes à action sur la même page
    Par CinePhil dans le forum Langage
    Réponses: 1
    Dernier message: 19/09/2011, 14h58
  3. POST sur meme page et refresh
    Par progamer54 dans le forum Langage
    Réponses: 1
    Dernier message: 07/11/2007, 12h29
  4. Deux menu en css sur meme page.
    Par petitberru dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 23/02/2007, 15h19
  5. Réponses: 13
    Dernier message: 23/02/2006, 12h42

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