Designed by Maunakea !
77 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  27/11/09 19:14 de fritzphp
Merci beaucoup pour ton tuto, il est superbe et très ...
  • 27/11/09 23:12 de DB77 Content pour toi et merci de le dire :)
  •  Lire  05/09/09 20:14 de serialmother
    Bonsoir, Le tuto fonctionne très bien sous PHP4 mai...
  • 05/09/09 22:40 de DB77 Non, je n'ai pas d'explication. Mais que se...
  • 06/09/09 16:09 de serialmother Bonjour et merci de votre répon...
  • 06/09/09 17:45 de DB77 Essaye de mettre les lignes en commentaire.
  • 08/09/09 15:35 de DB77 Je viens de regarder mon EasyPHP et j'ai : ...
  • 08/09/09 22:35 de serialmother Bonsoir, j'ai changé la version...
  •   v1.3p © ASP-PHP.net 2002  

    DB77 le 04/03/2009 (28 226 hits)
    Didier Téléchargez gratuitement et légalement des logiciels Microsoft ! Si, si ;)
    • Visual Studio 2010
    • Office 2010
    • Expression Studio 3
    • SQL Server 2008
    • et d'autres...
    Au fil des news  
    Magazines - Le N°128 de Programmez est disponible
    Magazines - Le N°127 de Programmez est disponible
    Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 6
    Pour continuer dans le même style, je vous propose une suite au précédent article. Rechercher tous ...
    Adobe - Adobe Photoshop.com Mobile pour iPhone 1.1
    JavaScript - Ajouter une page dans vos favorites
    Dreamweaver CS4 + Php + Mysql - Trucs et Astuces - Part 5 -
    Je vous propose cette fois deux astuces. Comment exporter une feuille de style avec l'aide de ...
    SharePoint Personalization Site Links - Les liens personnalisés des MySite SharePoint
    Nous avons vu dans les articles précédents comment agrémenter les pages de recherche afin de ...
    Magazines - Le n°126 de Programmez est disponible
    Outils - Traducteur en ligne automatique pour site web
    Adobe - Adobe Photoshop.com Mobile pour Iphone
    Magazines - Le n°125 de Programmez est disponible
    Adobe - Adobe AIR 2 et Flash Player 10.1version bêta
    Les conférences autour des technologies Microsoft - Liste non exhaustive des grands évènements
    Nous allons essayer de regrouper un grand nombre des évènements autour des technologies Microsoft ...
    Magazines - Le n°124 de Programmez est disponible
    PHP - Forum PHP 2009
    Composants - eFace - XAML en Java
    WPF - Désactiver le bouton de réduction d'une fenêtre
    Magazines - Le n°123 de Programmez est disponible
    Magazines - Le n°122 de Programmez est disponible
    Auditer une ferme SharePoint - Assurer le bon fonctionnement de SharePoint
    Dans le cadre de la bonne gestion de son environnement SharePoint, il est utile de faire un ...
    SQL Server 2008 Report Builder 2.0 - Installation et utilisation de Report Builder 2.0
    Dans le cadre de la création de rapports pour SQL Server Reporting Services 2008, un outil est ...
    Magazines - Le HS N° 1 de Web Design est disponible
    Adobe - Adobe propose en Open Source les frameworks.....
    Outils - EntityBuilder
    CSharp - Sérialisation XML de vos objets
    Magazines - Le n°121 de Programmez est disponible
    Adobe - Adobe annonce MAX 2009 !
    Outils - WhoIs
    [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 ...
    Outils - Crypt
    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 ...
    Magazines - Le n° 120 de Programmez est disponible
    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
    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
     Groupes Utilisateurs Microsoft MVP TechNet DotNet Project ASP-magazine