Nei form di contatti o di registrazione (ma anche, per esempio, di invio preventivo), per una corretta gestione dei dati dovremo innanzitutto curarci di controllare i campi passati una volta cliccato sul tasto di submit.
Il controllo è indispensabile per evitare che l’utente inserisca involontariamente – o intenzionalmente – i dati nel formato sbagliato, causando un errore nel database in caso di inserimento o l’invio di stringhe errate attraverso l’email.
In questo articolo mostrerò alcune semplici funzioni per formattare quattro tipi di campi che si trovano spesso nei form: codice fiscale, partita iva, email e prezzo.
Le funzioni possono essere prese così come sono, non hanno bisogno di modifiche particolari. Il loro risultato sarà sempre un valore booleano: true nel caso in cui i dati passati siano corretti e false nel caso opposto.
Download script
Si presume che, nel form, siano stati passati i seguenti quattro campi di input (qui sono volutamente privi di controlli e di formattazioni, che vi dovrete preoccupare di inserire):
1 2 3 4 5 6 7 |
<form method="post" action="" name="form"> <input type="text" name="cod_fisc" value="" maxlength="16" /> <input type="text" name="p_iva" value="" maxlength="11" /> <input type="text" name="prezzo" value="" /> <input type="text" name="email" value="" /> <input type="submit" name="invia" value="Invia form" /> </form> |
Una volta cliccato sul tasto di submit, i campi passati come post saranno controlli richiamando le dovute funzioni:
1 2 3 4 5 |
<?php if( isset($_POST['invia']) and codiceFiscale($_POST['cod_fisc']) and controllaPIVA($_POST['p_iva']) and prezzo_inserimento($_POST['prezzo']) and email_inserimento($_POST['email']) ) //inserimento nel database (o invio per email dei dati) else //errore |
Codice fiscale
Edit 6 marzo 2012: sostituita la funzione ereg()
, deprecata dalla versione php 5.3, con la funzione preg_match()
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
<?php function codiceFiscale($cf){ if($cf=='') return false; if(strlen($cf)!= 16) return false; $cf=strtoupper($cf); if(!preg_match("/[A-Z0-9]+$/", $cf)) return false; $s = 0; for($i=1; $i<=13; $i+=2){ $c=$cf[$i]; if('0'<=$c and $c<='9') $s+=ord($c)-ord('0'); else $s+=ord($c)-ord('A'); } for($i=0; $i<=14; $i+=2){ $c=$cf[$i]; switch($c){ case '0': $s += 1; break; case '1': $s += 0; break; case '2': $s += 5; break; case '3': $s += 7; break; case '4': $s += 9; break; case '5': $s += 13; break; case '6': $s += 15; break; case '7': $s += 17; break; case '8': $s += 19; break; case '9': $s += 21; break; case 'A': $s += 1; break; case 'B': $s += 0; break; case 'C': $s += 5; break; case 'D': $s += 7; break; case 'E': $s += 9; break; case 'F': $s += 13; break; case 'G': $s += 15; break; case 'H': $s += 17; break; case 'I': $s += 19; break; case 'J': $s += 21; break; case 'K': $s += 2; break; case 'L': $s += 4; break; case 'M': $s += 18; break; case 'N': $s += 20; break; case 'O': $s += 11; break; case 'P': $s += 3; break; case 'Q': $s += 6; break; case 'R': $s += 8; break; case 'S': $s += 12; break; case 'T': $s += 14; break; case 'U': $s += 16; break; case 'V': $s += 10; break; case 'W': $s += 22; break; case 'X': $s += 25; break; case 'Y': $s += 24; break; case 'Z': $s += 23; break; } } if( chr($s%26+ord('A'))!=$cf[15] ) return false; return true; } ?> |
Controllo partita iva
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<?php function controllaPIVA($variabile){ if($variabile=='') return false; //la p.iva deve essere lunga 11 caratteri if(strlen($variabile)!=11) return false; //la p.iva deve avere solo cifre if(!ereg("^[0-9]+$", $variabile)) return false; $primo=0; for($i=0; $i<=9; $i+=2) $primo+= ord($variabile[$i])-ord('0'); for($i=1; $i<=9; $i+=2 ){ $secondo=2*( ord($variabile[$i])-ord('0') ); if($secondo>9) $secondo=$secondo-9; $primo+=$secondo; } if( (10-$primo%10)%10 != ord($variabile[10])-ord('0') ) return false; return true; } ?> |
Controllo email
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php //Controlla l'inserimento della email function email_inserimento($variabile){ // se la stringa è vuota sicuramente non è una mail if(trim($variabile)=="") return false; // controllo che ci sia una sola @ nella stringa $num_at=count(explode( '@', $variabile ))-1; if($num_at != 1) return false; // controllo la presenza di ulteriori caratteri "pericolosi": if(strpos($variabile, ';') || strpos($variabile, ',') || strpos($variabile, ' ')) return false; if(preg_match('/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $variabile)) return true; else return false; } ?> |
Controllo prezzo
1 2 3 4 5 6 |
//Formatta l'inserimento del prezzo, dopo aver sostituito l'eventuale virgola con il punto function prezzo_inserimento($variabile){ $variabile=str_replace(",", ".", $variabile); $variabile=(float)$variabile; return $variabile; } |
(1) http://www.bpsltd.org/174-tips-for-managing-email-marketing.html
Ho bisogno di contattarvi in pvt per alcune delucidazioni, vorrei inserire il controllo codice fiscale in un form gia creato, il quale modui sono html, mentre il modulo di invio è php
Ciao Nicola,
scrivi pure qui i tuoi dubbi, potrebbero essere utili in futuro per altri utenti con gli stessi tuoi problemi.
Anche io dovrei inserire solo il codice fiscale, però non so cosa tagliare del tuo script e soprattutto dove metterlo.
grazie
Ciao Marco,
prima di tutto dal form devi eliminare tutti gli input inutili (quelli che hanno l’attributo “name” con valore “p_iva”, “prezzo” e “email). In pratica tieni solo l’input del codice fiscale e il tasto di invio del form.
Poi devi modificare l’if in questo modo:
if( isset($_POST[‘invia’]) and codiceFiscale($_POST[‘cod_fisc’]) ){
//tuo codice
}else{
//messaggio di errore: il codice fiscale è sbagliato
}
Però non ho capito bene la domanda del “dove bisogna metterlo”: stai parlando all’interno della pagina? Se scarichi lo zip sopra, troverai già il codice pronto (ti basta modificarlo come ti ho appena spiegato).
scusate ma sto provando e risporvando la funzione per la validità dell apartita iva mi accade un fatto strano con la partita iva inventata da me 56789456789 con la vostra funzione passa vera (true) mentre sul sito delle Finanze mi dice che non è esatta … a chi devo credere ?
Ciao Silvio,
in caso di discordanze tieni conto del codice nel sito delle Finanze, perché gestisce anche alcune eccezioni e casi particolari.
Lo script qui sopra è da usare per gran parte dei casi e per evitare errori “grossolani” da parte dell’inserimento degli utenti (per esempio errori di lunghezza, inserimento di caratteri sbagliati, posizione di alcune cifre, ecc.).
Il codice è stato comunque testato su p.iva veritiere e fasulle e si comporta correttamente in buona parte dei casi
Buona sera rispolvero questa discussione perchè non riesco a far funzionare lo script in nessun modo, spiego meglio
io avrei bisogno di verificare la correttezza formale di una p.iva, non inserita da una form, ma estratta da un dB ma non riesco a capire dove posso passare la p.iva come variabile per farla verificare.
Grazie per l’aiuto
Salve Simone,
è sufficiente passare la Partita Iva come parametro della funzione, in questo modo:
$check = controllaPIVA(‘01234567891’);
I numeri ovviamente devono essere sostituiti dalla partita iva. $check avrà valore true se la Partita Iva è corretta