Avatar billede Matekick Nybegynder
10. januar 2012 - 14:07 Der er 5 kommentarer og
1 løsning

Php IF Nested statement

Hejsa alle eksperter..

Jeg har et lille spørgsmål her.
Jeg har lavet et intranet på mit arbejde, og deri er der nogle elev visninger, og der har jeg lavet nogle if statement, til at håndtere, om folkene fra afdeling a, må se elev knapperne fra afdeling b osv..

Koden er:
__________________________

  <?php
if

//Forstandere og Sekretariet
(($_SESSION['MM_Afdeling'] == "Forstandere" || $_SESSION['MM_Afdeling'] == "Sekretariet") ||
// Kompetence center Og Socialrådgivere
($_SESSION['MM_Afdeling'] == "Kompetencecenter") || ($_SESSION['MM_Afdeling'] == "Socialrådgivere") ||

// Dagskole se sine egne
($row_Boeg['dagsprojekt'] == "Dagskole") ||

// EHS Se sine egne
($row_Boeg['dagsprojekt'] == "Erhvervsskole") ||


// Serviceafdelingen
($row_Boeg['dagsprojekt'] == "Erhvervsskole" && $_SESSION['MM_Afdeling'] == "Service")  ||


// Bosted
($_SESSION['MM_Afdeling'] == "Uranusmini"))


?>
                <tr>
                  <td width="180" height="29"><form method="post"
                    action="fil_direct.php">
                      <input type="hidden" name="mappenavn" value="<?php echo $row_Boeg['mappenavn']; ?>"/>
                     
                                 
                     
                      <input name="submit" type="submit" id="submit" value="Elev Filer"/>
                    </form>
                </tr>
                <?php } ?>
________________________________



En af de komplekse ting, er at dem fra dagskolen og erhvervsskolen gerne må se hinandens "knapper", i mens at Servie kun må se de knapper på eleverne, som er tilknyttet erhvervsskolen.
10. januar 2012 - 14:45 #1
Du kommer nok til at forklare lidt mere.  Jeg gætter foreløbigt på det følgende:

Når en bruger åbner systemet, bliver titlen på alle projekter kaldt fra databasen.  For projekter i de 'kategorier' der må ses af brugeren vises der en form med en 'Elev Filer' knap for at hente projektet.  Hvad brugeren må se afhænger af brugerens afdeling.  Brugerens afdeling står i $_SESSION['MM_Afdeling'].  Projektets kategori står i $row-Boeg['dagsprojekt'].  Er det nogenlunde korrekt?

Hvad er så beslutningsreglerne?  Der synes kun at være to 'kategorier' af projekter, dagskole og erhvervsskole.  Er der også, i realiteten, kun to slags afdelinger, Service, og alle andre?  Således at hvis $_SESSION['MM_Afdeling'] er Forstandere eller Sekretariaet eller Kompetencecenter eller Socialrådgivere eller Uranusmini må brugeren se alle projekter, men hvis $_SESSION['MM_Afdeling'] er Service må brugeren kun se projekter af kategori erhvervsskolen?

Hvis det er forkert, hvad er da beslutningsreglerne, og hvordan ved man hvilke brugere der hører til hvilke afdelinger og hvilke projekter der hører til hvilke kategorier?
Avatar billede Matekick Nybegynder
10. januar 2012 - 15:06 #2
Siden som det hele står på, kalder alle databaser på eleverne, så der fra for man, f.eks: $row-Boeg['dagsprojekt'].

I det brugeren logger ind, bliver: $_SESSION['MM_Afdeling'] oprettet, afhændigt af, hvad afdeling de hører inde under.

Så når jeg f.eks, logger ind, er min: $_SESSION['MM_Afdeling'] "Service".

Hvilket vil sige, at jeg må kun se de knapper på eleverne, som eleverne der i databasen, har deres "Dagsprojekt", som Erhvervsskole".

SÅ først og fremmest, kommer det helt an på, hvad afdeling, man hører til .

Hvis jeg f.eks var på bostedet uranus mini, så må jeg se knapper, på alle eleverne, som er på bostedet uranus mini, som denne definere:
// Bosted
($_SESSION['MM_Afdeling'] == "Uranusmini"))

Men derimod, hvis jeg er: Forstander, kompetencecenter, sekretariat, må jeg altid se knappen.

og hvis jeg er på Erhvervsskolen, må jeg kun se de elever, som har deres: $row-Boeg['dagsprojekt'] == "Erhvervsskole".

Så det er de 2 faktorer, det spiller ind på, enten om man er på samme "bosted" som eleven, eller om man er i det samme dagsprojekt, som eleven.

Og elevernes data, bliver taget fra databasen, og de bliver så stillet op i mod brugerenes session, eller de variabler, som der selv er smidt ind.


Det er en ret besværlig måde, jeg har haft fået fat i den før, men så skulle jeg ændre i den, fordi dagskolen og erhvervsskolen måtte se hinandens elevers knapper.

Hvis du kender en smartere måde, er jeg meget interreseret i at hører det! :-)
10. januar 2012 - 15:53 #3
Du siger, at der er 2 faktorer der spiller ind på, bosted  og dagsprojekt-kategori. 

Du viser to variabler, $_SESSION['MM_Afdeling'] og $row_Boeg['dagsprojekt'], hvor der trækkes oplysninger fra. 

Det med dagsprojekter er rimeligt klart.  De står i $row_Boeg['dagsprojekt'], og du har vist to dagsprojekt-'kategorier', Dagskole og Erhvervsskole (men der kunne være flere.)

Brugerens afdeling vises i $_SESSION['MM_Afdeling'], siger du.  Men om en knap må vises kan afhænge af både brugerens afdeling og elevens afdeling, for eksempel om de begge hører til 'afdeling' Uranusmini.  Hvor kan man se afdelingen/bostedet for den elev der har lavet et dagsprojekt?  Er der en row_Boeg['bosted'] eller sådan noget?

Og så kunne det se ud, som $_SESSION['MM_Afdeling'] bruges til flere forskellige slags oplysninger, bosted (Uranusmini), afdeling(service), og position(forstander, sekretariat).  Eller kommer det ud på det samme?  Altså (i pseudokode)

if($_SESSION['MM_Afdeling'] == Forstandere || Sekretariat || Kompetencecenter || Dagskolen || Erhvervsskolen) vis knappen.  (Alle dagsprojekter må ses.)

else if($_SESSION['MM_Afdeling'] == Service && $row_Boeg['dagsprojekt'] == erhvervsskolen) vis knappen.  (Serviceafdelingen må kun se erhvervsskolens dagprojekter)

else if($_SESSION['MM_Afdeling'] == row_Boeg['bosted']) vis knappen.

Hvis du kan fastlægge det krystalklart, så kan vi komme igang med en kode.
Avatar billede Matekick Nybegynder
10. januar 2012 - 16:50 #4
Der en row_Boeg['bosted'], som den kunne spejles op imod.

Sidder lige paa en linux computer, som ikke helt forstaar dansk tastetur, derfor disse: aa, oe...

Men lige nu, er den hardcodet ind i selve koden, til hver enkelte tabel, som viser elever.

Derfor er den eneste som aandres loebende denne:
// Bosted
($_SESSION['MM_Afdeling'] == "Uranusmini"))


Da alle de andre er faste.

Forstander og sekretariat og socialraadgivere, gaar ogsaa ind som afdelinger, derfor er de ogsaa i samme session.

Man kan sige, selve kode betydningen:

//Tjekker om brugeren kommer fra Forstandere eller sekretariet afdelingen, og hvis de goer, saa giv adgang.
(($_SESSION['MM_Afdeling'] == "Forstandere" || $_SESSION['MM_Afdeling'] == "Sekretariet") ||

// Tjekker om brugeren kommer fra Kompetencecenter eller socialraadgiver afdelingen, og hvis de goer, saa giv adgang.
($_SESSION['MM_Afdeling'] == "Kompetencecenter") || ($_SESSION['MM_Afdeling'] == "Socialrådgivere") ||

// Hvis eleven er paa dagsprojektet: Dagskolen, saa giv adgang til at vise //knappen.
($row_Boeg['dagsprojekt'] == "Dagskole") ||

// Hvis eleven er paa dagsprojektet: Erhvervsskole, saa giv adgang til at //vise knappen.
($row_Boeg['dagsprojekt'] == "Erhvervsskole") ||

//Man kunne i princippet, sagens smede disse 2 sammen, da Erhvervsskolen //og Dagskolen maa se hinandens elev knapper.


// Tjekker foerst og fremmest, om elevens dagsprojekt er Erhvervsskole, og // her efter, tjekker vi om brugerens afdeling er Erhvervsskole.
($row_Boeg['dagsprojekt'] == "Erhvervsskole" && $_SESSION['MM_Afdeling'] == "Service")  ||


// Her tjekker vi under den enkelte unge, om paadagogen har adgang til at // se knappen.
($_SESSION['MM_Afdeling'] == "Uranusmini"))


// Her ville man maaske ogsaa kunne pege den op i mod databasen, i stedet //for at lave ren tekst.

For at tage din kode:


if($_SESSION['MM_Afdeling'] == Forstandere || Sekretariat || Kompetencecenter || socialraadgivere ||)
vis knappen.  (Alle elev knapper må ses.)

else ($row_Boeg['dagsprojekt'] == Dagskole || Erhvervsskole )
vis knappen. 
(alle elev knapperne, hvor eleven er tilknyttet erhvervsskolen eller dagskolen via: $row_Boeg['dagsprojekt'], maa ses.)


else if($_SESSION['MM_Afdeling'] == Service && $row_Boeg['dagsprojekt'] == erhvervsskolen)
vis knappen.  (Serviceafdelingen må kun se erhvervsskolens dagprojekter)

else if($_SESSION['MM_Afdeling'] == row_Boeg['bosted']) vis knappen.



Og hvis intet af dette opfyldes, skal html koden med knappen indeni ikke vises.


haaber det gav lidt mere mening.

Det er en ret besvaarlig kode, og endnu mere besvaarlig maade, det er gjort paa, kan jeg godt se, jo mere, jeg kigger paa det, saa at kunne lave det mere automatisk, kunne vaare genialt.
10. januar 2012 - 17:34 #5
Du har vist disse mulige værdier for $_SESSION['MM_Afdeling']:

For positioner/afdelinger:

Forstander
Sekretariat
socialrådgivning
kompetencecenter
service

for bosteder:

uranusmini

Der er vel også andre bosteder.

Jeg tillader mig at oprette dette som svar, idet jeg håber at have givet, hvis ikke den endelige løsning, så noget du kan arbejde videre med.

Hvis der er beslutningsregler der falder udenfor dem i min foreslåede kode, så fortæl.  Så prøver jeg en gang mere.

Så forstår jeg disse beslutningsregler:

Hvis $_SESSION['MM_Afdeling'] er forstander eller sekretariat eller socialrådgivning eller kompetencecenter

eller ($_SESSION['MM_Afdeling'] er service og $row_Boeg['dagsprojekt'] er erhvervsskole)

eller ($_SESSION['MM_Afdeling'] er lig med $row_Boeg['bosted'])

vis knappen.

Er der andre beslutningsregler, såsom andre afdelinger der må eller ikke må se visse dagsprojekter?

Ellers kunne man kode sådan:

<?php

if($_SESSION['MM_Afdeling'] == 'Forstandere' || $_SESSION['MM_Afdeling'] == 'Sekretariet' ||$_SESSION['MM_Afdeling'] == 'Kompetencecenter' || $_SESSION['MM_Afdeling'] == 'Socialrådgivere' || ($_SESSION['MM_Afdeling'] == 'Service' && $row_Boeg['dagsprojekt'] == 'Erhvervsskole') || ($_SESSION['MM_Afdeling'] == $row_Boeg['bosted']))

?>

<tr>
  <td width="180" height="29">
  <form method="post" action="fil_direct.php">
    <input type="hidden" name="mappenavn" value="<?php echo $row_Boeg['mappenavn']; ?>"/>
    <input name="submit" type="submit" id="submit" value="Elev Filer"/>
  </form>
</tr>
Avatar billede Matekick Nybegynder
11. januar 2012 - 08:20 #6
Siger tusinde tak for hjælpen, kan godt se, hvad min fejl nu har været.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester