beste manier voor benodigde velden registratie form
ik ben bezig met een registratie script, en ik heb velden die niet benodigd zijn zoals bijvoorbeeld woonplaats,telefoonnummer etc en benodigde velden zoals username, password etc.
Ik ben opzoek naar de beste manier om aan te geven wanneer een benodigd veld niet is ingevuld, en daarbij ook nog eens te checken of bijvoorbeeld string lenght van username tussen de 6,en 16 karakters ligt.
Ik kwam zelf met dit stukje code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
Is dit een goede manier voor het uitvinden of iets niet is ingevuld?,
en wat is de beste manier, om zoals bovenstaand genoemd te checken of bijvoorbeeld username tussen de 6-16 chars ligt en password tussen de 8-20?
Gewijzigd op 16/02/2011 00:19:48 door Tim Ouwerkerk
Om te kijken of een veld 6 tot 16 karakters bevat gebruik je:
Sander de Vos op 16/02/2011 00:27:28:
if (!empty($velden[NAAM])) {
Dan kan je net zo goed
Gebruiken. Isset betekend is set, dus of er iets in zit en empty betekend leeg, dus of de var leeg is. !empty is dus hetzelfde als isset.
Ze zijn niet hetzelfde, zie de handleiding voor wat empty en isset precies doen.
Gewijzigd op 16/02/2011 08:16:07 door Jelmer -
Wouter J op 16/02/2011 08:01:26:
(...)
!empty is dus hetzelfde als isset.
!empty is dus hetzelfde als isset.
Zoals Jelmer al laat zien zijn isset en (!)empty niet hetzelfde. Als je niet precies weet wat de functie doet kan je ook nog beredeneren dat het niet logisch zou zijn om een extra functie te hebben die een inverse is van een andere functie. Want dat kan immers met !, dus zou één van de functies nutteloos zijn.
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
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
<?php
$formErrors = array();
$checks = array(
'veldnaam',
'veldnaam',
'veldnaam',
'veldnaam',
'veldnaam'
);
foreach( $checks as $field )
{
$formErrors[] = 'U bent vergeten een '.$field.' in te vullen.';
}
if( count( $formErrors ) == 0 )
{
# VERDERE HANDElINGEN HIER
}
else
{
foreach( $formErrors as $error )
{
echo $error.'<br />';
}
}
?>
$formErrors = array();
$checks = array(
'veldnaam',
'veldnaam',
'veldnaam',
'veldnaam',
'veldnaam'
);
foreach( $checks as $field )
{
$formErrors[] = 'U bent vergeten een '.$field.' in te vullen.';
}
if( count( $formErrors ) == 0 )
{
# VERDERE HANDElINGEN HIER
}
else
{
foreach( $formErrors as $error )
{
echo $error.'<br />';
}
}
?>
En dan kan je nog een ifje met Sander zijn voorbeeld er in gooien, die doe je dan zo:
Code (php)
Worden dit ook meer dan 2 items zou ik ook hier een array voor maken welke items dat zijn en dit apart laten doorlopen. Gooi alle errors gewoon in de formError array dan word het keurig weergegeven.
Gewijzigd op 16/02/2011 14:24:13 door Milo S
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
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
<?php
if (!empty($_POST)) {
$errors = required_fields_errors (
array ('nick', 'password', 'email'),
$_POST
);
// zien of de bevestiging van het paswoord overeen komt
if ($_POST['password'] !== $_POST['password_confirm']) {
$errors['password_confirm_matches'] = 1;
}
echo 'errors: '. print_r($errors, 1);
echo '<p><a href="?">Terug naar formulier</a></p>';
}
else {
echo '
<style>.red{color: #ff0000;}</style>
<form action="" method="post">
<input name="nick"/> <span class="red">*</span> Nickname<br/>
<input type="password" name="password"/> <span class="red">*</span> Passwoord<br/>
<input type="password" name="password_confirm"/> <span class="red">*</span> bevestig Passwoord<br/>
<input name="email"/> <span class="red">*</span> e-mail adres<br/>
<input name="signature"/> Signature<br/>
<input name="company"/> Company<br/>
<input type="submit" value="GO!"/>
</form>
<p>(<span class="red">*</span> required fields)</p>
';
}
/**
* @param $fields: array met de naam van de te controleren velden. Velden die leeg mogen blijven, moet je niet
* @param $post: assoc. array met de geposte waarden
* @return: array met errors
*/
function required_fields_errors ($fields, $post ) {
$errors = array();
foreach ($post as $key => $field) {
if (!in_array($key, $fields)) {
continue;
}
$value = trim($field);
if (empty($value)) {
$errors[$key] = 1;
}
}
return $errors;
}
?>
if (!empty($_POST)) {
$errors = required_fields_errors (
array ('nick', 'password', 'email'),
$_POST
);
// zien of de bevestiging van het paswoord overeen komt
if ($_POST['password'] !== $_POST['password_confirm']) {
$errors['password_confirm_matches'] = 1;
}
echo 'errors: '. print_r($errors, 1);
echo '<p><a href="?">Terug naar formulier</a></p>';
}
else {
echo '
<style>.red{color: #ff0000;}</style>
<form action="" method="post">
<input name="nick"/> <span class="red">*</span> Nickname<br/>
<input type="password" name="password"/> <span class="red">*</span> Passwoord<br/>
<input type="password" name="password_confirm"/> <span class="red">*</span> bevestig Passwoord<br/>
<input name="email"/> <span class="red">*</span> e-mail adres<br/>
<input name="signature"/> Signature<br/>
<input name="company"/> Company<br/>
<input type="submit" value="GO!"/>
</form>
<p>(<span class="red">*</span> required fields)</p>
';
}
/**
* @param $fields: array met de naam van de te controleren velden. Velden die leeg mogen blijven, moet je niet
* @param $post: assoc. array met de geposte waarden
* @return: array met errors
*/
function required_fields_errors ($fields, $post ) {
$errors = array();
foreach ($post as $key => $field) {
if (!in_array($key, $fields)) {
continue;
}
$value = trim($field);
if (empty($value)) {
$errors[$key] = 1;
}
}
return $errors;
}
?>
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
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
<?php
$formErrors = array();
$checks = array(
'veldnaam',
'veldnaam',
'veldnaam',
'veldnaam',
'veldnaam'
);
# Mits gesubmit
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
# Input velden checken
foreach( $checks as $field )
{
$formErrors[] = 'U bent vergeten een '.$field.' in te vullen.';
}
# Wachtwoord gelijk
if( isset( $_POST['password'] ) !== isset( $_POST['password_confirm'] ) )
{
$formErrors[] = 'De ingevoerde wachtwoorden komen niet overeen.';
}
if( count( $formErrors ) == 0 )
{
# VERDERE HANDElINGEN HIER
# INSERT QUERY + check daarvan etc...
}
else
{
# Errors
foreach( $formErrors as $error )
{
echo $error.'<br />';
}
}
}
else
{
# Formulier
}
?>
$formErrors = array();
$checks = array(
'veldnaam',
'veldnaam',
'veldnaam',
'veldnaam',
'veldnaam'
);
# Mits gesubmit
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
# Input velden checken
foreach( $checks as $field )
{
$formErrors[] = 'U bent vergeten een '.$field.' in te vullen.';
}
# Wachtwoord gelijk
if( isset( $_POST['password'] ) !== isset( $_POST['password_confirm'] ) )
{
$formErrors[] = 'De ingevoerde wachtwoorden komen niet overeen.';
}
if( count( $formErrors ) == 0 )
{
# VERDERE HANDElINGEN HIER
# INSERT QUERY + check daarvan etc...
}
else
{
# Errors
foreach( $formErrors as $error )
{
echo $error.'<br />';
}
}
}
else
{
# Formulier
}
?>
Gewijzigd op 16/02/2011 19:15:26 door Milo S
hoort het wachtwoord gelijk gedeelte niet ter hoogte van
# VERDERE HANDElINGEN HIER
Je gaat nu een fout melding krijgen als $_POST['password'] niet bestaat.
Ja daar heb je gelijk in, al zou ik die foutmelding verhelpen met een isset, omdat ik ook gewoon zou willen weergeven dat het niet overeen komt.