Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 56 di 56
  • livello intermedio
Indice lezioni

Gestione errori, password e validazione

Come gestire gli errori, la sicurezza e la validazione in un CMS basato su PHP e MySQL.
Come gestire gli errori, la sicurezza e la validazione in un CMS basato su PHP e MySQL.
Link copiato negli appunti

Per quanto riguarda la gestione degli errori essa può essere gestita usando la variabile $errore che verrà inizializzata a 0 e settata a 1 in caso di errore. Questa situazione può essere approfondita per avere una gestione pi ù sofisticata non soltanto degli errori, ma anche della messaggistica associata. Andiamo quindi a leggere il valore che da scrivere nel database e usiamo la funzione trim() per rimuovere eventuali spazi bianchi all'inizio e alla fine della stringa:

$valore = trim($_REQUEST[$array['nome']]);

Procediamo con le customizzazioni di questo valore a seconda del tipo di input. Il primo caso sarà quello della checkbox dove trasformeremo il valore on in 1 o 0 se non sarà valorizzato.

if($array['tipo_input'] == 'checkbox'){
	if($valore == 'on'){$valore = '1';}
	else{$valore = '0';}
	}

La seconda questione riguarda il campo password che ovviamente non vogliamo memorizzare in chiaro nel nostro database. Useremo una soluzione semplicissima ma non ottimale dal punto di vista della sicurezza: md5(). Allo stato attuale potrebbe essere molto semplice risalire dall'hash della password alla stringa generante, in particolare quando la password è banale. Nella nostra situazione un'interessante complicazione d'ufficio della password potrebbe essere concatenare alla stringa data dall'utente il timestamp di inserimento.

if($array['tipo_input'] == 'password'){$valore = md5($valore);}

Per altre tipologie di campo possiamo istituire dei metodi di controllo privati nella nostra classe, per esempio, nel caso delle email potremmo verificare che la stringa che arriva al server sia un indirizzo email effettivamente valido e nel caso contrario assegnare un errore:

if($array['controllo'] == 'email'){
	$err = $this->validate_email($valore);
	if($err == 1){$errore = 1;}
	}

Il metodo in questione è fondato sulle filter_var e in questo caso può essere usato per la validazione. Quindi chiamiamo il metodo passando la stringa proveniente dal form come parametro e restituiamo in uscita un valore 0 oppure 1 a seconda dell'esito del controllo.

private function validate_email($email){
	$out = 0;
	if(filter_var($email, FILTER_VALIDATE_EMAIL)){$out = 0;}
	else{$out = 1;}
	return($out);
	}

Sulla scorta di questo esempio possiamo andare a creare diversi metodi per le validazioni server-side, per esempio potremmo pensare a un metodo per le stringhe che sono state segnate come campo obbligatorio:

if($array['controllo'] == 'stringa' && $array['obbligatorio'] == '1'){
	$err = $this->validate_string($valore);
	if($err == 1){$errore = 1;}
	}

Il controllo sarà effettuato dal metodo privato validate_string() che contiene come parametro di ingresso il valore da analizzare e come parametro opzionale la lunghezza della stringa assegnata a 1:

private function validate_string($str, $len=1){
	$out = 0;
	if(strlen($str)

In questo frangente potremmo anche utilizzare i metodi relativi alla sanificazione delle stringhe per gestire eventuali problemi di encoding oppure di conversione dei caratteri speciali.

Come ultimo passaggio, se non si sono verificati errori procediamo all'aggiornamento della riga con i valori ottenuti dal form:

if($err!=1){
	$sql = 'UPDATE '.$this->tipo.' SET '.$array['nome'].'=:valore WHERE id='.$this->id;
	$stmt4 = $db->prepare($sql);
	$stmt4->bindParam(':valore', $valore);
	$stmt4->execute();
	}

Sarà sempre una query di UPDATE, infatti anche in fase di inserimento il record è già stato creato, faremo tanti aggiornamenti quanti sono i campi del nostro form: la tabella da aggiornare la consociamo tramite la proprietà dell'oggetto tipo, il nome del campo è oggetto del ciclo nel quale ci troviamo, il valore sarà un parametro che otteniamo dalla lettura del form e dalle successive elaborazioni.

Infine la clausola WHERE sarà data dal campo id, che abbiamo adottato come convenzione, e dal valore della proprietà id. Alla fine del ciclo il record sarà inserito, aggiornato o copiato, in ogni caso restituiremo la variabile $errore che ci servirà per gestire eventuali situazioni anomale.

Ti consigliamo anche