Hallo,

Via de AJAX methode verzend ik gegevens naar een php file en wil als teruggave een bericht met succes of errors tonen.
momenteel heb ik dit

<?php
if(trim($_GET['first_name']) == ''){
	$first_name_error = '<li class="error">- Het veld voornaam is leeg!</li>';
}else{
	
}

if(trim($_GET['email']) == ''){
	$mail_error = '<li class="error">- Het veld email is leeg!</li>';
}else{
	
}

$return = array('message' => '<div class="error">'.$first_name_error.$mail_error.'</div>');
echo json_encode($return);

?>


Hoe zouden jullie de foutafhandeling doen?
Ik zou alles in één return willen als dat zou kunnen.
Waarom zou je opmaak verwerken in een foutboodschap? Dit is iets wat je regelt op het moment van weergave lijkt mij.

Ik zou het persoonlijk opdelen per veldnaam, en daar dan ook een lijst van fouten toestaan, er kunnen namelijk meerdere dingen mis zijn aan één invoerveld.

Ook kunnen er foutmeldingen zijn met de verwerking van het formulier zelf, die niet direct gekoppeld kunnen worden aan een (zichtbaar) veld, zoals bijvoorbeeld een ongeldig formulier-token. Je zou dus ook nog onderscheid kunnen maken tussen (algemene) formulier-foutmeldingen en (specifieke) formulierveld-foutmeldingen.

Een schematische indeling van het errors-array (evt. verpakt als JSON) zou dus zoiets kunnen zijn:
* form
  - error #1
  - error #2
* fields
  * field #1
    - error #1
  * field #2
    - error #1
    - error #2
etc.

Zo kun je de foutmeldingen direct achter of bij het specifieke veld weergeven. Of bovenaan het formulier, als het algemene fouten betreft.
@tomas
Bedoel je het zo

<?php
$errors = array(
    $array(“Je bent vergeten je naam in te vullen”),
    $array(“Je bent vergeten je emailadres in te vullen”, “Dit is geen geldig emailadres”)
);
?>
Je zou het zo kunnen doen. Dit is simpeler dan Thomas voorstelt met als nadeel dat je maar 1 foutmelding per formulierveld kunt teruggeven.

<?php
$errors = array(
'naam' => 'Je bent vergeten je naam in te vullen',
'email' => 'Je bent vergeten je mailadres in te vullen, Dit is geen geldig mailadres'
);
?>

Beter vind ik het om een iets uitgebreider enigszins gestandaardiseerd antwoord te geven:

<?php
$response = array(
'status' => 'error',
'errors' => array(
'naam' => 'Je bent vergeten je naam in te vullen',
'email' => 'Je bent vergeten je mailadres in te vullen, Dit is geen geldig mailadres'
)
);
?>

en als er geen foutmeldingen zijn:
<?php
$response = array(
'status' => 'ok'
);
?>
@frank,

Hoe maak ik dan de juiste en kortste afhandeling met een array?

Ik definieer in een array met de verschillende foutmeldingen

<?php
$response = array(
    'status' => 'error',
    'errors' => array(
            'naamleeg' => 'Je bent vergeten je naam in te vullen',
            'emailleeg' => 'Je bent vergeten je mailadres in te vullen',
            'allesleeg' => 'Meerdere velden zijn niet ingevuld',
            'emailfout' => 'Dit is geen geldig e-mailadres'

    )
);
?>


Maak ik dan allemaal if statements voor controle op leeg en eventuele fouten?

<?php
if(trim($_GET['first_name']) == ''){
     $response['errors']['naamleeg'];
}

if(trim($_GET['email']) == ''){
    $response['errors']['emailleeg'];
}

if(trim($_GET['email']) == ''){
    $response['errors']['emailleeg'];
}

if(trim($_GET['first_name']) == '') &&trim($_GET['email']) == ''){
    $response['errors']['allesleeg'];
}
?>


Met de status array kan ik natuurlijk met Javascript ook een if statement maken hoe de errors en de succes worden weergegeven.


Het beste lijkt mij om deze te groeperen op invoerveld, zoals eerder beschreven.
@thomas,

Ik heb de arrays in groepen gezet en ik denk dat je het zo bedoeld:


<?php
$response = array(
    'status' => 'error',
    'errors' => array(
		'formulierfout' => array(
			'allesleeg' => 'Meerdere velden zijn niet ingevuld',
		),
		'firstname' => array(
			'naamleeg' => 'Je bent vergeten je naam in te vullen',
		),
		'email' => array(
			'emailleeg' => 'Je bent vergeten je mailadres in te vullen',
			'emailfout' => 'Dit is geen geldig e-mailadres'
		)


    )
);
?>
?>
Arrays zijn nieuw voor me maar de opmaak ervan begin ik te snappen :)

Dus nog even voor de duidelijkheid:
- De arrays zijn gemaakt en zijn dus ook makkelijk toe te voegen en aan te passen.
- Met de status kan ik Javasript de opmaak laten bepalen door een if else statement te maken.
- Voor de foutafhandeling in PHP maak ik voor elk veld + elke error een if statemant en geen de $response de juiste array mee die word terug geven aan Javascript.
in javascript kun je gewoon zoiets doen toch?


if(response.status == 'error') {
	var html = '<ul class="errors">';
	for(var i = 0 ; i < response.errors.length ; i++) {
		html += '<li>' + response.errors[i] + '</li>';
	}
	html += '<ul>';

	een_bepaalde_div.innerHTML = html;
} else if(response.status == 'ok') {
	// do whatever you want
}


en met css geef je de foutmelding de gewenste stijl.

.errors {
	/* style voor de unsorted list */
}
.errors li {
	/* style voor de list items */
}


[size=xsmall]Toevoeging op 19/09/2018 12:34:03:[/size]

p.s het voorbeeld werkt met de simpelere array uit mijn eerste reactie. als je de array's onderverdeeld per formulier veld dan wordt het wat uitgebreider.
Het is waarschijnlijk niet nodig om elke foutmelding een aparte naam (emailleeg, emailfout etc.) te geven.

En misschien is het ook verstandig om of uitsluitend engels of nederlands te gebruiken in code, maar niet een of andere mengvorm.

Ook zou je kunnen overwegen om een Boolean mee te geven voor de status in de vorm van hasErrors true/false, dan hoef je niet expliciet een vergelijking te doen met een statustekst. Dit hangt natuurlijk ook af van wat je verder met de response(s) wilt doen.

Reageren