Toon posts:

[PHP] Function vraagje

Pagina: 1
Acties:

Onderwerpen


  • winux
  • Registratie: april 2003
  • Laatst online: 20-09 16:23
Na een paar jaar niet meer met php gewerkt te hebben was ik wat aan het stoeien. Maar kom niet uit het volgende.

Ik heb het volgende stukje code:
code:
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
<?php
function beveiliging($onderdeel){  
$rights['news_add'] = 1;
$rights['news_edit'] = 2;
$rights['admin'] = 4;
$rights['games_delete'] = 64;
$rights['games_approve'] = 128;

$recht_uit_db = 7;

        if ($recht_uit_db & $rights[$onderdeel]){
        $toegang = 1;
        }
        
    else{
    $toegang = 0;
    
    }
    
if($toegang == 0){

    exit;
    

}
}
              
        beveiliging("admin"); //4
        echo "admin<br>";

        beveiliging("news_add"); //1
        echo "news_add<br>";
        
        beveiliging("news_edit"); //2
        echo "news_edit<br>";
                    
        beveiliging("games_delete");
        echo "games_delete<br>";
        
        beveiliging("games_approve");
        echo "games_approve<br>";
?>


Ik wil dat de functie elke keer vanaf begin gestart wordt bij elke aanroep. Zodat hij bij elke beveiling_functie opnieuw op de rechten gaat controleren.

Hoe doe ik dat?? :$

  • orf
  • Registratie: augustus 2005
  • Nu online
Met functies is een return value handiger dan een exit. In dit geval kun je een boolean teruggeven en kun je met een if(beveiliging("admin")){} kijken wat iemand mag.

  • NMe
  • Registratie: februari 2004
  • Laatst online: 00:19

NMe

Quia Ego Sic Dico.

Ehm, een functie wordt per definitie vanaf het begin gestart bij elke aanroep? :?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • winux
  • Registratie: april 2003
  • Laatst online: 20-09 16:23
NMe schreef op maandag 27 september 2010 @ 23:46:
Ehm, een functie wordt per definitie vanaf het begin gestart bij elke aanroep? :?
Ja sorry ik verwoordt het verkeerd. Ik bedoel. Die exit, stop de het verloop van de pagina. Maar hoe kan ik er voor zorgen dat die wel verder gaat op moment dat de functie weer aangeroepen wordt?

  • NMe
  • Registratie: februari 2004
  • Laatst online: 00:19

NMe

Quia Ego Sic Dico.

winux schreef op maandag 27 september 2010 @ 23:48:
[...]

Ja sorry ik verwoordt het verkeerd. Ik bedoel. Die exit, stop de het verloop van de pagina. Maar hoe kan ik er voor zorgen dat die wel verder gaat op moment dat de functie weer aangeroepen wordt?
Door zoals boven mij gezegd wordt geen exit te gebruiken maar netjes returnwaarden voor de functie die je in je main loop weer controleert.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • winux
  • Registratie: april 2003
  • Laatst online: 20-09 16:23
orf schreef op maandag 27 september 2010 @ 23:45:
Met functies is een return value handiger dan een exit. In dit geval kun je een boolean teruggeven en kun je met een if(beveiliging("admin")){} kijken wat iemand mag.
Ja ik wil juist niet met groepen of statussen werken, wanneer ik een if else statement gebruik kan ik namelijk per onderdeel bepalen of de gebruiker het wel of niet mag.

  • NMe
  • Registratie: februari 2004
  • Laatst online: 00:19

NMe

Quia Ego Sic Dico.

winux schreef op maandag 27 september 2010 @ 23:50:
[...]


Ja ik wil juist niet met groepen of statussen werken, wanneer ik een if else statement gebruik kan ik namelijk per onderdeel bepalen of de gebruiker het wel of niet mag.
Wat heeft het al dan niet gebruiken van een returnwaarde die je in een if kan gebruiken met groepen en statussen te maken? Nog los van het feit dat je blijkbaar juist wél met groepen werkt, want dat is wat "admin" en "games" in de praktijk gewoon voor jou gaan betekenen.

We hebben je al eens eerder gewezen op je inzet, en die ontbreekt nu weer. Wat begrijp je precies niet aan de manual? Heb je die er überhaupt bijgepakt?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • winux
  • Registratie: april 2003
  • Laatst online: 20-09 16:23
NMe schreef op maandag 27 september 2010 @ 23:54:
[...]

Wat heeft het al dan niet gebruiken van een returnwaarde die je in een if kan gebruiken met groepen en statussen te maken? Nog los van het feit dat je blijkbaar juist wél met groepen werkt, want dat is wat "admin" en "games" in de praktijk gewoon voor jou gaan betekenen.

We hebben je al eens eerder gewezen op je inzet, en die ontbreekt nu weer. Wat begrijp je precies niet aan de manual? Heb je die er überhaupt bijgepakt?
Die games en admin zijn de bedoeling als pagina. Maar ik bedoel dat ik die if else in de functie wil verwerken. En niet in de pagina. Maar ik vindt het wel erg kort door de bocht door gelijk te zeggen dat ik geen inzet heb getoond. Ik ben de hele avond al proberen en over internet aan het zoeken. Inclusief die handleiding die je aanbeveelt. Maar ik zal wel terug gaan naar de handleiding. Want blijkbaar is het verboden om vragen te stellen hier.

  • NMe
  • Registratie: februari 2004
  • Laatst online: 00:19

NMe

Quia Ego Sic Dico.

Het is niet verboden om vragen te stellen, maar als jij na een hele avond zoeken en proberen nog steeds niet weet dat een functie bedoeld is om waardes te returnen dan heb je ofwel het verkeerde vak gekozen, ofwel je hebt niet zo goed gezocht als je zegt.

En als je geen vragen mocht stellen had je topic allang dicht gezeten. Ik ben aan het proberen je iets bij te brengen maar daarvoor moet ik eerst weten waar je denkfout zit en je dan duidelijk proberen te maken wat er fout zit. Als je dat niet persoonlijk opvat leer je er meer van. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • winux
  • Registratie: april 2003
  • Laatst online: 20-09 16:23
NMe schreef op dinsdag 28 september 2010 @ 00:04:
Het is niet verboden om vragen te stellen, maar als jij na een hele avond zoeken en proberen nog steeds niet weet dat een functie bedoeld is om waardes te returnen dan heb je ofwel het verkeerde vak gekozen, ofwel je hebt niet zo goed gezocht als je zegt.

En als je geen vragen mocht stellen had je topic allang dicht gezeten. Ik ben aan het proberen je iets bij te brengen maar daarvoor moet ik eerst weten waar je denkfout zit en je dan duidelijk proberen te maken wat er fout zit. Als je dat niet persoonlijk opvat leer je er meer van. ;)
Met het verkeerde vak klopt wel, want ik doe dit als hobby en ben gewoon mezelf dingen aan het leren. Waar het waarschijnlijk fout gaat.
Ik zal het proberen niet meer persoonlijk op te vatten. Ik ben nu nogmaals de for loop en return aan het doornemen.

  • ocdaan
  • Registratie: augustus 2001
  • Laatst online: 20-09 16:36
Niets van aantrekken joh, zo gaat dat zo vaak hier op het forum, vele vinden zichzelf godlike ;)

Ieder begin is moeilijk, ik kan me nog prima herinneren hoe het was om te leren proggen....

Ik weet niet precieas wat je probeerd te bereiken maar hier een idee

code:
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
<?php

$rights['news_add'] = 1;
$rights['news_edit'] = 2;
$rights['admin'] = 4;
$rights['games_delete'] = 64;
$rights['games_approve'] = 128;

$recht_uit_db = 7;

function beveiliging($onderdeel){  
 global $rights, $recht_uit_db;

 if ($recht_uit_db == $rights[$onderdeel]){
 return true;
 }else{
 return false;
 }
    
}

if(beveiliging("admin")) {
     echo "admin<br>";
}


if(beveiliging("news_add")) {
     echo "news_add<br>";
}

?>

enz....

  • winux
  • Registratie: april 2003
  • Laatst online: 20-09 16:23
ocdaan schreef op dinsdag 28 september 2010 @ 00:16:
Niets van aantrekken joh, zo gaat dat zo vaak hier op het forum, vele vinden zichzelf godlike ;)

Ieder begin is moeilijk, ik kan me nog prima herinneren hoe het was om te leren proggen....

Ik weet niet precieas wat je probeerd te bereiken maar hier een idee

code:
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
<?php

$rights['news_add'] = 1;
$rights['news_edit'] = 2;
$rights['admin'] = 4;
$rights['games_delete'] = 64;
$rights['games_approve'] = 128;

$recht_uit_db = 7;

function beveiliging($onderdeel){  
 global $rights, $recht_uit_db;

 if ($recht_uit_db == $rights[$onderdeel]){
 return true;
 }else{
 return false;
 }
    
}

if(beveiliging("admin")) {
     echo "admin<br>";
}


if(beveiliging("news_add")) {
     echo "news_add<br>";
}

?>

enz....
Bedankt voor het helpen, maar dit is niet helemaal wat ik bedoel, want ik probeer te werken met bitwise systeem. Wanneer dus de rechten 129 zijn, mag hij news_add en games_approve.

En dat werkt ook, want als ik de ik:

code:
1
2
3
4
5
6
7
8
if ($waarde_uit_db & $rights['news_add'])
      echo 'news add!<br>';
 
if ($waarde_uit_db & $rights['news_edit'])
      echo 'news edit!<br>';
 
if ($waarde_uit_db & $rights['games_approve'])
      echo 'games aprove!<br>';


krijg ik netjes news_add en games_approve en geen news_edit. Alleen wil ik dit in een function zetten zodat ik eigenlijk alleen maar bij een stukje code beveiliging(news_add) of beveiliging(games_approve) kan neerzetten. Zolang ik er per bestand gebruik, komt het wel goed. Maar ik wil de mogelijkheid om meerdere in een bestand te gebruiken.

[edit]
Vandaar dat ik met die exit; in me hoofd zit. Omdat de pagina op dat punt moet eindigen totdat ik weer opnieuw controleer met de functie. Maar volgens mij wil ik iets wat technisch niet mogelijk is |:(

[Voor 5% gewijzigd door winux op 28-09-2010 00:38]


  • NMe
  • Registratie: februari 2004
  • Laatst online: 00:19

NMe

Quia Ego Sic Dico.

Nogmaals. Return een boolean. Check daarop in een simpele if. That's it.
ocdaan schreef op dinsdag 28 september 2010 @ 00:16:
Niets van aantrekken joh, zo gaat dat zo vaak hier op het forum, vele vinden zichzelf godlike ;)
Bedankt voor de persoonlijke aanval. Als ik hier alleen zat om mezelf te verheerlijken dan ging ik wel voor de tv werken ofzo. Ik ben hier om mensen te helpen, maar niet om mensen die zichzelf niet willen helpen aan kant en klare code te helpen zoals jij hier deed.
winux schreef op dinsdag 28 september 2010 @ 00:35:
[edit]
Vandaar dat ik met die exit; in me hoofd zit. Omdat de pagina op dat punt moet eindigen totdat ik weer opnieuw controleer met de functie. Maar volgens mij wil ik iets wat technisch niet mogelijk is |:(
Je wíl helemaal niet dat de pagina eindigt. Wat je wil is dat 'ie doorgaat en blijft checken. Vervolgens zul je alleen een exit (of beter: een exception call) willen doen op het moment dat er géén van de benodigde rechten zijn gezet. En hoe kun je nu zeggen dat je iets wil dat "technisch niet kan" als je niet eens luistert naar hetzelfde advies dat je al drie keer hebt gekregen over het gebruiken van returnwaarden en daarop checken?

[Voor 117% gewijzigd door NMe op 28-09-2010 00:41]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Blackspot
  • Registratie: januari 2001
  • Laatst online: 24-01-2018
'exit' is niet het einde van een pagina maar het afbreken van de uitvoer van je script. Dit is indirect natuurlijk wel het einde van de pagina.

Wat jij wil is heel simpel:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function HebIkToegang($onderdeel) {
 // doe een testje en return false of true
 // $recht_uit_db inlezen!
 if ($recht_uit_db & $rights[$onderdeel]){
  return true;
 }
 return false;
}

if(false === HebIkToegang('onderdeel 1')) {
 // geef melding dat je geen toegang hebt
} else {
 // ja ik heb wel toegang print knopjes/html etc
}

if(false === HebIkToegang('onderdeel 2')) {
 // geef melding dat je geen toegang hebt
} else {
 // ja ik heb wel toegang print knopjes/html etc
}

// etc

[Voor 8% gewijzigd door Blackspot op 28-09-2010 00:46]


  • alex3305
  • Registratie: januari 2004
  • Laatst online: 20-09 17:01
Wil je wel dat de pagina eindigt? Volgens mij wil je eerder dat er een bericht getoond wordt wanneer een gebruiker wel of geen toegang heeft. Dan moet je inderdaad met return-waarden gaan werken in de functie, en deze dan op de uiteindelijk 'html' pagina afvangen.

  • Icekiller2k6
  • Registratie: februari 2005
  • Laatst online: 20-09 16:56
je denkt verkeerd..
als je neit met if en elses wilt werken kun ej het volgende doen
check_user($username,$htmlcode,$level);
waarbij hij indien user toegang heeft tot het level van de html code nodig heeft dit weergeeft..

uiteraard is dit moeilijk doen, maar je verplaatst wel de if else naar de functie die je dan feitelijk maar 1x moet doen daar in.

Hackerspace Brixel te Hasselt (BE) - http://www.brixel.be


  • Cartman!
  • Registratie: april 2000
  • Niet online
ohnee, dan was zijn gedachte die hij had (behalve de exit) wel een stuk beter. De oplossing die je aandraagt lijkt me een drama om mee te werken Icekiller2k6. Het is lastig te onderhouden, de username hoort globaal beschikbaar te zijn (danwel via een Auth object) en dus niet aan elke functie meegegeven te worden. Je level klinkt alsof je gewoon een groep user hebt met 1 en admin met 2 bijv. Je gaat nooit meer voor elkaar krijgen om een user iets te laten zien wat een admin niet mag zijn daarmee.

  • Guillome
  • Registratie: januari 2001
  • Niet online
winux schreef op dinsdag 28 september 2010 @ 00:35:
[...]


Bedankt voor het helpen, maar dit is niet helemaal wat ik bedoel, want ik probeer te werken met bitwise systeem. Wanneer dus de rechten 129 zijn, mag hij news_add en games_approve.
Als je nou even goed kijkt: de code van OCDaan is (bijna) wat je wilt. Als je van de "==" op regel 14 nou "&" maakt heb je wat je wilt.
En zo niet? Dan moet je nou echt even duidelijk aangeven wat je wilt.

If then else matters!


  • NMe
  • Registratie: februari 2004
  • Laatst online: 00:19

NMe

Quia Ego Sic Dico.

Blackspot schreef op dinsdag 28 september 2010 @ 00:45:
PHP:
1
2
3
4
5
6
7
8
function HebIkToegang($onderdeel) {
 // doe een testje en return false of true
 // $recht_uit_db inlezen!
 if ($recht_uit_db & $rights[$onderdeel]){
  return true;
 }
 return false;
}
Doe het dan helemaal goed. :P
PHP:
1
2
3
4
5
function HebIkToegang($onderdeel) {
 // doe een testje en return false of true
 // $recht_uit_db inlezen!
 return (bool)($recht_uit_db & $rights[$onderdeel]);
}

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Guillome
  • Registratie: januari 2001
  • Niet online
Waarom (bool) ervoor, is het resultaat van een &-vergelijking niet boolean?

If then else matters!


  • HuHu
  • Registratie: maart 2005
  • Niet online
Guillome schreef op dinsdag 28 september 2010 @ 12:12:
Waarom (bool) ervoor, is het resultaat van een &-vergelijking niet boolean?
Nee, dat is het niet. Zie de handleiding:
Bits that are set in both $a and $b are set.
Als $a en $b beide een 32-bits int zijn, dan is het resultaat van $a & $b wederom een 32-bits int (of een 32-bit "iets"), waarbij bepaalde bits wel en niet gezet zijn. Als alle bits 0 zijn, is dit gelijk aan de int 0 en als je dit cast naar bool wordt het false. Als er wel een bit gezet is, is dit als int altijd groter dan 0, wat na een cast naar bool dus true wordt.

  • Zyppora
  • Registratie: december 2005
  • Laatst online: 20-09 10:13

Zyppora

155/50 Warlock

Guillome schreef op dinsdag 28 september 2010 @ 12:12:
Waarom (bool) ervoor, is het resultaat van een &-vergelijking niet boolean?
Verplicht leesvoer: http://php.net/manual/en/language.operators.bitwise.php

7 & 4 = 4.
8 & 4 = 0.
15 & 4 = 4.

Phenom II X4 945 \\ 8GB DDR3 \\ Crosshair IV Formula \\ R9 290


  • Guillome
  • Registratie: januari 2001
  • Niet online
Och ja vergissing :)

If then else matters!

Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee