Risultati da 1 a 9 di 9

Discussione: impostare il controllo dei dati immessi dagli utenti su form asp

  1. #1
    Toscano è offline Utente del Forum
    Data Registrazione
    Apr 2012
    Località
    Firenze
    Messaggi
    26

    impostare il controllo dei dati immessi dagli utenti su form asp

    Pensavo di esercitare il controllo dei dati immessi utilizzando il comando RequiredFieldValidator.

    Faccio l'esempio del mio modulo copiando il codice del primo campo, prima e dopo aver inserito RequiredFieldValidator:

    Codice:
    </script>
    <form method="post" action="inserisci1.asp">
    
    <p align="left"><font face="arial" size="2"><b>Nome cognome e classe dello studente/studentessa<br>
    <input name="Cognome e classe" value="<%=request.form("Cognome e classe")%>" size="20" type="text"></b></font></p>
    dopo aver inserito il controllo:
    Codice:
    </script>
    <form method="post" action="inserisci1.asp">
    
    <p align="left"><font face="arial" size="2"><b>Nome cognome e classe dello studente/studentessa<br>
    <input name="Cognome e classe" value="<%=request.form("Cognome e classe")%>" size="20" type="text"></b></font></p>
    
    
    
    
    <asp:RequiredFieldValidator id="ReqCognome e classe" runat="server"
      ControlToValidate="txtCognome e classe"
      Display="Static"
      ErrorMessage="(*) Errore... Il campo NOME è un campo obbligatorio!"
      ForeColor="Red">
    </asp:RequiredFieldValidator>
    Ho provato però non inserendo dati nel campo richiesto non ricevo l'errore.

    Ho attualmente due files: prenota.asp (il modulo vero e proprio) e inserisci1.asp (il file che esegue il comando prendendo i dati immessi).

    Domande: la stringa di validazione deve essere sul primo file (così come riportato nell'esempio di codice che ho postato) o sul secondo?
    C'è bisogno di un terzo file che si inserisca tra i due esistenti e che controlla la correttezza dei dati immessi?
    Posso anche costruire un controllo che impedisca all'utente di scrivere offese e quant'altro?

  2. #2
    L'avatar di Vale2
    Vale2 è offline Utente del Forum
    Data Registrazione
    May 2006
    Località
    Livorno
    Messaggi
    434
    Ciao,

    il codice che usi non è per asp ma per asp.net pagine aspx.

    Per il controllo io preferisco nella pagina dove c'è lo script con i comandi per l'inserimento dei dati.

    Un consiglio è buona prassi per il corretto funzionamento degli script non lasciare spazi fra i campi dei form e del database, vedi Cognome e classe

    se fai una request su quel form impostando:

    Cognome e classe=Request.Form("Cognome e classe") ti da errore alla prima occorrenza dopo lo spazio, la lettera e

    Cognome_e_classe Giusto, anche se lo valida dichiarando per il request una nome variabile diverso dal name del form

    aa=Request.Form("Cognome e classe") lo sconsiglio uno spazio equivale al carattere ascii %20 come scrivere

    Cognome%20e%20classe

    I campi sono gli stessi del precedente esempio postato?

    Hai un campo Telefono (un campo che deve accettare solo numeri) e altri Nome ecc, solo lettere o lettere e numeri, es Mario2.

    Valeria.

  3. #3
    Toscano è offline Utente del Forum
    Data Registrazione
    Apr 2012
    Località
    Firenze
    Messaggi
    26
    <.....il codice che usi non è per asp ma per asp.net pagine aspx.....>

    A Firenze si dice: Ho preso un granchio!

    Vabbè c'ho provato.


    Ho capito però che il controllo si deve fare sul secondo file: nel mio caso inserisci1.asp

    Per il discorso dell'inserimento del cognome sto pensando che forse mi converrebbe creare sul mio db un'altra tabella nella quale inserisco i cognomi di tutti gli studenti suddivisi per classe e, di conseguenza, farli scegliere come mi hai suggerito per i docenti da un menù a tendina. Questo eviterebbe errori o inserimenti strani. E' però un lavoro immane perchè ho quasi 1000 cognomi Però forse ne varrebbe la pena. Farò un po' di prove: ho un file excell con tutti i nomi e cognomi se potessi importarli direttamente nella tabella access sarebbe ottimo.

    Quindi resterebbero i controlli solo sui campi IndirizzoPostaElettronica e TelefonoCellulare (li scrivo così come li ho nominati sul db)

    posto il codice del file inserisci1.asp:

    Codice:
    <%
    a=request.form("Cognome e classe")
    b=request.form("IndirizzoPostaElettronica")
    c=request.form("TelefonoCellulare")
    d=request.form("NomeInsegnante")
    
    'apro la connessione
    set OBJdbConnection=Server.CreateObject("ADODB.Connection")
    OBJdbConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data/data.mdb")
     
    Set rs=server.CreateObject("ADODB.Recordset")
    rs.Open "Contatti" ,OBJdbConnection,3,3
    rs.AddNew
    rs("Cognome e classe")=a
    rs("IndirizzoPostaElettronica")=b
    rs("TelefonoCellulare")=c
    rs("NomeInsegnante")=d
    rs.update
    rs.Close
    OBJdbConnection.Close
    response.write "Scrittura avvenuta correttamente!"
    
    %>
    Attualmente, se nel modulo non digito un campo, l'errore che mi segnala è questo:

    Microsoft JET Database Engine error '80040e21'

    Field 'Contatti.Cognome e classe' cannot be a zero-length string.

    /public/prenotazioni-online/prenota/inserisci1.asp, line 18

    ma questo errore non cambia se, ad esempio ho compilato tutti i campi meno uno oppure due oppure nessuno.
    Quindi, un certo controllo c'è già. Andrebbe solo ottimizzato, magari con un messaggio specifico del tipo (manca il telefono) oppure manca l'email.

  4. #4
    L'avatar di Vale2
    Vale2 è offline Utente del Forum
    Data Registrazione
    May 2006
    Località
    Livorno
    Messaggi
    434
    Ciao,

    Questo: Field 'Contatti.Cognome e classe' cannot be a zero-length string. E' corretto il campo richiesto non può essere vuoto

    controlla nel database che tutti i campi in Visualizzazione Struttura sia impostato a Consenti lunghezza zero a NO

    se uno solo è impostato a SI è possibile inviare un dato vuoto al campo del DB, i controlli lato server.

    Codice:
    <%
    a=request.form("Cognome e classe")
    b=request.form("IndirizzoPostaElettronica")
    c=request.form("TelefonoCellulare")
    d=request.form("NomeInsegnante")
    
    
    ' Controllo inserimento indirizzo email Regular Expression minimo 3 lettere per il nome prima di @
    Function RegExpTest(strng)                                                    
    Dim regEx 
    Set regEx = New RegExp                                                      
    regEx.Pattern =  "^[\w\-\.]*[\w\.][\w\-\.]*[\w\.][\w\-\.]*[\w\.]\@[\w\.]*[\w\-\.]+[\w\-]+[\w]\.+[\w]+[\w]$"
    regEx.IgnoreCase = True
    RegExpTest = regEx.Test(strng)                                      
    End Function 
    
    ' Controllo inserimento numero di telefono Regular Expression solo Numeri
    Function RegExpTest1(strng1)                                                    
    Dim regEx1 
    Set regEx1 = New RegExp                                                      
    regEx1.Pattern =  "^[0-9]"
    RegExpTest1 = regEx1.Test(strng1)                                      
    End Function 
    
    
    ' controllo pagina di provenienza se diversa dal form ritorna a quella pagina
    conferma=request.form("conferma") 
    conferma=request.servervariables("http_referer")
    if conferma = "" then
    response.redirect "default.asp" ' redirect allla pagina di compilazione del form
    end if
    
    
    ' Controllo inserimento Nome campo vuoto primo carattere no spazio
    if a = ""  or MID((a),1,1) = " " then 
    Response.Write"Inserire il Cognome e la Classe! "
    response.write"<a href=""#"" onClick=""javascript:history.back(0)"";return false"">Torna indietro e correggi</a>"
    response.end
    end if
    
    
    ' controllo inserimento email campo vuoto primo carattere no spazio
    if b = ""  or MID((b),1,1) = " " then 
    Response.Write"Inserire l'indirizzo di Email! "
    response.write"<a href=""#"" onClick=""javascript:history.back(0)"";return false"">Torna indietro e correggi</a>"
    response.end
    end if
    
    
    ' Controllo e validazione inserimento indirizzo email
    if not(RegExpTest(b)) then 
    Response.Write"Inserire un indirizzo di Email Valido! "
    response.write"<a href=""#"" onClick=""javascript:history.back(0)"";return false"">Torna indietro e correggi</a>"
    response.end
    end if
    
    
    ' controllo inserimento Numero Cellulare campo vuoto primo carattere no spazio 
    if c = ""  or MID((c),1,1) = " " then 
    Response.Write"Inserire il Numero di Cellulare! "
    response.write"<a href=""#"" onClick=""javascript:history.back(0)"";return false"">Torna indietro e correggi</a>"
    response.end
    end if
    
    
    ' Controllo e validazione Numero Cellulare
    if not(RegExpTest1(c)) then 
    Response.Write"Il campo Numero Cellulare pu&ograve; contenere solo Numeri! "
    response.write"<a href=""#"" onClick=""javascript:history.back(0)"";return false"">Torna indietro e correggi</a>"
    response.end
    end if
    
    
    ' controllo inserimento Numero Cellulare non deve contenere numeri minori o maggiori di 10 3383333333 
    if Len(c) < 10 or Len(c) > 10 then 
    Response.Write"Il Numero di Cellulare deve contenere dieci (10) Numeri! "
    response.write"<a href=""#"" onClick=""javascript:history.back(0)"";return false"">Torna indietro e correggi</a>"
    response.end
    end if
    
    
    
    'apro la connessione
    set OBJdbConnection=Server.CreateObject("ADODB.Connection")
    OBJdbConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data/data.mdb")
    
    Set rs=server.CreateObject("ADODB.Recordset")
    rs.Open "Contatti" ,OBJdbConnection,3,3
    rs.AddNew
    rs("Cognome e classe")=a
    rs("IndirizzoPostaElettronica")=b
    rs("TelefonoCellulare")=c
    rs("NomeInsegnante")=d
    rs.update
    rs.Close
    OBJdbConnection.Close
    response.write "Scrittura avvenuta correttamente!"
    %>
    Non è possibile lasciare un campo vuoto e neppure la barra spaziatrice come primo carattere (ascii %20) anche se Consenti l'unghezza zero è impostato a no lo validerebbe come un dado valido.

    Sono inseriti tutti i controlli sui campi, poi decidi come gestirli in risposta a (Per il discorso dell'inserimento del cognome sto pensando che forse mi converrebbe creare sul mio db un'altra tabella nella quale inserisco i cognomi di tutti gli studenti suddivisi per classe e, di conseguenza, farli scegliere come mi hai suggerito per i docenti da un menù a tendina. Questo eviterebbe errori o inserimenti strani. E' però un lavoro immane perchè ho quasi 1000 cognomi).

    Regular Expression per il controllo dell'indirizzo email tre lettere [et], tre per, isp, minimo due per il dominio

    Regular Expression per l'inserimento di soli numeri nel campo TelefonoCellulare

    Controllo se sono inseriti 10 numeri per il N° cellulare no < 10 no > 10

    Altri campi controllo campo vuoto e barra spaziatrice come primo carattere.

    Questo:

    Codice:
    conferma=request.form("conferma") 
    conferma=request.servervariables("http_referer")
    if conferma = "" then
    response.redirect "pagina_form.asp" ' redirect allla pagina di compilazione del form
    end if
    Controlla se la pagina di provenienza e quella che contiene il form, se uno digita nella barra degli indirizzi la pagina destinazione viene reindirizzato alla pagine che contiene il form.

    nel form aggiungi subito dopo il pag di apertura <form>

    <input type="hidden" name="conferma" value="<%= referer %>">

    Valeria.

  5. #5
    Toscano è offline Utente del Forum
    Data Registrazione
    Apr 2012
    Località
    Firenze
    Messaggi
    26
    come sempre grazie

  6. #6
    L'avatar di Vale2
    Vale2 è offline Utente del Forum
    Data Registrazione
    May 2006
    Località
    Livorno
    Messaggi
    434
    Ciao,

    una dimenticanza,

    adesso hai i controlli nella pagina che inserisce i dati nel DB

    nell'esempio precedente dove ho inserito il javascript per aprire la PopUp per vedere l'anteprima:

    Codice:
    <script type="text/javascript">
    function anteprima(ff){
    larghezza = 600;
    altezza = 400;
    var x = (screen.width-larghezza-10)/2; 
    var y = (screen.height-altezza)/2; 
    window.open('','anteprima','width=' + larghezza + ',height=' + altezza + ',left=' + x + ',top=' + y);
    oldAction = ff.action;
    ff.target='anteprima'; 
    ff.action='anteprima.asp'; 
    ff.submit();
    ff.action = oldAction;
    }
    </script>
    Deve essere aggiunto un paramento, in quanto una volta cliccato il tasto Anteprima Invia perde il target, succede che dopo la visualizzazzione dell'anteprima il target diventa _blank e ti apre i dati in un'altra pagine senza possibilità di utilizzo del link "Torna indietro e Correggi"


    Codice:
    <script type="text/javascript">
    function anteprima(ff){
    larghezza = 600;
    altezza = 400;
    var x = (screen.width-larghezza-10)/2; 
    var y = (screen.height-altezza)/2; 
    window.open('','anteprima','width=' + larghezza + ',height=' + altezza + ',left=' + x + ',top=' + y);
      oldTarget = ff.target
      oldAction = ff.action
      ff.target='anteprima' 
      ff.action='anteprima.asp' 
      ff.submit()
      ff.target = oldTarget // aggiunta per non perdere il target alla pagina inserisci.asp
      ff.action = oldAction
    }
    </script>
    Per copiare i dati da una tabella di Excel e inserire tutti i dati in un campo del DB:

    Metti tutti i dati che interessano nella tabella A del file .Excel, dopo fai un nuovo campo nel DataBase, con il mouse che seleziona tutti i campi della tabella A di Excel cliccando sulla lettera A e con copia e incolla inserisci il tutto da Excel alla nuovo campo del DB, dopo rinomini quel campo con quello utilizzato adesso.

    Per utilizzare il metodo delle select dinamiche.

    Valeria.

  7. #7
    Toscano è offline Utente del Forum
    Data Registrazione
    Apr 2012
    Località
    Firenze
    Messaggi
    26
    ho copiato la stringa nella pagina del form però funzionava anche prima.

    A proposito, ho notato che invece sulla pagina dei controlli la stringa che segnala l'errore e definisce il link per tornare indietro e correggere:

    Codice:
    response.write"<a href=""#"" onClick=""javascript:history.back(0)"";return false"">Torna indietro e correggi</a>"
    se uso firefox non funziona. Cioè appena clicco mi rimanda al modulo ma subito dopo riapre il file inserisci.asp (quello appunto dei controlli.

    Ho letto un po' in rete e ho trovato che in effetti firefox ha quel problema. Allora ho sostituito con:

    Codice:
    response.write"<a onclick=""javascript:history.back()""; font style=""color: rgb(51, 51, 255)""; text-decoration: ""underline"">Torna indietro e correggi</a></a>"
    cioè ho tolto a href e tuto funziona. Ho dovuto però cambiare i colore della scritta Torna indietro e correggi (l'ho fatto blu e sottolineato) per evidenziare che è un link perché non si vede, ovviamente più la manina.

  8. #8
    L'avatar di Vale2
    Vale2 è offline Utente del Forum
    Data Registrazione
    May 2006
    Località
    Livorno
    Messaggi
    434
    Ciao,

    hai sostituito questo


    Codice:
    <script type="text/javascript">
    function anteprima(ff){
    larghezza = 600;
    altezza = 400;
    var x = (screen.width-larghezza-10)/2; 
    var y = (screen.height-altezza)/2; 
    window.open('','anteprima','width=' + larghezza + ',height=' + altezza + ',left=' + x + ',top=' + y);
    oldAction = ff.action;
    ff.target='anteprima'; 
    ff.action='anteprima.asp'; 
    ff.submit();
    ff.action = oldAction;
    }
    </script>
    Con questo

    Codice:
    <script type="text/javascript">
    function anteprima(ff){
    larghezza = 600;
    altezza = 400;
    var x = (screen.width-larghezza-10)/2; 
    var y = (screen.height-altezza)/2; 
    window.open('','anteprima','width=' + larghezza + ',height=' + altezza + ',left=' + x + ',top=' + y);
    oldTarget = ff.target
    oldAction = ff.action
    ff.target='anteprima' 
    ff.action='anteprima.asp' 
    ff.submit()
    ff.target = oldTarget // aggiunta per non perdere il target alla pagina inserisci.asp
    ff.action = oldAction
    }
    </script>
    Per la personalizzazione del link a piacer tuo, o direttamente nel codice del response o in un CSS che richiami con class="nome_classe"

    Ti ho aggiunto quel nuovo controllo sul target del JS altrimenti con il vecchio ogni volta che si genera (un valore richiesto risulta true (vero) al controllo, a significare che sono stati inseriti dati errati) ti apre una nuova pagina _blank se prima hai Fatto l'antreprima con solo i dato generati dal response e il target precedente lo perdi o ti apre l'anteprima se premi il button Invia.

    Io lascerei l'href o con il # (non tutti i browser funzionano con solo <a onclick=".......), se non vuoi usare il # metti un javascripo:void(0) nel link e togli il return false:

    Codice:
    response.write"<a href=""javascript:void(0)"" onclick=""javascript:history.back(0)""">Torna indietro e correggi</a>"
    altro l'ho visto solo adesso onclick NO onCliCK o OnClick stesso problema di incompatibilità con alcuni browser.

    Io preferisco il # vedi tu.

    controlla qua gi</a></a>" hai due tag di chiusura nel link.

    Un problema di Firefox è che una volta premuto un link, tasto, link immagine rimane selezioneto, quindi usando un Back sulla pagina basta premere il tasto invio della tastiera per eseguire l'ultima operazione effettuata. Per ovviare basta aggiungere al link, button ecc.. onfocus="this.blur()"

    questo evita la situazione descritta sopra <a href="link.html" onfocus="this.blur()">Clicca</a>


    Valeria.

  9. #9
    Toscano è offline Utente del Forum
    Data Registrazione
    Apr 2012
    Località
    Firenze
    Messaggi
    26
    Ho sostituito il codice come hai consigliato.

    Ho anche sostituito su inserisci1.asp la stringa così come l'hai scritta:

    Codice:
    response.write"<a href=""javascript:void(0)"" onclick=""javascript:history.back(0)""">Torna indietro e correggi</a>"
    Mi sembra che funzioni tutto

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •