L'ultimo articolo scritto su Sir Bit risale a marzo 2014. La versione che state visitando è un archivio: le pagine sono accessibili come sempre e gli autori potrebbero rispondere ai commenti, ma non saranno inseriti dei nuovi articoli. Visita questa pagina per i dettagli.

PHP – Controllare le variabili nei form: codice fiscale, partita iva, email e prezzo

Buste partono dal portatile

Per evitare errori di inserimento, è bene controllare le stringhe passate dal form con funzioni mirate al tipo di dati (1)

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;
}
Copyright immagini

(1) http://www.bpsltd.org/174-tips-for-managing-email-marketing.html

Etichette
Etichette:, ,
Ultimi Commenti
  1. Nicola
  2. marco
  3. silvio
  4. simone

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.