Newsgroup: it.comp.www.asp
Titolo: messaggio selettivo su validazione?

ho questo codice di validazione:
'prendo i parametri da un form
nome = Request.Form ("nome")
cognome = Request.Form ("cognome")
telefono = Request.Form ("telefono")
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open......
'fai un controllo se i dati immessi 
'nome, cognome, telefono
'sono uguali a quelli nel db
strsql = "Select id From db " 
strsql = strsql & " WHERE nome = '" & nome & "' AND " 
strsql = strsql & " cognome = '" & cognome & "' AND "
strsql = strsql & " telefono = '" & telefono & "'"
set objRs = objConn.Execute(strsql)
' se arriva alla fine del rs allora
If objRs.EOF then
'uno o piu record non corrispondono, dagli un messaggio 
Response.write "un dato e' diverso dalla sua scheda personale .<br>"
Else 
................................
in questa maniera pero' la persona che ha compilato il form non sa quale campo
ha sbagliato, ora se i campi non fossero 3 come in questo caso ma molti di piy
capite che la cosa comincia a diventare ardua.
qualcuno di voi e' capace a far partire un messaggio a seconda di quale dei 3 campi
e' stato inserito in maniera errata?
grazie
Ivo
--
Enjoy the .NET community! ASPItalia.com
 
http://forum.aspitalia.com/
 
http://www.aspitalia.com/

 Response.write "un dato e' diverso dalla sua scheda personale .<br>"
   *******************************************************
    messaggio =  ""
   If objRs("nome") <> nome Then
        messaggio = messaggio & " nome non valido <br>"
    end if
   If objRs("cognome") <> cognome Then
        messaggio = messaggio & " cognome non valido <br>"
    end if
   If objRs("telefono ") <> telefono Then
        messaggio = messaggio & " telefono non valido <br>"
    end if
response.write messaggio
'** potrebbe essere una soluzione
*******************************************************


		    
http://www.aspitalia.com/
Una soluzione ci sarebbe ma dipende dal fatto che ci sia qualche dato che sia univoco
nel recupero del record come per esempio il numero di telefono o un indirizzo email.
Se invece il recupero dipende dal insieme di alcuni dati come dimostrato nel tuo
esempio allora si presenta un problema.
Per prima cosa il query dovrebbe cambiare in modo da recuperare il record anche
se un dato e errato -
strsql = "Select id From db " 
strsql = strsql & " WHERE nome = '" & nome & "' OR " 
strsql = strsql & " cognome = '" & cognome & "' OR "
strsql = strsql & " telefono = '" & telefono & "'"
Altrimenti il recordset sarebbe vuoto e non ci sarebbe modo da vedere quale dato
potrebbe essere errato.
Con questo perr c'h il rischio di recuperare piy record perchi ci potrebbe essere
la seguente situazione -
MARIO, ROSSI, 02123456
DARIO, ROSSI, 02987654
Se l'utente scrive DARIO, ROSSI, 06456789 - come si fa a capire quale dato h errato?
Cioh, lui h Dario Rossi o ha scritto male il suo nome e voleva scrive Mario oppure
h un altro Dario Rossi (il numero di telefono h diverso).
Qundi ci vuole un campo univoco. In questo caso si potrebbe fare come seque -
Supponimao che il numero di telefono si univoco allora il query sarebbe come segue
-
strsql = "Select id, nome, cognome From db " 
strsql = strsql & " WHERE telefono = '" & telefono & "'"
set objRs = objConn.Execute(strsql)
bValid=false
iValid=0
if objRs.EOF and objRS.BOF then
'recordset h vuoto quindi telefono non trovato
  strMsg="Numero di telefono non trovato"
Else
  If objRs.Fields("nome")=nome then
    iValid=1
  End If
  If objRs.Fields("cognome")=cognome then
    iValid=iValid+2
  End If
  bValid=iValid AND 3
  If not bValid then
     If  iValid AND 0 Then
      strMsg='Nessun dato corrisponde'
    Else
       If iValid AND 1 then
        strMsg="Nome<br>"
      End If
      If iValid AND 2 Then
        strMsg="Cognome<br>"
      End If
      If iValid AND 4 Then
        strMsg="Telefono<br>"
      End If
      strMsg="I seguenti dati non corrispondono - <br>"
  End If
End If
If Not bValid Then
  Response.Write strMsg
End If
Per estendere la verifica basta aumentare per ogni verifica iValid in multipli
di 2 e il controllo per bValid diventa la somma di tutti.
Spero di essere stato chiaro (l'italiano non h la mia madrelingua) 
Ciao 
