switch / case en database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2 3 volgende »

- Jim  -

- Jim -

03/01/2007 11:04:00
Quote Anchor link
Volgens mij kan je de loop laten doorlopen als je een # voor iedere break neerzet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
        switch (true){
                case ((
$row->verjaardag_man) != 0000-00-00):
                        echo $row->voornaam_man.':&nbsp;&nbsp;'.$row->verjaardag_man;
#                break;

                case (($row->verjaardag_vrouw) != 0000-00-00):
                        echo $row->voornaam_vrouw.':&nbsp;&nbsp;'.$row->verjaardag_vrouw;
#                break;

                case (($row->verjaardag_kind_1) != 0000-00-00):
                        echo $row->naam_kind_1.':&nbsp;&nbsp;'.$row->verjaardag_kind_1;
#                break;

                case (($row->verjaardag_kind_2) != 0000-00-00):
                        echo $row->naam_kind_2.':&nbsp;&nbsp;'.$row->verjaardag_kind_2;
#                break;

                case (($row->verjaardag_kind_3) != 0000-00-00):
                        echo $row->naam_kind_3.':&nbsp;&nbsp;'.$row->verjaardag_kind_3;
#                break;

                case (($row->verjaardag_kind_4) != 0000-00-00):
                        echo $row->naam_kind_4.':&nbsp;&nbsp;'.$row->verjaardag_kind_4;
#                break;

                case (($row->verjaardag_kind_5) != 0000-00-00):
                        echo $row->naam_kind_5.':&nbsp;&nbsp;'.$row->verjaardag_kind_5;
#                break;

        default:
                echo '&nbsp;';
#        break;
        }
?>
 
PHP hulp

PHP hulp

19/11/2024 15:39:28
 

03/01/2007 11:10:00
Quote Anchor link
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.
 
- Jim  -

- Jim -

03/01/2007 11:18:00
Quote Anchor link
een Switch constructie is hier niet zo voor bedoel, dan kan je beter gebruike maken van if..then..else..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
42
43
44
45
<?php

if ($row->verjaardag_man == 0000-00-00) {
        echo "&nbsp;";
}
else {
        echo $row->voornaam_man.':&nbsp;&nbsp;'.$row->verjaardag_man;
}


if ($row->verjaardag_vrouw == 0000-00-00) {
        echo "&nbsp;";
}
else {
        echo $row->voornaam_vrouw.':&nbsp;&nbsp;'.$row->verjaardag_vrouw;
}


if ($row->verjaardag_kind1 == 0000-00-00) {
        echo "&nbsp;";
}
else {
        echo $row->voornaam_kind1.':&nbsp;&nbsp;'.$row->verjaardag_kind1;
}


if ($row->verjaardag_kind2 == 0000-00-00) {
        echo "&nbsp;";
}
else {
        echo $row->voornaam_kind2.':&nbsp;&nbsp;'.$row->verjaardag_kind2;
}


if ($row->verjaardag_kind3 == 0000-00-00) {
        echo "&nbsp;";
}
else {
        echo $row->voornaam_kind3.':&nbsp;&nbsp;'.$row->verjaardag_kind3;
}


if ($row->verjaardag_kind4 == 0000-00-00) {
        echo "&nbsp;";
}
else {
        echo $row->voornaam_kind4.':&nbsp;&nbsp;'.$row->verjaardag_kind4;
}


if ($row->verjaardag_kind5 == 0000-00-00) {
        echo "&nbsp;";
}
else {
        echo $row->voornaam_kind5.':&nbsp;&nbsp;'.$row->verjaardag_kind5;
}


?>
 
Willem vp

Willem vp

03/01/2007 11:23:00
Quote Anchor link
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.
 
Willem vp

Willem vp

03/01/2007 11:26:00
Quote Anchor link
@Jim:

Ik moet zeggen dat ik een switch toch echt een stuk duidelijker vind dan zo'n if-then-spaghetti ;-)
 
- Jim  -

- Jim -

03/01/2007 11:30:00
Quote Anchor link
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..
Gewijzigd op 01/01/1970 01:00:00 door - Jim -
 
- Jim  -

- Jim -

03/01/2007 11:43:00
Quote Anchor link
Okay voor het overzicht...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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.' :&nbsp;'. $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);

?>
Gewijzigd op 01/01/1970 01:00:00 door - Jim -
 

03/01/2007 12:04:00
Quote Anchor link
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.

Afbeelding
Boven de code van Jim en daaronder die van Willem

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?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.' :&nbsp;'. $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.':&nbsp;&nbsp;'.$row->verjaardag_man.'<br />';
#                break;

                case ($row->verjaardag_vrouw):
                        echo $row->voornaam_vrouw.':&nbsp;&nbsp;'.$row->verjaardag_vrouw.'<br />';
#                break;

                case ($row->verjaardag_kind_1):
                        echo $row->naam_kind_1.':&nbsp;&nbsp;'.$row->verjaardag_kind_1.'<br />';
#                break;

                case ($row->verjaardag_kind_2):
                        echo $row->naam_kind_2.':&nbsp;&nbsp;'.$row->verjaardag_kind_2.'<br />';
#                break;

                case ($row->verjaardag_kind_3):
                        echo $row->naam_kind_3.':&nbsp;&nbsp;'.$row->verjaardag_kind_3.'<br />';
#                break;

                case ($row->verjaardag_kind_4):
                        echo $row->naam_kind_4.':&nbsp;&nbsp;'.$row->verjaardag_kind_4.'<br />';
#                break;

                case ($row->verjaardag_kind_5):
                        echo $row->naam_kind_5.':&nbsp;&nbsp;'.$row->verjaardag_kind_5;
#                break;

        default:
                echo 'Niet bekend';
#        break;
        }
                            ?>
Gewijzigd op 01/01/1970 01:00:00 door
 
Niek s

niek s

03/01/2007 12:18:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
ID             GEZIN_ID                KIND_NAAM                ANDERVELD
1                 1                          Joop                           0648942754
2                 1                          Klaas                         -
3                 4                         Henk                          0612345678
4                 1                          Bertha                        -
Gewijzigd op 01/01/1970 01:00:00 door niek s
 
- Jim  -

- Jim -

03/01/2007 12:22:00
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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.' :&nbsp;'. $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 />';
        ?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
                        switch (true){
                case (
$row->verjaardag_man):
                        echo $row->voornaam_man.':&nbsp;&nbsp;'.$row->verjaardag_man.'<br />';
#                break;

                case ($row->verjaardag_vrouw):
                        echo $row->voornaam_vrouw.':&nbsp;&nbsp;'.$row->verjaardag_vrouw.'<br />';
#                break;

                case ($row->verjaardag_kind_1):
                        echo $row->naam_kind_1.':&nbsp;&nbsp;'.$row->verjaardag_kind_1.'<br />';
#                break;

                case ($row->verjaardag_kind_2):
                        echo $row->naam_kind_2.':&nbsp;&nbsp;'.$row->verjaardag_kind_2.'<br />';
#                break;

                case ($row->verjaardag_kind_3):
                        echo $row->naam_kind_3.':&nbsp;&nbsp;'.$row->verjaardag_kind_3.'<br />';
#                break;

                case ($row->verjaardag_kind_4):
                        echo $row->naam_kind_4.':&nbsp;&nbsp;'.$row->verjaardag_kind_4.'<br />';
#                break;

                case ($row->verjaardag_kind_5):
                        echo $row->naam_kind_5.':&nbsp;&nbsp;'.$row->verjaardag_kind_5;
#                break;

        default:
                echo 'Niet bekend';
#        break;
        }
                            ?>


;) Goed bedacht Willem!!
 

03/01/2007 12:23:00
Quote Anchor link
De constructie van Jim werkt!

Ik zie nu alleen de namen van diegene waar ik de geboortedata van weet met daarachter de datum.

Dit heb ik nu:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
42
43
44
<?php
                        
if ($row->verjaardag_man == NULL) {
        echo "";
}
else {
        echo $row->voornaam_man.':&nbsp;&nbsp;'.$row->verjaardag_man.'<br />';
}


if ($row->verjaardag_vrouw == NULL) {
        echo "";
}
else {
        echo $row->voornaam_vrouw.':&nbsp;&nbsp;'.$row->verjaardag_vrouw.'<br />';
}


if ($row->verjaardag_kind_1 == NULL) {
        echo "";
}
else {
        echo $row->naam_kind_1.':&nbsp;&nbsp;'.$row->verjaardag_kind_1.'<br />';
}


if ($row->verjaardag_kind_2 == NULL) {
        echo "";
}
else {
        echo $row->naam_kind_2.':&nbsp;&nbsp;'.$row->verjaardag_kind_2.'<br />';
}


if ($row->verjaardag_kind_3 == NULL) {
        echo "";
}
else {
        echo $row->naam_kind_3.':&nbsp;&nbsp;'.$row->verjaardag_kind_3.'<br />';
}


if ($row->verjaardag_kind_4 == NULL) {
        echo "";
}
else {
        echo $row->naam_kind_4.':&nbsp;&nbsp;'.$row->verjaardag_kind_4.'<br />';
}


if ($row->verjaardag_kind_5 == NULL) {
        echo "";
}
else {
        echo $row->naam_kind_5.':&nbsp;&nbsp;'.$row->verjaardag_kind_5;
}

?>


Afbeelding
 
- Jim  -

- Jim -

03/01/2007 12:29:00
Quote Anchor link
Maar wat is ik nou 4 kinderen heb, en 3 adoptie kids?
 

03/01/2007 12:30:00
Quote Anchor link
niek schreef op 03.01.2007 12:18:
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
ID             GEZIN_ID                KIND_NAAM                ANDERVELD
1                 1                          Joop                           0648942754
2                 1                          Klaas                         -
3                 4                         Henk                          0612345678
4                 1                          Bertha                        -



Ja, ik heb maar 1 tabel waar ik alle gegevens in zet.
Ik heb daarin 5 rijen voor kinderen aangemaakt.
Als ze er dus 3 hebben laat ik de andere 2 leeg.

Misschien slim om het op jouw manier te doen.
Maar ik ben niet zo'n held in dit soort dingen.
Ik weet niet goed wat ik beter allemaal kan splitsen.

Zo zitten er telefoonnummers, mobiele nummers, mobiel van de zaak, fax, fax van de zaak in, en alles in 1 tabel.

Is het dan ook de bedoeling dat je een telefoon tabel maakt?
 

03/01/2007 12:31:00
Quote Anchor link
Jim schreef op 03.01.2007 12:29:
Maar wat is ik nou 4 kinderen heb, en 3 adoptie kids?


Dat maakt toch niet uit?
Je hebt dat kind geadopteerd, dus dat is gewoon je kind.

EDIT: Of bedoel je dat je de geboorte datum misschien niet weet.

Ik zet de namen van de kinderen onder de namen van de ouders in de tabel van adres gegevens op de website.

Ik heb namelijk aparte vakken.

Adres gegevens

Verjaardagen

Email/website

Werk gegevens
Gewijzigd op 01/01/1970 01:00:00 door
 
- Jim  -

- Jim -

03/01/2007 12:38:00
Quote Anchor link
Maar je heb niet kind6 en kind7, dus je hebt niet genoeg velden in je tabel.
Je kan ook voor ieder persoon een record aanmaken ipv ieder gezin,

id(int) - voornaam(var) - achternaam(var) - geboren(date) - vader(int) - moeder(int)

hierbij verwijzen de vader en moeder naar een ander-record in de tabel. dan maakt het niet uit hoeveel kinderen iemand zou hebben.
 
Willem vp

Willem vp

03/01/2007 12:42:00
Quote Anchor link
Even nog wat theorie:

De switch-constructie van Jim werkt niet, omdat switch alleen de waardes vergelijkt en niet het type. Oftewel: wanneer de waarde van het datumveld NULL is, is er geen verschil tussen "case 0000-00-00" en "case NULL".

De constructie met switch(true) waar Jim zo fel tegen ageerde is helemaal geen oneigenlijk gebruik van een switch, maar juist een efficiënte manier om meerdere variabelen te vergelijken met 1 waarde (in plaats van 1 variabele te vergelijken met meerdere waardes, zoals de switch meestal wordt gebruikt).

Wat ik even over het hoofd had gezien, is dat een switch niet herevalueert: zodra een vergelijking TRUE is, zal alle resterende code tot aan de eerstvolgende break of het eind van de switch worden uitgevoerd. Dat zorgt er in dit geval voor dat de switch-constructie niet kan worden gebruikt.
 
- Jim  -

- Jim -

03/01/2007 12:48:00
Quote Anchor link
Willem vp schreef op 03.01.2007 12:42:
Even nog wat theorie:

De switch-constructie van Jim werkt niet, omdat switch alleen de waardes vergelijkt en niet het type. Oftewel: wanneer de waarde van het datumveld NULL is, is er geen verschil tussen "case 0000-00-00" en "case NULL".

De constructie met switch(true) waar Jim zo fel tegen ageerde is helemaal geen oneigenlijk gebruik van een switch, maar juist een efficiënte manier om meerdere variabelen te vergelijken met 1 waarde (in plaats van 1 variabele te vergelijken met meerdere waardes, zoals de switch meestal wordt gebruikt).

Wat ik even over het hoofd had gezien, is dat een switch niet herevalueert: zodra een vergelijking TRUE is, zal alle resterende code tot aan de eerstvolgende break of het eind van de switch worden uitgevoerd. Dat zorgt er in dit geval voor dat de switch-constructie niet kan worden gebruikt.


Het lijkt mij niet handling om mbv switch() een waarde tov een variabele te controleren. Op deze wijze zou je voor iedere mogelijke variabele een case moeten maken, en dat is werkverschaffing en ja ik ben liever lui dan moe!!!

In dat geval zou ik een loop gebruiken, welke automatisch alle variabelen controleerd.
 

03/01/2007 13:22:00
Quote Anchor link
Ik ben er net mee begonnen dus ik kan nog veel wijzigen.
Het is gewoon een persoonlijk adressenboek voor ons thuis maar ik wil er zoveel mogelijk gegevens van een persoon inhebben staan.

Is het misschien verstandig om van alle onderdelen die ik wil weten een aparte tabel aan te maken?

Tabel Naam:
-naam_id
-naam_voornaam
-naam_achternaam
-werk_naam
-zaak_soort (bv Bakkerij)
-zaak_naam (naam van bakkerij)

Tabel Adres:
-adres_id
-adres_straat
-adres_postcode
-adres_plaats
-adres_land
-werk_straat
-werk_postcode
-werk_plaats
-werk_land
-zaak_straat
-zaak_postcode
-zaak_plaats
-zaak_land
-naam_id

Tabel Telefoon_mobiel
-tel_id
-vast
-vast_werk
-mobiel
-mobiel_werk
-vast_zaak
-mobiel_zaak
-naam_id
-adres_id

en zo verder......of is dit te ver gezocht.
Gewijzigd op 01/01/1970 01:00:00 door
 
- Jim  -

- Jim -

03/01/2007 13:29:00
Quote Anchor link
Zou je dan niet vanaf de persoon naar een adres tabel refferen ipv van adres naar persoon. Je moet je afcragen wat waarvan afhankelijk is.

http://www.google.nl/search?hl=nl&q=ERD&meta=
 
Willem vp

Willem vp

03/01/2007 13:35:00
Quote Anchor link
Komt een aardig eind in de richting.

Ik zou die tabel Naam opsplitsen in twee tabellen Naam en Werk. Op die manier zou je ook nog iemand met twee part-time banen in je database kunnen onderbrengen ;-)

En van die telefoontabel zou ik iets maken als:

- tel_id
- nummer
- tel_type

waarbij tel_type een set is met de waardes 'vast', 'vast_werk', etc.
Op die manier kun je zelfs mijn schoonmoeder in je database kwijt ;-) (die heeft drie mobiele telefoons, en altijd een andere bij zich...)

Op die manier zou je ook je adres-tabel kunnen indelen:

- adres_id
- adres_type -> thuis, werk, vakantiehuisje
- adres
- postcode
- plaats
- land
 

Pagina: « vorige 1 2 3 volgende »



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.