Dunque, ho un problema che non capisco come risolvere.
In sostanza ho un form "dinamico" che viene creato leggendo una tabella del DB e che si occupa di modificare la stessa.

Parto subito dal codice:

codice:
While recordset.EOF = False
%>

<tr>
<td><%=recordset("Nome")%></td>
<td><%=recordset("Email")%></td>
<td>
<input type="checkbox" name="<%=recordset("Id")%>" value="yes" <%if recordset("Riceve")="yes" then%>checked<%end if%>>
</td>
</tr>

<%
recordset.MoveNext
Wend
End If
%>

</table>
<input type="submit" name="provola" value="Fatto">
</form>
Quindi come vedete il form è una tabella così fatta:
Nome e cognome che sono campi della tabella e un bottone, di nome "Id" (ovvero un numero che corrisponde all'Id del record in questione) che è checked se il campo "Riceve" del record è "yes".

Ovviamente l'applicazione si occupa di mettere a "no" i campi che il form restituirà non checckati e di passare a "yes" quelli checked.

Per fare questo chiama questa pagina:

codice:
If recordset.EOF = True Then
Response.Redirect ...
Else

While recordset.EOF = False

Id_record = recordset("Id")

If Request.Form(Id_record) = "yes" then
SQL = ""
SQL = SQL & "UPDATE "
SQL = SQL & scelta
SQL = SQL & " SET Riceve='yes' "
SQL = SQL & "WHERE "
SQL = SQL & "Id = " & Id_record
prova = prova & " Id " & Id_record & "uguale " & Request.Form(Id_record)

else
If Request.Form(Id_record) = "" then
SQL = ""
SQL = SQL & "UPDATE "
SQL = SQL & scelta
SQL = SQL & " SET Riceve='no' "
SQL = SQL & "WHERE "
SQL = SQL & "Id = " & Id_record
prova = prova & " Id " & Id_record & " uguale a " & Request.Form(Id_record)

End if
End if

conn.Execute(SQL)

recordset.MoveNext
Wend
End If

recordset.Close
Set recordset = Nothing
conn.Close
Set conn = Nothing
Quindi a seconda del valore di ogni bottone, cambia il campo "Riceve" del record relativo (facendo un confronto tra il nome del bottone e l'Id del record).
La stringa prova l'ho inserita per cercare di capire cosa sta succedendo.



Ora il problema:

Sto facendo una prova con una semplice tabella che contiene solo tre righe.

Se spunto tutti e tre i bottoni, prova ha questo valore:
Id 1 uguale yes Id 2 uguale yes Id 3 uguale yes
Ed è ok.

Se spunto solo i primi due:
Id 1 uguale yes Id 2 uguale yes
Niente info sul terzo bottone.
In più il valore "Riceve" con Id "3" viene cmq messo a "yes", quando dovrebbe essere a "no"

Se spunto solo il primo bottone:
crasha.
Il valore dell'indice di una matrice non è compreso nell'intervallo consentito.
A questa riga
If Request.Form(Id_record) = "yes" then



Ho provato ad eliminare questo controllo nell'else:
If Request.Form(Id_record) = "" then
Pensando che fosse superfluo, in quanto cmq è giusto che entri nell'else se l'if (bottone = yes) da falso.
Non solo i problemi restano, ma arrivano anche risultati più strani:

Se spunto il secondo e il terzo bottone e lascio unchecked il primo, prova diventa:
Id 1 uguale yes Id 2 uguale yes Id 3 uguale a Fatto
(Fatto è il valore del bottone di submit o_O )
e vengono messi a yes i campi "Riceve" con Id 1 e 2, mentre viene messo a no il campo con Id 3.

Stessa cosa se spunto primo e terzo bottone o secondo e terzo.
Insomma, se solo un bottone non è checked succede quello.

Se invece due bottoni non sono checked, crasha.



Se riuscite a darmi una mano a capire che cosa ho combinato vi sarò infinitamente grato!