Newsgroup: it.comp.www.asp
Titolo: aiuto: menu dinamici in selezione form

ciao ho un problema che non riesco a risolvere e non trovo soluzione
cercando sul web.
La mia necessità è la seguente:
- da un db access estraggo dei dati (id e nomegara) e inserisco nella
tendina di selezione il nomegara per avere la lista da cui scegliere il
valore da inserire nella form.
vorrei però inserire in un campo nascosto della form anche l'id già
estratto ma non so come fare...
nei tentativi fatti la variabile che imposto e metto dove segnalato
sotto mi resta sempre nulla...
grazie 1000
PGei
il codice che uso per la creazione della tendina è il seguente:
<td bgcolor="#F5F5F5"><font face="Arial"><% x_idgara = 0 'set default
value %><%
x_idgaraList = "<SELECT name='x_idgara'><OPTION value=''>Please
Select</OPTION>"
sqlwrk = "SELECT [id], [avversario] FROM [tbl_partite]"
Set rswrk = Server.CreateObject("ADODB.Recordset")
rswrk.Open sqlwrk, conn, 1, 2
If Not rswrk.EOF Then
    datawrk = rswrk.GetRows
    rowswrk = UBound(datawrk, 2)
    For rowcntwrk = 0 To rowswrk
        x_idgaraList = x_idgaraList & "<OPTION value='" & datawrk(0,
rowcntwrk) & "'"
        If datawrk(0, rowcntwrk) = x_idgara Then
            x_idgaraList = x_idgaraList & " selected"
------> qui metto la variabile che cerco poi di inserire nel campo
hidden <------
        End If
        x_idgaraList = x_idgaraList & ">" & datawrk(1, rowcntwrk) &
"</option>"
    Next
End If
rswrk.Close
Set rswrk = Nothing
x_idgaraList = x_idgaraList & "</SELECT>"
response.write x_idgaraList
%>
</font>&nbsp;</td>

     datawrk = rswrk.GetRows
Ma non vedo perchè devi usare getrows, puoi fare direttamente un loop 
dentro al recordset.
Così come non vedo il motivo di mettere tutto in una variabile, e poi 
stamparla.
Poi.
Non capisco la storia di quel "campo nascosto" che vuoi aggiungere.
Hai messo un IF x_idgara = idcorrente che scrive "selected" sulla 
tendina, ma in realtà x_idgara non lo leggi, lo metti a 0 all'inizio e 
basta.
Perchè x_idgara è il nome della tendina stessa, quindi una volta 
laciata la form, la tendina si deve selezionare sul valore già inviato.
E' necessario inizializzare la x_idgara a 0 solo se la form non è 
ancora stata lanciata.
Quindi non serve passare altro. Questo se ho ben capito.
<SELECT name='x_idgara'>
<OPTION value=''>Please Select</OPTION>
<%
x_idgara = Request("x_idgara")
IF x_idgara = "" then x_idgara = 0
x_idgara = Cint(x_idgara)
sqlwrk = "SELECT id, avversario FROM tbl_partite"
Set rswrk = Server.CreateObject("ADODB.Recordset")
rswrk.Open sqlwrk, conn
While Not rswrk.EOF
  id = rswrk("id")
  Response.Write("<OPTION VALUE=" & chr(34) & id & chr(34))
  IF id = x_idgara Then Response.write(" selected")
  Response.Write(">" & rswrk("avversario") & "</OPTION>" & chr(13))
rswrk.MoveNext()
Wend
rswrk.Close
Set rswrk = Nothing
%>
</SELECT>
------------------------------------------------
Il primo free download avverrà il 29 Febbraio.
Non approfittarne è una scelta. Sbagliata.
------------------------------------------------
http://www.zarksproject.it

 Non capisco la storia di quel "campo nascosto" che vuoi aggiungere.
ciao, grazie per il codice molto pulito (sto imparando e apprezzo molto
questi aiuti).
purtroppo non risolve il mio problema, che ho spiegato penso male.
quello che servirebbe a me è poter inviare oltre all'id della gara (id
numerico) anche il nome dell'avversario (avversario).
ecco perché cercavo di mettere nella tendina di selezione il nome
dell'avversario e di inviare nel campo nascosto - o con qualunque altro
sistema - anche l'id numerico.
il mio obiettivo finale, quando premo il pulsante di submit della form è
quello di trasferire in modo pulito al mio database sia ID che
AVVERSARIO della selezione della tendina.
grazie dell'eventuale aiuto
PGei

NOSPAMpa...@tiscali.it
 scrive...

Ora si capisce.
Allora... dentro al menù NON metti altro che il value. Non è che lì in 
mezzo, tra un <option> e l'altro, ci puoi mettere dei campi hidden.
Quelli semmai li metti fuori, prima dopo... ma non saranno associati al 
valore selezionato dal menù.
Ora, per passare entrambi avresti più possibilità.
1) passare solo l'ID, poi la pagina dopo si farà una query ritrovando 
anche il nome dell'avversario.
2) passare entrambi, separati da un carattere (per esempio un |). La 
pagina che riceverà i dati li dovrà splittare.
Per esempio, se nell'html generato avessi
<option value="15|Paperino">
Nella pagina che riceve i dati, basterebbe pigliare ciò che sta prima e 
dopo del separatore | (trovi la posizione con instr, poi giochi con 
left e mid).
3) aggiungere un campo hidden. Un javascript lato client, all'onChange 
del menù passerà il valore della voce selezionata a tale campo.
Decidi tu, io non ho idea dell'ambiente in cui ti trovi.
Personalmente, ragionando per principio su soluzioni blindate, opterei 
per la possibilità [1]. Ma magari poi nella pagina che riceve ci sono 
altre query, altri casini, e ti diventa troppo pesante.

 del menù passerà il valore della voce selezionata a tale campo.
Ho usato la terza soluzione...
grazie per l'imbeccata
PGei