static variabele in form validatie script met filters
ik probeer een registreer script te schrijven
dat aan de hand van filters en functies gaat controleren of de input wel correct is
alles werkt, bv controleren of de usernaam langer is als 3 tekens,
en of het email adres een @ en . bevat
nu probeer ik het tweede email veld, ook met een functie, te laten controleren of het hetzelfde email adres is als in het eerste email veldje
maar in de functie checkEmail2()
wil ik dus $sEmail vergelijken met $sEmail2
maar dan krijg ik de error dan $sEmail is not specified
nu is mijn vraag
hoe krijg ik die variabele ook in die tweede functie op lijn 45?
dit is mijn script
Code (php)
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
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
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
session_start();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Declareren van errors en input arrays
$_SESSION['errors'] = array();
$_SESSION['input'] = $_POST;
// Verplichte velden
$aVerplicht = array('gebruikersnaam', 'voornaam', 'achternaam', 'postcode', 'email', 'email2');
/**
* Controle gebruikersnaam
*
* @param string $sGebruikersnaam: de te controleren gebruikersnaam
* @return: NULL als gebruikersnaam korter is dan 4 tekens, anders $sGebruikersnaam
*/
function checkUsername($sGebruikersnaam)
{
return strlen($sGebruikersnaam) > 3 ? $sGebruikersnaam : NULL;
}
function checkEmail($sEmail)
{
if(preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $sEmail)) {
return $sEmail;
}}
function checkEmail2($sEmail2, $sEmail) {
if ($sEmail2 != $sEmail) {
NULL;
}
}
/**
* Postcode controle op geldig formaat
*
* @param string $sPostcode: de te controleren postcode
* @return: NULL als postcode geen geldig formaat heeft, anders $sPostcode
*/
function checkPostcode($sPostcode)
{
return preg_match('/^[1-9]{1}[0-9]{3}$/i', $sPostcode) ? $sPostcode : NULL;
}
// Definieren van filters voor verschillende inputvelden.
$aFilters = array (
'gebruikersnaam' => array (
'filter' => FILTER_CALLBACK,
'options' => 'checkUsername' ),
'voornaam' => NULL,
'achternaam' => NULL,
'email' => array (
'filter' => FILTER_CALLBACK,
'options' => 'checkEmail' ),
'email2' => array (
'filter' => FILTER_CALLBACK,
'options' => 'checkEmail2' ),
'postcode' => array (
'filter' => FILTER_CALLBACK,
'options' => 'checkPostcode' ),
'woonplaats' => NULL,
'geboortejaar' => FILTER_VALIDATE_INT
);
// Uitvoeren van de filters en doorlopen van het resultaat
$aResultaat = filter_input_array(INPUT_POST, $aFilters);
foreach($aResultaat as $sKey => $sValue)
{
$sValue = trim($sValue);
if(empty($sValue) && in_array($sKey, $aVerplicht))
{
$_SESSION['errors'][$sKey] = true;
$aErrors[] = 'Je hebt geen geldige '.$sKey.' ingevuld.';
}
}
// 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.
$aContent[] = '<p><b>Het resultaat, de input:</b></p>';
$aContent[] = '<ul>';
foreach($_SESSION['input'] as $sKey => $sValue)
{
$aContent[] = '<li>'.$sKey.': '.$sValue.'</li>';
}
$aContent[] = '</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=iso-8859-1">
<title>Jorendewit.nl - PHP Scripts - Formuliercontrole met behulp van PHP filters</title>
<link rel="stylesheet" href="../styles/default.css" type="text/css" media="screen" />
<style type="text/css">
input.error {
border: 2px solid #FF0000;
}
</style>
</head>
<body>
<div id="wrap">
<p class="none small align-right"><a href="/view/40/"><-- Terug naar Scripts</a></p>
<h1>Formuliercontrole met behulp van PHP filters</h1>
<div id="info">
<p>PHP versie: >= 5.2.0</p>
</div>
<p>De input in onderstaand formulier wordt gecontroleerd met behulp van PHP filters. Alle velden met een * zijn verplicht.</p>
<form action="#" method="post" name="example">
<p>
<label class="field" for="gebruiker" class="naast">Gebruikersnaam:</label>
<input type="text"
id="gebruiker"
name="gebruikersnaam"
value="<?php echo isset($_SESSION['input']['gebruikersnaam']) ? $_SESSION['input']['gebruikersnaam'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['gebruikersnaam']) && $_SESSION['errors']['gebruikersnaam'] == 'true') ? 'error' : ''; ?>"
/> * (meer dan 3 tekens)
</p>
<p>
<label class="field" for="voor" class="naast">Voornaam:</label>
<input type="text"
id="voor"
name="voornaam"
value="<?php echo isset($_SESSION['input']['voornaam']) ? $_SESSION['input']['voornaam'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['voornaam']) && $_SESSION['errors']['voornaam'] == 'true') ? 'error' : ''; ?>"
/> *
</p>
<p>
<label class="field" for="achter" class="naast">Achternaam:</label>
<input type="text"
id="achter"
name="achternaam"
value="<?php echo isset($_SESSION['input']['achternaam']) ? $_SESSION['input']['achternaam'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['achternaam']) && $_SESSION['errors']['achternaam'] == 'true') ? 'error' : ''; ?>"
/> *
</p>
<p>
<label class="field" for="mail" class="naast">Email:</label>
<input type="text"
id="mail"
name="email"
value="<?php echo isset($_SESSION['input']['email']) ? $_SESSION['input']['email'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['email']) && $_SESSION['errors']['email'] == 'true') ? 'error' : ''; ?>"
/> *
</p>
<p>
<label class="field" for="mail2" class="naast">Hertyp Email:</label>
<input type="text"
id="mail2"
name="email2"
value="<?php echo isset($_SESSION['input']['email2']) ? $_SESSION['input']['email2'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['email2']) && $_SESSION['errors']['email2'] == 'true') ? 'error' : ''; ?>"
/> *
</p>
<p>
<label class="field" for="postcode" class="naast">Postcode:</label>
<input type="text"
id="postcode"
name="postcode"
value="<?php echo isset($_SESSION['input']['postcode']) ? $_SESSION['input']['postcode'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['postcode']) && $_SESSION['errors']['postcode'] == 'true') ? 'error' : ''; ?>"
/> * (1234)
</p>
<p>
<label class="field" for="woon" class="naast">Woonplaats:</label>
<input type="text"
id="woon"
name="woonplaats"
value="<?php echo isset($_SESSION['input']['woonplaats']) ? $_SESSION['input']['woonplaats'] : ''; ?>"
/>
</p>
<p>
<label class="field" for="geboortejaar" class="naast">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>
<input type="submit" value="Verzenden" class="lijnuit" />
</p>
</form>
<?php
// Weergeven van meldingen uit het phpscript.
if(isset($aErrors))
{
echo '<ul>';
foreach($aErrors as $sError)
{
echo '<li>'.$sError.'</li>';
}
echo '</ul>';
}
elseif(isset($aContent))
{
foreach($aContent as $sLine)
{
echo $sLine;
}
}
?>
</div>
</body>
</html>
ini_set('display_errors', 1);
error_reporting(E_ALL);
session_start();
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Declareren van errors en input arrays
$_SESSION['errors'] = array();
$_SESSION['input'] = $_POST;
// Verplichte velden
$aVerplicht = array('gebruikersnaam', 'voornaam', 'achternaam', 'postcode', 'email', 'email2');
/**
* Controle gebruikersnaam
*
* @param string $sGebruikersnaam: de te controleren gebruikersnaam
* @return: NULL als gebruikersnaam korter is dan 4 tekens, anders $sGebruikersnaam
*/
function checkUsername($sGebruikersnaam)
{
return strlen($sGebruikersnaam) > 3 ? $sGebruikersnaam : NULL;
}
function checkEmail($sEmail)
{
if(preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $sEmail)) {
return $sEmail;
}}
function checkEmail2($sEmail2, $sEmail) {
if ($sEmail2 != $sEmail) {
NULL;
}
}
/**
* Postcode controle op geldig formaat
*
* @param string $sPostcode: de te controleren postcode
* @return: NULL als postcode geen geldig formaat heeft, anders $sPostcode
*/
function checkPostcode($sPostcode)
{
return preg_match('/^[1-9]{1}[0-9]{3}$/i', $sPostcode) ? $sPostcode : NULL;
}
// Definieren van filters voor verschillende inputvelden.
$aFilters = array (
'gebruikersnaam' => array (
'filter' => FILTER_CALLBACK,
'options' => 'checkUsername' ),
'voornaam' => NULL,
'achternaam' => NULL,
'email' => array (
'filter' => FILTER_CALLBACK,
'options' => 'checkEmail' ),
'email2' => array (
'filter' => FILTER_CALLBACK,
'options' => 'checkEmail2' ),
'postcode' => array (
'filter' => FILTER_CALLBACK,
'options' => 'checkPostcode' ),
'woonplaats' => NULL,
'geboortejaar' => FILTER_VALIDATE_INT
);
// Uitvoeren van de filters en doorlopen van het resultaat
$aResultaat = filter_input_array(INPUT_POST, $aFilters);
foreach($aResultaat as $sKey => $sValue)
{
$sValue = trim($sValue);
if(empty($sValue) && in_array($sKey, $aVerplicht))
{
$_SESSION['errors'][$sKey] = true;
$aErrors[] = 'Je hebt geen geldige '.$sKey.' ingevuld.';
}
}
// 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.
$aContent[] = '<p><b>Het resultaat, de input:</b></p>';
$aContent[] = '<ul>';
foreach($_SESSION['input'] as $sKey => $sValue)
{
$aContent[] = '<li>'.$sKey.': '.$sValue.'</li>';
}
$aContent[] = '</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=iso-8859-1">
<title>Jorendewit.nl - PHP Scripts - Formuliercontrole met behulp van PHP filters</title>
<link rel="stylesheet" href="../styles/default.css" type="text/css" media="screen" />
<style type="text/css">
input.error {
border: 2px solid #FF0000;
}
</style>
</head>
<body>
<div id="wrap">
<p class="none small align-right"><a href="/view/40/"><-- Terug naar Scripts</a></p>
<h1>Formuliercontrole met behulp van PHP filters</h1>
<div id="info">
<p>PHP versie: >= 5.2.0</p>
</div>
<p>De input in onderstaand formulier wordt gecontroleerd met behulp van PHP filters. Alle velden met een * zijn verplicht.</p>
<form action="#" method="post" name="example">
<p>
<label class="field" for="gebruiker" class="naast">Gebruikersnaam:</label>
<input type="text"
id="gebruiker"
name="gebruikersnaam"
value="<?php echo isset($_SESSION['input']['gebruikersnaam']) ? $_SESSION['input']['gebruikersnaam'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['gebruikersnaam']) && $_SESSION['errors']['gebruikersnaam'] == 'true') ? 'error' : ''; ?>"
/> * (meer dan 3 tekens)
</p>
<p>
<label class="field" for="voor" class="naast">Voornaam:</label>
<input type="text"
id="voor"
name="voornaam"
value="<?php echo isset($_SESSION['input']['voornaam']) ? $_SESSION['input']['voornaam'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['voornaam']) && $_SESSION['errors']['voornaam'] == 'true') ? 'error' : ''; ?>"
/> *
</p>
<p>
<label class="field" for="achter" class="naast">Achternaam:</label>
<input type="text"
id="achter"
name="achternaam"
value="<?php echo isset($_SESSION['input']['achternaam']) ? $_SESSION['input']['achternaam'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['achternaam']) && $_SESSION['errors']['achternaam'] == 'true') ? 'error' : ''; ?>"
/> *
</p>
<p>
<label class="field" for="mail" class="naast">Email:</label>
<input type="text"
id="mail"
name="email"
value="<?php echo isset($_SESSION['input']['email']) ? $_SESSION['input']['email'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['email']) && $_SESSION['errors']['email'] == 'true') ? 'error' : ''; ?>"
/> *
</p>
<p>
<label class="field" for="mail2" class="naast">Hertyp Email:</label>
<input type="text"
id="mail2"
name="email2"
value="<?php echo isset($_SESSION['input']['email2']) ? $_SESSION['input']['email2'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['email2']) && $_SESSION['errors']['email2'] == 'true') ? 'error' : ''; ?>"
/> *
</p>
<p>
<label class="field" for="postcode" class="naast">Postcode:</label>
<input type="text"
id="postcode"
name="postcode"
value="<?php echo isset($_SESSION['input']['postcode']) ? $_SESSION['input']['postcode'] : ''; ?>"
class="<?php echo (isset($_SESSION['errors']['postcode']) && $_SESSION['errors']['postcode'] == 'true') ? 'error' : ''; ?>"
/> * (1234)
</p>
<p>
<label class="field" for="woon" class="naast">Woonplaats:</label>
<input type="text"
id="woon"
name="woonplaats"
value="<?php echo isset($_SESSION['input']['woonplaats']) ? $_SESSION['input']['woonplaats'] : ''; ?>"
/>
</p>
<p>
<label class="field" for="geboortejaar" class="naast">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>
<input type="submit" value="Verzenden" class="lijnuit" />
</p>
</form>
<?php
// Weergeven van meldingen uit het phpscript.
if(isset($aErrors))
{
echo '<ul>';
foreach($aErrors as $sError)
{
echo '<li>'.$sError.'</li>';
}
echo '</ul>';
}
elseif(isset($aContent))
{
foreach($aContent as $sLine)
{
echo $sLine;
}
}
?>
</div>
</body>
</html>
Gewijzigd op 01/01/1970 01:00:00 door Arne
Warning: Missing argument 2 for checkEmail2() in C:\xampp\htdocs\PHP\Project\registreer.php on line 42
Notice: Undefined variable: sEmail in C:\xampp\htdocs\PHP\Project\registreer.php on line 45
heeft dit te maken met het feit dat sEmail geen static variabele is?
je mist de 2e parameter, die geef je dus niet mee wanneer je de functie aanroept. daar ligt het probleem
hoe krijg ik die twee var dan wel in die functie?
thx
dan heb je het niet goed gedaan, de manier van Jim is toch echt hoe het moet
nosferatu schreef op 04.02.2010 11:02:
dan heb je het niet goed gedaan, de manier van Jim is toch echt hoe het moet
:D
{
if(preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $sEmail)) {
return $sEmail;
}}
function checkEmail2($sEmail2, $sEmail){
if (!$sEmail2 == $sEmail) {
NULL;
}
}
geeft
Warning: Missing argument 2 for checkEmail2() in C:\xampp\htdocs\PHP\Project\registreer.php on line 42
Notice: Undefined variable: sEmail in C:\xampp\htdocs\PHP\Project\registreer.php on line 45
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
function checkEmail2($sEmail2, $sEmail) {
if ($sEmail2 != $sEmail) {
return false;
}
return true
}
$email1 = "[email protected]";
$email2 = "[email protected]";
if (checkEmail2($email2, $email1)) {
//Mail is gelijk
} else {
//Mail is niet gelijk
}
?>
function checkEmail2($sEmail2, $sEmail) {
if ($sEmail2 != $sEmail) {
return false;
}
return true
}
$email1 = "[email protected]";
$email2 = "[email protected]";
if (checkEmail2($email2, $email1)) {
//Mail is gelijk
} else {
//Mail is niet gelijk
}
?>
Ten eerste: Je check klopt niet.
Ten tweede: Als je 2 arguments verwacht, moet er ook 2 geven (zie eerste error)
Gewijzigd op 01/01/1970 01:00:00 door Thijs Damen
een foutmelding is meestal meer dan een teken dat IETS fout gaat, soms zegt het zelfs WAT er fout gaat :O
maar het probleem is eigenlijk
mijn checkmail2 functie word aangesproken door de filters
'email2' => array (
'filter' => FILTER_CALLBACK,
'options' => 'checkEmail2' ),
en ik denk dat ik daar al die tweede parameter moet gaan meegeven?
maar hoe dan?
Je geeft aan 1 variable een filter op. niet aan 2.
Gewoon mijn code gebruiken,
ipv. returnen dit teruggeven. (bij failure)
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$_SESSION['errors']['email1'] = true;
$_SESSION['errors']['email2'] = true;
$aErrors[] = 'De emailadressen zijn niet gelijk';
?>
$_SESSION['errors']['email1'] = true;
$_SESSION['errors']['email2'] = true;
$aErrors[] = 'De emailadressen zijn niet gelijk';
?>
Gaat je eigen foutafhandeling door. Worden je velden netjes rood gemaakt, krijg je een nette foutmelding en word je formulier niet gesubmit.
Code (php)
de $sEmail die je wilt controleren moet dan elders in het script staan met dezelfde naam en de gewenste waarde
dat is bijna wat ik aan het zoeken ben
de errors zijn weg
enkel is de global var nu leeg
function checkEmail2($sEmail2) {
global $sEmail;
if ($sEmail2 != $sEmail) {
echo $sEmail.'1-';
echo $sEmail2.'2-';
}
}
geeft [email protected]
dus $sEmail = leeg als ik hem oproep via global
@Thijs
sorry, maar blijkbaar ken ik nog minder van php dan ik dacht
ik begrijp niet goed waar ik dat stukje code van jou dan moet zetten :(
Gewijzigd op 01/01/1970 01:00:00 door Arne
nosferatu schreef op 04.02.2010 11:26:
als je het toch echt niet via een 2e parameter wilt, kan je ook global gebruiken
de $sEmail die je wilt controleren moet dan elders in het script staan met dezelfde naam en de gewenste waarde
Code (php)
de $sEmail die je wilt controleren moet dan elders in het script staan met dezelfde naam en de gewenste waarde
auw....
Het kan wel, toch lijkthet me beter om de parameters rechtstreeks aan aan de functie door te geven. Het maakt de functie ook nuttiger en beter herbruikbaar!!
edit @jim
dit is een mogelijkheid, ik ben het met je eens dat het als een last resort moet worden gebruikt, andere alternatieven zijn zeer wss beter
Gewijzigd op 01/01/1970 01:00:00 door Johan Dam
ik probeer nu gewoon de waarde die in email2 is ingevuld
in een variabele te steken
hoe krijg ik die waarde uit de ingeputte gegevens in die var
$sEmail = ?
Wat je nu doet is vies, ranzig en gaat je nog veel meer gezeur opleveren.
Even een variabel globaal maken omdat die niet in je scope zit. Onzin.
De filter functie die jij gebruikt werkt gewoon niet met 2 variabelen. en ipv een normale oplossing verneuk je de rest van je code.
heb uiteindelijk gekregen wat ik wou, maar ik begrijp dat het totaal fout is ...
ik ga mij maar eens gemakkelijker tutorialetje doen, waar ik op een normale manier een registreer formulier maak, valideer en naar database stuur ...
enige tips van zo een tutorial?
Als je gaat zoeken raad ik je wel aan om een beetje recente tutorials te lezen. Tutorials van 3-4 jaar oud zijn echt zwaar outdated tegenwoordig. of ga een boek lezen :)