Designed by Derf !
46 en ligne   Boutique | Sites | Bar | Forum | PhpBB | Actu | Glossaire | Codes | Tips | Liens | Livres | Lettre  


 Recherche

 NewsLetter






   

Listes dépendantes : avec ou sans XMLHttpRequest (1/11)

Les délires «Ajax or not Ajax»





DB77
Comme toujours, c'est à la suite d'un coup de pouce que je me suis décidé à faire ce tuto. Merci à sylkan qui est à l'origine de cette demande.
Le problème posé est d'actualiser une liste déroulante en fonction de la précédente.
Bien sûr cette cascade de listes déroulantes peut s'étendre à l'infini (j'exagère).
Toutefois deux techniques peuvent être utilisées.
Soit par XMLHTTPRequest, soit par chargement dans des tableaux de toutes nos listes.

Nous allons essayer de voir ces deux techniques pas à pas, en augmentant le nombre de listes dépendantes, que ce soit en ASP ou en PHP.


Préambule - Les bases de données - Une liste avec XMLHttpRequest - Une liste sans XMLHttpRequest - Deux listes avec XMLHtpRequest - Deux listes sans XMLHtpRequest - Trois listes avec XMLHttpRequest - Trois listes sans XMLHtpRequest - Et en paramétrant - Sans l'option "Tout" - Bonus : découper par lettre


Préambule

 Références utiles 
Vous pourrez consulter les nombreux liens que j'ai récoltés :
le B.A.Ba sur les listes
le tuto de Didier sur Ajax
le bout de code de Vonscott
le bout de code de salem
le tuto de jreaux62
Et j'en ai sûrement oublié d'autres que je prie de bien vouloir m'excuser...

Le bout de code «D'un select à l'autre» pourra peut-être vous servir également.

 Ajax ? XMLHttpRequest ? C'est quoi ce truc ? 
Si, après avoir lu les articles cités en référence ci-dessus, vous n'avez toujours rien compris, alors, essayons de parler simplement.
Ce système, au nom compliqué à retenir, permet de modifier une page sans avoir à la recréer complétement, comme c'est souvent le cas d'ailleurs sur de nombreux sites.
En effet, on va pouvoir, par exemple, actualiser une partie de la page uniquement, en allant chercher les informations dans une base de données et en actualisant l'objet concerné sur la page.
Comme ceci, par exemple (tester) :

En changeant la sélection dans la liste déroulante, on actualise les données relatives au client sélectionné sans recharger l'intégralité de la page.

 Bases de travail 
Je suis parti des exemples des listes (B.A.Ba ci-dessus) et du tuto de Didier sur Ajax que j'ai retravaillés à mon goût donc ne vous étonnez pas de retrouver les mêmes noms de champs, les mêmes structures, etc.
J'ai supprimé le superflu et ajouté des améliorations.
J'ai adapté pour que ça fonctionne, sur mon PC, sous FireFox 3 et sous IE 7 mais n'ai pas testé avec d'autres navigateurs.
Dans le cas d'Ajax, j'ai ajouté, dans les listes déroulantes, la possibilité de choisir «Tout».
Ainsi, en choisissant «France» comme pays, «Ile de France» comme région, «Tout» comme département, on obtiendra, dans la dernière liste déroulante, l'ensemble des villes d'Ile de France.
Toutefois, il faut bien comprendre que, malgré tout ça, chacun pourra adapter ces codes à sa propre «sauce».
Le plus important étant de comprendre le principe pour pouvoir le reproduire ensuite.

Exemple de l'option "Tout" ajoutée dans le mode "avec XMLHttpRequest" :
(Attention, seulement 5 ou 6 villes ont été saisies pour tester les modules)

TESTEZ la démo "sans XMLHttpRequest" (Pays, Régions, Départements) :
Sélectionnez 
Pays :
Région :
Département :
Identifiants :    

 Principe 
Pour mettre en pratique ce tuto, j'ai choisi de reprendre l'exemple pour lequel on a sollicité mon aide (n'est-ce pas sylkan ?).
Ainsi, nous allons sélectionner des pays ayant des régions ayant des départements ayant des villes...
On pourrait bien sûr continuer en ajoutant ...ayant des rues ayant des maisons ayant des habitants...
Mais une fois le principe compris pour un, puis réussi à être implémenté pour deux, puis trois, je ne pense qu'il soit nécessaire de le rendre infini ;)

Lorsque nous utiliserons Ajax et l'objet XMLHTTPRequest, nous effectuerons des requêtes en accédant à notre base de données. Le module effectuant cette requête nous retournera du code JavaScript que nous exécuterons.
Dans ce cas de figure, nous pourrons donc sélectionner des enregistrements en fonction de critères et notamment un identifiant.

Par contre, dans le cas du traitement purement interne, nous utiliserons des tableaux chargés en mémoire.
Dans ce deuxième cas, il faudra trouver une astuce pour que le pays 11 et la région 2 ne nous donne pas le pays 1 et la région 12.
Le principe utilisé pour distinguer ces éléments sera de constituer une clef unique en mettant bout à bout les identifiants mais en les séparant avec un caractère. Dans l'exemple ci-dessus, nous aurons «1 12» et non «11 2».
Nous effectuerons alors une modification de notre liste directement à partir de l'un de ces tableaux chargés en mémoire après avoir recherché l'identifiant qui nous intéresse.

Mais passons maintenant dans le vif du sujet...


Pour pouvoir écrire dans ce forum, identifiez-vous !

 Lire  17/05/09 14:05 de zouzou95670
Bonjour DB, Mais oui, le action= !!! Je me doutais...
  • 18/05/09 09:08 de DB77 <§img=http://www.asp-php.net/espace/aurelie...
  • 18/05/09 09:16 de DB77 Ah, tu dois parler de ma page de présentati...
  •  Lire  16/05/09 06:58 de zouzou95670
    Bonjour, Je suis certainement passé trop rapidemen...
  • 16/05/09 07:40 de DB77 As-tu fait progressivement comme le tuto ? ...
  •  Lire  25/02/09 18:05 de BEN45
    y a t'il un tutorial de ça ????? Si, après avoir l...
  • 25/02/09 19:14 de DB77 Bin lis les articles cités en référence ;)
  • 25/02/09 21:15 de BEN45 Je ne trouve pas en rapport avec mon prob...
  • 26/02/09 08:41 de DB77 Le principe : Il faut générer du javascrip...
  •  Lire  23/10/08 17:00 de clubdom
    Bonjour. Super tuto. J'ai bien compris le fonctionnem...
  • 23/10/08 19:45 de DB77 Salut clubdom, La variante possible c'est ...
  • 23/10/08 19:48 de DB77 En tout cas tu as raison en ce qui concerne...
  • 24/10/08 09:20 de DB77 Bonjour clubdom, En réfléchissant à ta que...
  • 24/10/08 10:13 de clubdom Bonjour DB77 et merci pour ta réponse ...
  • 24/10/08 10:25 de DB77 Ok clubdom, et merci car cela m'a permis de...
  • 24/10/08 10:32 de DB77 Bon, allez :) Dans "select3.php" : $id=@$...
  • 24/10/08 10:38 de DB77 Ah, j'ai oublié un "== Tout ==" :( Dans "l...
  • 24/10/08 11:09 de DB77 J'ai ajouté une page "Sans l'option Tout". ...
  • 24/10/08 11:30 de clubdom Houlàlà, un vrai cadeau ! pas le temps...
  • 24/10/08 12:46 de clubdom Je confime, ça me plait nickel, et sup...
  •  Lire  17/10/08 18:16 de JPierre
    Hello Denis Super balèze comme d'hab . A + ;)
  • 17/10/08 19:00 de jreaux62 Denis, tu es un DIEU !! Tout au moin...
  • 17/10/08 22:14 de DB77 Merci les gars, et surtout, n'hésitez pas à...
  • 18/10/08 12:18 de DB77 Allez, il est temps d'actualiser ma photo ;...
  • 18/10/08 14:50 de Didier Ah bah oui, elle est bien mieux cette ph...
  • 18/10/08 16:51 de jreaux62 Denis, c'est une photo du calendrier ...
  • 18/10/08 17:04 de DB77 En plus, je crois même que l'ancienne était...
  • 18/10/08 17:04 de DB77 @Jérôme, non, Didier pourra confirmer que c...
  • 18/10/08 17:13 de Lumineuse Salut DB77, Je cherchais l'ancienn...
  • 18/10/08 19:42 de DB77 L'ancienne photo existe toujours, il suffit...
  • 19/10/08 15:52 de JPierre Hello je confirme c'est bien Denis , ...
  • 19/10/08 16:07 de DB77 Merci JPierre, mais pas dans les articulati...
  • 22/10/08 20:28 de Bisou Je savais pas que Denis c'était Didier De...
  • 23/10/08 08:59 de DB77 Eh bien Bisou, il y avait longtemps :) Mai...
  • 23/10/08 10:07 de Bisou Oui ça fait un bail même. Mais tu sais, ...
  • 23/10/08 16:15 de DB77 Bin dis donc, il se serait bien arrangé alo...
  • 27/10/08 16:16 de Didier Je viens de tester la version une liste ...
  • 28/10/08 10:15 de DB77 Bin ça sert à ça ;) Content de t'avoir aid...
  •   v1.3p © ASP-PHP.net 2002  

    DB77 le 04/03/2009 (18 923 hits)
    Didier Testez gratuitement la plateforme web de Windows Server 2008 !
    Gagnez un voyage aux Etats-Unis pour la MS Project Conference !
    Au fil des news  
    Adobe - Adobe annonce MAX 2009 !
    [MAJ] Dreamweaver MX + Php + MySql - Les formulaires - partie 3
    Mise à jour du code, par DB 77, affichage du code erreur, dans la page erreur.php, traduction des ...
    PHP - News avec photo - Système de gestion - affichage
    Gestion - Administration - Affichage d'une "News", "Actualité", "Info", ... avec : - mise en forme ...
    Dreamweaver Php Mysql - Région répétée imbriquée
    Je rebondis, sur un post du forum, pour vous montrer comment obtenir grâce à l'extension Simulated ...
    Gérer les bases de contenu SharePoint - Gérer la croissance du volume des données
    Dans le cadre de la gestion quotidienne de ferme SharePoint, il existe une partie qu'il faut ...
    PHP - Le Coach PHP sur Visual Studio
    .NET - Ecrire une application .NET utilisant MySQL
    PHP - Utilisation de PHP dans le monde Microsoft
    Magazines - Le n° 119 de Programmez est disponible
    Adobe - Adobe annonce Photoshop Marketplace
    [MAJ] Tutoriel AJAX simple - En avant vers le WEB2.0
    Mis à jour le 20/04/2009
    Captcha «maison» sans extension - Et en plus, c'est gratuit ;)
    Un ami m'a demandé de l'aide ce matin pour insérer un captcha dans un formulaire pour son site ...
    Dreamweaver CS4 - Photoshop CS4 - Alliance parfaite pour la gestion des images
    Pour changer un peu des pages de code, je vous propose de voir ensemble, la fonctionnalité très ...
    JavaScript - Calcul automatique d'une facture
    Amélioration du Search MOSS: Manipulation XSL - Utilisation du XSL dans l'affichage des résultats
    Parmi tous les articles sur l'amélioration du moteur de recherche de Microsoft Office SharePoint ...
    Outils - Editeur d'icônes IcoFX
    Magazines - Le n°118 de Programmez est disponible
    JavaScript - Imprimer une autre page que celle en cours
    CSS - div pour imiter frame (Bandeau/Menu FIXES)
    [MAJ] [PHP] Un calendrier très complet -
    ajout des événements au calendrier
    PowerShell - Winforms pour l'aide des commandes GET PowerShell
    Adobe - Adobe Photoshop Lightroom 2 est offert ....
    Amélioration du Search MOSS: synonyme et Best Bet - La gestion des synonymes dans MOSS Search
    Le moteur de recherche de MOSS permet la configuration d'une liste de synonymes. Nous verrons donc ...
    AJAX - récup champs formulaires pour POST en AJAX
    PowerShell - Un windows Forms pour SharePoint en PowerShell
    Sondage associatif (compatibilité) - Qui va bien avec qui ?
    Cette fois, c'est un petit sondage que je vous propose. Il pourra bien sûr être adaptée à vos ...
    ASP - Hashage MD5 (cryptage irréversible)
    Adobe - 80% de réduction sur les versions Adobe Creative
    CSharp - Interroger un serveur Whois
    CSharp - Equivalent de la fonction PHP htmlentities()
    CSharp - Somme de contrôle CRC32
    Magazines - Le n°117 de Programmez est disponible
    Hebergement - Hébergement ASP et ASP.Net
    MOSS - Mon Profil - Personnalisation des profils utilisateurs de MOSS
    La gestion des profils utilisateurs de SharePoint fait partie des fonctionnalités de base de ...
    Dreamweaver CS3 + Php + Mysql - Le Jeu d'Enregistrements - Les fondamentaux Part-3
    La 3ème partie des fondamentaux, traitera essentiellement du jeu d'enregistrements ou Recordset. ...
    Mon mini-site @ Home - avec Windows, Free, Wamp & DynDNS
    Envie d'héberger votre petit site chez vous, sur votre ordinateur ? de partager des fichiers avec ...
    Magazines - Le n°116 de Programmez est disponible
    Recevoir ses identifiants par mél - Bien pratique pour les petites têtes
    Encore une question posée sur le forum et zou... Le problème est simple : On a oublié ses ...
    ASP.NET - code pour le bouton enregistrer
    Microsoft - Grand jeu-concours MSDN : l'indice d'ASP-PHP.net !
    Tutorial : HTML | Scripting | ASP-PHP | ASP.net | SQL Server | XML
    Sharepoint | XAML | Pocket | Dreamweaver | VML | Divers
      Scripts : Scripting | ASP-PHP | ASP.net | Divers
      Boutique | Annuaire | Bannières | Météo | Tribune | Partenariats
    v3b © Didier 2003   
     

    Corpo Sciences de Reims Partitions gratuites Carte, météo, annonces
     MVP ASP-magazine Codes Sources El Roubio Groupes Utilisateurs Microsoft CodePPC TechNet DotNet Project The Inquirer FR Wygwam