[PHP + MySQL] Waarden MySQL cel in array

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 28-05 15:07
Ik ben bezig met een rechtensysteem, waar er af en toe nieuwe rechten bij zouden kunnen komen. Ik heb een tabel met daarin alle gebruikers, en in deze tabel zit een kolom die 'grants' heet.

Met het volgende scriptje krijg je als waarde 'false' op je scherm. Dit is ook de bedoeling.
PHP:
1
2
3
4
5
6
7
8
<?php
$rights = array('right1' => 'true',
                'right2' => 'false',
                'right3' => 'true',
                'right4' => 'true');
              
echo $rights["right2"];
?>

Nu wil ik voor mijn rechtensysteem hetzelfde. Ik werk met een session, waarin de usergegevens in worden geladen, dus ook de rechten (grants). Hier komen alle waarden ook netjes in. Deze session heet in mijn geval $_SESSION["USERDATA"]. De gebruikersrechten staan in de session $_SESSION["USERGRANTS"]. Dit werkt ook allemaal prima.

Stel je voor dat ik de volgende dingen als rechten heb:
news_post
news_edit
news_delete

In een normale array, zou je dan het volgende hebben:
PHP:
1
2
3
4
5
<?php
array('news_post'   => 'true',
      'news_edit'   => 'true',
      'news_delete' => 'false');
?>

Ik heb in de MySQL cel 'grants' het volgende gezet:
code:
1
2
3
'news_post'   => 'true', 
'news_edit'   => 'true', 
'news_delete' => 'false'

De cel 'grants' komt dus in de session $_SESSION["USERGRANTS"] te staan, d.m.v. het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
/*
   Inhoud van $_SESSION["USERDATA"]->grants
     ['news_post']   => 'true',
     ['news_edit']   => 'false',
     ['news_delete'] => 'true'
*/

$_SESSION["USERGRANTS"] = array($_SESSION["USERDATA"]->grants);
?>

De waarden moeten dan aan te roepen zijn d.m.v. $_SESSION["USERGRANTS"]["news_post"], $_SESSION["USERGRANTS"]["news_edit"] en $_SESSION["USERGRANTS"]["news_delete"]. Wit werkt helaas niet. Heb al gezocht op o.a. Google, PHP.net en GoT, maar heb niks kunnen vinden wat me van mijn probleem afhelpt.

Als ik dan $_SESSION["USERGRANTS"][0] aanroep, dan krijg ik daar het volgende te zien:
'news_post' => 'true', 'news_edit' => 'true', 'news_delete' => 'false'

Heb het al op verschillende manieren geprobeerd, maar geen van de volgende mogelijkheden werkt:
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
/*
   Inhoud van $_SESSION["USERDATA"]->grants
     ['news_post']   => 'true',
     ['news_edit']   => 'false',
     ['news_delete'] => 'true'
*/

$_SESSION["USERGRANTS"] = implode(array($_SESSION["USERDATA"]->grants));
?>

en
PHP:
1
2
3
4
5
6
7
8
9
10
<?php
/*
   Inhoud van $_SESSION["USERDATA"]->grants
     ['news_post']   => 'true',
     ['news_edit']   => 'false',
     ['news_delete'] => 'true'
*/

$_SESSION["USERGRANTS"] = explode(",", implode(array($_SESSION["USERDATA"]->grants)));
?>

Als ik deze laatste gebruik, en dan aanroep met bijv. $_SESSION["USERGRANTS"][2], dan krijg ik daar als waarde ['news_delete'] => 'true'. Dit is dus ook niet de bedoeling.

Ik hoop dat jullie mijn verhaal hierboven een beetje snappen, en dat jullie met een oplossing komen :) Mocht het niet duidelijk zijn, meld het dan even :)

[ Voor 21% gewijzigd door f.grijze op 05-04-2005 14:41 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Er is een verschil tussen een string met daarin de output van print_r en een map (zoals de array nu wordt gebruikt). Het is niet zo dat je, waneer je die string erin duwt, dat je dan automatisch een array krijgt. Daarnaast is het nogal tegen allerlij normaalvormen in dat je het op deze manier in de database opslaat. Een koppeltabel lijkt me in dit geval veel voor de hand liggender.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 28-05 15:07
Janoz schreef op dinsdag 05 april 2005 @ 14:40:
Er is een verschil tussen een string met daarin de output van print_r en een map (zoals de array nu wordt gebruikt). Het is niet zo dat je, waneer je die string erin duwt, dat je dan automatisch een array krijgt. Daarnaast is het nogal tegen allerlij normaalvormen in dat je het op deze manier in de database opslaat. Een koppeltabel lijkt me in dit geval veel voor de hand liggender.
Hoe bedoel jij een koppeltabel in dit geval Janoz?

Acties:
  • 0 Henk 'm!

Verwijderd

Frank-2k schreef op dinsdag 05 april 2005 @ 14:42:
[...]

Hoe bedoel jij een koppeltabel in dit geval Janoz?
Hij bedoelt een tabel met uitsluitend waarden die refereren naar 2 of meer andere tabellen. Door gebruik te maken van deze koppeltabel krijg je meer mogelijkheden wat betreft JOINS tot je beschikking.

Acties:
  • 0 Henk 'm!

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 28-05 15:07
Dus als ik het goed begrijp, moet ik voor de rechten een aparte tabel (userrights) aanmaken, en dan bijvoorbeeld d.m.v. mysql_fetch_array(); de waarden van 'userrights' in een session zetten?

Acties:
  • 0 Henk 'm!

  • Andre-85
  • Registratie: April 2003
  • Niet online

Andre-85

Sid

Jep voor iedere grand een aparte kolom maken is de netste oplossing.

userrights
user_id
news_post
news_edit
news_delete
enz...

En dan zoiets doen:
PHP:
1
2
3
4
5
$_SESSION['usergrands'] = mysql_fetch_assoc($result);
if($_SESSION['usergrands']['news_post'])
  {
  //doe iets
  }

[ Voor 42% gewijzigd door Andre-85 op 05-04-2005 15:41 ]

Lorem
Whenever we feel the need to comment something, we write a method instead. - Martin Fowler
People who think they know everything really annoy those of us who know we don't - Bjarne Stroustrup


Acties:
  • 0 Henk 'm!

  • f.grijze
  • Registratie: Augustus 2002
  • Laatst online: 28-05 15:07
Daar had ik dus in het begin ook al aan zitten denken, maar daar wou ik niet naar uit :) Wou het eigenlijk liever op een manier zoals ik het in mijn TS beschreef... Maar het zal hier dan toch wel op uitkomen...
Pagina: 1