j'ai corrigé ton titre
Il y a plusieurs façon de faire, je t'en donne deux :
- old school :
étape 1 :
tu affiches le premier le premier select à partir de données de la base (select en base + boucle pour le traitement des données)
sur le select tu ecoute l'event onChange, dans cette event tu valides le formulaire dans lequel se trouve le select (avec un paramètre caché du genre etape=2 dans le formulaire)
étape 2 :
- Tu affiches toujours le premier select (comme à l'étape 1) mais avec le choix fait à l'étape 1 pré sélectionné
- Tu affiches le second en fonction du choix du premier (if(!empty($_POST['etape']) && $_POST['etape']>1) j'affiche le select 2)
- Tu écoutes l'évent du onChange du second select pour valider le formulaire après le choix
- Tu affiches les deux select pré remplis + le formulaire de création de stage. Le formulaire est pré remplis si le type de "stage" n'existe pas (idéalement le choix autre doit retrouner une valeur que tu n'auras pas en base et que tu peu facilement tester (genre nouveau et les autres c'est l'id de la table).
- tu valides le formulaire pour insérer en base (si "select2" == nouveau) ou update.
Voilà c'est pas super "user friendly" mais y a moyen de faire avec peu de JS (simple) et que du html / php simple
La méthode plus moderne : on fait péter le JS partout avec du full REST !
la je te conseil de te munir de ton framework JS préféré :
il te faut :
- un service REST (méthode GET) qui retourne la liste des types de réservation (select 1)
- un service REST (méthode GET) qui retourne la liste des réservations possible pour le type selectionné (l'id du type du select 1 en paramètre d'url, voir path param pour faire bien

)
- un service REST (méthode GET) qui retourne une réservation à partir de sont id (reservation/id)
- un service REST (méthode POST) qui va permettre l'enregistrement en base d'une nouvelle réservation (une nouveau stage dans ton exemple)
- un service REST (méthode PUT idéalement) qui va permettre d'enregistrer la modification.
1/ tu affiche le select en js dynamiquement depuis le données fournit par le premier service.
Tu écoutes l'event onChange du select.
2/ Lors de la modification du select 1 tu affiches le select 2 et utilise les données fournit par le service N°
3/ écoutes l'event onChange du select 2
Si la valeur du select N°2 est différente de "nouveau" utilise le service N°3 pour récupérer les données et pré remplir le formulaire
Affiche le formulaire d'ajout / modification pré remplis ou non ( au départ il a un display: none, ce qui te permet quand même d'utiliser les champs).
le clic sur le bouton permet de faire une requête serveur pour l'ajout (service N°4 si select 2 == "nouveau") ou mettre a jour (service N°5).
Voilà c'est "facile" XD
L'avantage de la seconde solution est que bien partis pour un MVC (découpage front / back d’emblée), coté utilisateur pas de rafraîchissement ça semble aller plus vite, une api rest s'ouvre au monde etc.
Exemple d'api rest avec symphony (1er lien google qui semble pertinent).
http://obtao.com/blog/2013/12/creer-une ... n-symfony/
je précise :
- Je connais pas du tout symphony
- Je suis loin d'être pro JS mais il faut avouer que l'on fait des ihm sexy avec ça (et pis bon qui n'as pas js d'activé de nos jour).
Voilà je pense avoir rien oublié, j'espère que c'est relativement clair
@+