[PHP] Hoe criteria handlen?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DDemolition
  • Registratie: Augustus 2003
  • Laatst online: 30-09-2024

DDemolition

slopen is mijn lust en leven

Topicstarter
Hoi,
Ik ben 'n PHP applicatie aan het maken. Het is de bedoeling dat verschillende acties in 'n tabel komen. Van daaruit kan ik kijken of de actie uitgevoerd en weergegeven mag worden.
Dus daarvoor heb ik een functie in het leven geroepen.
De structuur van de tabbelen is:
Users - Classes - Actions.
Tussen de 3 tabellen zitten 2 koppeltabellen voor een 'veel-op-veel' relatie.
Het onderstaande SQL statement kan meerdere rijen opleveren, omdat een actie bv. in 2 classes kan staan. De gebruiker hoeft niet per sé op beide rijen een uitkomst TRUE te hebben, omdat een class de ene keer 'denied' op kan leveren, maar de andere keer 'allowed' (1 of 0).
Je moet een beetje aan het Windows policy management idee denken.

PHP:
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
//fHasAccess()
function fHasAccess($fstrUserID, $fstrActionName)
{
if (fIsLoggedOn() == true)
    {
    include("DBconnect.php");
    $SQL = "SELECT ";
    $SQL .= "   USR_Enabled, ";
    $SQL .= "   UCL_Allowed, ";
    $SQL .= "   ACT_Enabled, ";
    $SQL .= "   ACT_StartTime, ";
    $SQL .= "   ACT_EndTime ";
//En 'n heleboel innerjoins...
    $SQL .= "WHERE ";
    $SQL .= "   (((USR_ID)='$fstrUserID') ";
    $SQL .= "AND ((ACT_Name)='$fstrActionName'))";
    $rs = mysql_query($SQL) or die ("fout: " . mysql_error());
    echo $SQL . "<br>";
    while (list($strAccountEnabled, $strClassAllowed, $strActionEnabled, $strActionStartTime, $strActionEndTime)= mysql_fetch_row($rs))
        {

//De grote vraag  van dit topic.
        }//end while
    }
else
    {
    return false;
    break;
    }
}//end function

Ik wil weten:
- is het account geactiveerd ($strAccountEnabled)
- Is de classe (soort van policy) geactiveerd. ($strClassAllowed)
- Heeft de betreffende gebruiker de betreffende actie toegewezen gekregen (checken van mysql_nuw_rows)
- Is de betreffende actie geactiveerd ($strActionEnabled)
- daarna nog of de actie binnen de tijd uitgevoerd mag worden.

Ik weet eigenlijk niet precies hoe ik het checken van allles moet handlen. Dit o.a. bij het checken van een classe. De waarde van $strClassAllowed kan 0,1 of "leeg" zijn.
0 = denied, (dus einde oefening en return false)
1 = enforced toegestaan, (return true stoppen?)
"leeg" toegestaan (niets returnen en doorgaan naar volgend record)

Ik zat al te denken aan functies in deze functie mbv. switch/case contructies.
Hoe kan ik het beste deze criteria handlen met zo min mogelijk preformance verlies?

Misschien handig
PHP 5.04
MySQL 5.0
IIS6 / Win2003Ent.

[ Voor 31% gewijzigd door DDemolition op 26-11-2005 13:44 ]

Specs: Server, WS boven, WS beneden


Acties:
  • 0 Henk 'm!

Verwijderd

Ik weet niet of ik je probleem goed begrijp. Is het voldoende om een var $hasAcces te maken en de te initialiseren op false (alvorens de loop). Wanneer je dan de loop in gaat en de criteria kun je de betreffende variabele zonodig de waarde true toekennen. Wanneer dan een van de behandelde records true oplevert (niet belangrijk welke) zal deze var uiteindelijkde waarde true hebben.

Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Zo ingewikkeld is dat toch niet. Je weet al op welke voorwaarden je functie TRUE moet returnen. Op al het het andere return je false.
PHP:
1
2
3
4
while(fetchrow()) {
  if ($conditions == TRUE) { return TRUE;}
}
return FALSE;

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • DDemolition
  • Registratie: Augustus 2003
  • Laatst online: 30-09-2024

DDemolition

slopen is mijn lust en leven

Topicstarter
idd,
Heb even iets stoms over het hoofd gezien. Bij het nakijken van alle strings kan ik eerst kijken of evt. $HasAccess nog wel of nog niet FALSE is. Daar zat ik een beetje mee in de knoop
als ie nog op TRUE staat mag ie door naar de volgende check

Klein vraagje:
Hoe spring ik dan naar het volgende If Else statement?
Dmv.
PHP:
1
Break;
ga ik meteen uit de while loop 8)7

[ Voor 9% gewijzigd door DDemolition op 26-11-2005 14:37 ]

Specs: Server, WS boven, WS beneden


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Met continue; spring je naar de volgende iteratie van een loop als je dat bedoeld. Waarvoor je het nodig zou hebben weet ik alleen niet. Met de volgende structuur ben je er namelijk ook:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function fHasAccess($userid, $action) {
    if (fIsLoggedOn()) {
    
        /**fetch database data**/
    
        while (list(blabla, databasedata)) {
            
            //vul booleans $accountActive-$timeAllowed adhv databasedata

            if ( $accountActive && $classAllowed && $actionActive && $actionAllowed && $timeAllowed) {
                return TRUE;
            }
        }
    }
    return FALSE;
}

[ Voor 3% gewijzigd door T-MOB op 26-11-2005 14:59 ]

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • DDemolition
  • Registratie: Augustus 2003
  • Laatst online: 30-09-2024

DDemolition

slopen is mijn lust en leven

Topicstarter
Super!
Met deze structuur werkt het :D
Had Continue; inderdaad niet nodig.

Specs: Server, WS boven, WS beneden

Pagina: 1