Formulier controle - Uitgebreid

Toelichting

De controle van input van gebruikers is een van de belangrijkste dingen in een php script. Een vorm van input zijn bijvoorbeeld de gegevens uit een ingevuld formulier.

Dit script geeft een voorbeeld van een methode om verschillende controles op verschillende velden uit te voeren. Standaard wordt gecontroleerd of een veld ingevuld is. Als je een speciale controle op een veld wilt, neem je dat veld op in een elseif statement. Tenslotte kun je in de array $no_check de velden aangeven waarop geen controle uitgevoerd moet worden.

Voorbeeld

Klik hier voor een voorbeeld

Script

Code
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
<?php
ini_set
('display_errors'1);
error_reporting(E_ALL);
session_start();

if(
$_SERVER['REQUEST_METHOD'] == 'POST')
{
    
// Zorgen dat de array met errors leeg is.
    
$_SESSION['errors'] = array();
    
$_SESSION['input'] = array();
    
    
// Velden in het formulier definiĆ«ren
    
$formuliervelden = array(
        
'gebruikersnaam' => 'text',
        
'voornaam' => 'text',
        
'achternaam' => 'text',
        
'postcode' => 'text',
        
'woonplaats' => 'text',
        
'geboortejaar' => 'select',
        
'kleur' => 'radio',
        
'akkoord' => 'checkbox'
    
);
    
    
// Velden waar geen controle op uitgevoerd hoeft te worden.
    
$no_check = array('woonplaats');
    
    
// Loop alle elementen uit de $_POST array langs
    
foreach($formuliervelden as $veld => $type)
    {
        if(
$type == 'checkbox')
        {
            if(empty(
$_POST[$veld]) && !in_array($veld$no_check))
            {
                
$_SESSION['errors'][$veld] = true;
                
$errors[] = 'Je moet de checkbox "'.$veld.'" aanvinken';
            }
            else
            {
                
$_SESSION['input'][$veld] = $_POST[$veld];
            }
        }    
        elseif(
$type == 'radio')
        {
            if(empty(
$_POST[$veld]) && !in_array($veld$no_check))
            {
                
$_SESSION['errors'][$veld] = true;
                
$errors[] = 'Kies een optie bij "'.$veld.'"';
            }
            else
            {
                
$_SESSION['input'][$veld] = $_POST[$veld];
            }
        }    
        else
        {
            if(isset(
$_POST[$veld]))
            {
                
// Spaties voor en achter input verwijderen
                
$value trim($_POST[$veld]);
                
                
// Ingevulde waarden in een sessievariabele zetten.
                
$_SESSION['input'][$veld] = $value;
                
                
// Controle van verschillende velden.
                // Velden waar geen controle op uitgevoerd hoeft te worden overslaan.
                
if(in_array($veld$no_check))
                {
                    continue;
                }
                
// Controle op geldige gebruikersnaam (langer dan 3 tekens).
                
elseif($veld == 'gebruikersnaam')
                {
                    if(
strlen($value) <= 3)
                    {
                        
$_SESSION['errors'][$veld] = true;
                        
$errors[] = 'Je hebt geen geldige gebruikersnaam ingevuld.';
                    }
                }
                
// Controle op geldige postcode (4 cijfers + 2 letters).
                
elseif($veld == 'postcode')
                {
                    if(!
preg_match('/^[0-9]{4}[[:space:]]?[a-z]{2}$/i'$value))
                    {
                        
$_SESSION['errors'][$veld] = true;
                        
$errors[] = 'Je hebt geen geldige postcode ingevuld.';
                    }
                }
                
// Controle of rest van de velden ingevuld is.
                
else
                {
                    if(empty(
$value))
                    {
                        
$_SESSION['errors'][$veld] = true;
                        
$errors[] = 'Je bent vergeten het veld '.$veld.' in te vullen.';            
                    }
                }
            }
            else
            {
                
$errors[] = 'Het veld '.$veld.' ontbreekt aan het formulier';
            }
        }        
    }
    
    
// Verwerk het formulier als er geen fouten opgetreden zijn.
    
if(empty($_SESSION['errors']))
    {
        
// Verwerk het formulier:
        // vb. Schrijf gegevens naar een database
        // vb. Stuur een email met de gegevens
        // Stuur gebruiker door naar een volgende pagina.
        
$content[] = '<p><b>Het resultaat, de input:</b></p>';
        
$content[] = '<ul>';
        foreach(
$_SESSION['input'] as $key => $value)
        {
            
$content[] = '<li>'.$key.': '.$value.'</li>';
        }
        
$content[] = '</ul>';
        
        unset(
$_SESSION['input']);
    }
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Jorendewit.nl - PHP Scripts - Formulieren: Ingevulde velden onthouden en niet ingevulde velden markeren.</title>
    
    <link rel="stylesheet" href="../styles/default.css" type="text/css" media="screen" />
    
    <style type="text/css">        
        label.error {
            color: #FF0000;
        }
    </style>
    
</head>

<body>

    <div id="wrap">
        <p class="none small align-right"><a href="/view/34/">&lt;-- Terug naar Scripts</a></p>
        <h1>Formulieren: Ingevulde velden onthouden en niet ingevulde velden markeren.</h1>
        
        <div id="info">
            <p>PHP versie: &gt;= 4.1.0</p>
        </div>
                
        <form action="#" method="post" name="example">
        <p>
            <label 
                for="gebruiker" 
                class="field <?php if(!empty($_SESSION['errors']['gebruikersnaam'])) echo 'error'?>"
            >Gebruikersnaam:</label>
            <input type="text" 
                id="gebruiker" 
                name="gebruikersnaam" 
                value="<?php echo isset($_SESSION['input']['gebruikersnaam']) ? $_SESSION['input']['gebruikersnaam'] : ''?>"
            /> * (meer dan 3 tekens)
        </p>
        <p>
            <label 
                for="voor" 
                class="field <?php if(!empty($_SESSION['errors']['voornaam'])) echo 'error'?>"
            >Voornaam:</label>
            <input type="text" 
                id="voor" 
                name="voornaam" 
                value="<?php echo isset($_SESSION['input']['voornaam']) ? $_SESSION['input']['voornaam'] : ''?>"
            /> *
        </p>
        <p>
            <label 
                for="achter" 
                class="field <?php if(!empty($_SESSION['errors']['achternaam'])) echo 'error'?>"
            >Achternaam:</label>
            <input type="text" 
                id="achter" 
                name="achternaam" 
                value="<?php echo isset($_SESSION['input']['achternaam']) ? $_SESSION['input']['achternaam'] : ''?>"
            /> *
        </p>
        <p>
            <label 
                for="postcode" 
                class="field <?php if(!empty($_SESSION['errors']['postcode'])) echo 'error'?>"
            >Postcode:</label>
            <input type="text" 
                id="postcode" 
                name="postcode" 
                value="<?php echo isset($_SESSION['input']['postcode']) ? $_SESSION['input']['postcode'] : ''?>"
            /> * (1234 AB)
        </p>
        <p>
            <label class="field" for="woon" >Woonplaats:</label>
            <input type="text" 
                id="woon" 
                name="woonplaats" 
                value="<?php echo isset($_SESSION['input']['woonplaats']) ? $_SESSION['input']['woonplaats'] : ''?>"
            />
        </p>
        <p>
            <label 
                for="geboortejaar" 
                class="field <?php if(!empty($_SESSION['errors']['geboortejaar'])) echo 'error'?>"
            >Geboortejaar:</label>
            <select id="geboortejaar" name="geboortejaar">
                <?php
                
for($i date('Y'); $i >= 1900$i--)
                {
                    if(isset(
$_SESSION['input']['geboortejaar']) && $_SESSION['input']['geboortejaar'] == $i)
                    {
                        echo 
'<option value="'.$i.'" selected="selected">'.$i.'</option>';
                    }
                    else
                    {
                        echo 
'<option value="'.$i.'">'.$i.'</option>';
                    }
                }
                
?>
            </select>
        </p>
        <p>
            <label 
                class="field <?php if(!empty($_SESSION['errors']['kleur'])) echo 'error'?>"
            >Kleur:</label>
            <input 
                type="radio" 
                name="kleur" 
                id="rood" 
                value="rood"
                <?php if(isset($_SESSION['input']['kleur']) && $_SESSION['input']['kleur'] == 'rood') echo 'checked="checked"'?> 
            /><label for="rood">Rood</label><br />
            <input 
                type="radio" 
                name="kleur" 
                id="blauw" 
                value="blauw"
                <?php if(isset($_SESSION['input']['kleur']) && $_SESSION['input']['kleur'] == 'blauw') echo 'checked="checked"'?>
            /><label for="blauw">Blauw</label><br />
            <input 
                type="radio" 
                name="kleur" 
                id="geel" 
                value="geel"
                <?php if(isset($_SESSION['input']['kleur']) && $_SESSION['input']['kleur'] == 'geel') echo 'checked="checked"'?>
            /><label for="geel">Geel</label>
        <p>
            <input
                type="checkbox" 
                name="akkoord" 
                value="1" 
                id="akkoord" 
                <?php if(isset($_SESSION['input']['akkoord']) && $_SESSION['input']['akkoord'] == 1) echo 'checked="checked"'?>
            />
            <label 
                for="akkoord" 
                class="<?php if(!empty($_SESSION['errors']['akkoord'])) echo 'error'?>"
            >Ik ga akkoord met de voorwaarden</label>
        </p>
        <p>
            <input type="submit" value="Verzenden" class="lijnuit" />
        </p>
        </form>        
        
        <?php
        
// Weergeven van meldingen uit het phpscript.
        
if(isset($errors))
        {
            echo 
'<ul>';
            foreach(
$errors as $error)
            {
                echo 
'<li>'.$error.'</li>'
            }
            echo 
'</ul>';
        }
        elseif(isset(
$content))
        {
            foreach(
$content as $line)
            {
                echo 
$line;
            }
        }
        
?>
        
    </div>
    
</body>
</html>

Reacties