juiste melding via $return
Als je via een ajax call een formulier stuurd en een waarde terug verwacht dank an dat met json. Een fout afhandeling kan ik maken maar zou graag willen weten hoe ik dit op de kortste manier kan programmeren.
Er word gekeken op lege velden en bij email of het een geldig adres is qua karakters.
Wat ik nu wil vragen is als ik een return maak hoe kan ik dan zorgen dat de juiste melding word terug gegeven?
Geen email ingevuld, geen merk ingevuld. (als beide leeg zijn)
Geen email ingevuld
Geen merk ingevuld
Serverfout
Er met succes een email verstuurd naar: “het email adres”
Zelf dacht ik aan een array maar dan moet ik elke fout in javascript laten terug komen bijvoorbeeld.
'success': function(data) {
alert ('data.nomail + data.nobrand + data.servererror + data.success');
}
Hoe kan ik zorgen dat dit al is uitgesplitst binnen php en simpel alleen een success of error worden geretourneerd met de juiste tekst?
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
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
<?php
// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST') {
//check op leeg veld
if($_POST['email'] == ""){
//als veld email leeg is geef error in return array "geen emailadres ingevuld"
}elseif(!filter_var($mail, FILTER_VALIDATE_EMAIL) === false){
//zet email dat gePOST is in variabel
$mail = $_POST['email'];
}else{
//error geen juiste emailadres ingevuld
}
//check op leeg veld
if($_POST['brand'] == ""){
//als veld email leeg is geef error in return array merk is niet ingevuld
}else{
//zet merk dat gePOST is in variabel
$brand = $_POST['brand'];
}
}else{
// error in return array serverfout
}
header('Content-Type: application/json; charset=UTF-8');
$return = array(
?????????
);
//geef waardes terug
echo json_encode($return);
?>
Bryan
// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST') {
//check op leeg veld
if($_POST['email'] == ""){
//als veld email leeg is geef error in return array "geen emailadres ingevuld"
}elseif(!filter_var($mail, FILTER_VALIDATE_EMAIL) === false){
//zet email dat gePOST is in variabel
$mail = $_POST['email'];
}else{
//error geen juiste emailadres ingevuld
}
//check op leeg veld
if($_POST['brand'] == ""){
//als veld email leeg is geef error in return array merk is niet ingevuld
}else{
//zet merk dat gePOST is in variabel
$brand = $_POST['brand'];
}
}else{
// error in return array serverfout
}
header('Content-Type: application/json; charset=UTF-8');
$return = array(
?????????
);
//geef waardes terug
echo json_encode($return);
?>
Bryan
Geef een status 'success' of 'error' terug en als je een status 'error' teruggeeft dan geef je tevens een array met foutmeldingen mee.
Toevoeging op 12/03/2016 15:07:52:
En in PHP:
Code (php)
Toevoeging op 12/03/2016 15:10:20:
Het kan ook nog een stapje ingewikkelder:
Code (php)
name en email staan door voor het name (of id) attribuut van de <input> element.
Toevoeging op 12/03/2016 15:12:09:
In JSON:
In plaats van "status": "error" zou ik wellicht "success": <boolean> gebruiken, of "errors": <boolean>. Hier kun je dan direct mee werken in een if-statement in JavaScript, je hoeft dan niet de waarde van een string te vergelijken met een statische tekst. Ook zou je een algemene terugkoppelingsboodschap kunnen introduceren. Ook zou je, als er meerdere dingen fout zijn aan een invoerveld, deze nog op kunnen splitsen in subarrays, zoiets dus:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$return = array(
'success': false,
'message': 'Kon gegevens niet verwerken, controleer je invoer.',
'errors' => array(
'name' => array(
'dit is een verplicht veld',
'minimale lengte: 6 karakters', // etc
),
'email' => array(
'dit is een verplicht veld',
'kon adres niet valideren', // etc
),
// etc
),
);
?>
$return = array(
'success': false,
'message': 'Kon gegevens niet verwerken, controleer je invoer.',
'errors' => array(
'name' => array(
'dit is een verplicht veld',
'minimale lengte: 6 karakters', // etc
),
'email' => array(
'dit is een verplicht veld',
'kon adres niet valideren', // etc
),
// etc
),
);
?>
Hoe dit verder in JSON wordt geformatteerd doet er niet echt toe, daar json_encode() dit volledig voor haar rekening neemt. Je kunt via de structuur in PHP direct afleiden hoe je dit in javascript zou moeten behandelen.
Gewijzigd op 12/03/2016 15:45:34 door Thomas van den Heuvel
De html en php pagina staan volledig los van elkaar, daarom is een call nodig.
Wat ik misschien ook zou kunnen doen is:
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
if($_POST['email'] == ""){
$valmail = 'Email mag niet leeg zijn';
}elseif(!filter_var($mail, FILTER_VALIDATE_EMAIL) === false){
//zet email dat gePOST is in variabel
$mail = $_POST['email'];
}else{
$valmail = 'Geen geldig emailadres';
}
if($_POST['brand'] == ""){
$valbrand = 'Geen merk ingevuld';
}else{
$brand = $_POST['brand'];
}
header('Content-Type: application/json; charset=UTF-8');
$return = array(
'message' => $valmail . ' ' . $valbrand;
);
//geef waardes terug
echo json_encode($return);
?>
if($_POST['email'] == ""){
$valmail = 'Email mag niet leeg zijn';
}elseif(!filter_var($mail, FILTER_VALIDATE_EMAIL) === false){
//zet email dat gePOST is in variabel
$mail = $_POST['email'];
}else{
$valmail = 'Geen geldig emailadres';
}
if($_POST['brand'] == ""){
$valbrand = 'Geen merk ingevuld';
}else{
$brand = $_POST['brand'];
}
header('Content-Type: application/json; charset=UTF-8');
$return = array(
'message' => $valmail . ' ' . $valbrand;
);
//geef waardes terug
echo json_encode($return);
?>
Het meeste wil ik aan de code kant doen i.p.v. javascript.
PHP wil ik de juiste error mee laten geven in de teruggave.
Gewijzigd op 14/03/2016 19:10:17 door Bryan De Baar
Bryan De Baar op 14/03/2016 19:09:58:
Het meeste wil ik aan de code kant doen i.p.v. javascript.
PHP wil ik de juiste error mee laten geven in de teruggave.
PHP wil ik de juiste error mee laten geven in de teruggave.
Ik denk dat het dan het handigste is om je JSON respons wat meer structuur te geven zoals @Frank en ik al hebben laten zien.