BigThink

PHP: validare un form con le eccezioni

Validare un formE’ da tempo che programmo in PHP e ho avuto modo di apprezzare la programmazione OO, rispetto all’approccio procedurale, in particolare grazie al maggior supporto agli oggetti di PHP5.

Vedremo in questo articolo come validare i campi di un form, utilizzando la gestione delle eccezioni, disponibili solo dalla versione 5, appunto.

Darò per scontato che già sappiate programmare ad oggetti con PHP. Quindi, procediamo.

In PHP — così come in molti altri linguaggi — le eccezioni si gestiscono con questo blocco di codice:

try{
    // Provo ad eseguire delle istruzioni
}catch(Exception $e){
    // Eseguo delle istruzioni alternative
}
// Riprende l'esecuzione normale

Vediamo allora come sfruttare questa cosa.

Poniamo di avere una pagina HTML con un form di registrazione utente con i campi user, password ed email.

Creiamo la nostra classe User: avrà i suoi costruttori, vari metodi, un metodo di inserimento ed uno di validazione.

class User{
    // ...
    function insert($dati){
        $this->validate($dati);
        // inserimento nel database
    }

    function validate($dati){
        if($dati['user'] == "")
            throw new Exception("il campo 'user' e' obbligatorio");
        if($dati['password'] == "")
            throw new Exception("il campo 'password' e' obbligatorio");
        if(!$this->checkMail($dati['email']))
            throw new Exception("è stata inserita una email non valida");
    }
     // ...
}

Come possiamo vedere, il metodo insert fa prima una chiamata al metodo validate e poi esegue le varie operazioni di inserimento nel database.

Il metodo validate, invece, verifica la correttezza dei dati inseriti e, nel caso in cui non soddisfi i criteri, lancia una eccezione che risalirà fino al chiamante di insert e dovrà quindi essere gestita. Da notare che è possibile passare una stringa esplicativa dell’errore.

Dall’altra parte, nella pagina con il form, ecco cosa accade:

if($_POST){
    try{
        $user->insert($_POST);
        echo 'Inserimento completato';
    }catch(Exception $e){
        echo 'Errore: ' . $e->getMessage();
    }
}
// codice per il form

Se è stato fatto il POST del form, chiamiamo la insert all’interno della try-catch: nel caso vada tutto ok mostriamo il messaggio di conferma (oppure possiamo fare il redirect ad un’altra pagina), altrimenti mostriamo l’errore.

Come potrete immaginare, il metodo getMessage restituirà il messaggio di errore che abbiamo impostato precedentemente nel metodo di validazione.

Mi sembra un modo molto pulito e facilmente mantenibile per validare i campi di un form, sfruttando al meglio le caratteristiche di PHP5.

Articolo scritto da Ghido

Fondatore di BigThink.it, si occupa dello sviluppo e del coordinamento dei progetti tecnologici. Specializzato nel Marketing su Facebook e nello sviluppo di Applicazioni Social, fa consulenza e formazione ad aziende ed agenzie.

Leggi anche...

PHP tip: ordinare un array di date

PHP tip: ordinare un array di date

Come spesso accade, mi trovo ad affrontare alcuni problemi durante i miei lavori in php e ne approfitto per condividere con voi le soluzioni. Oggi vediamo come ordinare un array di date in php. Solitamente, per ordinare un array numerico o di stringhe, si usa la funzione sort, piuttosto che asort per gli array associativi. ...
Twitter: c'erano una volta le API

Twitter: c’erano una volta le API

Eccoci alla seconda puntata della miniserie di Camu. Se la prima puntata era dedicata agli Hook di WordPress, oggi si parlerà delle API di Twitter e nella prossima metteremo tutto insieme. Oggi, quando nel gergo informatico si parla di API, non ci si riferisce a quei simpatici insetti che producono il miele e ci ...
PHP trick: inviare header dopo aver scritto nella pagina

PHP trick: inviare header dopo aver scritto nella pagina

Mi è capitato spesso nella mia carriera di programmatore PHP di trovarmi di fronte a questo errore: Warning: Cannot modify header information - headers already sent by... E' un problema che incorre quando tentiamo di inviare informazioni header, dopo aver già mandato del contenuto ad una pagina: ad esempio se abbiamo scritto qualcosa e proviamo ...
Test Driven Development: prima i test, poi il codice

Test Driven Development: prima i test, poi il codice

Un metodo non tradizionale e agile per lo sviluppo e il design del software è il Test Driven Development (TDD): sviluppo guidato dai test. E' un'alternativa al solito metodo a cascata (waterfall), secondo il quale, dopo un'adeguata analisi e progettazione, si inizia a scrivere il codice e solo alla fine si passa al ...
Array delle nazioni del mondo e delle province italiane

Array delle nazioni del mondo e delle province italiane

Creando una qualsiasi applicazione web (ma anche desktop), può capitare molto spesso di aver bisogno di una lista delle nazioni del mondo, piuttosto che quella delle province italiane. Paradossalmente, risorse del genere sembrano quasi introvabili sul web o comunque richiedono lunghe ricerche. Qualcosa si trova, ma spesso non è nel formato che serve a ...

1 Commento

  1. Ottimo post.

    20 marzo 2010, 20:16

2 Citazioni