Select Multipli Dinamici Da Database Access

  • Creatore Discussione Creatore Discussione marconi
  • Data di inizio Data di inizio

marconi

Utente Attivo
1 Feb 2008
50
0
0
Ciao a tutti.
Oggi ho questo problema...Ho delle selct che straggono i valori da database..al cambiare di una select cambiano i valori delle altre, come se la prima select facesse da filtro e fin qui ci sono riuscito in questo modo:
<select name="categoria" id="select4" onchange="window.location.href='select_dinamiche.asp?frn_region='+this.value;">
<option value="">Seleziona Provincia</option>
<%
While (NOT Recordset1.EOF)
%>
<option value="<%=(Recordset1.Fields.Item("frn_region").Value)%>"><%=(Recordset1.Fields.Item("frn_region").Value)%></option>
<%
Recordset1.MoveNext()
Wend
If (Recordset1.CursorType > 0) Then
Recordset1.MoveFirst
Else
Recordset1.Requery
End If
%>
</select>

Ora se dalla prima select seleziono la provincia mi da la regione e i comuni di quella provincia...e per questo tipo di sistema va bene...ma se io vorrei aggiungere un altra select ad esempio modificando il suddeto codice in questa maniera:
- Select Regione....e nella seconda select mi da le province di quella regione
- Select province ....e nella terza selct mi da le città della provincia che ho scelto e della regione che ho scelto.

In pratica come si fa a passare piu' valori mediante il metodo get di piu' select perchè per un valore solo ho usato: windows.location.href ma se volglio passarne due o piu' di valori senza resettare quelllo scelto prima come faccio?
 
Basta che li accodi in querystring.

Non ho nemmeno letto il tuo esempio (mi fido che funziona) quindi ti spiego la logica.

Tu hai la pagina "luoghi.asp" che per default ti da la select delle regioni.

Quando selezioni la regione hai, ad esempio:

luoghi.asp?reg=1

A questo punto hai la select delle province. Se la sfogli avrai:

luoghi.asp?reg=1&prv=3

Nella seconda select devi costruire l'onchange in questo modo:

<select name="prv" onchange="document.location.href='luoghi.asp?reg=<%=reg%>&prv='+this.value">

Fammi sapere ;)
 
Sei un fenomeno.....ma manca qualcosina per la perfezione

Caro luke quello che mi hai detto mi è stato molto utile..allore ci sono due problemi:
1) Non rimangono in memoria nelle select le scelte effettuate.
Cioè se io ho la REGIONE COSI' COMPOSTA
- Seleziona Regione
- Abruzzo
- Campania
- ............
- ............
e via dicendo se selezionO la regione la pagina mi si aggiorna il parametro passa al secondo recrodset che legge il parametro url cosi' come te lo mostro; [http://localhost/test/TMPv6djevqknq.asp?frn_state=Calabria], ora fatta questa scelta mi si apre la seconda select PROVINCE, ma nella prima quella delle regioni non mi rimane in memoria Calabria come vedi dall'url.
2) Il secondo problema nasce dalla seconda scelta, cioè delle province, io dopo aver scelto la regione scelgo la provincia e mi da quest'url:
[http://localhost/test/TMPv6djevqknq.asp?frn_state=&frn_region=KR] come puoi vedere il parametro nuovo è stato aggiunto ma manca frn_state = a niente!!

ti posto il codice:
<table width="209" border="0" align="center" cellpadding="0" cellspacing="5">
<tr>
<td width="93"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Regione</font></strong></td>
<td width="338"> <div align="left"><font color="#FF0000" size="2" face="Verdana, Arial, Helvetica, sans-serif">
<select name="regione" id="REGIONE" onchange="window.location.href='?frn_state='+this.value">
<option value="">Seleziona Regione</option>
<%
While (NOT regioni.EOF)
%>
<option value="<%=(regioni.Fields.Item("frn_state").Value)%>"><%=(regioni.Fields.Item("frn_state").Value)%></option>
<%
regioni.MoveNext()
Wend
If (regioni.CursorType > 0) Then
regioni.MoveFirst
Else
regioni.Requery
End If
%>
</select>
</font></div></td>
</tr>
<tr>
<td><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Provincia</font></strong></td>
<td> <div align="left"><font color="#FF0000" size="2" face="Verdana, Arial, Helvetica, sans-serif">
<select name="province" id="province" onchange="document.location.href='?frn_state=<%=regione%>&frn_region='+this.value">
<option value="">Seleziona Provincia</option>
<%
While (NOT province.EOF)
%>
<option value="<%=(province.Fields.Item("code").Value)%>"><%=(province.Fields.Item("region").Value)%></option>
<%
province.MoveNext()
Wend
If (province.CursorType > 0) Then
province.MoveFirst
Else
province.Requery
End If
%>
</select>
</font></div></td>
</tr>
<tr>
<td><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Citt&agrave;</font></strong></td>
<td> <div align="left">
<select name="select">
<option value="">Seleziona Città</option>
<%
While (NOT paesi.EOF)
%>
<option value="<%=(paesi.Fields.Item("city").Value)%>"><%=(paesi.Fields.Item("city").Value)%></option>
<%
paesi.MoveNext()
Wend
If (paesi.CursorType > 0) Then
paesi.MoveFirst
Else
paesi.Requery
End If
%>
</select>
</div></td>
</tr>
</table>
Spero possa risolvere questo problema...mille grazie in anticipo..
 
Non mi piace molto come costruisci l'onchange delle select.

Dovresti modificare come ti ho suggerito, in modo da passare ciclicamente i valori prima dalla prima select e poi dalla seconda.

In sostanza:

Seleziona le province della regione...
<select name="prv" onchange="document.location.href='luoghi.asp?reg='+this.value">

...

Seleziona i comuni della provincia...
<select name="prv" onchange="document.location.href='luoghi.asp?reg=< %=reg%>&prv='+this.value">

...

Naturalmente, magari, nascondi con delle If la select delle province se la variabile "reg" non è valorizzata, e quella dei comuni se la variabile "prv" non è valorizzata.

Usi delle variabili diverse... ma il senso è quello :)
 
Sempre gentile!!!! Grazie Mille

Caro Luke ho risolto il secondo dei miei problemi in questa maniera:
nel [head] del codice ho inserito questa funzioncina che mi recupera la variabile dall'url:
<%
Dim reg, provincia
reg = Request.QueryString("frn_state")
provincia = Request.QueryString("frn_region")
%>

e fin qui nessun problema ora alla compilazione del modulo ho nell'url tutte le informazioni che voglio.
___________________________________________________________
Ora non riesco pero' a fare il ciclo delle IF come mi dicevi, logicamente sarebbe cosi':
Se è presente la variabile <%frn_state%> la prima select deve visualizzarmi questa variabile,
ALTRIMENTI mostrami le varie option
____________________________________________________________

sarebbe cosi' credo la logica solo che non lo so fare...cioè per costruirmi da solo il codice avrei bisogno di uno script di partenza che mi faccia vedere + o - quello che devo scrivere e soprattutto dove!!!!

questo è il codice della mia pagina aggiornato.
<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="Connections/comuni.asp" -->
<%
Dim regioni
Dim regioni_numRows

Set regioni = Server.CreateObject("ADODB.Recordset")
regioni.ActiveConnection = MM_comuni_STRING
regioni.Source = "SELECT DISTINCT frn_state FROM Regions ORDER BY frn_state ASC"
regioni.CursorType = 0
regioni.CursorLocation = 2
regioni.LockType = 1
regioni.Open()

regioni_numRows = 0
%>
<%
Dim province__MMColParam
province__MMColParam = "1"
If (Request.QueryString("frn_state") <> "") Then
province__MMColParam = Request.QueryString("frn_state")
End If
%>
<%
Dim province
Dim province_numRows

Set province = Server.CreateObject("ADODB.Recordset")
province.ActiveConnection = MM_comuni_STRING
province.Source = "SELECT code, region FROM Regions WHERE frn_state = '" + Replace(province__MMColParam, "'", "''") + "'"
province.CursorType = 0
province.CursorLocation = 2
province.LockType = 1
province.Open()

province_numRows = 0
%>
<%
Dim paesi__MMColParam
paesi__MMColParam = "1"
If (Request.QueryString("frn_region") <> "") Then
paesi__MMColParam = Request.QueryString("frn_region")
End If
%>
<%
Dim paesi
Dim paesi_numRows

Set paesi = Server.CreateObject("ADODB.Recordset")
paesi.ActiveConnection = MM_comuni_STRING
paesi.Source = "SELECT * FROM Cities WHERE frn_region = '" + Replace(paesi__MMColParam, "'", "''") + "' ORDER BY city ASC"
paesi.CursorType = 0
paesi.CursorLocation = 2
paesi.LockType = 1
paesi.Open()

paesi_numRows = 0
%>
<%
Dim reg, provincia
reg = Request.QueryString("frn_state")
provincia = Request.QueryString("frn_region")
%>
<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<table width="462" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><div align="center">
<form name="form1" method="post" action="">
<Fieldset>
<p align="left">
<legend><font color="#0000FF" size="2" face="Verdana, Arial, Helvetica, sans-serif">Fai
la tua Selezione</font></legend>
<div align="left"></div>
</fieldset>

<div align="left"> </p> </div>
<fieldset><legend><font color="#0000FF" size="2" face="Verdana, Arial, Helvetica, sans-serif">Dati
Geografici</font></legend>
<div align="center">
<table width="209" border="0" align="center" cellpadding="0" cellspacing="5">
<tr>
<td width="93"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Regione</font></strong></td>
<td width="338"> <div align="left"><font color="#FF0000" size="2" face="Verdana, Arial, Helvetica, sans-serif">
<select name="selezione" id="REGIONE" onchange="window.location.href='luoghi.asp?frn_state='+this.value">
<option value="">Seleziona Regione</option>
<%
While (NOT regioni.EOF)
%>
<option value="<%=(regioni.Fields.Item("frn_state").Value)%>"><%=(regioni.Fields.Item("frn_state").Value)%></option>
<%
regioni.MoveNext()
Wend
If (regioni.CursorType > 0) Then
regioni.MoveFirst
Else
regioni.Requery
End If
%>
</select>
</font></div></td>
</tr>
<tr>
<td><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Provincia</font></strong></td>
<td> <div align="left"><font color="#FF0000" size="2" face="Verdana, Arial, Helvetica, sans-serif">
<select name="selezione" id="selezione" onchange="document.location.href='?frn_state=<%=reg%>&frn_region='+this.value">
<option value="">Seleziona Provincia</option>
<%
While (NOT province.EOF)
%>
<option value="<%=(province.Fields.Item("code").Value)%>"><%=(province.Fields.Item("region").Value)%></option>
<%
province.MoveNext()
Wend
If (province.CursorType > 0) Then
province.MoveFirst
Else
province.Requery
End If
%>
</select>
</font></div></td>
</tr>
<tr>
<td><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Citt&agrave;</font></strong></td>
<td> <div align="left">
<select name="selezione" id="selezione">
<option value="">Seleziona Città</option>
<%
While (NOT paesi.EOF)
%>
<option value="<%=(paesi.Fields.Item("city").Value)%>"><%=(paesi.Fields.Item("city").Value)%></option>
<%
paesi.MoveNext()
Wend
If (paesi.CursorType > 0) Then
paesi.MoveFirst
Else
paesi.Requery
End If
%>
</select>
</div></td>
</tr>
</table>
<p>
<input name="textfield" type="text" value="<%=reg%>">
<input name="textfield2" type="text" value="<%=provincia%>">
</p>
</div>
</Fieldset>
</form>
</div></td>
</tr>
</table>
<font color="#0000FF" size="2" face="Verdana, Arial, Helvetica, sans-serif"></font>
</body>
</html>
<%
regioni.Close()
Set regioni = Nothing
%>
<%
province.Close()
Set province = Nothing
%>
<%
paesi.Close()
Set paesi = Nothing
%>
 
Ci Sono Riuscitoooooooooo!!!!!!!!

Grazie a te luke sono riuscito a terminare lo script posto tutto il codice così chi ha avuto il mio stesso problema può vederlo

<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="Connections/comuni.asp" -->
<%
Dim regioni
Dim regioni_numRows

Set regioni = Server.CreateObject("ADODB.Recordset")
regioni.ActiveConnection = MM_comuni_STRING
regioni.Source = "SELECT DISTINCT frn_state FROM Regions ORDER BY frn_state ASC"
regioni.CursorType = 0
regioni.CursorLocation = 2
regioni.LockType = 1
regioni.Open()

regioni_numRows = 0
%>
<%
Dim province__MMColParam
province__MMColParam = "1"
If (Request.QueryString("frn_state") <> "") Then
province__MMColParam = Request.QueryString("frn_state")
End If
%>
<%
Dim province
Dim province_numRows

Set province = Server.CreateObject("ADODB.Recordset")
province.ActiveConnection = MM_comuni_STRING
province.Source = "SELECT code, region FROM Regions WHERE frn_state = '" + Replace(province__MMColParam, "'", "''") + "'"
province.CursorType = 0
province.CursorLocation = 2
province.LockType = 1
province.Open()

province_numRows = 0
%>
<%
Dim paesi__MMColParam
paesi__MMColParam = "1"
If (Request.QueryString("frn_region") <> "") Then
paesi__MMColParam = Request.QueryString("frn_region")
End If
%>
<%
Dim paesi
Dim paesi_numRows

Set paesi = Server.CreateObject("ADODB.Recordset")
paesi.ActiveConnection = MM_comuni_STRING
paesi.Source = "SELECT * FROM Cities WHERE frn_region = '" + Replace(paesi__MMColParam, "'", "''") + "' ORDER BY city ASC"
paesi.CursorType = 0
paesi.CursorLocation = 2
paesi.LockType = 1
paesi.Open()

paesi_numRows = 0
%>
<%
Dim reg, provincia
reg = Request.QueryString("frn_state")
provincia = Request.QueryString("frn_region")
%>
<html>
<head>
<title>Documento senza titolo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<table width="462" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><div align="center">
<form name="form1" method="post" action="">
<Fieldset>
<p align="left">
<legend><font color="#0000FF" size="2" face="Verdana, Arial, Helvetica, sans-serif">Fai
la tua Selezione</font></legend>
<div align="left"></div>
</fieldset>

<div align="left"> </p> </div>
<fieldset><legend><font color="#0000FF" size="2" face="Verdana, Arial, Helvetica, sans-serif">Dati
Geografici</font></legend>
<div align="center">
<table width="209" border="0" align="center" cellpadding="0" cellspacing="5">
<tr>
<td width="93"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Regione</font></strong></td>
<td width="338"> <div align="left"><font color="#FF0000" size="2" face="Verdana, Arial, Helvetica, sans-serif">
<select name="selezione" id="REGIONE" onchange="window.location.href='luoghi.asp?frn_state='+this.value">
<option value=""><%if reg = "" then
%>
Seleziona Regione
<%else
end if
%>
<%=reg%>
</option>
<%
While (NOT regioni.EOF)
%>
<option value="<%=(regioni.Fields.Item("frn_state").Value)%>"><%=(regioni.Fields.Item("frn_state").Value)%></option>
<%
regioni.MoveNext()
Wend
If (regioni.CursorType > 0) Then
regioni.MoveFirst
Else
regioni.Requery
End If
%>
</select>
</font></div></td>
</tr>
<tr>
<td><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Provincia</font></strong></td>
<td> <div align="left"><font color="#FF0000" size="2" face="Verdana, Arial, Helvetica, sans-serif">
<select name="selezione" id="selezione" onchange="document.location.href='?frn_state=<%=reg%>&frn_region='+this.value">
<option value=""><%if provincia = "" then
%>
Seleziona Provincia
<%else
end if
%>
<%=provincia%>
</option>
<%
While (NOT province.EOF)
%>
<option value="<%=(province.Fields.Item("code").Value)%>"><%=(province.Fields.Item("region").Value)%></option>
<%
province.MoveNext()
Wend
If (province.CursorType > 0) Then
province.MoveFirst
Else
province.Requery
End If
%>
</select>
</font></div></td>
</tr>
<tr>
<td><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Citt&agrave;</font></strong></td>
<td> <div align="left">
<select name="selezione" id="selezione">
<option value="">Seleziona Città</option>
<%
While (NOT paesi.EOF)
%>
<option value="<%=(paesi.Fields.Item("city").Value)%>"><%=(paesi.Fields.Item("city").Value)%></option>
<%
paesi.MoveNext()
Wend
If (paesi.CursorType > 0) Then
paesi.MoveFirst
Else
paesi.Requery
End If
%>
</select>
</div></td>
</tr>
</table>
<p>
<input name="textfield" type="text" value="<%=reg%>">
<input name="textfield2" type="text" value="<%=provincia%>">
</p>
</div>
</Fieldset>
</form>
</div></td>
</tr>
</table>
<font color="#0000FF" size="2" face="Verdana, Arial, Helvetica, sans-serif"></font>
</body>
</html>
<%
regioni.Close()
Set regioni = Nothing
%>
<%
province.Close()
Set province = Nothing
%>
<%
paesi.Close()
Set paesi = Nothing
%>


Luke grazie mille ti ricontatterò pe altre cose sappilo!!!!!!!!
 

Discussioni simili