Juiste foutafhandeling php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Jop B

Jop B

20/09/2018 12:37:13
Quote Anchor link
Hi Yoeri,

Dit is zoals ik het bedoeld had, fijn dat het werkt :)
 
PHP hulp

PHP hulp

28/11/2021 04:06:53
 
Yoeri Achterbergen

Yoeri Achterbergen

20/09/2018 14:40:26
Quote Anchor link
Er is nog een laatste puntje waar ik mee zit en dat is hoe ik de status op een goede manier kan toekennen.
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
?>
 
Thomas van den Heuvel

Thomas van den Heuvel

20/09/2018 15:26:38
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
?>

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
 
- Ariën -
Beheerder

- Ariën -

20/09/2018 20:13:54
Quote Anchor link
@Thomas

Lijn 7 moet zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
'status'=> 'ok',

Het is nog net geen JSON ;-)
 
Thomas van den Heuvel

Thomas van den Heuvel

21/09/2018 00:10:25
Quote Anchor link
Meh, dat krijg je als je code niet test. Het idee is iig duidelijk :).
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.