voorwaarde accoord indien row een waarde heeft?
Code (php)
Er word een regel opgehaald uit een database.
Er word gekeken of $row['RColorLUnit'] een L bevat, maar er zijn nog 3 die een waarde kan bevatten op die L namelijk RColorL, RColorLMin en RColorLMax.
Nu wil ik dus die If-Functie uitbreiden als hij bij minimaal 1 van de drie een waarde ziet dat hij dan verder gaat.
Hoe moet ik dat dan doen?
Code (php)
1
2
3
2
3
$x = 5; $y = 6;
var_dump($x == $y); //false
var_dump($x = $y); //6 ($x is nu gelijk aan $y, dus ook 6)
var_dump($x == $y); //false
var_dump($x = $y); //6 ($x is nu gelijk aan $y, dus ook 6)
2) Ik krijg het idee dat je "of" bedoelT, in het Engels "or", en in PHP-land meestal geschreven als "||". Lees dit anders even: https://secure.php.net/manual/en/language.operators.logical.php
Code (php)
1
2
3
2
3
$x = 5;
var_dump(($x == 4) || ($x == 5) || ($x == 6)); //true, want $x == 5 is waar
var_dump(($x == 4) && ($x == 5) && ($x == 6)); //false, want $x == 5 is wel waar, maar de rest niet
var_dump(($x == 4) || ($x == 5) || ($x == 6)); //true, want $x == 5 is waar
var_dump(($x == 4) && ($x == 5) && ($x == 6)); //false, want $x == 5 is wel waar, maar de rest niet
Gewijzigd op 17/09/2018 18:53:36 door Rob Doemaarwat
Dus even grof geformuleerd.:
De code zal grandioos fout zijn, maar wat ik bedoel.:
Als RColorLUnit = L en RColorL waarde is groter als niks
of
Als RColorLUnit = L en RColorL waarde is niks en RColorLMin is groter als niks
of
Als RColorLUnit = L en RColorL waarde is groter als niks en RColorLMin is groter als niks
og
Als RColorLUnit = L en RColorL waarde is groter als niks en RColorLMin is groter als niks en RColorLMax is groter als niks
enz...
Hij moet dus van RColorL, RColorLMin en RColorLMax iets vinden bij 1 van de 3 anders mag hij niet doorgaan.
Gewijzigd op 17/09/2018 20:34:17 door Pascal Schuffelers
Er is ook een AND-OR, maar dan heet het xor.
Toevoeging op 17/09/2018 21:09:35:
Kan dit?
Code (php)
1
if(($row['RColorLUnit'] == "L") && ($row['RColorL'] || $row['RColorMin'] || $row['RColorMax'])) ...
Omdat je van de laatste 3 alleen wilt weten of het iets of niets is hoef je niet echt ergens mee te vergelijken in PHP (die interpreteert de waarde dan direct als een boolean - null, "", en "0" zijn dan allemaal false).
Code (php)
1
2
3
4
5
2
3
4
5
if ($row['RColorLUnit'] == "L") && ($row['RColorL'] || $row['RColorMin'] || $row['RColorMax']) > 0){
print "waarde gevonden";
}else {
print "geen waarde";
} ?>
print "waarde gevonden";
}else {
print "geen waarde";
} ?>
Maar in deze situatie werkt het niet, zie niks verschijnen.
Code (php)
1
2
3
4
5
2
3
4
5
if ($row['RColorLUnit'] == "L" && $row['RColorL'] || $row['RColorMin'] || $row['RColorMax']){
print "waarde gevonden";
}else {
print "geen waarde";
} ?>
print "waarde gevonden";
}else {
print "geen waarde";
} ?>
werkt wel maar hij zegt steeds geen waarde.
Gewijzigd op 17/09/2018 21:30:06 door Pascal Schuffelers
Doe even een print_r($row), kopieer+plak die hier, en geef dan aan wat je had verwacht (wel/geen waarde).
... bedoelt dat 1 van die variabelen groter dan nul moet zijn, dan moet je de controle per variabele doen:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
if ($row['RColorL'] > 0 || $row['RColorMin'] > 0 || $row['RColorMax'] > 0) {
// doe iets
}
?>
if ($row['RColorL'] > 0 || $row['RColorMin'] > 0 || $row['RColorMax'] > 0) {
// doe iets
}
?>
Uiteindelijk denk ik dat je zoiets als dit zoekt:
Code (php)
Gewijzigd op 17/09/2018 21:48:37 door Ozzie PHP
Dus.:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
if ($row['RColorLUnit'] === 'L' && (!empty($row['RColorL']) || !empty($row['RColorLMin']) || !empty($row['RColorLMax']))) {
print "".$row['RColorL']."</br>";
print "".$row['RColorLMin']."</br>";
print "".$row['RColorLMax']."</br>";
print "waarde gevonden";
}else { //print_r($row);
print "".$row['RColorL']."</br>";
print "".$row['RColorLMin']."</br>";
print "".$row['RColorLMax']."</br>";
print "geen waarde";
} ?>
print "".$row['RColorL']."</br>";
print "".$row['RColorLMin']."</br>";
print "".$row['RColorLMax']."</br>";
print "waarde gevonden";
}else { //print_r($row);
print "".$row['RColorL']."</br>";
print "".$row['RColorLMin']."</br>";
print "".$row['RColorLMax']."</br>";
print "geen waarde";
} ?>
Laat hij als ze nul zijn dit ook zien.:
0.0
0.0
0.0
waarde gevonden
zo lijkt het wel te werken.:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
if ($row['RColorLUnit'] === 'L' && (($row['RColorL']>0) || !empty($row['RColorLMin']>0) || !empty($row['RColorLMax']>0))) {
print "".$row['RColorL']."</br>";
print "".$row['RColorLMin']."</br>";
print "".$row['RColorLMax']."</br>";
print "waarde gevonden";
}else { //print_r($row);
print "".$row['RColorL']."</br>";
print "".$row['RColorLMin']."</br>";
print "".$row['RColorLMax']."</br>";
print "geen waarde";
} ?>
print "".$row['RColorL']."</br>";
print "".$row['RColorLMin']."</br>";
print "".$row['RColorLMax']."</br>";
print "waarde gevonden";
}else { //print_r($row);
print "".$row['RColorL']."</br>";
print "".$row['RColorLMin']."</br>";
print "".$row['RColorLMax']."</br>";
print "geen waarde";
} ?>
Gewijzigd op 18/09/2018 07:28:23 door Pascal Schuffelers
Probleem opgelost dus?
Daarnaast zul je ook gewoon je datahuishouding op orde moeten maken zodat alles ook netjes in de database zit. Waarbij je dus geen dummywaarden zoals 0, of 0.0 of wat dan ook invult als je eigenlijk "geen waarde" bedoelt.
Vervolgens kun je dan alle bovenstaande code verwijderen uit je applicatie, omdat deze enkel voor ruis zorgt. Vooral als je niet annoteert waarom die code nodig zou zijn...
Dit soort code maakt alles waarschijnlijk alleen maar complexer, het is zaak dat je het (achterliggende) probleem op de juiste plek oplost. Een zwik vage code als doekje voor het bloeden lijkt mij niet de oplossing.
EDIT: en vervolgens kun je dus heel eenvoudig nagaan of iets een waarde heeft of niet, door te vergelijken met NULL. In MySQL doe je dat met <kolom> IS (NOT) NULL.
Gewijzigd op 18/09/2018 14:46:34 door Thomas van den Heuvel
Moet het nu (($row['RColorL']>0) zijn of !empty($row['RColorLMin']>0 als het 0 waarde ?
Vergeet aub mijn vraag, tijdens copy paste zijn er diverse dingen mis gegaan, werkt nu.
Gewijzigd op 18/09/2018 19:36:43 door Pascal Schuffelers