impostare il controllo dei dati immessi dagli utenti su form asp

  • Creatore Discussione Creatore Discussione Toscano
  • Data di inizio Data di inizio

Toscano

Utente Attivo
27 Apr 2012
31
0
0
Firenze
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?
 
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.
 
<.....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:incazz: 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.
 
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.
 
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.
 
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.
 
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.
 
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
 

Discussioni simili