[ASP] Controllare il testo inserito in Textarea

seranto

Nuovo Utente
7 Nov 2006
15
4
3
Verona
Buongiorno a tutti.

Premessa:
utilizzo un Form di contatto su pagina html che invia i dati inseriti dal visitatore ad una pagina di controllo scritta in asp classico, dove un codice verifica la compilazione dei campi obbligatori e l’accettazione dell’Informativa sul trattamento dati. Quando è tutto ok al visitatore appare un riepilogo di quanto inserito con la conferma dell’invio dei dati, mentre se qualcosa non ha funzionato appare un altro tipo di messaggio con dettagli sul problema.

Quesito:
nel campo Textarea del Form, dove generalmente si può scrivere abbastanza liberamente, è possibile un controllo approfondito sul testo con Classic Asp (niente Javascript)?
Ad esempio per controllare la lingua utilizzata, identificare link attivi o parole inopportune, ecc.
A questo controllo però dovrebbe poter seguire un blocco dell’invio (no cose tipo asterischi che sostituiscono le BadWords), rimandando ad una pagina adeguata contenente la descrizione del problema.

Grazie, Sergio
 

seranto

Nuovo Utente
7 Nov 2006
15
4
3
Verona
...intercettare la lingua non credo sia possibile, ci si potrebbe lavorare su per quanto riguarda le badwords e link.
Che ne pensi?

Grazie per l'intervento!
In effetti per quanto riguarda l'intercettazione della lingua era più che altro una curiosità, conviene lavorare sul riconoscimento della lingua del browser del visitatore, ecc. ecc.

Mi interessa maggiormente invece l'intercettazione di link attivi: indirizzi email o link inseriti allo scopo di far scaricare file inopportuni.
Ci tengo a precisare comunque che queste non sono necessità, sono soprattutto mie curiosità!

Utilizzo abitualmente una funzione per il controllo del formato degli indirizzi email, magari non ha una grande utilità ma l'ho sfruttata, doppiando il suo codice in una seconda funzione che ho provato a modificare per vedere se riesco ad effettuare un controllo sulle parole inserite. La sto sperimentando in locale ed a volte funziona a volte no. Sicuramente ho commesso qualche bestialità nella modifica, o meglio ancora non è la strada più corretta!
Se posso proverei a postare il codice della funzione (sono poche righe).

Grazie
 
Ultima modifica:

seranto

Nuovo Utente
7 Nov 2006
15
4
3
Verona
Grazie.
Sono riuscito a far funzionare la funzione che stavo testando! Non sarà un capolavoro ma è semplice, e mi blocca, proprio come volevo, l'invio dal Form di messaggi contenenti sia collegamenti ipertestuali che qualsiasi altra parola indico di controllare, rimandando il visitatore ad una pagina esplicativa.
Grazie comunque per avermi letto!
Sergio
 

seranto

Nuovo Utente
7 Nov 2006
15
4
3
Verona
difficile, ci sto provano... potresti pubblicare lo script?
usi InStr?
lo script che stavo testando intercetta il contenuto, lo cancella ma non so come far bloccare il tutto...
esempio: http://www.caprioli.info/fitness/filtro.asp

Il Form è in una pagina html e punta alla pagina di controllo in asp nella quale (dopo il tag di chiusura) ho inserito queste funzioni:
<%
Function CheckMessaggio(str)

Dim testomessaggio

testomessaggio = instr(str, "@") or instr(str, "www") or instr(str, "WWW") or instr(str, "http") or instr(str, "HTTP") or instr(str, "PAPERINO") or instr(str, "TOPOLINO") or instr(str, "Paperino") or instr(str, "Topolino")

if (testomessaggio > 0) and (testomessaggio < len(str)) or (testomessaggio > len(str)) then
CheckMessaggio = false
exit function
end if

CheckMessaggio = true

End Function


Function CheckEmail(str)

Dim i, j, first, last, char


i = instr(str, "@")
if (i > 0) and (i < len(str)) then
first = left(str, i - 1)
last = mid(str, i+1, len(str))
else
CheckEmail = false
exit function
end if

if (len(first) = 0) then
CheckEmail = false
exit function
end if

i = instrrev(last, ".")

if len(mid(last,1,i)) = 0 then
CheckEmail = false
exit function
end if

j = len(last) - i
if (j <= 1) or (j >= 15) then
CheckEmail = false
exit function
end if

i = 0
do until (i = len(first))
i = i + 1
char = mid(first, i, 1)

if (asc(char) <> 45) and (asc(char) <> 46) and _
(asc(char) < 48 or asc(char) > 57) and _
(asc(char) < 65 or asc(char) > 90) and _
(asc(char) <> 95) and _
(asc(char) < 97 or asc(char) > 122) then

CheckEmail = false
exit function
end if
loop

i = 0
do until i = len(last)
i = i + 1
char = mid(last, i, 1)

if (asc(char) <> 45) and (asc(char) <> 46) and _
(asc(char) < 48 or asc(char) > 57) and _
(asc(char) < 65 or asc(char) > 90) and _
(asc(char) <> 95) and _
(asc(char) < 97 or asc(char) > 122) then

CheckEmail = false
exit function
end if
loop

CheckEmail = true

End Function
%>

Nel body della stessa pagina di controllo ho inserito invece questo codice (ho omesso alcune righe riguardanti solo le impostazioni per l'invio dell'email):

<%

On error resume next

Dim campo
strHost = "localhost"

campo = ""

camponome = trim(Request.Form("nome"))
campoemail = trim(Request.Form("email"))
campomessaggio = trim(Request.Form("messaggio"))
campomessaggio = Replace(campomessaggio, vbcrlf, "<br />")

if camponome = "" then
campo = campo & ". . . indicare un nome o uno pseudonimo<br />" & ""
end if

if campoemail = "" then
campo = campo & ". . . indicare un indirizzo Email valido<br />" & ""
else
'controllo la correttezza base della formalit dell'indirizzo e-mail
if CheckEmail(campoemail) = false then
campo = campo & ". . . rivedere il formato dell'indirizzo Email, non sembra corretto<br />" & ""
end if
end if

if campomessaggio = "" then
campo = campo & ". . . scrivere un testo nel campo del messaggio<br />" & ""
else
if CheckMessaggio(campomessaggio) = false then
campo = campo & "<br />. . . si prega di ricontrollare il testo inserito nell'area del messaggio, potreste aver inserito parole o contenuti non accettati!" & ""
end if
end if

if Replace(campo,"§","") = "" then

' qui il codice per le impostazioni di invio del messaggio
' Set Mail = Server............. ecc. ecc.
' .........
' .........
' .........
' .........
' .........
' Se tutto funziona
response.write "<p>Email inviata</p>"
response.write "<p>Riepilogo di quanto inviato</p>" & "<p>Nome:<br />" & camponome & VbCrLf & "<br /><br />Messaggio:<br />" & campomessaggio & "</p>" & VbCrLf & VbCrLf

else

response.write "<h5>Sono stati rilevati degli errori</h5>"
response.write "<p>Si prega di completare queste operazioni:</p><p>" & Replace(Replace(campo, "", "<br />"),"","</p>")
response.write "<p>Email non inviata!</p>"

end if

' set Mail = nothing

%>

Quando avrò un po' di tempo amplierei la funzione per sistemare il problemino del formato maiuscolo o minuscolo, ho già un'idea al riguardo.
Volendo poi credo si possa migliorare ancora.


Sergio
 

seranto

Nuovo Utente
7 Nov 2006
15
4
3
Verona
Nel caso possa interessare ad altri posto il codice definitivo.
Non sono un professionista quindi potrebbero affiorare malfunzionamenti dovuti ad errori in cui non ho ancora avuto l'occasione di imbattermi.
La parte di codice che posto qui è ridotta rispetto l’originale dove sono presenti più campi ed altri controlli, ho fatto il possibile per limitarmi alla parte riguardante quanto viene inserito nella textarea.

<body>

<%
On error resume next

Dim Mail
Dim campo
strHost = "localhost"

campo = ""

campomessaggio = trim(Request.Form("messaggio"))
campomessaggio = Replace(campomessaggio, vbcrlf, "<br />")
' la riga successiva permette la conversione in lettere maiuscole di tutto il testo inserito, consentendo un miglior utilizzo della Funzione che effettua il controllo sulle parole (si risparmiano doppioni inutili!) ed al tempo stesso mi consente di non toccare il campo originale (campomessaggio) utile per essere richiamato in un'eventuale pagina di anteprima o per l’inserimento nel corpo della email (almeno questo sarebbe il mio intento!)
campofiltro = UCase(campomessaggio)

if campomessaggio = "" then
campo = campo & ". . . manca il testo del messaggio<br />" & ""
else
'controllo la presenza di testo o parole non accettabili
if CheckMessaggio(campofiltro) = false then
campo = campo & ". . . sono state inserite parole non ammesse dal sistema<br />" & ""
end if
end if

if Replace(campo,"§","") = "" then

' di seguito inserisco le impostazioni per il Server Mail
' Set Mail = Server.CreateObject("Persits.MailSender")
' .......... .......... ..........
' .......... .......... ..........
' Mail.Send

response.write "Testo del messaggio inviato correttamente: <br />" & campomessaggio & VbCrLf

else

response.write "Sono stati rilevati degli errori<br />"
response.write "Completare o verificare queste operazioni: <br />" & Replace(Replace(campo, "", ""),"","")
response.write "Email non inviata!"

end if

' set Mail = nothing

%>

</body>
</html>
<%
Function CheckMessaggio(str)

Dim testomessaggio
' qui sotto credo si possano inserire molte parole anche se non so quante di preciso, di quelle che interessano a me finora ne ho inserite una sessantina e al momento tutto funziona egregiamente
testomessaggio = instr(str, "WWW") or instr(str, "HTTP") or instr(str, "BLU") or instr(str, "ROSSO")

if (testomessaggio > 0) and (testomessaggio < len(str)) or (testomessaggio > len(str)) then
CheckMessaggio = false
exit function
end if

CheckMessaggio = true

End Function
%>
-----------------------------------------
OK, grazie e scusate per gli eventuali errori di cui potrei non essermi ancora reso conto!
 
  • Like
Reactions: Paolo69
Discussioni simili
Autore Titolo Forum Risposte Data
T [ASP] controllare popup Classic ASP 3
I asp | includere un file, indirizzo depositato in un db Classic ASP 0
Paolo69 Risolto reCAPTCHA v2 per ASP Classic ASP 0
P lanciare script asp (o php) da jquery Javascript 1
L Modifica file upload in ASP Classic ASP 2
felino ASP.net MVC: Exception e chiamata AJAX ASP.NET 1
W Rinominare Documenti Con Form Asp Classic ASP 9
G Registrazione utente su pagina asp Classic ASP 14
R Sviluppatore ASP.NET Offerte e Richieste di Lavoro e/o Collaborazione 0
F classic asp popolare combo box javascript Presentati al Forum 1
P Passagio dati complessi tra una ASP.NET webapi e Angular ASP.NET 1
A [ASP.Net] Gestire il profilo ADMIN in un progetto ASP NET e pattern MVC ASP.NET 0
P [ASP.Net] Problema ERR_INCOMPLETE_CHUNKED_ENCODING 206 (Partial Content) con Font ASP.NET 4
A [ASP] Confronto tra dati Form e DB Classic ASP 2
A Mantenere la validazione reindirizzandoci su un secondo sito WEb. (ASP.NET) ASP.NET 0
StephenSoftware [ASP.Net] Pagina Master ed eventi... ASP.NET 0
K [ASP] Visualizzare nome del file selezionato Classic ASP 3
S [ASP] rubrica telefonica Classic ASP 2
M MySQL e classic ASP Classic ASP 5
D [ASP] Eliminare gli zeri che nn servono Classic ASP 1
G [ASP] Ciclare i valori di 2 array Classic ASP 2
S [RISOLTO] aggiorna tabella da select option asp classic Classic ASP 7
S elimina record sql asp classic Classic ASP 5
D [ASP] Autocomplete cerca su 2 campi del db Classic ASP 1
D [ASP] Leggere Campo decimal MYSQL Classic ASP 1
S [ASP] SALVARE VALORE SELECT OPTION SU CAMPO TABELLA ACCESS Classic ASP 9
NuviaSoftware [Retribuito] [Cerco] Programmatore ambienti ASP.NET,. Net Azure web apps, Javascript Offerte e Richieste di Lavoro e/o Collaborazione 0
D [ASP] scaricare articoli Classic ASP 8
D [ASP] Mysql insert e update Classic ASP 2
V [ASP.Net] avento keydown crh13 enter ASP.NET 0
A [ASP.Net] Dropdownlist ASP.NET 0
S [ASP.Net] [ASP] Upload Image ASP.NET 6
V Ricevere messaggi email certificata con CDO o altro oggetto in ASP Classic ASP 0
A [ASP] query wish list Classic ASP 3
riminese77 [ASP.Net] Popup Bootstrap in datagrid ASP.NET 0
D [ASP] si può fare? Classic ASP 29
D [ASP] ordinamento query Classic ASP 2
M [ASP] Upload file da form controllo Classic ASP 5
S SQL, ACCESS & ASP CLASSIC - QUERY Classic ASP 3
G [ASP] Incrementare un valore on the fly su selezione select Classic ASP 3
K [ASP.Net] Realizzazione menu a tendina dipendenti ASP.NET 1
Tommy03 Aprire un file .asp nel browser Classic ASP 5
E [ASP.Net] Access 2016 ? Non si usa Microsoft Jet 4.0 ma Engine 2016 o 2010. Non va ! ASP.NET 2
D csrf : Cross Site Request Forgery in classic asp Classic ASP 0
D [ASP] Motore di ricerca interno su 2 tabelle Classic ASP 3
M [ASP.Net] [ASP] geoblocking e web.config ASP.NET 3
N Cerco sviluppatore ASP per aggiornamento sito e-commerce esistente Offerte e Richieste di Lavoro e/o Collaborazione 0
D prima prova con ASP... dove sbaglio? Classic ASP 13
L [ASP.Net] Realizzare modulo contatti PopUp ! ASP.NET 1
P Da ASP a PHP... movenext? do while not? PHP 5

Discussioni simili