controllo dati form con jquery e php

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Buonasera, proseguo con il lavoro sul mi form di registrazione e stavolta ho un altro quesito.

Nel form che sto creando tutto è ok più o meno :elvis::elvis::cool:. Ho una validazione live dei campi ed un file esterno per l'action. La domanda che mi pongo è questa. Quando clikko sul tasto invia, inizialmente mi appare tutto in rosso, a causa della validazine live e dei campi vuoti e fin qui tutto ok, il problema è che però subito dopo mi appare una pagina bianca con le voci relative all'errore e che sono scritte in questa parte del codice
PHP:
//preparo un messaggio a vuoto per gli errori
$ok_ko="";
if(!ver_testo($username,6,15)){$ok_ko.="Username non corretto, deve essere compreso tra 6 e 15 caratteri compresi i caratteri jolly <br />";
echo "<meta http-equiv='Refresh' content='200; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
if(!ver_testo($password,6,12)){$ok_ko.="La password deve essere composta da 6 a 12 caratteri <br />";
echo "<meta http-equiv='Refresh' content='200; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
if(!ver_testo($password2,6,12)){$ok_ko.="La password di conferma non coincide con la prima <br />";}
if($password != $password2){$ok_ko.="Le password non coincidono <br />";}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){$ok_ko.="L'indirizzo email non è valido <br />";}

cosa devo fare per evitare che appaiano queste scritte? Secondo voi è un controllo ridondante, visto che c'è già il livevalidator? Posso semplicemente eliminarle correggendo il codice? Vorrei che il form una volta apparsi gli errori live rimanga così fin quando l'utente non compila tutti i campi contrassegnati.

grazie mille.
 
Notato che le verifiche vengono fatte su variabili definite dall'utente, ma se per esempio username è un parametro di input, come mai utilizzi $username e non $_POST['username'] o $_GET['username'] ?
 
ciao
non conosco live, ma se è in js è lato client, quindi tutti i controlli lato client sono facilmente bypassabili, per quello diventano necessari i controlli php lato server molto più difficilmente aggirabili.
 
Ok e fin qui lo so anche io. E' che non so come fare per far apparire una pagina classica senza che appaiano solamente delle righe su bianco. Devo fare delle pagine apposta?
 
ciao
io faccio cosi:
nel file css ho
Codice:
.ok_ko{
	width:680px;
	height: auto;
	/*position: absolute;*/
	top: 200px;
	background-color:#FF0000;
	font-size:14px;
	font-weight:300;
	text-align:center;
	visibility:hidden;
	z-index:99;
}
poi dove stampo il messaggio di errore o invio
PHP:
<?php
//......
$visibilita="hidden";
if($messaggio_OK_KO !=""){
	$visibilita="visible";
	//se $messaggio_OK_KO non è vuoto lo stampo
	echo "<div style=\"visibility:$visibilita;\" class=\"ok_ko\">$messaggio_OK_KO</div>";
	$messaggio_OK_KO ="";
	echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
//......
?>
in questo modo il messaggio si sovrappone al form e dopo 4 secondi sparisce, operando con i css gli dai la formattazione che vuoi
 
Quindi dovrei sostituire questo
PHP:
if(!ver_testo($username,6,15)){$ok_ko.="Username non corretto, deve essere compreso tra 6 e 15 caratteri compresi i caratteri jolly <br />";
echo "<meta http-equiv='Refresh' content='200; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
con questo?
PHP:
if($messaggio_OK_KO !=""){
    $visibilita="visible";
    //se $messaggio_OK_KO non è vuoto lo stampo
    echo "<div style=\"visibility:$visibilita;\" class=\"ok_ko\">$messaggio_OK_KO</div>";
    $messaggio_OK_KO ="";
    echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
ogni singola riga e quindi controllo? oppure basta una condizione sola per applicarla ad ognuna?

Ho provato ad inserire così il codice
PHP:
//preparo un messaggio a vuoto per gli errori
$ok_ko="";
$visibilità = "hidden";
if(!ver_testo($username,6,15)){$ok_ko.="Username non corretto, deve essere compreso tra 6 e 15 caratteri compresi i caratteri jolly <br />";echo "<meta http-equiv='Refresh' content='200; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
if(!ver_testo($password,6,12)){$ok_ko.="La password deve essere composta da 6 a 12 caratteri <br />";
echo "<meta http-equiv='Refresh' content='200; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
if(!ver_testo($password2,6,12)){$ok_ko.="La password di conferma non coincide con la prima <br />";}
if($password != $password2){$ok_ko.="Le password non coincidono <br />";}
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){$ok_ko.="L'indirizzo email non è valido <br />";}
if(!controllodata($eta)){$ok_ko.="La data non è stata inserita in modo corretto <br />";}
		if ($ok_ko != "") {
			$visibilità = "visibile";
			echo"<div style=\"visibility:$visibilità;\" class=\"ok_ko\"></div>";
			$ok_ko ="";
			echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
		}
ma mi restituisce solamente l'errore d'inserimento captcha che ho messo alla fine del form con questo codice
PHP:
if ($securimage->check($_POST['captcha_code']) == false) {
// codice errato
	echo "Il codice inserito non è corretto.<br /><br />";
	echo "Torna <a href='javascript:history.go(-1)'>indietro</a> e riprova.";
	echo "<meta http-equiv='Refresh' content='2; URL=TEST%20FORM%20REAL%20TIME.PHP'>";
	exit;}
 

Discussioni simili