View Full Version : [JSP] Controlli sui FORM :( help!
Matrixbob
30-06-2005, 09:27
... mentre in PHP facevo il controllo dei campi attraverso "Espressioni Regolari" applicati alla tecnica SELF_SUBMIT (cioè in action richiamava se stessa come pagina), in JSP mi trovo completamente spiazzato.
Anche perchè la ho implementata in questa maniera la possibilità d'iscriversi ad una conferenza ed ai suoi sottoeventi:
> INSERISCI UNA CONFERENZA COI SUOI EVENTI: esegui
http://img148.imageshack.us/img148/4980/13zd.gif
http://img148.imageshack.us/img148/7024/25bu.gif
> Evento inserito correttamente, sarai reindirizzato all'Admin's menù tra 10 secondi.
Matrixbob
30-06-2005, 09:30
Come si potrebbe intuire sto implementando le pagine dedicate all'administrator che devono per forza essere realizzate in J2EE :(
... mentre quelle cliente in PHP. :mbe:
Inoltre ho dei vincoli d'integrita referenziale da rispettare nell'inserimento, prima la conferenza e poi i sottoeventi.
Ultima cosa: sto utilizzanto le DBTAGS per accedere a MySQL.
Che il cielo mi protegga ...
:ubriachi: :angel: :gluglu: :fiufiu:
DigitalKiller
30-06-2005, 11:24
... mentre in PHP facevo il controllo dei campi attraverso "Espressioni Regolari" applicati alla tecnica SELF_SUBMIT (cioè in action richiamava se stessa come pagina), in JSP mi trovo completamente spiazzato.
Non puoi utilizzare la stessa tecnica anche in JSP?
Matrixbob
30-06-2005, 11:27
Non puoi utilizzare la stessa tecnica anche in JSP?
Non so come, probabilmente c'è un equivalente, ma non ne ho idea.
... oppure come non c'è un equivalente della "phpinfo();" o se c'è non è cosi immediata ... insomma non saprei da dove iniziare.
Secondo voi che semantica e sintassi per la pragmaticità del mio controllo?! :confused: :mc:
Avete qualche esempio da indicarmi?!
DigitalKiller
30-06-2005, 11:34
Premetto che non conosco il php, comunque da questa tua frase
..SELF_SUBMIT (cioè in action richiamava se stessa come pagina)...
forse questo può aiutarti.
Quando una pagina richiama se stessa, faccio così:
String submit = request.getMethod();
if (submit.equals("POST")){
......
}
Non so se può esserti davvero utile
Matrixbob
30-06-2005, 11:59
Killer, ora ti posto parte del codice che ho sviluppato, ma prima ti faccio 1 domanda:
il form lo sto inoltrando col metodo GET, posso inoltrarlo anche col metodo POST ed usare sempre la "getParameter" nello script successivo?!
<%
/* utilizzo del buon JAVA per controllare il flusso delle query */
// catturo il parametro nascosto chiamato "nuovo"
String nuovo = request.getParameter("nuovo");
// lo stampo per vedere se riesco a catturarlo
out.print("La conferenza è nuova?! " + nuovo);
// confronto tra stringhe
if (nuovo.equals("TRUE")) {%>
<sql:statement id="statement1" conn="conn1">
<sql:query>
INSERT INTO conferenza (conferenza_id, argomento, scadenza)
VALUES ('','<%=request.getParameter("argomento")%>', '<%=request.getParameter("scadenza")%>')
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<%}%>
<sql:statement id="statement2" conn="conn1">
<sql:query>
SELECT * FROM conferenza WHERE argomento='<%=request.getParameter("argomento")%>'
</sql:query>
<sql:resultSet id="rs2"><sql:getColumn position="1" to="conferenza_id" scope="page" /></sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
<div align="center">
<fieldset id="nominativo">
<legend>Inserimento Evento</legend>
<br />
<h3 align="center">Evento già esistente</h3>
<table border="1" align="center">
<thead>
<th>evento_id</th><th>conferenza_id</th><th>nome</th><th>luogo</th>
<th>tipo</th><th>data</th><th>posti_disponibili</th><th>costo</th>
</thead>
<tbody>
<sql:statement id="statement3" conn="conn1">
<sql:query>
SELECT * FROM evento WHERE conferenza_id='<%= pageContext.getAttribute("conferenza_id") %>'
ORDER BY evento_id
</sql:query>
<sql:resultSet id="rs3">
<tr>
<td><sql:getColumn position="1"/></td>
<td><sql:getColumn position="2"/></td>
<td><sql:getColumn position="3"/></td>
<td><sql:getColumn position="4"/></td>
<td><sql:getColumn position="5"/></td>
<td><sql:getColumn position="6"/></td>
<td><sql:getColumn position="7"/></td>
<td><sql:getColumn position="8"/></td>
</tr>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
</tbody>
</table>
<br />
<sql:closeConnection conn="conn1"/>
<h4 align="left" class="titolomissione">Inserisci i tuoi dati in minuscolo, tutti i campi sono obbligatori.</h4>
<div align="center" class="missionlog">
<form name="ins-evento" method="get" action="02-next2.jsp">
<h3 align="left">Nuovo evento</h3>
<p align="left">Nome:<input type="text" name="nome" size="32" maxlength="32" /></p>
<p align="left">Luogo:<input type="text" name="luogo" size="32" maxlength="32" /></p>
<p align="left">Tipo:<select name="tipo">
<option>main</option>
<option>tutorial</option>
<option>workshop</option>
</select></p>
<p align="left">Data:<input type="text" name="data" size="32" maxlength="32" /></p>
<p align="left">Posti disponibili:<input type="text" name="posti_disponibili" size="32" maxlength="32" /></p>
<p align="left">Costo:<input type="text" name="costo" size="32" maxlength="32" /></p>
<p align="left"><input name="conferenza_id" type="hidden" value="<%= pageContext.getAttribute("conferenza_id") %>" /></p>
<p align="left"><input type="reset" value="Reset"/><input type="submit" value="Prosegui"/></p>
</form>
</div>
</fieldset>
Matrixbob
30-06-2005, 12:01
... e dall'altra parte li catturo cosi i dati:
<sql:statement id="statement1" conn="conn1">
<sql:query>
INSERT INTO evento (evento_id, conferenza_id, nome, luogo, tipo, data, posti_disponibili, costo)
VALUES ('', <%= request.getParameter("conferenza_id") %>,
'<%=request.getParameter("nome")%>', '<%=request.getParameter("luogo")%>',
'<%=request.getParameter("tipo")%>', '<%=request.getParameter("data")%>',
'<%=request.getParameter("posti_disponibili")%>', '<%=request.getParameter("costo")%>')
</sql:query>
<sql:execute ignoreErrors="true" />
</sql:statement>
<h3 align="center"><font color="green">Evento inserito correttamente, sarai reindirizzato all'Admin's menù tra 10 secondi.</font></h3>
<meta http-equiv="Refresh" content="10; url=http://localhost:8080/www/j2ee-sysconf/menu.jsp" />
<h3 align="center">Tabella eventi aggiornata</h3>
<table border="1" align="center">
<thead>
<th>evento_id</th><th>conferenza_id</th><th>nome</th><th>luogo</th>
<th>tipo</th><th>data</th><th>posti_disponibili</th><th>costo</th>
</thead>
<tbody>
<sql:statement id="statement2" conn="conn1">
<sql:query>
SELECT * FROM evento WHERE conferenza_id='<%= request.getParameter("conferenza_id") %>'
ORDER BY evento_id
</sql:query>
<sql:resultSet id="rs2">
<tr>
<td><sql:getColumn position="1"/></td>
<td><sql:getColumn position="2"/></td>
<td><sql:getColumn position="3"/></td>
<td><sql:getColumn position="4"/></td>
<td><sql:getColumn position="5"/></td>
<td><sql:getColumn position="6"/></td>
<td><sql:getColumn position="7"/></td>
<td><sql:getColumn position="8"/></td>
</tr>
</sql:resultSet>
<sql:execute ignoreErrors="true" />
</sql:statement>
</tbody>
</table>
DigitalKiller
30-06-2005, 12:10
Ti conviene usare il metodo POST per due motivi:
1) con il GET i dati inseriti nel form "viaggiano" in chiaro, cioè l'indirizzo della pagina viene scritto aggiungendo questi dati e non è molto sicuro in caso di dati sensibili (es. password)
2) quando richiami la pagina (cioè al primo accesso, ancor prima di cliccare sul submit) c'è già una richiesta GET. Questa cosa l'ho notata solo ora e non sto riuscendo a trovare una soluzione :D
Io preferisco usare il metodo POST, poi naturalmente de gustibus :)
Ps. comunque si, la request.getParameter() la puoi usare sia con il GET che con il POST
Matrixbob
30-06-2005, 12:16
Ti conviene usare il metodo POST per due motivi:
1) con il GET i dati inseriti nel form "viaggiano" in chiaro, cioè l'indirizzo della pagina viene scritto aggiungendo questi dati e non è molto sicuro in caso di dati sensibili (es. password)
2) quando richiami la pagina (cioè al primo accesso, ancor prima di cliccare sul submit) c'è già una richiesta GET. Questa cosa l'ho notata solo ora e non sto riuscendo a trovare una soluzione :D
Io preferisco usare il metodo POST, poi naturalmente de gustibus :)
Ps. comunque si, la request.getParameter() la puoi usare sia con il GET che con il POST
OK, allora provo.
.. tu però non m'abbandonare perchè ho paura :eek: "vedo la gente morta"! :sofico:
(scherzo ovviamente)
DigitalKiller
30-06-2005, 12:18
Tranquillo! oggi non ho proprio voglia di lavorare :D e fino alle 18 sono in ufficio
Matrixbob
30-06-2005, 12:29
Tranquillo! oggi non ho proprio voglia di lavorare :D e fino alle 18 sono in ufficio
1 MOMENTO: ... si ma tanto ando vado se non so come utilizzare le espressioni regolari (http://freephp.html.it/articoli/view_articolo.asp?id=69) in JAVA o JSP?!
Non è che magari qualche "pazzo" ha già ideato delle funzioni che posso importare tipo:
isEmail();
isText();
isUrl();
etc?!
Sarebbero utilissime!!!
Mo vedo se su emule si trova qualcosa :rolleyes:
DigitalKiller
30-06-2005, 12:32
isEmail();
Questa ce l'ho, ma in js
isText();
Questa che fa?
Matrixbob
30-06-2005, 12:33
Ahahah ma che ne so, li ho inventati io sul momento! :)
Nella mia fantasia speravo che quacuno le avesse implementate lato server con le espressioni regolari:
http://freephp.html.it/articoli/view_articolo.asp?id=69
tipo in PHP.
Questa ce l'ho, ma in js
Questa che fa?
... magari controllare che sia un testo senza numeri :D
DigitalKiller
30-06-2005, 12:36
Ma và!? :D
Vado a pranzare
Matrixbob
30-06-2005, 14:30
Ma và!? :D
Vado a pranzare
CMQ se magari avete dei controlli in JS e siete cortesi da passarmeli, magari all'admin il controllo glielo facio fare lato client, al MAX se sbaglia entra da phpMyAdmin o da client grafico nel DBMS e li cancella direttamente da lì, no?!
DigitalKiller
30-06-2005, 14:37
Secondo me, il controllo è meglio farlo lato client, almeno carichi di meno il server.
Comunque, questo è lo script js per il controllo della mail.
function CheckMail(form){
var x = form.email.value;
var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
if (!filter.test(x)){
alert('Inserire un indirizzo email valido!');
form.email.focus();
return false;
}
}
Matrixbob
30-06-2005, 14:41
mmm e poi come la lancio o richiamo nel forum?!
Io la definizione la metto nel mio file.JS e poi ?
DigitalKiller
30-06-2005, 14:52
mmm e poi come la lancio o richiamo nel forum?!
Io la definizione la metto nel mio file.JS e poi ?
Allora...
Lo script lo puoi inserire direttamente nella tua pagina jsp in questo modo:
<SCRIPT language="JavaScript">
......
</SCRIPT>
oppure salvarlo in un file esterno script.js e richiamarlo nella pagina jsp in questo modo:
<script language="JavaScript" type="text/JavaScript" src="percorso/script.js"></script>
Per utilizzarlo invece, al tag <FORM> devi aggiungere l'evento ONSUBMIT in questo modo:
<form name="form1" method="post" action="tua_pagina.jsp" onSubmit="return CheckMail(this)">
........
</form>
Matrixbob
30-06-2005, 14:56
Allora...
Lo script lo puoi inserire direttamente nella tua pagina jsp in questo modo:
<SCRIPT language="JavaScript">
......
</SCRIPT>
oppure salvarlo in un file esterno script.js e richiamarlo nella pagina jsp in questo modo:
<script language="JavaScript" type="text/JavaScript" src="percorso/script.js"></script>
Per utilizzarlo invece, al tag <FORM> devi aggiungere l'evento ONSUBMIT in questo modo:
<form name="form1" method="post" action="tua_pagina.jsp" onSubmit="return CheckMail(this)">
........
</form>
Perfett, in serata provo.
Nel frattempo preparo tutte altre noiosissime query da fare (10!!!) :(
DigitalKiller
30-06-2005, 15:01
Perfett, in serata provo.
Nel frattempo preparo tutte altre noiosissime query da fare (10!!!) :(
In bocca al lupo!
Io mi rimetto a lavoro e cerco di terminare il mio di sito :cry:
Matrixbob
01-07-2005, 23:58
In bocca al lupo!
Io mi rimetto a lavoro e cerco di terminare il mio di sito :cry:
1 volta che sei online ti faccio vedere la parte che ho implementato sputando sangue in JSP, così migari mi dai qualche consiglio.
Ammesso che non ti rompe le scatole. :)
Magari mi dici secondo te quali controlli fare sulla sintassi-semantica dei dati immessi.
DigitalKiller
02-07-2005, 07:50
1 volta che sei online ti faccio vedere la parte che ho implementato sputando sangue in JSP, così migari mi dai qualche consiglio.
Ammesso che non ti rompe le scatole. :)
Magari mi dici secondo te quali controlli fare sulla sintassi-semantica dei dati immessi.
Durante il weekend sono sul forum solo il sabato mattina, mentre durante la settimana sono sempre qui! :D
Comunque nessuna rottura di scatole, spero solo di esserti davvero d'aiuto :)
Ti avverto, però, non sono un programmatore esperto, sono solo un appassionato :)
Matrixbob
04-07-2005, 18:21
Grazie Killer la funzione che mi hai passato in JS funziona che è una meraviglia, adesso vedo se qualcuno le ha già da parte altre, tipo per ladata etc, altrimenti mi tocca implementarle da solo usando la tua come matrice.
CMQ è propiro programmata bene.
PS
Poi le richiamo così in:
onSubmit="return CheckMail(this); return ChekText(this); return CheckDate(this)"
... e via dicendo?!
Matrixbob
04-07-2005, 18:43
Provo questo che è 1 JS un po' elaborato, ma l'idea è simile alla mia.
L'unica cosa è che devo sfoltirla per le voci dei campi che non m'interessano, come nick etc, altrimenti dato che è tutto in if/then/else mi sa che non funziona.
Giusto?!
function Modulo() {
// Variabili associate ai campi del modulo
var nome = document.modulo.nome.value;
var cognome = document.modulo.cognome.value;
var nickname = document.modulo.nickname.value;
var password = document.modulo.password.value;
var conferma = document.modulo.conferma.value;
var nascita = document.modulo.nascita.value;
var citta = document.modulo.citta.options[document.modulo.citta.selectedIndex].value;
var indirizzo = document.modulo.indirizzo.value;
var telefono = document.modulo.telefono.value;
var email = document.modulo.email.value;
var homepage = document.modulo.homepage.value;
var firma = document.modulo.firma.value;
// Espressione regolare dell'email
var email_reg_exp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
//Effettua il controllo sul campo NOME
if ((nome == "") || (nome == "undefined")) {
alert("Il campo Nome è obbligatorio.");
document.modulo.nome.focus();
return false;
}
//Effettua il controllo sul campo COGNOME
else if ((cognome == "") || (cognome == "undefined")) {
alert("Il campo Cognome è obbligatorio.");
document.modulo.cognome.focus();
return false;
}
//Effettua il controllo sul campo NICKNAME
else if ((nickname == "") || (nickname == "undefined")) {
alert("Il campo Nickname è obbligatorio.");
document.modulo.nickname.focus();
return false;
}
//Effettua il controllo sul campo PASSWORD
else if ((password == "") || (password == "undefined")) {
alert("Il campo Password è obbligatorio.");
document.modulo.password.focus();
return false;
}
//Effettua il controllo sul campo CONFERMA PASSWORD
else if ((conferma == "") || (conferma == "undefined")) {
alert("Il campo Conferma password è obbligatorio.");
document.modulo.conferma.focus();
return false;
}
//Verifica l'uguaglianza tra i campi PASSWORD e CONFERMA PASSWORD
else if (password != conferma) {
alert("La password confermata è diversa da quella scelta, controllare.");
document.modulo.conferma.value = "";
document.modulo.conferma.focus();
return false;
}
//Effettua il controllo sul campo DATA DI NASCITA
else if (document.modulo.nascita.value.substring(2,3) != "/" ||
document.modulo.nascita.value.substring(5,6) != "/" ||
isNaN(document.modulo.nascita.value.substring(0,2)) ||
isNaN(document.modulo.nascita.value.substring(3,5)) ||
isNaN(document.modulo.nascita.value.substring(6,10))) {
alert("Inserire nascita in formato gg/mm/aaaa");
document.modulo.nascita.value = "";
document.modulo.nascita.focus();
return false;
}
else if (document.modulo.nascita.value.substring(0,2) > 31) {
alert("Impossibile utilizzare un valore superiore a 31 per i giorni");
document.modulo.nascita.select();
return false;
}
else if (document.modulo.nascita.value.substring(3,5) > 12) {
alert("Impossibile utilizzare un valore superiore a 12 per i mesi");
document.modulo.nascita.value = "";
document.modulo.nascita.focus();
return false;
}
else if (document.modulo.nascita.value.substring(6,10) < 1900) {
alert("Impossibile utilizzare un valore inferiore a 1900 per l'anno");
document.modulo.nascita.value = "";
document.modulo.nascita.focus();
return false;
}
//Effettua il controllo sul campo CITTA'
else if ((citta == "") || (citta == "undefined")) {
alert("Il campo Città è obbligatorio.");
document.modulo.citta.focus();
return false;
}
//Effettua il controllo sul campo INDIRIZZO
else if ((indirizzo == "") || (indirizzo == "undefined")) {
alert("Il campo Indirizzo è obbligatorio.");
document.modulo.indirizzo.focus();
return false;
}
//Effettua il controllo sul campo TELEFONO
else if ((isNaN(telefono)) || (telefono == "") || (telefono == "undefined")) {
alert("Il campo Telefono è numerico ed obbligatorio.");
document.modulo.telefono.value = "";
document.modulo.telefono.focus();
return false;
}
else if (!email_reg_exp.test(email) || (email == "") || (email == "undefined")) {
alert("Inserire un indirizzo email corretto.");
document.modulo.email.select();
return false;
}
//Effettua il controllo sul campo HOMEPAGE
else if ((homepage == "") || (homepage == "undefined") || (homepage.indexOf("http://") == (-1))) {
alert("Il campo Homepage non può essere privo di http://");
document.modulo.homepage.value = "http://";
document.modulo.homepage.select();
return false;
}
//Effettua il controllo sul campo FIRMA
else if ((firma == "") || (firma == "undefined") || (firma.indexOf("Inserisci qui il tuo slogan!") != (-1))) {
alert("Il campo Firma è obbligatorio e non si può inserire la scritta predefinita.");
document.modulo.firma.focus();
return false;
}
//INVIA IL MODULO
else {
document.modulo.action = "elabora_dati.asp";
document.modulo.submit();
}
}
Matrixbob
04-07-2005, 19:28
La ho adattata così al mio problema:
<!--
function Insautore() {
// Variabili associate ai campi del modulo
var nome = document.insautore.nome.value;
var cognome = document.insautore.cognome.value;
var email = document.insautore.email.value;
var pwd = document.insautore.pwd.value;
// Espressione regolare dell'email
var email_reg_exp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-]{2,})+\.)+([a-zA-Z0-9]{2,})+$/;
//Effettua il controllo sul campo NOME
if ((nome == "") || (nome == "undefined")) {
alert("Il campo Nome è obbligatorio.");
document.insautore.nome.focus();
return false;
}
//Effettua il controllo sul campo COGNOME
else if ((cognome == "") || (cognome == "undefined")) {
alert("Il campo Cognome è obbligatorio.");
document.insautore.cognome.focus();
return false;
}
//Effettua il controllo sul campo PASSWORD
else if ((pwd == "") || (pwd == "undefined")) {
alert("Il campo Password è obbligatorio.");
document.insautore.pwd.focus();
return false;
}
else if (!email_reg_exp.test(email) || (email == "") || (email == "undefined")) {
alert("Inserire un indirizzo email corretto.");
document.insautore.email.select();
return false;
}
//INVIA IL MODULO
else {
document.insautore.action = "02-next1.jsp";
document.insautore.submit();
}
}
//-->
Ma se ho 200 form devo scrivere 200 funzioni?! :confused: :cry:
Matrixbob
04-07-2005, 23:21
Ho dirottato l'argomentazione qui:
[FORM] Controlli JS sui campi. (http://www.hwupgrade.it/forum/showthread.php?p=8796597#post8796597)
... ma l'omertà la fa da padrone! :D
1 cosa curiosa che potrebbe tornare utile alle mia pagine.jsp:
http://www.mokabyte.it/2004/07/jstruts-7.htm
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.