Waarom werkt mijn functie niet?
Ik snap het even niet meer.
$bedrag_debet en $bedrag_credit zijn ingevuld. Dit bewijs heb ik doordat de echo er onder dit toont.
Ik wil weten dat niet beide variabelen ongelijk aan 0 zijn. Dus hoger of lager dan 0.
De variabelen vertegenwoordigen de input velden in een form. 1 van deze velden mag maar ingevuld zijn. Vandaar de check.
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
function validate_bedrag($bedrag_debet, $bedrag_credit) { // bedrag controle
$errors_bedrag = array();
echo $bedrag_debet;
echo $bedrag_credit;
if (($bedrag_debet !== "0") and ($bedrag_credit !== "0")) {
$errors[] = 'Inkomsten en uitgaven mogen niet beide ingevuld zijn!';
}
// geef de array met foutmeldingen terug
return $errors_bedrag;
}
$errors_bedrag = array();
echo $bedrag_debet;
echo $bedrag_credit;
if (($bedrag_debet !== "0") and ($bedrag_credit !== "0")) {
$errors[] = 'Inkomsten en uitgaven mogen niet beide ingevuld zijn!';
}
// geef de array met foutmeldingen terug
return $errors_bedrag;
}
Ik heb al geprobeerd de if te splitsen naar 2 geneste if's en de !== vervangen in !=
Ook heb ik && inplaats van and geprobeerd, maar er komt niets uit.
Om dit te testen, vul ik bij beide een getal in. in het programma een echo count($errors_bedrag); doe, komt er 0 als antwoord. Dit geeft dus aan dat het programma beide variabelen niet als 0 beschouwd.
Ik ben benieuwd of iemand een oplossing voor mij heeft.
Alvast bedankt.
p.s. ik hoop morgen avond het eventuele antwoord te lezen. Ik ga nu lekker slapen.
vind de verschillen: $errors_bedrag en $errors.
Nu vergelijk je strings met getallen i.p.v. getallen met getallen.
Dan moet je de lengte van de string controleren (Want input velden laten de gebruiker tekst invullen).
Code (php)
Gewijzigd op 09/10/2017 12:45:00 door Frank Nietbelangrijk
Topicstarter zegt: één van de twee velden mag maar ingevuld zijn. Dat klinkt als een exclusive or. Bovenstaande controle vangt niet de situatie af waarbij beide velden leeg zijn. Dat predicaat heeft niet de gewenste waarheidstabel.
Aan de andere kant, zou het niet veel handiger zijn als iemand een type selecteert (debet of credit) en dat er vervolgens ook maar één invulveld is voor een bedrag? Het klinkt alsof dit specifieke probleem op een andere plek opgelost kan worden.
Of je zorgt ervoor dat je twee lijsten/kolommen hebt (debet en credit) waar je bedragen aan toe kunt voegen. Dan is het impliciet ondubbelzinnig waar deze bedragen thuishoren.
EDIT: @Pipo, alle informatie uit een URL ($_GET) of formulier ($_POST) is (op het laagste niveau) van het type string.
Gewijzigd op 09/10/2017 14:35:43 door Thomas van den Heuvel
Ik reageer nu even omdat ik nu even een beetje tijd heb.
Frank Nietbelangrijk vond voor mij de meest belangrijke fout. $errors_bedrag en $errors. (gewoon overheen gekeken)
Eerder heb ik het ook zonder quotes gedaan, maar als de variabele niet klopt, werkt dat natuurlijk ook niet.
Als ik het niet heb, test je met strlen de lengte, maar als er 1 staat, is dat net zo lang als dat er 0 staat.
Het is de bedoeling dat 0 en 0.00 het zelfde zijn, en beide mogen 0 zijn. Maar ze mogen niet beiden van 0 afwijken. Beiden mogen 0 zijn en 1 van de 2 mag ingevuld zijn.
Vanavond thuis ga ik kijken of dat jullie aanwijzingen het juiste effect gaan hebben. Ik denk van wel!
Nogmaals, Allemaal hartelijk dank.
Toevoeging op 10/10/2017 00:10:48:
Uiteindelijk was het juiste antwoord de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
function validate_bedrag($bedrag_debet, $bedrag_credit) { // bedrag controle
$errors_bedrag = array();
if (($bedrag_debet != 0) and ($bedrag_credit != 0)) {
$errors_bedrag[] = 'Inkomsten en uitgaven mogen niet op 1 regel ingevuld zijn!';
}
// geef de array met foutmeldingen terug
return $errors_bedrag;
}
$errors_bedrag = array();
if (($bedrag_debet != 0) and ($bedrag_credit != 0)) {
$errors_bedrag[] = 'Inkomsten en uitgaven mogen niet op 1 regel ingevuld zijn!';
}
// geef de array met foutmeldingen terug
return $errors_bedrag;
}
Bedankt allemaal.
Gewijzigd op 09/10/2017 15:15:34 door Frits van Leeuwen