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

Gestione errori, password e validazione

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

Nell'ambito del nostro progetto la gestione degli errori può essere effettuata usando una 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 sia degli errori che della messaggistica associata. Andiamo quindi a leggere il valore che dovremo 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 valorizzato.

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

La seconda questione riguarda il campo password che non vogliamo memorizzare in chiaro. 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 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, nel caso delle email potremmo per esempio verificare che la stringa che arriva al server sia un indirizzo email valido e, in 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 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);
	}

Possiamo ora andare a creare diversi metodi per le validazioni server side, potremmo per esempio 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 o 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 dato che 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 nostro record sarà inserito, aggiornato o copiato, in ogni caso restituiremo la variabile $errore che ci servirà per gestire eventuali situazioni anomale.

Ti consigliamo anche