Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 55
  1. #1

    Error Type: Expected 'End'

    Buongiorno.

    Mi sono impantanato in questo codice e non riesco ad uscirne:

    codice:
    <%
    
    	strUser=request.form("user")
    	strCode=request.form("codice")
    	strReferer = Request.Form("referer")
    	
    SET objRS = Server.CreateObject("ADODB.Recordset")
    objRS.ActiveConnection = cn
    
    strSql = "SELECT * FROM tbl WHERE userName LIKE '"&strUser&"' AND userCode='"&strCode&"'"
    objRS.Open strSQL
    
    IF not objRS.EOF THEN
    
    myDate = date()
    
    DataOdierna = convertDate(myDate)
    DataRegistrazione = convertDate(objRS("DataRegistrazione"))
    DataScadenzaTrimestrale = convertDate(objRS("DataScadenzaTrimestrale")) 
    DataScadenzaSemestrale = convertDate(objRS("DataScadenzaSemestrale"))
    DataUltimoAccesso = convertDate(objRS("DataUltimoAccesso"))
    
    'NUOVO CODICE
    DataVariabile = (DateDiff("d",DataOdierna,DataScadenzaTrimestrale)) 
    DataVariabileSem = (DateDiff("d",DataUltimoAccesso,DataOdierna)) 
    
    if DataVariabile =< 0 OR DataVariabileSem > 180 then %>
     
    <script language="javascript">
      alert("Attenzione! La password è scaduta.\nCambiare la password secondo i requisiti previsti.");
      </script>
      
    <%
    
    else 
    
      Response.Cookies("innovatel.it_accesso")("valido")="ok"
      Response.Cookies("innovatel.it_accesso").expires = DateAdd("n", 480, Now())
      
      if objRS("strLocked") = True then %>
    
     
     
      <script language="javascript">
      alert("Attenzione, account bloccato!");
      location.href='../index.asp';
      </script>
      
    <%
    
    Response.Cookies("innovatel.it_accesso")=""
    strUserName = (objRS("userName"))
    SQL3 = "UPDATE tbl set CodiceSbloccoAutomatico = '"&strfinal&"' where userName = '"&strUserName&"'"
    cn.Execute(SQL3)
    Response.End
    end if
    
    strUserName = (objRS("userName"))
    SQL2 = "UPDATE tbl set DataUltimoAccesso = #"&DataOdierna&"# where userName = '"&strUserName&"'"
    cn.Execute(SQL2)
    
    else  <---- riga dell'errore   
    
    SET RS = Server.CreateObject("ADODB.Recordset")
    RS.ActiveConnection = cn
    SQLSelect = "SELECT * FROM tbl WHERE userName = '"&strUser&"'"
    RS.Open SQLSelect
    
    strUserCode = RS("id_user")
    strUserMail = RS("UserMail")
    
    if IsNull(session("tentativi")) then
         session("tentativi") = 1
       else
         session("tentativi") = session("tentativi") + 1
    end if
      
        if session("tentativi") = 3 then
        SQLUpdate = "UPDATE tbl set Locked = true where id_user = "&strUserCode
        cn.Execute(SQLUpdate)
        
       
       RS.Close
       Set RS = Nothing
    end if
    end if   
         
      ChiudiDB()
      Response.Redirect Request.Form("referer")
       
    Sub ChiudiDB()
       objRS.Close
       Set objRS = Nothing
       cn.Close
       Set cn = Nothing
    End Sub
    
    End if
    End if
    
    %>
    L'errore è questo ed è sulla riga rossa segnata in grassetto:

    Error Type:
    Microsoft VBScript compilation (0x800A03F6)
    Expected 'End'
    Non so più dove sbattere la testa

  2. #2
    Semplificando il tuo codice, effettivamente sembra esserci una else che non ha molto senso.

    codice:
    <%
    IF not objRS.EOF THEN
       ....
       ....
       if DataVariabile =< 0 OR DataVariabileSem > 180 then %>
          ....
          ....
       else 
          ....
          .... 
          if objRS("strLocked") = True then %>
    
     
             ....
             ....
           end if
    
    strUserName = (objRS("userName"))
    SQL2 = "UPDATE tbl set DataUltimoAccesso = #"&DataOdierna&"# where userName = '"&strUserName&"'"
    cn.Execute(SQL2)
    
    else  <---- riga dell'errore
    Se ci fai caso quella else fa da alternativa a quale test ?
    Il blocco if objRS("strLocked") = True then si è chiuso e prima di quello sei già sotto else del test precedente, quindi sicuramente manca una end if da qualche parte, ma lì bisognerebbe conoscere la logica di quello che fai.

    Ti consiglio magari di indentare sempre i test, in modo che sia più semplice capire la logica seguita quando sei sotto condizione.

  3. #3
    Ho provato a togliere l'else che mi dici, non dà errore ma lo script non avanza.

    La logica:

    1) Riconoscimento utente:

    codice:
    strSql = "SELECT * FROM tbl WHERE userName LIKE '"&strUser&"' AND userCode='"&strCode&"'"
    objRS.Open strSQL
    
    IF not objRS.EOF THEN

    2) Se riconoscimento OK, controllo validità password:

    codice:
    if DataVariabile =< 0 OR DataVariabileSem > 180 then %>
    3) Se password valida, scrivo il cookie:

    codice:
      Response.Cookies("innovatel.it_accesso")("valido")="ok"
      Response.Cookies("innovatel.it_accesso").expires = DateAdd("n", 480, Now())
    4) Controllo che l'utente non sia bloccato, se lo è non vado avanti:

    codice:
    if objRS("strLocked") = True then %>
    
     
     
      <script language="javascript">
      alert("Attenzione, account bloccato!");
      location.href='../index.asp';
      </script>
      
    <%
    
    Response.Cookies("innovatel.it_accesso")=""
    strUserName = (objRS("userName"))
    SQL3 = "UPDATE tbl set CodiceSbloccoAutomatico = '"&strfinal&"' where userName = '"&strUserName&"'"
    cn.Execute(SQL3)
    Response.End
    end if
    5) Aggiorno la data di ultimo accesso:

    codice:
    SQL2 = "UPDATE tbl set DataUltimoAccesso = #"&DataOdierna&"# where userName = '"&strUserName&"'"
    e qui m'inghippo...

  4. #4
    ti darà errore perchè saranno chiusi male gli if...fai un controllo per ogni IF devi trovare il suo END IF (attento all'uso degli ELSE perchè mi sembra di aver visto delle cose strane). Mi raccomando stai attento agli IF annidati e rispettivi else (alle volte alcuni tipi di IF possono essere sostituiti dalla SELECT CASE che, a mio avviso, tengono molto piu pulito il codice)


  5. #5
    indenta bene il codice, e vedrai che l'errore viene fuori da sé

  6. #6
    ps: caso mai usassi dreamweaver 8 al posto del textpad, ha la possibilità di far collassare il codice in blocchi...molto utile quando non capisci dov'è che non hai chiuso un if

  7. #7
    Originariamente inviato da santino83_11_04
    ps: caso mai usassi dreamweaver 8 al posto del textpad, ha la possibilità di far collassare il codice in blocchi...molto utile quando non capisci dov'è che non hai chiuso un if
    Non uso DW...

  8. #8
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Vai a manella allora...
    Indenta, indenta...

    Roby

  9. #9
    Originariamente inviato da Roby_72
    Vai a manella allora...
    Indenta, indenta...

    Roby
    io sono e resto dell'opinione che il sano esercizio dell'indent porti ad una maggiore comprensione del codice che si sta scrivendo. pare tempo perso in ricami, ma si scoprono nefandezze immonde dovute normalmente alla fretta con cui siamo chiamati a scrivere le procedure... enjoy!

  10. #10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.