Volgens mij kan je de loop laten doorlopen als je een # voor iedere break neerzet.
<?php
switch (true){
case (($row->verjaardag_man) != 0000-00-00):
echo $row->voornaam_man.': '.$row->verjaardag_man;
# break;
case (($row->verjaardag_vrouw) != 0000-00-00):
echo $row->voornaam_vrouw.': '.$row->verjaardag_vrouw;
# break;
case (($row->verjaardag_kind_1) != 0000-00-00):
echo $row->naam_kind_1.': '.$row->verjaardag_kind_1;
# break;
case (($row->verjaardag_kind_2) != 0000-00-00):
echo $row->naam_kind_2.': '.$row->verjaardag_kind_2;
# break;
case (($row->verjaardag_kind_3) != 0000-00-00):
echo $row->naam_kind_3.': '.$row->verjaardag_kind_3;
# break;
case (($row->verjaardag_kind_4) != 0000-00-00):
echo $row->naam_kind_4.': '.$row->verjaardag_kind_4;
# break;
case (($row->verjaardag_kind_5) != 0000-00-00):
echo $row->naam_kind_5.': '.$row->verjaardag_kind_5;
# break;
default:
echo ' ';
# break;
}
?>
Link gekopieerd
?
Onbekende gebruiker
03-01-2007 11:10
Dit is wat hij nu laat zien:
Man met datum
Vrouw met 0000-00-00
Kind 1 met datum
Kind 2 met datum
Kind 3 met datum
Kind 4 met 0000-00-00
Kind 5 met 0000-00-00
Deze mensen hebben 3 kinderen en de verjaardag van de vrouw weet ik niet.
Link gekopieerd
een Switch constructie is hier niet zo voor bedoel, dan kan je beter gebruike maken van if..then..else..
<?php
if ($row->verjaardag_man == 0000-00-00) {
echo " ";
} else {
echo $row->voornaam_man.': '.$row->verjaardag_man;
}
if ($row->verjaardag_vrouw == 0000-00-00) {
echo " ";
} else {
echo $row->voornaam_vrouw.': '.$row->verjaardag_vrouw;
}
if ($row->verjaardag_kind1 == 0000-00-00) {
echo " ";
} else {
echo $row->voornaam_kind1.': '.$row->verjaardag_kind1;
}
if ($row->verjaardag_kind2 == 0000-00-00) {
echo " ";
} else {
echo $row->voornaam_kind2.': '.$row->verjaardag_kind2;
}
if ($row->verjaardag_kind3 == 0000-00-00) {
echo " ";
} else {
echo $row->voornaam_kind3.': '.$row->verjaardag_kind3;
}
if ($row->verjaardag_kind4 == 0000-00-00) {
echo " ";
} else {
echo $row->voornaam_kind4.': '.$row->verjaardag_kind4;
}
if ($row->verjaardag_kind5 == 0000-00-00) {
echo " ";
} else {
echo $row->voornaam_kind5.': '.$row->verjaardag_kind5;
}
?>
Link gekopieerd
Ik zou zelf de waarde NULL gebruiken wanneer een persoon niet bestaat; de waarde 0000-00-00 kun je dan gebruiken om aan te geven dat een persoon wel bestaat, maar dat je de geboortedatum niet kent. In de database moet het veld dan ook de default-waarde NULL krijgen.
Op deze manier kun je ook een-oudergezinnen in je database kwijt ;-)
In je code:
case (($row->verjaardag_kind_5) != NULL):
Maar dit zou je zelfs nog kunnen verkorten met:
case $row->verjaardag_kind_5:
Als de verjaardag een waarde heeft (ook al is het 0000-00-00) dan wordt de bijbehorende code uitgevoerd, als de verjaardag NULL is, wordt die code overgeslagen.
Link gekopieerd
@Jim:
Ik moet zeggen dat ik een switch toch echt een stuk duidelijker vind dan zo'n if-then-spaghetti ;-)
Link gekopieerd
Maar zoals switch werd gebruikt, is het niet bedoeld. Switch wordt gebruikt als een variable meerdere bekende waardes kan hebben. Nu werd er naar een waarde gekeken, en kijken of deze bij een variabele past...
Gebruik dan, (ja sorry...) ondanks de spagetti if..then..else..
En zo is het nog enigzins overzichtelijk. we kunnen het ook nog binnen de if..then..else controleren op 000-00-00 en NULL of leeg of een andere waarde, en misschien of de datum wel reeel is, dan heb je pas echt een spagetti bende..
Link gekopieerd
Okay voor het overzicht...
<?php
function show_birth($person_name, $person_birth) {
switch ($person_birth) {
case 0000-00-00:
$result = "Unknown";
break;
case NULL:
$result = "<!-- Person does not exists. -->";
break;
default :
$result = $person_name.' : '. $person_birth;
break;
}
return $result;
}
echo show_birth($row->voornaam_man, $row->verjaardag_man);
echo show_birth($row->voornaam_vrouw, $row->verjaardag_vrouw);
echo show_birth($row->voornaam_kind1, $row->verjaardag_kind1);
echo show_birth($row->voornaam_kind2, $row->verjaardag_kind2);
echo show_birth($row->voornaam_kind3, $row->verjaardag_kind3);
echo show_birth($row->voornaam_kind4, $row->verjaardag_kind4);
echo show_birth($row->voornaam_kind5, $row->verjaardag_kind5);
?>
Link gekopieerd
?
Onbekende gebruiker
03-01-2007 12:04
Ik heb nu allebei jullie codes gebruikt.
In de database heb ik standaard waarde op NULL gezet en bij de geboortedatum die ik niet wist ook aangevinkt.
Dit is het resultaat:
EDIT:
Ze hebben 3 kinderen en de verjaardag van Elly weet ik niet.
Boven de code van Jim en daaronder die van Willem
<?php
function show_birth($person_name, $person_birth) {
switch ($person_birth) {
case 0000-00-00:
$result = "Unknown";
break;
case NULL:
$result = "<!-- Person does not exists. -->";
break;
default :
$result = $person_name.' : '. $person_birth;
break;
}
return $result;
}
echo show_birth($row->voornaam_man, $row->verjaardag_man).'<br />';
echo show_birth($row->voornaam_vrouw, $row->verjaardag_vrouw).'<br />';
echo show_birth($row->voornaam_kind1, $row->verjaardag_kind1).'<br />';
echo show_birth($row->voornaam_kind2, $row->verjaardag_kind2).'<br />';
echo show_birth($row->voornaam_kind3, $row->verjaardag_kind3).'<br />';
echo show_birth($row->voornaam_kind4, $row->verjaardag_kind4).'<br />';
echo show_birth($row->voornaam_kind5, $row->verjaardag_kind5).'<br /><br />';
switch (true){
case ($row->verjaardag_man):
echo $row->voornaam_man.': '.$row->verjaardag_man.'<br />';
# break;
case ($row->verjaardag_vrouw):
echo $row->voornaam_vrouw.': '.$row->verjaardag_vrouw.'<br />';
# break;
case ($row->verjaardag_kind_1):
echo $row->naam_kind_1.': '.$row->verjaardag_kind_1.'<br />';
# break;
case ($row->verjaardag_kind_2):
echo $row->naam_kind_2.': '.$row->verjaardag_kind_2.'<br />';
# break;
case ($row->verjaardag_kind_3):
echo $row->naam_kind_3.': '.$row->verjaardag_kind_3.'<br />';
# break;
case ($row->verjaardag_kind_4):
echo $row->naam_kind_4.': '.$row->verjaardag_kind_4.'<br />';
# break;
case ($row->verjaardag_kind_5):
echo $row->naam_kind_5.': '.$row->verjaardag_kind_5;
# break;
default:
echo 'Niet bekend';
# break;
}
?>
Link gekopieerd
Als ik het goed begrijp heb je dus voor ieder kind een appart veld in de database?
Dus: Als iemand 1 kind heeft, dan zijn alle andere velden leeg, en als iemand heel veel kinderen heeft zijn er velden te kort?
Je kan (als je dat nu niet doet) denk ik voor de kinderen beter een apparte tabel maken.
Dus:
ID GEZIN_ID KIND_NAAM ANDERVELD
1 1 Joop 0648942754
2 1 Klaas -
3 4 Henk 0612345678
4 1 Bertha -
Link gekopieerd
Nu doe je 2x het zelfde... gebruik 1 van de 2.
En ik heb oov van voornaam_kindX naam_kindX gemaakt, anders kloppen de variabelen niet.
<?php
function show_birth($person_name, $person_birth) {
switch ($person_birth) {
case 0000-00-00:
$result = "Unknown";
break;
case NULL:
$result = "<!-- Person does not exists. -->";
break;
default :
$result = $person_name.' : '. $person_birth;
break;
}
return $result;
}
echo show_birth($row->voornaam_man, $row->verjaardag_man).'<br />';
echo show_birth($row->voornaam_vrouw, $row->verjaardag_vrouw).'<br />';
echo show_birth($row->naam_kind1, $row->verjaardag_kind1).'<br />';
echo show_birth($row->naam_kind2, $row->verjaardag_kind2).'<br />';
echo show_birth($row->naam_kind3, $row->verjaardag_kind3).'<br />';
echo show_birth($row->naam_kind4, $row->verjaardag_kind4).'<br />';
echo show_birth($row->naam_kind5, $row->verjaardag_kind5).'<br /><br />';
?>
<?php
switch (true){
case ($row->verjaardag_man):
echo $row->voornaam_man.': '.$row->verjaardag_man.'<br />';
# break;
case ($row->verjaardag_vrouw):
echo $row->voornaam_vrouw.': '.$row->verjaardag_vrouw.'<br />';
# break;
case ($row->verjaardag_kind_1):
echo $row->naam_kind_1.': '.$row->verjaardag_kind_1.'<br />';
# break;
case ($row->verjaardag_kind_2):
echo $row->naam_kind_2.': '.$row->verjaardag_kind_2.'<br />';
# break;
case ($row->verjaardag_kind_3):
echo $row->naam_kind_3.': '.$row->verjaardag_kind_3.'<br />';
# break;
case ($row->verjaardag_kind_4):
echo $row->naam_kind_4.': '.$row->verjaardag_kind_4.'<br />';
# break;
case ($row->verjaardag_kind_5):
echo $row->naam_kind_5.': '.$row->verjaardag_kind_5;
# break;
default:
echo 'Niet bekend';
# break;
}
?>
;) Goed bedacht Willem!!
Link gekopieerd