8791 sujets

Développement web côté serveur, CMS

Bonjour,
Je viens de m'inscrire. Je consulte souvent ce site riche en informations.
Là, je ne trouve pas la solution à mon problème. Quelqu'un peut-il m'aider SVP ?
J'ai créé un site web avec formulaires php que certains membres peuvent renseigner pour alimenter un bdd. Celle-ci est réalisée.
Je souhaiterais savoir comment a partir de données stockés dans un tableau de type $_post( ) , on peut créer un liste déroulante.
Par exemple, j'ai une liste de pays dans la base que j'ai stocké dans un tableau $_post(), et je veux dérouler cette liste pour que s'affichent les départements associés. Je souhaiterait savoir quel est le code php pour faire cela ?
Un grand merci par avance si vous pouviez m'éclairer, je cale depuis un bon moment.
Très bonne soirée,
Evelyne 31
Salut,

Pour ce qui est de générer la liste, pas de souci:


<select>
  <?php
  foreach($_POST['pays'] as $id => $pays)
  {
  ?>
    <option value="<?php echo $id; ?>"><?php echo $pays; ?></option>
  <?php
  }
  ?>
</select>


Par contre, pour afficher les départements associés quand tu change de pays, tu doit passer par une requête AJAX
Bonsoir JJK801,
Un grand merci pour cette réponse aussi rapide que j'essaie demain. Là je suis KO.
Je ne connais pas Ajax. N'est-il pas possible de tout faire en PHP ?
Pour une débutante, HTML, CSS, PHP, SQL c'est déjà beaucoup à ingurgiter alors Ajax en plus !!!
Je vous tiens au courant de mes essais.
Encore merci pour votre réponse, très bonne soirée,
Evelyne31
Salut, il y a effectivement une alternative à l'ajax, c'est la génération du script JS directement par du php :


//mainSelect : l'id du menu déroulant pays
//idSelect : l'id du menu déroulant département
function updateComboBox(idSelect,mainSelect) {
   var monSelect = document.getElementById(idSelect);//menu déroulant département
   monSelect.options.length = 0;
   var data='';
   var main=document.getElementById(mainSelect).value;//Pays choisi
			
  switch(main){
	//Tu récupères en php via une boucle les pays, et leurs départements
       //associés			
	case 'France':var data={"01":"Ain",
					 "02":"Aisne",
					 "03":"Allier",
                                         ...};break;
	case 'Belgique':var data={"32":"Truc",
					   "33":"machin"};break;
        ...
  }
  for (var key in data) {
   monSelect.options[monSelect.length] = new Option(data[key],key);
  }
				
}


Il ne te reste qu'à mettre un onchange="updateComboBox(idDpt,idPays);" dans ton select.

Les + :
- Un seul appel au serveur de BDD, vu que tous les résultats sont chargés dès le début.
- Rapidité de changement des valeurs (qui ne se fait qu'au niveau du poste client, pas besoin d'attendre la réponse du serveur)

Les - :
- Alourdissement de la page.
- Temps d'affichage de la page.
- Requêtes SQL lancées inutilement (car infos non utilisées)

Remarque :
Cette méthode ne sera efficace que si :
- ton utilisateur ne sait pas quoi mettre.
- il n'arrête pas de changer de valeurs.
- il n'y a pas énormément de possibilités de choix / options.

==> Dans ton cas l'ajax est donc plus adapté.
Bonjour Zed13,
Un grand merci pour cette réponse. Je suis en réu ce matin, je vois tout ça cet aprèm.
Evelyne31
Bonsoir,
Encore merci pour vos 2 propositions que je n'ai malheureusement pas pu tester aujourd'hui.
J'ai eu de grosses galères pour l'insertion des données du formulaire dans la base. Toujours pas réglé ce soir.
Il faut que je règle ce problème avant de tester vos propositions de menus déroulant.
Je vous tiens informés.
Bonne soirée,
Evelyne31
Bonjour,
Je me penche à nouveau sur le menu déroulant après avoir réglé mes soucis sql.
jb_gfx : je ne suis pas arrivée à faire fonctionner ton code.
Zed13 : idem, mais c'est moins grave car tu me déconseilles de l'employer.
Finalement je suis arrivée à faire afficher le 1er niveau du menu (des pays) en récupérant les données de ma base avec la boucle WHILE.
Pour le sous-menu (des départements), je n'arrive pas à trouver un tuto simple de AJAX. Tout ce que je trouve sur les menus déroulants se fait avec des pages différentes. Ce n'est pas mon cas, je veux que les sous-menus aussi aillent chercher leurs intitulés dans ma base.
Merci pour vos premiers messages. Si vous pouviez me conseiller pour la suite ce serait sympa.
Evelyne31
Miracle, c'est exactement ce que je cherche. Je vois qu'il y a 3 versions (Ajax, Php et Java). Pourrais-tu me dire où trouver le code PHP, je préfèrerai rester en PHP, c'est plus simple pour moi.
1000 mercis,
Evelyne
Vraiment JuseN je te remercie pour ces codes. Je me mets de suite à ce menu déroulant qui m'empoisonne depuis plusieurs jours.
Très bon week-end
Evelyne
Tout ce que j’espère, ce que tu réussisse à l’adapter a ton besoin.

Sinon , ben de rien et bon weekend aussi Smiley lol