Formuliercheck
In een uitgebreid formulier moet ik een check uitvoeren, maar iets gaat er niet goed.
Het html-formulier bevat (o.a.) het volgende onderdeel:
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
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
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$(function() {
$("[name=dni-sel]").click(function(){
$('.toHide').hide();
$("#dni-"+$(this).val()).show();
});
});
</script>
<script>
$(function() {
$("[type=reset]").click(function(){
$('.toHide').hide();
});
});
</script>
</head>
<body>
<form name="register" action="register.php" method="post">
<table border="0">
<tr>
<td><label for="dni">DNI:</label></td>
<td><input type="radio" name="dni-sel" value="1" />Number NIF:
<input id="dni-1" class="toHide" type="text" name="dni" size="9" maxlength="9" /></td>
</tr>
<tr>
<td> </td>
<td><input type="radio" name="dni-sel" value="2" />Number NIE:
<input id="dni-2" class="toHide" type="text" name="dni" size="9" maxlength="9" /></td>
</tr>
</table>
</form>
</body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script>
$(function() {
$("[name=dni-sel]").click(function(){
$('.toHide').hide();
$("#dni-"+$(this).val()).show();
});
});
</script>
<script>
$(function() {
$("[type=reset]").click(function(){
$('.toHide').hide();
});
});
</script>
</head>
<body>
<form name="register" action="register.php" method="post">
<table border="0">
<tr>
<td><label for="dni">DNI:</label></td>
<td><input type="radio" name="dni-sel" value="1" />Number NIF:
<input id="dni-1" class="toHide" type="text" name="dni" size="9" maxlength="9" /></td>
</tr>
<tr>
<td> </td>
<td><input type="radio" name="dni-sel" value="2" />Number NIE:
<input id="dni-2" class="toHide" type="text" name="dni" size="9" maxlength="9" /></td>
</tr>
</table>
</form>
</body>
Ik weet zeker dat bovenstaand formulier de waarde 'dni' post naar het register.php, waar ik vervolgens de opgegeven dni-waarde wil checken.
Dit met onderstaande code.
Deze code heb ik uitgetest in een aparte php-pagina en werkt. Alleen, zodra ik deze in de controlelijst opneem en $error['dni'] = TRUE; toevoeg, dan wordt dit niet verwerkt in "if (isset($error))" onderaan. Alle andere (hier niet opgenomen) checks werken wel.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$errors = array();
if (!empty($_POST)) {
if (isset($_POST['dni'])) {
function check_nif($dni) {
$dni = strtoupper($dni);
$letter = substr($dni, -1, 1);
$number = substr($dni, 0, 8);
$number = str_replace(array('X', 'Y', 'Z'), array(0, 1, 2), $number);
$letter_right = substr("TRWAGMYFPDXBNJZSQVHLCKE", $number %23, 1);
if($letter_right!=$letter) {
$error['dni'] = TRUE;
}
}
$dni = ($_POST['dni']);
check_nif($dni);
}
}
if (!empty($error))
echo "this isn't right";
else
echo "All oke";
if (!empty($_POST)) {
if (isset($_POST['dni'])) {
function check_nif($dni) {
$dni = strtoupper($dni);
$letter = substr($dni, -1, 1);
$number = substr($dni, 0, 8);
$number = str_replace(array('X', 'Y', 'Z'), array(0, 1, 2), $number);
$letter_right = substr("TRWAGMYFPDXBNJZSQVHLCKE", $number %23, 1);
if($letter_right!=$letter) {
$error['dni'] = TRUE;
}
}
$dni = ($_POST['dni']);
check_nif($dni);
}
}
if (!empty($error))
echo "this isn't right";
else
echo "All oke";
Kan iemand mij vertellen wat hier fout gaat?
Gewijzigd op 17/05/2014 18:42:06 door Tortuga web
Als in PHP de functie in een lus of if komt en de functie wordt daardoor niet gedeclareerd OF de functie wordt voor een tweede keer gedeclareerd dan levert dit onherroepelijk een foutmelding op. Zet die functie dus gewoon bovenaan je code.
Vervolgens maak je een variabele $error aan binnen je functie. Deze heeft niets maar dan ook niets te maken met je variabele $error buiten je functie. Je zult de waarde uit de functie moeten teruggeven met een 'return'.
Toevoeging op 17/05/2014 18:57:47:
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
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
<?php
function check_nif($dni)
{
$dni = strtoupper($dni);
$letter = substr($dni, -1, 1);
$number = substr($dni, 0, 8);
$number = str_replace(array('X', 'Y', 'Z'), array(0, 1, 2), $number);
$letter_right = substr("TRWAGMYFPDXBNJZSQVHLCKE", $number %23, 1);
if($letter_right!=$letter) {
return false; // geef false indien er een fout optreed.
}
return true; // als een functie gelukt is zonder foutmeldingen dan wordt er doorgaans true teruggegeven
}
$errors = array();
if (!empty($_POST)) {
if (isset($_POST['dni'])) {
$dni = ($_POST['dni']);
if(!check_nif($dni)) // indien de functie false teruggeeft:
$errors['dni'] = TRUE;
}
}
if (!empty($errors))
echo "this isn't right";
else
echo "All oke";
?>
function check_nif($dni)
{
$dni = strtoupper($dni);
$letter = substr($dni, -1, 1);
$number = substr($dni, 0, 8);
$number = str_replace(array('X', 'Y', 'Z'), array(0, 1, 2), $number);
$letter_right = substr("TRWAGMYFPDXBNJZSQVHLCKE", $number %23, 1);
if($letter_right!=$letter) {
return false; // geef false indien er een fout optreed.
}
return true; // als een functie gelukt is zonder foutmeldingen dan wordt er doorgaans true teruggegeven
}
$errors = array();
if (!empty($_POST)) {
if (isset($_POST['dni'])) {
$dni = ($_POST['dni']);
if(!check_nif($dni)) // indien de functie false teruggeeft:
$errors['dni'] = TRUE;
}
}
if (!empty($errors))
echo "this isn't right";
else
echo "All oke";
?>
Toevoeging op 17/05/2014 19:00:20:
http://www.php.net/manual/en/language.variables.scope.php voor uitleg over de scope van een variabele.
Gewijzigd op 17/05/2014 20:17:15 door Frank Nietbelangrijk
Dank je voor je reactie. Ga kijken of ik het op die manier wel voor elkaar krijg.
Gewijzigd op 17/05/2014 19:40:47 door Ger van Steenderen
Inderdaad Ger, ik heb het nu aangepast.
Heren, heel hartelijk bedankt! Het werkt als een tierelier.
Super :)