begin process at 2012 05 28 01:02:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

ASP / ASP3

 > 

Base de données

 > 

SQL Server

 > 

Modifier une liste déroulante "fille" en fonction du choix d'une liste déroulante "mère"


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Modifier une liste déroulante "fille" en fonction du choix d'une liste déroulante "mère"

mercredi 7 juillet 2010 à 17:08:25 | Modifier une liste déroulante "fille" en fonction du choix d'une liste déroulante "mère"

madhatterx

Bonjour,

Avant de commencer, je tiens à signaler que mes compétences en matière de codage relèvent de l'amateurisme (je suis en première année de BTS IG), donc bonne connaissance en HTML, CSS, ainsi que quelques notions de PHP, ASP, Javascript et C#.

Mon problème est que je souhaite créer un formulaire avec des listes déroulantes (=LD) dynamiques.

Voici, en gros, la base de données que je vais utiliser pour mes listes déroulantes:

idBat | soustype | type | catégorie
1 | école | scolaire | batiment
2 | creche | scolaire | batiment
3 | bureaux | administratif| batiment
4 | clinique | hospitalier | batiment
5 | null | sculpture | ouvrage d'art
...

Je veux donc avoir dans ma première LD, la catégorie; dans la deuxième, le type en fonction de la catégorie; et dans la troisième, le sous-type en fonction du type.

Ex: quand je sélectionne Batiment dans la 1ere LD, je ne verrais pas apparaitre de type Sculpture (si on suit la base de données ci-dessus), je verrais Administratif, Scolaire, Hospitalier. Et si je sélectionne Scolaire dans ma 2eme LD, j'aurais le choix entre école ou crèche.

Donc, le problème est posé. Comment codé tout ça? Ma base de données est sur SQL Server 2008, ma page web est en HTML/ASP/Javascript.

Ci-dessous, je vous montre le premier jet de mon code , cela donne mes 3 LD mais la 2ème ne varie pas selon la première (elle donne tous les "type"), idem pour la troisième, elle donne tous les "soustype".

<%' Ouverture d'une connexion avec la base affaire
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "mon_dns", "", ""
' Ouverture de l'espace memoire du recordset
Set Rs2 = Server.CreateObject("ADODB.Recordset")
varSQL = "SELECT DISTINCT catégorie FROM typeouvrage"
Rs2.Open varSQL, Conn
' Ouverture de l'espace memoire du recordset
Set Rs3 = Server.CreateObject("ADODB.Recordset")
varSQL = "SELECT DISTINCT type FROM typeouvrage"
Rs3.Open varSQL, Conn
' Ouverture de l'espace memoire du recordset
Set Rs4 = Server.CreateObject("ADODB.Recordset")
varSQL = "SELECT soustype FROM typeouvrage"
Rs4.Open varSQL, Conn
%>

<td>
<select size="1" name="formcatbat">
<option value="prem?" selected> ? </option>
<%Do while Not Rs2.EOF%>
<option value="<%=Rs2("catégorie")%>"><%=Rs2("catégorie")%></option>
<%Rs2.MoveNext
Loop%>
</select><br/>
<select size="1" name="formtypebat">
<option value="deux?" selected> ? </option>
<%Do while Not Rs3.EOF%>
<option value="<%=Rs3("type")%>"><%=Rs3("type")%></option>
<%Rs3.MoveNext
Loop%>
</select><br/>
<select size="1" name="formsoustype">
<option value="trois?" selected>?</option>
<%Do while Not Rs4.EOF%>
<option value="<%=Rs4("soustype")%>"><%=Rs4("soustype")%></option>
<%Rs4.MoveNext
Loop%>
</select>
</td>


<% Conn.Close
Rs1.Close
Rs2.Close
Rs3.Close
Rs4.Close
%>



merci d'avance à ceux qui peuvent aider le pauvre novice que je suis, n'hésitez pas si vous avez besoin de plus de précisions.
mardi 13 juillet 2010 à 11:11:24 | Re : Modifier une liste déroulante "fille" en fonction du choix d'une liste déroulante "mère"

madhatterx

J'ai continué mes recherches pour résoudre le problème ci-dessus, j'ai trouvé un bout de code sur ce

lien: http://www.plus2net.com/asp-tutorial/db-dropdown.php

Celà permet de recharger (reload)le formulaire quand la première LD est modifier (onchange).

Après avoir adapté le code, celà donne:

<script language="javascript">
<!--
function reload(form)
{
var val=form.categorie.options[form.categorie.options.selectedIndex].value;
self.location='afficher.asp?categorie=' + val ;
}
-->
</script>

<% Dim Conn,objRS,strSQL,categorie


' Ouverture d'une connexion avec la base affaire
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "itcaff", "", ""

Set objRs = Server.CreateObject("ADODB.Recordset")

'''''First drop down list starts here'''''

strSQL = "SELECT distinct catégorie from typeouvrage"
objRS.Open strSQL, Conn
Response.Write "<form method=post name=f1 action=''><select name=categorie onchange='reload

(this.form)'><option value=''>Select catégorie</option>"
Do While Not objRS.EOF
Response.Write "<option value=" & objRs("catégorie") & ">" & objRs("catégorie") & "</option>"
objRS.MoveNext
Loop
objRs.Close
Response.Write "</select>"
Response.Write "<br>----<br>"
categorie=Request.QueryString("categorie")
''' Second drop down list starts here ''''

If len(categorie) > 1 Then

strSQL = "SELECT DISTINCT type FROM typeouvrage where catégorie='" & categorie &"'"
objRS.Open strSQL, Conn
Response.Write "<select name=type><option value=''>Select type</option>"
Do While Not objRS.EOF
Response.Write "<option value=" & objRs("type") & ">" & objRs("type") & "</option>"
objRS.MoveNext
Loop
Response.Write "</select>"
Response.Write "</form>"
objRs.Close

end if
%>

La première LD me propose bien les catégories, puis une fois sélectionnée, la deuxième LD propose bien les types en fonction de la catégorie choisie.
Cependant, il ne maintient pas la valeur de la catégorie choisie dans la première LD, et je n'ai pas réussi à adapter plus loin pour obtenir ma 3ème LD, j'ai qd même essayé avec une autre fonction reload2 (qui reprend les paramètres catégories et types), mais ça ne marche pas, quelqu'un pourrait compléter et m'expliquer ce qui manque?

Merci.
mardi 20 juillet 2010 à 16:31:17 | Re : Modifier une liste déroulante "fille" en fonction du choix d'une liste déroulante "mère"

madhatterx

J'ai trouvé une solution que j'ai bricolé.

Code Javascript :
function reload(form)
{
var val=form.formcatbat.options[form.formcatbat.options.selectedIndex].value;
self.location="ajouter.asp?categorie=" + val ;
}
function reload2(form)
{
var val=form.formcatbat.options[form.formcatbat.options.selectedIndex].value;
var val2=form.formtypebat.options[form.formtypebat.options.selectedIndex].value;
self.location="ajouter.asp?categorie=" + val+"&type="+val2 ;

}

Code ASP :
<%
Set objRs = Server.CreateObject("ADODB.Recordset")

'''''Première Liste déroulante'''''

strSQL = "SELECT distinct catégorie from typeouvrage"
objRS.Open strSQL, Conn
Response.Write "<select name=formcatbat onchange='reload(this.form)'><option value='?'>?</option>"
Do While Not objRS.EOF 
	newcat=replace(objRs("catégorie"),"_"," ")
	Response.Write "<option value=" & objRs("catégorie") & ">" & newcat & "</option>"
     objRS.MoveNext
 Loop
objRs.Close
categorie=Request.QueryString("categorie")
newcat=replace(categorie,"_"," ")
Response.Write "<option value='"&categorie&"' selected>"&newcat&"</option>"
Response.Write "</select><br>"
Response.Write categorie

''' Seconde liste déroulante ''''

strSQL = "SELECT  DISTINCT type FROM typeouvrage where catégorie='" & categorie &"'"
objRS.Open strSQL, Conn
Response.Write "<select name=formtypebat onchange='reload2(this.form)'><option value='?'>?</option>"
Do While Not objRS.EOF 
	newtype=replace(objRs("type"),"_"," ")
	Response.Write "<option value=" & objRs("type") & ">" & newtype & "</option>"
     objRS.MoveNext
 Loop
typeo=Request.QueryString("type") 
newtype=replace(typeo,"_"," ")
Response.Write "<option value='"&typeo&"' selected>"&newtype&"</option>"
Response.Write "</select><br>"
objRs.Close

''' Troisième liste déroulant ''''

strSQL = "SELECT  DISTINCT soustype FROM typeouvrage where type='" & typeo &"'"
objRS.Open strSQL, Conn
Response.Write "<select name=formsoustypebat><option value='?' selected>?</option>"
Do While Not objRS.EOF 
	Response.Write "<option value=" & objRs("soustype") & ">" & objRs("soustype") & "</option>"
     objRS.MoveNext
 Loop
Response.Write "</select>"
objRs.Close
%>


Si vous avez de meilleures propositions, n'hésitez surtout pas, je pense qu'on peut faire plus propre.
mardi 20 juillet 2010 à 16:55:56 | Re : Modifier une liste déroulante "fille" en fonction du choix d'une liste déroulante "mère"

madhatterx

Un nouveau problème se pose avec le code ci-dessus:

I) Quand je dois créer une référence, cela se passe en 2 étapes:
1) je remplis un formulaire
2) je fais passer les données du formulaire vers la base de données

II) mais quand je dois modifier une référence, cela se passe en 3 étapes:
1) je choisis la référence à modifier
2) je remplis un formulaire avec les anciennes valeurs de la référence
3) je fais passer les données du formulaire vers la base de données

Mes 3 listes déroulantes fonctionnent bien dans le I), mais pas dans le II).

Il se trouve que je dois conserver le numéro de la référence dans le II) 1) pour l'utiliser dans le II) 2), pour faire appel aux anciennes valeurs... j'ai donc essayé dans un premier temps de le récupérer par un "Request.Form("formNumRef")", et dans un second temps avec un "Request.QueryString("numref")".

Ni l'un ni l'autre ne fonctionnent, mes listes déroulantes sont figées sur les anciennes valeurs, et dès que je veux sélectionner une autre catégorie, il perd mon numéro de référence dans le "onchange".
J'ai donc testé de mettre le numéro de référence dans les paramètres de l'URL, et il ne me renvoit jamais la bonne valeur (il me renvoit la première valeur de mon numRef dans ma base de données).

Il faut donc que je sache:
a) comment ajouter des paramètres dans une URL?
b) comment les récupérer quand il y a un "onchange" qui remet pas mal de choses à zéro?
c) pourquoi ma "Request.QueryString("numref")" me renvoit la première valeur de ma base de données?

Votre défi sera de me répondre avant que je trouve la solution .
Ci-dessous le code de mon II) 2).

Code Javascript :
function reload(form)
{

var val=form.formcatbat.options[form.formcatbat.options.selectedIndex].value;
self.location="modif_ref.asp?categorie=" + val;
}
function reload2(form)
{
var val=form.formcatbat.options[form.formcatbat.options.selectedIndex].value;
var val2=form.formtypebat.options[form.formtypebat.options.selectedIndex].value;

self.location="modif_ref.asp?categorie=" + val+"&type="+val2 ;

}

-->
</script>

Code ASP :

<BODY>

<%
dim numRef
numRef=Request.Form("modif")
Response.Write numRef
' Ouverture d'une connexion avec la base affaire
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "itcaff", "", ""

Set Rs = Server.CreateObject("ADODB.Recordset")
varSQL = "SELECT NUMAFF from AFFAIRE ORDER BY NUMAFF"
Rs.Open varSQL, Conn

mon_chemin = "C:\Inetpub\wwwroot\itcinfo\REFERENCES\PDF"

Set Rsref = Server.CreateObject("ADODB.Recordset")
varSQLref = "SELECT * from REFERENCE,typeouvrage WHERE idBat=idBatRef AND numRef="&numRef&""
Rsref.Open varSQLref, Conn


%>
	
		<P ALIGN="CENTER"><STRONG><font size="3"><span style="text-transform: uppercase">Modification de références</span></font></STRONG></p>
		
		<form name="formmodif" method="POST" action="./maj_ref.asp" onsubmit="return submitforms_mo()">
            <table class="test">
				<tr>
					<td width="30%" height="23" align="right">
                      <p align="right"><b>Type Référence</b> :</td>
			        <td width="70%" height="23">
						<%
		Set objRs = Server.CreateObject("ADODB.Recordset")

		'''''First drop down list starts here'''''

		strSQL = "SELECT distinct catégorie from typeouvrage"
		objRS.Open strSQL, Conn
		Response.Write "<select name=formcatbat onchange='reload(this.form,"&numRef&")'><option value='"&Rsref("catégorie")&"' selected>"&Rsref("catégorie")&"</option>"
		Do While Not objRS.EOF 
		newcat=replace(objRs("catégorie"),"_"," ")
		Response.Write "<option value=" & objRs("catégorie") & ">" & newcat & "</option>"
		objRS.MoveNext
		Loop
		objRs.Close
		categorie=Request.QueryString("categorie")
		'numRef=Request.QueryString("numRef")'Permet de récupérer mon numRef après le rechargement du formulaire
		newcat=replace(categorie,"_"," ")
		Response.Write "</select><br>"

Response.Write categorie
		''' Second drop down list starts here ''''


		strSQL = "SELECT  DISTINCT type FROM typeouvrage where catégorie='" & categorie &"'"
		objRS.Open strSQL, Conn
		Response.Write "<select name=formtypebat onchange='reload2(this.form,"&numRef&")'><option value='"&Rsref("type")&"'  selected>"&Rsref("type")&"</option>"
		Do While Not objRS.EOF 
		newtype=replace(objRs("type"),"_"," ")
		Response.Write "<option value=" & objRs("type") & ">" & newtype & "</option>"
		objRS.MoveNext
		Loop
		'numRef=Request.QueryString("numRef")'Permet de récupérer mon numRef après le rechargement du formulaire
		typeo=Request.QueryString("type") 
		newtype=replace(typeo,"_"," ")
		Response.Write "</select><br>"
		objRs.Close
		
		
		''' Third drop down list starts here ''''


		strSQL = "SELECT  DISTINCT soustype FROM typeouvrage where type='" & typeo &"'"
		objRS.Open strSQL, Conn
		Response.Write "<select name=formsoustypebat><option value='"&Rsref("soustype")&"' selected>"&Rsref("soustype")&"</option>"
		Do While Not objRS.EOF 
		Response.Write "<option value=" & objRs("soustype") & ">" & objRs("soustype") & "</option>"
		objRS.MoveNext
		Loop
		Response.Write "</select>"
		objRs.Close


%>


Cette discussion est classée dans : type, liste, déroulante, ld, batiment


Répondre à ce message

Sujets en rapport avec ce message

liste déroulante [ par mimi ] j'ai une liste déroulante comprenant des mois et à chaque mois correspondent des informations à prendre dans la base de données.Que faire donc pour qu Lien [ par Lintra ] BonjourComment créer un lien ds un liste déroulante.Je veux que lorsque l'utilisateur choisisse un menu ds la liste déroulante, il aille directement Liste déroulante modifiable [ par PoUpA ] voilà j'ai un petit probleme je cherche a faire une liste déroulante générée a partir d'une base de donnée ou l'on pourrais ajouter un champ en cliqua Question :Combo (liste déroulante) [ par totoche ] Bonjour,Comment peut on faire pour créer 2 combo (liste déroulante)(OPTION VALUE) dans un seul Formulaire?Merci. Listbox un peu contrariante [ par websinh ] Salut tous, je vous explique mon prob, j'aierais créer une liste non déroulante qui contient des noms de fichier. Nous pouvons grace a un "file" parco base de donné et liste déroulante [ par kikim ] Salut tt le monde!!!J'ai une big question a vous poser :j'ai une base de donné avec une table employé (nom, prénom et tél )sur ma page asp j'ai une li afficher le contenu de ma table dans une liste déroulante [ par enis ] Voici mon problème que je vous expose avant de perdre tous mes cheveux.Une secretaire crée une visite ( "Un visiteur" va voir "Une personne" du Date1 afficher le contenu de ma table dans une liste déroulante [ par enis ] Voici mon problème que je vous expose avant de perdre tous mes cheveux.Une secretaire crée une visite ( "Un visiteur" va voir "Une personne" du Date1 Liste déroulante [ par rita ] Qui peut me dire comment faire pour que ma liste déroulante s'arrête sur le premier nom et non sur le dernier tout en bas?Voici le code : Liste déroulante [ par rita ] Qui peut me dire comment faire pour que ma liste déroulante s'arrête sur le premier nom et non sur le dernier tout en bas?Voici le code :


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,312 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales