Juiste foutafhandeling php
Dit is zoals ik het bedoeld had, fijn dat het werkt :)
Nu kan ik wel bij het else statement bij elk veld een status toekennen en op het einde daarop controleren.
Maar is er bijvoorbeeld ook nog een andere mogelijkheid om dit te doen?
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
<?php
header('Content-Type: application/json; charset=UTF-8');
$emptyfirstname = "";
$lengthfirstname ="";
$emptymail = "";
if(trim($_GET['first_name']) == ''){
$emptyfirstname = 'Je bent vergeten je naam in te vullen';
}elseif(strlen($_GET['first_name']) <= 1){
$lengthfirstname = 'Een naam met 1 letter bestaat niet';
}
if(trim($_GET['email']) == ''){
$emptymail = 'Zonder emailadres kunnen wij geen e-mail sturen';
}
$response = array(
'status' => 'error',
'errors' => array(
$emptyfirstname,
$lengthfirstname,
$emptymail,
),
);
echo json_encode($response);
?>
header('Content-Type: application/json; charset=UTF-8');
$emptyfirstname = "";
$lengthfirstname ="";
$emptymail = "";
if(trim($_GET['first_name']) == ''){
$emptyfirstname = 'Je bent vergeten je naam in te vullen';
}elseif(strlen($_GET['first_name']) <= 1){
$lengthfirstname = 'Een naam met 1 letter bestaat niet';
}
if(trim($_GET['email']) == ''){
$emptymail = 'Zonder emailadres kunnen wij geen e-mail sturen';
}
$response = array(
'status' => 'error',
'errors' => array(
$emptyfirstname,
$lengthfirstname,
$emptymail,
),
);
echo json_encode($response);
?>
Frank Nietbelangrijk op 19/09/2018 22:16:49:
Thomas waarom moet het altijd zo ingewikkeld? al zijn het suggesties die je geeft.
Valt toch wel mee? Ik gaf een oplossing die een heleboel varianten dekt, terwijl deze zo kort mogelijk is. Over hasErrors = true - dit is zelf documenterende code, lijkt mij beter dan een status, tenzij de response meer smaken kan bevatten dan enkel "wel fouten" of "geen fouten", dan heb je een uitgebreider gevalsonderscheid nodig, maar anders niet.
Frank Nietbelangrijk op 19/09/2018 22:34:31:
'status' => 'false',
Oops? De tekst "false" is altijd ongelijk aan false.
@Yoeri, als je nu eerst eens de formuliervalidatie regelt, en terloops dus bijhoudt of er fouten optreden. En tot slot genereer je een respons waarbij je de status bepaalt aan de hand van de informatie die je hebt verzameld. Nu introduceer je een hoop variabelen (en een subarray) die mogelijk helemaal niet nodig zijn/van toepassing zijn in de response. Oftewel, trek dit functioneel eens uit elkaar:
1. formuliervalidatie
2. bouwen response
3. serveren response
Misschien loont het ook de moeite om een initieel response-array te definiëren, bij wijze van initialisatie.
Dus zoiets:
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
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
<?php
// ff commentaar in het nl, dat typt wat vlotter
// initialisatie
$errors = array();
$response = array(
'status' => 'ok', // we zijn optimistisch?
);
// validatie
// de vraag is ook of je voor registratie $_GET wilt gebruiken, maar dat is een andere discussie
// je zult op zijn minst op het bestaan moeten controleren
if (isset($_GET['first_name'])) {
if (trim($_GET['first_name']) == '') {
$errors[] = 'Je bent vergeten je naam in te vullen';
} elseif(strlen($_GET['first_name']) <= 1) {
$errors[] = 'Een naam met 1 letter bestaat niet';
}
// @todo hier misschien nog een controle met database zodat er geen dubbele namen voorkomen?
} else {
$errors[] = 'Je bent vergeten je naam in te vullen';
}
if (isset($_GET['email'])) {
if(trim($_GET['email']) == ''){
$errors[] = 'Zonder e-mailadres kunnen wij geen e-mail sturen';
}
// @todo hier nog een controle op geldig e-mailadres?
// @todo hier nog een controle op reeds aanwezig e-mailadres?
} else {
$errors[] = 'Zonder e-mailadres kunnen wij geen e-mail sturen';
}
// bouw response
if (count($errors) > 0) {
$response['status'] = 'errors';
$response['errors'] = $errors;
}
// serveer response
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($response);
?>
// ff commentaar in het nl, dat typt wat vlotter
// initialisatie
$errors = array();
$response = array(
'status' => 'ok', // we zijn optimistisch?
);
// validatie
// de vraag is ook of je voor registratie $_GET wilt gebruiken, maar dat is een andere discussie
// je zult op zijn minst op het bestaan moeten controleren
if (isset($_GET['first_name'])) {
if (trim($_GET['first_name']) == '') {
$errors[] = 'Je bent vergeten je naam in te vullen';
} elseif(strlen($_GET['first_name']) <= 1) {
$errors[] = 'Een naam met 1 letter bestaat niet';
}
// @todo hier misschien nog een controle met database zodat er geen dubbele namen voorkomen?
} else {
$errors[] = 'Je bent vergeten je naam in te vullen';
}
if (isset($_GET['email'])) {
if(trim($_GET['email']) == ''){
$errors[] = 'Zonder e-mailadres kunnen wij geen e-mail sturen';
}
// @todo hier nog een controle op geldig e-mailadres?
// @todo hier nog een controle op reeds aanwezig e-mailadres?
} else {
$errors[] = 'Zonder e-mailadres kunnen wij geen e-mail sturen';
}
// bouw response
if (count($errors) > 0) {
$response['status'] = 'errors';
$response['errors'] = $errors;
}
// serveer response
header('Content-Type: application/json; charset=UTF-8');
echo json_encode($response);
?>
En als je specifieke velden wilt voorzien van foutmeldingen voeg je simpelweg aan $errors[] = ... een key toe, bijvoorbeeld $errors['email'][] = .... Hoe is dat ingewikkeld?
Gewijzigd op 21/09/2018 00:09:52 door Thomas van den Heuvel
Meh, dat krijg je als je code niet test. Het idee is iig duidelijk :).