Ciao, sto costruendo una specie di test.

nel mio DB ho 2 tbl, una per le domande e una per le risposte

Genero a random 45 domande e, sotto ad ogni domanda, metto, sempre dinamicamente, tutte le risposte legate a quella domanda.

Per controllare la risposta che da un'utente, ho messo, affianco ad ogni risposta, una checkbox.

Il problema è: come faccio a recuperare al click del pulsante invio le risposte giuste e quelle sbagliate??

Grazie

- nessuna prigione per la mente -
35 messaggi dal 06 settembre 2002
Ciao,
a mio modo di vedere dovresti usare dei radiobutton.
Ti spiego come si fa con quest'utlimi:
quando crei dinamicamente i radiobuttondevi fare in modo che il loro nome sia identificato con il numero della doamnda e che il loro valore sia relativo al numero della risposta

<%
'******************************
'PAGINA CON IL FORM
'******************************
Dim conn, strConn
strConn = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & ServerMappath(LocazioneDB)
conn.open strConn
Variabile_Domande_Totali = 45
Response.write "<form name="form1" method="post" action="pagina.asp"">
For i = 1 to Variabile_Domande_Totali
'Filtro il db selezionando la domanda da stampare
SQL = "SELECT * FROM Domande WHERE Id_Domanda = " & i
Set rs = Server.CreatEObject("ADODB.Recordset")
rs.Open SQL, Conn, 1, 3
'scrivo il testo della domanda
Response.write "Domanda n." & i & "<br>"
SQL = "SELECT * FROM Risposte WHERE Id_Domanda = " & i
Set rt = Server.CreatEObject("ADODB.Recordset")
rt.Open SQL, Conn, 1, 3
'Stampo tanti radiobutton tanti quante sono le risposte alla domanda
Variabile_Numero_Di_Risposte_Alla_Domanda = rt.recordcount
For i = 1 to Variabile_Numero_Di_Risposte_Alla_Domanda
Response.write "<input type=""radio"" name=""radiobutton" & Variabile_Numero_Domanda & """ value =" & i & """>"
Next
Next

%>

In questo modo ottieni un form popolato di tutte le domande con i relativi checkbox con nomi legati alla domanda, ad esempio

radiobutton1 con valore 1 (per la domanda 1 - risposta 1)
radiobutton1 con valore 2 (per la domanda 1 - risposta 2)
radiobutton1 con valore 3 (per la domanda 1 - risposta 3)
radiobutton1 con valore 4 (per la domanda 1 - risposta 4)
.... e così via per tutte le altre domande


A questo punto cliccando il pulsante invia rimandi ad una pagina di elaborazione, ad esempio pagina.asp, nella quale effettuerai lo stesso loop sopra scritto nel quale però, invece di stampare i radiobutton, verifichi se sono stati selezionati e se nel database hanno un valore vero o falso.

<%
'*****************
'PAGINA ELABORAZIONE DATI
'******************
Dim conn, strConn
strConn = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & ServerMappath(LocazioneDB)
conn.open strConn
SQL = "SELECT * FROM Domande ORDER BY Id_Domanda Asc"
Set rs = Server.CreatEObject("ADODB.Recordset")
rs.Open SQL, Conn, 1, 3
Do while not rs.eof
Rispostadata = Request.form("radiobutton" & rs("Id_Domanda"))
SQL = "SELECT * FROM Risposte WHERE Id_Domanda = " & i & " AND Id_Risposta = " & Rispostadata
Set rt = Server.CreatEObject("ADODB.Recordset")
rt.Open SQL, Conn, 1, 3
Response.write "Domanda " & rs("Id_Domanda") & "
if rt("Risposta") = True Then
Response.write " - Risposta Corretta<br>""
else
Response.write " - Risposta Sbagliata<br>"
end if
rs.movenext
loop
%>

In questo modo rilevi le risposte date e ci fai quel che vuoi.

Ciaooo
879 messaggi dal 09 luglio 2002
www.i-studio.it
Ciao,
prima di tutto volevo capire perche' usi delle checkbox? Si tratta di domande a risposte multiple? Se non fosse cosi', ti conviene usare dei radio button, cosi' hai le risposte esclusive.
Gestiamo la situazione con le checkbox.
Dai, a tutte le checkbox relative ad una domanda, lo stesso nome. Come value, metti invece il codice della risposta associata.
Ammettiamo quindi, ad esempio, che alla domanda con codice "18" siano associate tre risposte, con codice 210, 211 e 212. Il tuo codice sara':

<input type="checkbox" name="domanda18" value="210"> Risposta A
<br>
<input type="checkbox" name="domanda18" value="211"> Risposta B
<br>
<input type="checkbox" name="domanda18" value="212"> Risposta C


A questo punto, se l'utente seleziona la risposta B e C a te arrivera' nella pagina successiva la variabile request("domanda18") che conterra' il valore "210, 211". Usando la funzione split puoi dividere i valori. Da qualche parte immagino che tu saprai quale e' la risposta esatta. Immagino che sara' scritto in un campo della tabella delle domande. Per cui, con un'unica istruzione puoi verificare se la risposta e' esatta:
sql = "select * from tabella_domande where risposta_esatta = " & singola_risposta


Spero di essere stato chiaro
Ciao
Alex

Internetworking Studio Srl
www.i-studio.it
il problema è che ad ogni domanda ci potrebbero essere più risposte...

per quello utilizzo dei checkbox!!

Inoltre le domande non sono obbligatoriamente domanda 1, 2, 3, 4 ecc... fino a 45

ma sono a random tra 1200 domande!!!! quindi potrebbe esserci alla domanda 1 l'ID 1134, alla domanda 2 l'ID 453, ecc...

lo so è complesso, ma dovete aiutarmi!
Modificato da pip19 il 23 luglio 2003 13.12 -

- nessuna prigione per la mente -
879 messaggi dal 09 luglio 2002
www.i-studio.it
Se vedi la mia risposta, noterai che ho preso in esame proprio il caso delle checkbox.

Ciao
Alex

Internetworking Studio Srl
www.i-studio.it
si ho visto, infatti stavo proprio tentando di far qualcosa col tuo esempio!!!

solo che ho questo problema!

io devo fare un ciclo dove prendo dinamicamente il numero della domanda da 0 a 44 (totale 45) per fare il request!!!

Solo che il codice qua sotto non funzia!!!
<%
for i=0 to 44
%>
<tr>
<td>Domanda n° <%=i%> - <%=request.Form(i)%></td>
</tr>
<%
next
%>

- nessuna prigione per la mente -
GRANDE CE L'HO FATTA!!!!

GRAZIE MILLE ADESSO HO CAPITO COME DEVO PROSEGUIRE!!!

- nessuna prigione per la mente -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.