Waarom werkt mijn functie niet?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Frits van Leeuwen

Frits van Leeuwen

09/10/2017 00:27:47
Quote Anchor link
Hallo allemaal,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}


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.
 
PHP hulp

PHP hulp

21/09/2019 16:06:14
 
Frank Nietbelangrijk

Frank Nietbelangrijk

09/10/2017 01:23:19
Quote Anchor link
vind de verschillen: $errors_bedrag en $errors.
 
Pipo Clown

Pipo Clown

09/10/2017 11:56:20
Quote Anchor link
Haal even de quotes weg die om de nullen staan.
Nu vergelijk je strings met getallen i.p.v. getallen met getallen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

09/10/2017 12:43:24
Quote Anchor link
>> De variabelen vertegenwoordigen de input velden in een form. 1 van deze velden mag maar ingevuld zijn.

Dan moet je de lengte van de string controleren (Want input velden laten de gebruiker tekst invullen).
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
if (strlen($bedrag_debet) > 0 && strlen($bedrag_credit) > 0) {
    $errors_bedrag[] = 'Inkomsten en uitgaven mogen niet beide ingevuld zijn!';
}
Gewijzigd op 09/10/2017 12:45:00 door Frank Nietbelangrijk
 
Thomas van den Heuvel

Thomas van den Heuvel

09/10/2017 14:21:54
Quote Anchor link
Dat lijkt mij een foutgevoelige controle, wat als iemand 0.00 invult?

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
 
Frits van Leeuwen

Frits van Leeuwen

09/10/2017 15:10:01
Quote Anchor link
Perfect! Wat goed... Met vele ogen gekeken en weer veel geleerd. Bedankt allemaal.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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;
}


Bedankt allemaal.
Gewijzigd op 09/10/2017 15:15:34 door Frits van Leeuwen
 



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.