Verifica form solo con php senza javascript

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Ho un form sul quale sto facendo alcuni controlli, senza però javascript. Anche se oramai tutti lo usano vorrei che ci fosse la possibilità di fare gli stessi controlli ma solo con php.
Questo è il modulo per verificare il form, mi sapete dire se è tutto ok? Perchè quando clicco s invia senza compilare il form mi appare un errore.
PHP:
if(isset($_POST['invia'])){
	if($_SERVER['REQUEST_METHOD'] == 'POST'){
		//Filtro dati con MYSQLI
		$nome	 	= 		$mysqli->real_escape_string(trim($_POST['nome']));
		$cognome	= 		$mysqli->real_escape_string(trim($_POST['cognome']));
		$eta 		= 		$mysqli->real_escape_string(trim($_POST['eta']));
		$email 		= 		$mysqli->real_escape_string(trim($_POST['email']));
		$messaggio 	= 		$mysqli->real_escape_string(trim($_POST['messaggio']));

		//Funzione di controllo dell'inserimento dati corretti.
		function ver_testo($testo,$min,$max){
			//	$pattern="/^(?!^[0-9]*$)(?!^[a-zA-Z]*$)^([a-zA-Z0-9]{6,15}){".$min.",".$max."}$/"; //Controllo lunghezza username tra 6 e 15 caratteri compresi i jolly
			$pattern="/^[a-zA-Z0-9]{".$min.",".$max."}$/";//non prende direttamente il min e il max
			if(preg_match($pattern, $testo)){
				//testo ok
				return TRUE;
			}else{
				return FALSE;
			}
		} //Chiudo funzione verifica lunghezza dati inseriti

		//preparo un messaggio a vuoto per gli errori
		$ok_ko="";
		$visibilità = "hidden";

		if(!ver_testo($nome,3,15)){
			$ok_ko.="Sei sicuro di aver inserito il nome correttamente? <br />";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
		if(!ver_testo($cognome,3,15)){
			$ok_ko.="Sei sicuro di aver inserito il cognome correttamente? <br />";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
		if(!isset($_POST['eta']) or (empty($_POST['eta']))){
			$ok_ko.="Ricordati di selezionare la tua età.<br />";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
		if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
			$ok_ko.="L'indirizzo email è assente o non è valido <br />";}
		if(!ver_testo($messaggio,3,500)){
			$ok_ko.="Hai dimenticato di scriverci dicosa hai bisogno.<br />";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}

se poi la variabile ok_ko è vuota allora procedo con l'invio della mail, il problema è che l'errore che mi da è
HTML:
 Notice: Undefined index: eta in contatti.php on line 72

che si riferisce a questa riga
PHP:
		$eta 		= 		$mysqli->real_escape_string(trim($_POST['eta']));

Mi sapreste dire dove sbaglio?
 
Ho parzialmente sistemato, al momento hocorretto ogni singola riga mettendo la funzone isset davanti così:
PHP:
	if(!isset($_POST['nome']) && (!ver_testo($nome,3,15))){
			$ok_ko.="Sei sicuro di aver inserito il nome correttamente? <br />";
			echo "$ok_ko";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
		if(!isset($_POST['cognome']) && (!ver_testo($cognome,3,15))){
			$ok_ko.="Sei sicuro di aver inserito il cognome correttamente? <br />";
			echo "$ok_ko";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
		if(!isset($_POST['eta']) && (empty($_POST['eta']))){
			$ok_ko.="Ricordati di selezionare la tua età.<br />";
			echo "$ok_ko";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
		if(!isset($_POST['email']) && (!filter_var($email, FILTER_VALIDATE_EMAIL))){
			$ok_ko.="L'indirizzo email è assente o non è valido <br />";
			echo "$ok_ko";}
		if(!isset($_POST['messaggio']) && (!ver_testo($messaggio,3,500))){
			$ok_ko.="Hai dimenticato di scriverci dicosa hai bisogno.<br />";
			echo "$ok_ko";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}

il problema viene adesso perchè finalmente mi appaiono gli errori, ma mi appare solo l'errore della mail e non gli altri, sapete dirmi perchè?
 
Nessuno sa darmi una dritta. L'errore che mi da adesso è che nonostante tutti i controlli siano corretti l'unico avviso che mi da è quello relativo alla età, quindi lasciando il form vuoto e cliccando su invia l'errore che rileva è solo l'età mancante, e se la seleziono cerca di inviare la mail ma non manda nulla. Dove ho sbagliato?
 
Ciao, purtroppo anche facendo come dici tu mi restituisce solo l'eta come errore mentre gli altri campi non me li considera proprio. Non so cosa fare. Navigo nel buio.

Questo è il codice
PHP:
	$email 		= 		$mysqli->real_escape_string(trim($_POST['email']));
		$messaggio 	= 		$mysqli->real_escape_string(trim($_POST['messaggio']));
		$nome	 	= 		$mysqli->real_escape_string(trim($_POST['nome']));
		$cognome	= 		$mysqli->real_escape_string(trim($_POST['cognome']));
		$eta 		= 		$_POST['eta'];

		
		if($nome=""){
			$ok_ko.="Sei sicuro di aver inserito il nome correttamente? <br />";
			echo "$ok_ko";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
		if($cognome=""){
			$ok_ko.="Sei sicuro di aver inserito il cognome correttamente? <br />";
			echo "$ok_ko";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
		if($messaggio=""){
			$ok_ko.="Sei sicuro di aver inserito il merx correttamente? <br />";
			echo "$ok_ko";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
		if($email=""){
			$ok_ko.="Sei sicuro di aver inserito il mail correttamente? <br />";
			echo "$ok_ko";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
		if(empty($eta)){
			$ok_ko.="Sei sicuro di aver inserito il eta correttamente? <br />";
			echo "$ok_ko";
			echo "<meta http-equiv='Refresh' content='20; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";}
 
Fai questa prova...
PHP:
$email= $_POST['email'];
$messaggio=$_POST['messaggio'];
$nome=$_POST['nome'];
$cognome=$_POST['cognome'];
$eta=$_POST['eta'];

        
        if($nome=""){
            echo "Sei sicuro di aver inserito il nome correttamente?";
        }
        if($cognome=""){
            echo "Sei sicuro di aver inserito il cognome correttamente?";
            }
        if($messaggio=""){
            echo "Sei sicuro di aver inserito il merx correttamente?";
            }
        if($email=""){
            echo "Sei sicuro di aver inserito il mail correttamente?";
           }
        if($eta=""){
            echo "Sei sicuro di aver inserito  l\'eta correttamente?";
            }
I controlli li affini quando non hai errori...
 
Altro consiglietto non richiesto :D
Quando ricevi i dati con GET o POST fai sempre una verifica dei dati spuri, come ad esempio i caratteri di spazio all'inizio e alla fine delle stringhe.
Ecco:
PHP:
/**
*	Effettua il trimming dei dati passati alla funzione
*/
function trimValue(&$value) {
	if (!is_array($value)) $value = trim($value);
}	//	trimValue()

array_filter($_POST, 'trimValue');
In questo modo i dati non saranno mai spuri e un campo con solo un carattere di spazio non verrà validato come tale.
Poi venendo al tuo problema, io non farei l'escaping con msqli prima di verificare se un campo è vuoto o pieno, perché msqli realescape potrebbe aggiungere dei caratteri ( ti bastava fare una prova chiedendo il dump delle variabili dopo l'escaping ).
Altra cosa usa i filtri per l'escaping sono più sicuri, dato che l'ascaping non fa altro che aggiungere dei caratteri alle stringhe di caratteri "impuri" mentre i filtri ti permettono di controllare in modo più fine i dati in ingresso.
http://it2.php.net/manual/en/book.filter.php

PS perché odi tanto il javascript?
 
Ragazzi intanto grazie. Appena rientro da lavoro provo.
Quanto a javascript non lo odio anzi, solo che mi piacerebbe avere le risposte degli errori anche senza js. Quindi testo sia con js sia senza.
 
E' che con il javascript preventivamente dai la possibilità al client di avere un feddback immediato sui campi vuoti o scritti male, poi una volta inviati i dati fai anche il controllo lato server, in questo modo velocizzi l'uso del form da parte di un utente e anche lo script perché si trova i dati genericamente già puliti dai dati spuri.
 
Capito, solo che php lo capisco meglio e ci la v oro meglio, js mi è più ostico. E al momento lo.uso solo come interfaccia grafica. Diciamo che gli errori in php con js non li vedo. Almeno con le mie competenze.
 
Be non è difficile, ad esempio una routine che preveda il controllo dei campi vuoti in un form in puro JS può essere:
Codice:
function verifica(id) {
 var v = document.getElementById(id).value;
 if ( v == '' ) return false;
return true;
}

HTML:
<input type="text" id="pippo" name="pippo" value="" onblur="if ( !verifica( this.id )) this.focus();">
Non l'ho provata ma in pratica se non ho scritto castronerie :D appena tenti di lasciare il campo pippo senza scriverci nulla dentro, il js ti riporta dentro pippo, insomma non puoi più abbandonarlo :D

In Javascript non puoi vedere gli errori del PHP e viceversa.
 
Be non è difficile, ad esempio una routine che preveda il controllo dei campi vuoti in un form in puro JS può essere:
Codice:
function verifica(id) {
 var v = document.getElementById(id).value;
 if ( v == '' ) return false;
return true;
}

HTML:
<input type="text" id="pippo" name="pippo" value="" onblur="if ( !verifica( this.id )) this.focus();">
Non l'ho provata ma in pratica se non ho scritto castronerie :D appena tenti di lasciare il campo pippo senza scriverci nulla dentro, il js ti riporta dentro pippo, insomma non puoi più abbandonarlo :D

In Javascript non puoi vedere gli errori del PHP e viceversa.
Il codice che hai scritto è abbastanza chiaro e semplice, solamente che ho approcciato js più tardi di php quindi ho più dimestichezza, ovviamente sono due linguaggio diversi uno server side l'altro client side. Leggerò delle guide su js e jquery per capirlo meglio, hai per caso consigli?
 
Il codice che hai scritto è abbastanza chiaro e semplice, solamente che ho approcciato js più tardi di php quindi ho più dimestichezza, ovviamente sono due linguaggio diversi uno server side l'altro client side. Leggerò delle guide su js e jquery per capirlo meglio, hai per caso consigli?
Non sono linguaggi diversi perché client o server side, dopotutto sono solo due linguaggi di scripting.
Il javascript è un linguaggio puramente oop, lo è anche quando cerchi di usarlo in modo procedurale, tu non lo sai ma lui trasforma tutto in un unico oggetto in cui le tue procedure sono i suoi metodi.
PHP cerca solo di farlo ma è un linguaggio procedurale con la possibilità di avere delle classi e quindi poter costruire oggetti, ma è ancora lontano dall'essere un linguaggio oop. Non che cambi molto la sostanza del discorso però, ovvero tutti e due servono a programmare una macchina :)
Se vuoi approcciarti seriamente ad un linguaggio come il javascript ti consiglio di studiare l'oop partendo da una buona guida: http://www.html.it/guide/guida-programmazione-orientata-agli-oggetti/ poi magari passerai ai libri, intanto puoi leggerti anche una guida sul javascript.
Se sai l'inglese parti alla grande, se sai solo l'italiano parti zoppo, perché noi italiani traduciamo poco e male, è più facile trovare una buona guida in devengari piuttosto che in italiano e forse è per questo che gli indiani programmano tanto e bene :)
Oggi javascript a livello professionale è molto usato anche per scrivere interfacce ( vedi ad esempio gli ambienti a finestre per gnu/linux ) ma anche e sopratutto per gestire sui server il bilanciamento di carichi elevati di traffico ( vedi Node.js ) che è scritto in javascript ( versione v8 lo stesso di Chrome ) ma non solo, vedi l'editor di programmazione Brackets tutto scritto in javascript usando Node.js tanto per citare :)
Certo se si usa javascript solo per controllare i dati in ingresso in un form può sembrare riduttivo vista la sua potenza di calcolo, ma non è certo tutto qui.
Se ti interessa ti do anche il consiglio di andare su MDN e vedere le nuove api per il dom, se sai manipolare quello, diventa tutto più semplice.
A questo punto PHP sembra solo un piccolo linguaggio di scripting nemmeno tanto efficiente, ma amabile però :D
 
Non sono linguaggi diversi perché client o server side, dopotutto sono solo due linguaggi di scripting.
Il javascript è un linguaggio puramente oop, lo è anche quando cerchi di usarlo in modo procedurale, tu non lo sai ma lui trasforma tutto in un unico oggetto in cui le tue procedure sono i suoi metodi.
PHP cerca solo di farlo ma è un linguaggio procedurale con la possibilità di avere delle classi e quindi poter costruire oggetti, ma è ancora lontano dall'essere un linguaggio oop. Non che cambi molto la sostanza del discorso però, ovvero tutti e due servono a programmare una macchina :)
Se vuoi approcciarti seriamente ad un linguaggio come il javascript ti consiglio di studiare l'oop partendo da una buona guida: http://www.html.it/guide/guida-programmazione-orientata-agli-oggetti/ poi magari passerai ai libri, intanto puoi leggerti anche una guida sul javascript.
Se sai l'inglese parti alla grande, se sai solo l'italiano parti zoppo, perché noi italiani traduciamo poco e male, è più facile trovare una buona guida in devengari piuttosto che in italiano e forse è per questo che gli indiani programmano tanto e bene :)
Oggi javascript a livello professionale è molto usato anche per scrivere interfacce ( vedi ad esempio gli ambienti a finestre per gnu/linux ) ma anche e sopratutto per gestire sui server il bilanciamento di carichi elevati di traffico ( vedi Node.js ) che è scritto in javascript ( versione v8 lo stesso di Chrome ) ma non solo, vedi l'editor di programmazione Brackets tutto scritto in javascript usando Node.js tanto per citare :)
Certo se si usa javascript solo per controllare i dati in ingresso in un form può sembrare riduttivo vista la sua potenza di calcolo, ma non è certo tutto qui.
Se ti interessa ti do anche il consiglio di andare su MDN e vedere le nuove api per il dom, se sai manipolare quello, diventa tutto più semplice.
A questo punto PHP sembra solo un piccolo linguaggio di scripting nemmeno tanto efficiente, ma amabile però :D

Definire php "piccolo linguaggio" mi sembra un pò riduttivo... (comunque ognuno ha le sue idee).
 

Discussioni simili