La convalida dei dati è parte integrante del lavoro con i moduli. Non solo i dati inviati non validi possono portare a problemi di sicurezza, ma possono anche danneggiare la tua pagina web. Oggi daremo un'occhiata a come rimuovere i caratteri non validi e convalidare i dati utilizzando la funzione "filter_var".
Un esempio può essere visto sotto. Un utente ha inserito il testo "Io non ne ho uno" come loro home page. Se questi dati dovevano essere inseriti in un database e successivamente recuperati come collegamento, il collegamento sarebbe interrotto.
La maggior parte delle persone tende a considerare la convalida dei dati come un processo immensamente noioso in cui uno:
Ci sono ovvi problemi con quanto sopra elencato:
Fortunatamente, a partire dalla versione 5.2, PHP ha incluso una grande funzione chiamata filter_var
questo porta via il dolore della convalida dei dati.
filter_var
farà, entrambi, disinfettare e convalidare i dati. Qual è la differenza tra i due?
Nota: perché sanificare e non solo convalidare? È possibile che l'utente abbia digitato accidentalmente un carattere sbagliato o che sia stato inserito in una brutta copia e incolla. Sanificando i dati, si assume la responsabilità di cercare l'errore dell'utente.
filter_var
utilizzando filter_var
è incredibilmente facile. È semplicemente una funzione PHP che prende due pezzi di dati:
Ad esempio, il codice seguente rimuoverà tutti i tag HTML da una stringa:
$ string = "Ciao mondo!
"; $ new_string = filter_var ($ string, FILTER_SANITIZE_STRING); // $ new_string ora è" Hello, World! "
Ecco un altro esempio - questa volta più difficile. Il codice sottostante garantirà che il valore della variabile sia un indirizzo IP valido:
$ ip = "127.0.0.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip è TRUE $ ip = "127.0.1.1.1.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip è FALSE
È così semplice da usare filter_var
. Per un elenco completo di tutte le regole che puoi controllare, consulta la fine di questo tutorial.
Di seguito è riportato un breve esempio di input di sanificazione di due campi: un campo email e un campo home page. Questo esempio rimuoverà qualsiasi carattere che non dovrebbe verificarsi in entrambi i tipi di dati.
"; if (isset ($ _ POST ['homepage'])) echo filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); echo"
";?>
Usando il FILTER_SANITIZE_EMAIL
e FILTER_SANITIZE_URL
costanti definite da PHP, il lavoro di indovinare di sapere quali personaggi sono illegali è sparito.
Solo perché i dati sono sterilizzati non garantisce che sia formattato correttamente. Nell'esempio seguente, i dati non hanno bisogno di essere disinfettati, ma è ovvio che l'input dell'utente non è una email o un URL.
Per garantire che i dati siano formattati correttamente, devono essere convalidati.
"; else echo" $ email è NON un indirizzo email valido.
"; if (isset ($ _ POST ['homepage'])) $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (filter_var ($ homepage, FILTER_VALIDATE_URL)) echo" $ homepage è un URL valido.
"; else echo" $ homepage è NON un URL valido.
";?>
Ora che i dati sono stati convalidati, puoi essere certo che le informazioni inviate sono esattamente ciò che stai cercando.
Ora che sono stati coperti i servizi di risanamento e la convalida dei dati, metteremo queste competenze in uso con un modulo di invio e-mail rapido. Questo non significa in alcun modo la qualità della produzione: per esempio, nessun modulo dovrebbe richiedere una home page, ma funzionerà perfettamente per questo tutorial. Il modulo richiederà 4 informazioni:
Sanitizzeremo e verificheremo contro tutti e 4 i dati e invieremo l'e-mail solo se sono tutti validi. Se qualcosa non è valido o se i campi sono vuoti, il modulo verrà presentato all'utente insieme a un elenco di elementi da correggere. Restituiremo all'utente i dati sterilizzati nel caso in cui non siano consapevoli che determinati caratteri sono illegali.
Per il primo passaggio, crea semplicemente un elemento del modulo con 5 campi: il per sopra elencato e un pulsante di invio:
Puoi verificare se un modulo è stato inviato vedendo se il pulsante di invio è stato impostato. Inserisci il seguente codice sopra il modulo:
if (isset ($ _ POST ['Submit']))
Poiché sia il nome che i campi del messaggio saranno disinfettati e convalidati allo stesso modo, li faremo insieme. Innanzitutto, controlla se entrambi i campi sono vuoti, procedendo come segue:
if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")
Quindi, disinfettarli con il FILTER_SANITIZE_STRING
costante
$ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING);
Infine, verifica che i due campi non siano ancora vuoti. Questo per garantire che dopo aver rimosso tutti i caratteri non validi, non ti rimane un campo vuoto:
if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")
Non faremo alcuna convalida su questi due campi semplicemente perché non esiste un modo assoluto di validare contro un Nome o un messaggio arbitrario.
Il codice finale assomiglia a questo:
if ($ _POST ['name']! = "") $ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); if ($ _POST ['name'] == "") $ errors. = 'Per favore inserisci un nome valido.
'; else $ errors. = 'Per favore inserisci il tuo nome.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Per favore inserisci un messaggio da inviare.
'; else $ errors. = 'Per favore inserisci un messaggio da inviare.
';
Il campo di posta elettronica sarà disinfettato e convalidato proprio com'era prima nel tutorial.
Innanzitutto, verifica che non sia vuoto:
if ($ _POST ['email']! = "")
Quindi, disinfettalo:
$ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL);
Infine, convalidalo come un vero indirizzo email:
if (! filter_var ($ email, FILTER_VALIDATE_EMAIL))
Il codice finale assomiglia a questo:
if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email è NON un indirizzo email valido.
"; else $ errors. = 'Inserisci il tuo indirizzo email.
';
Anche in questo caso, il campo della home page verrà disinfettato e convalidato nello stesso modo di prima nel tutorial.
Innanzitutto, assicurati che non sia vuoto:
if ($ _POST ['homepage']! = "")
Quindi, disinfettalo e rimuovi eventuali caratteri illegali:
$ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL)
Infine, convalidalo per assicurarti che sia un vero URL:
if (! filter_var ($ homepage, FILTER_VALIDATE_URL))
Il codice finale assomiglia a questo:
if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage è NON un URL valido.
"; else $ errors. = 'Inserisci la tua home page.
';
Ora che abbiamo esaminato tutti i campi, è tempo di segnalare gli errori o inviare il messaggio. Inizia assumendo che non ci siano errori:
se (! $ errori)
Quindi crea il messaggio email:
$ mail_to = '[email protected]'; $ subject = 'New Mail from Form Submission'; $ message = 'From:'. $ _POST ['nome']. "\ N"; $ message. = 'Email:'. $ _POST ['email']. "\ N"; $ message. = 'Homepage:'. $ _POST ['homepage']. "\ N"; $ message. = "Messaggio: \ n". $ _POST ['messaggio']. "\ N \ n";
E infine, invia il messaggio:
posta ($ a, $ oggetto, $ messaggio);
Tuttavia, in caso di errori, segnalali e chiedi di riprovare:
eco ''. $ errori. '';
Il progetto completato si presenta così:
'; else $ errors. = 'Per favore inserisci il tuo nome.
'; if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email è NON un indirizzo email valido.
"; else $ errors. = 'Inserisci il tuo indirizzo email.
'; if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ homepage è NON un URL valido.
"; else $ errors. = 'Inserisci la tua home page.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Per favore inserisci un messaggio da inviare.
'; else $ errors. = 'Per favore inserisci un messaggio da inviare.
'; if (! $ errors) $ mail_to = '[email protected]'; $ subject = 'New Mail from Form Submission'; $ message = 'From:'. $ _POST ['nome']. "\ N"; $ message. = 'Email:'. $ _POST ['email']. "\ N"; $ message. = 'Homepage:'. $ _POST ['homepage']. "\ N"; $ message. = "Messaggio: \ n". $ _POST ['messaggio']. "\ N \ n"; posta ($ a, $ oggetto, $ messaggio); echo "Grazie per la tua email!
"; else echo ''. $ errori. ''; ?>
Spero che leggere questo tutorial ti abbia fornito una buona introduzione alle nuove funzionalità di filtro dei dati di PHP. Ci sono ancora molte più funzioni e regole che non sono state coperte, quindi se sei interessato a saperne di più, consulta la sezione Filtro dei dati nel manuale PHP.