Creazione di una funzione per validare un form

Gli argomenti di questa pagina

  • Esempio di una pagina che usa funzioni personali

Esempio di una pagina che usa funzioni personali

Ora vediamo come è possibile validare un form con pochissime righe usando una o più funzioni personali. Per fare questo prepariamo due files distinti:

config.php dove scriverò delle variabili e delle matrici che serviranno all'applicativo che mi accingo a sviluppare: questo file è editabile per aggiungere o togliere elementi
res.php dove scriverò le funzioni che serviranno all'applicativo: di norma questo non verrà più editato
Il tutto va posto in una cartella res dentro la cartella che ospita l'applicativo

In una normalissima pagina php richiamiamo tramite include i due files dalla cartella res (config.php e res.php).
Poi, circondato da simboli # ho evidenziato dove vanno inseriti i codici relativi al form ed al processo al form nonchè il codice aggiuntivo che ho usato per visualizzare i dati appena inseriti.

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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Validazione dati</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
</head>
<body>
Eventuale contenuto HTML o altro codice PHP
<?php
include('res/config.php');
include(
'res/res.php'); 
if (isset(
$_REQUEST['button'])) {
#############################################################################
#
#    Qui la procedura per il processo al form
#
#############################################################################
}
?>
Altro eventuale contenuto HTML o altro codice PHP
<?php
#############################################################################
#
#    Questo il codice aggiuntivo per mostrare i dati dopo il processo
#
#############################################################################
if ($messaggio == "no") {            //    la variabile $messaggio viene dal processo al form
    
echo $return "<br />\n";
} elseif (
$messaggio == "ok") {
    echo 
"I valori accettati<br />\n";
    foreach (
$return as $key => $value) {
        echo 
$key " - " $value "<br />\n";
    }
}
?>
<!--
#############################################################################
#
#    Qui il form per accogliere i dati
#
#############################################################################
-->
Altro eventuale contenuto HTML o altro codice PHP
</body>
</html>


Il file config.php:

In questo file ho indicato solo i campi che sono obbligatori mettendoli in una matrice $fields_req() che uso nel processo al form quando esamino i campi che sono stati inviati.

1
2
3
4
5
6
7
8
<?php
$fields_req 
= array (
"nominativo",
"indirizzo",
"mail",
"tel"
);
?>

Il file res.php:

Questo è il file con le funzioni personali. La funzione da richiamare è la validate_form() inviandole come parametri la matrice dei campi obbligatori ($fields_req) e la matrice associativa dei valori raccolti ($values) in questo modo
$return = validate_form($fields_req, $values);
Entrati nella funzione vediamo queste azioni:

  • vengono inizializzate tre variabili che ci serviranno durante il lavoro
    • $error = "";
      $valori = array();
      $content = array();
  • tramite il ciclo foreach preleviamo dalla matrice $values la chiave ed il valore
  • si entra subito in una IF e, se il valore letto non è vuoto si continua con la validazione e la pulizia della stringa, altrimenti si controlla se il campo vuoto è un campo obbligatorio (righe 46 - 48)
  • operazioni di pulizia delle stringhe
    • prima operazione: con la funzione trim() si tolgono eventuali spazi ed altri caratteri predefiniti ad inizio e fine stringa.
    • seconda operazione: con le funzioni htmlentities() e stripslashes() vengono convertiti alcuni caratteri speciali in entità HTML e rimossi eventuali slash aggiunti dal passaggio dal form alla variabile
  • compiute le operazioni di pulizia si passa alla convalida per verificare che valori appartenenti a particolari campi (cap, data_nascita, ecc) siano corretti come formato
  • per ognuno di questi campi particolari è stata creata una specifica funzione, perciò, esaminando il $key restituito dal ciclo foreach, si decide se andare o meno alla giusta funzione.

Ecco le funzioni necessarie per la convalida dei dati del form. Dopo la funzione validate_form() ci sono altre funzioni che servono per la convalida dei dati cap, data_nascita, ecc. Queste funzioni in questo contesto sono richiamate di volta in volta dalla funzione principale, ma non è esclusa la possibilità di usarle singolarmente dalla pagina che ospita lo script PHP qualora se ne abbia la necessità.

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
function validate_form($req_fields$values) {
    
$error "";
    
$valori = array();
    
$content = array();
    foreach (
$values as $key => $value) {
        if (
trim($value) != "") {
            
$value trim($value);
            
$value htmlentities(get_magic_quotes_gpc() ? stripslashes($value) : $value);
            if (
$key == "cap") {
                if (
verify_cap ($value)) {
                    
$valori[$key] = $value;
                } else {
                    
$error .= $key " valore non valido<br />\n";
                }                
            } elseif (
$key == "data_nascita") {
                if (
validate_date ($value)) {
                    
$valori[$key] = $value;
                } else {
                    
$error .= $key " valore non valido<br />\n";
                }                
            } elseif (
$key == "cap") {
                if (
verify_cap ($value)) {
                    
$valori[$key] = $value;
                } else {
                    
$error .= $key " valore non valido<br />\n";
                }                
            } elseif (
$key == "tel") {
                if (
verify_tel ($value)) {
                    
$valori[$key] = $value;
                } else {
                    
$error .= $key " valore non valido<br />\n";
                }                
            } elseif (
$key == "mail") {
                if (
validate_mail ($value)) {
                    
$valori[$key] = $value;
                } else {
                    
$error .= $key " valore non valido<br />\n";
                }                
            } elseif (
$key == "note") {
                    
$valori[$key] = nl2br($value) . "<br />\n";
            } else {
                
$valori[$key] = $value;
            }            
        } else {
            if (
in_array($key$req_fields)) {
                
$error .= $key "campo obbligatorio<br />\n";
            }            
        }
    }
    if (
$error != "") {
        return 
$error;
    } else {
        return 
$valori;
    }
}
function 
verify_cap($string) {
    
$pattern="/^[0-9]{5}$/";
    if(
preg_match($patterntrim($string))) {
        return 
TRUE;
    } else {
        return 
FALSE;
    }
}
function 
verify_tel($string) {
    
$pattern="/^((\+|00)\d{1,5}[ -])?\d{1,5}([\/ -])?\d{5,}$/";
    if(
preg_match($patterntrim($string))) {
        return 
TRUE;
    } else {
        return 
FALSE;
    }
}
function 
validate_date($date) {
    if (
preg_match("/^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})$/",$date,$parts)) {    
        if(
checkdate($parts[2],$parts[1],$parts[3])) {
            return 
true;
        } else {
            return 
false;
        }
    } else {
        return 
false;
    }
}
function 
validate_mail($mail) {
    
$pattern="/^[email protected]+\..{2,3}$/";
    if(
preg_match($pattern$mail)) {
        return 
true;
    } else {
        return 
false;
    }
}
?>

Il form non ha niente di particolare. E' infatti un normale form coi suoi controlli pronti a ricevere i dati da scrivere.

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
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<table class="tabella_normale">
<tr><th colspan="2">Inserimento dati per la tabella agenda</th></tr>
<tr>
    <td>nominativo (*)</td>
    <td><input type="text" size="94" name="nominativo" value="<?php echo $nominativo?>" /></td>
</tr>
<tr>
    <td>indirizzo (*)</td>
    <td><input type="text" size="94" name="indirizzo" value="<?php echo $indirizzo?>" /></td>
</tr>
<tr>
    <td>cap</td>
    <td><input type="text" size="94" name="cap" value="<?php echo $cap?>" /></td>
</tr>
<tr>
    <td>citta</td>
    <td><input type="text" size="94" name="citta" value="<?php echo $citta?>" /></td>
</tr>
<tr>
    <td>data nascita</td>
    <td><input type="text" size="94" name="data_nascita" value="<?php echo $data_nascita?>" /></td>
</tr>
<tr>
    <td>tel (*)</td>
    <td><input type="text" size="94" name="tel" value="<?php echo $tel?>" /></td>
</tr>
<tr>
    <td>mail (*)</td>
    <td><input type="text" size="94" name="mail" value="<?php echo $mail?>" /></td>
</tr>
<tr>
    <td>Note</td>
    <td><textarea name="note" cols="70" rows="5"><?php echo $note?></textarea></td>
</tr>
<tr>
    <td>&nbsp;</td>
    <td>
    <div align="center">
    <input type="submit" name="button" id="button" value="Invia" />
    </div>
    </td>
</tr>
</table>
</form>

Qui di seguito vediamo come organizzare lo script per la la procedura per il processo al form.

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
<?php
include('res/config.php');
include(
'res/res.php');
$values = array();
$nominativo $_REQUEST["nominativo"];
$values["nominativo"] = $nominativo;

$indirizzo $_REQUEST["indirizzo"];
$values["indirizzo"] = $indirizzo;

$cap $_REQUEST["cap"];
$values["cap"] = $cap;

$citta $_REQUEST["citta"];
$values["citta"] = $citta;

$data_nascita $_REQUEST["data_nascita"];
$values["data_nascita"] = $data_nascita;

$tel $_REQUEST["tel"];
$values["tel"] = $tel;

$mail $_REQUEST["mail"];
$values["mail"] = $mail;

$note $_REQUEST["note"];
$values["note"] = $note;
#===========================================================================
#    qui viene invocata la funzione personale con gli argomenti:
#    i nomi dei campi
#    l'elenco dei campi obbligatori
#    i valori precedentemente acquisiti
#===========================================================================
$return validate_form($fields_req$values);
if ( !
is_array($return) || empty($return) ) {
    
$messaggio "no";    
} else {
    
$messaggio "ok";
}

?>

Qui in questo esempio apri pagina si può notare il codice mostrato prima in azione

 

 



settore tecnico il sito di lorettabweb il Forum di sostegno
il forum il forum il forum