Avatar billede steenolsen1 Nybegynder
09. marts 2005 - 08:16 Der er 15 kommentarer og
1 løsning

Slå til/fra funktion - eventuelt med sessions?

Hej Exp,

jeg har udviklet et site, hvor der skal kunne til- og frakobles forskellige "moduler" alt efter brugerens rettigheder. Nøjagtig hvilke funktioner/moduler, den enkelte bruger skal kunne bruge, er registreret i en db.

For at spare en forespørgsel til db'en hver gang brugeren klikker sig rundt på sitet, overvejede jeg om ikke man kunne lave queryen EN gang, og så registrere det i sessionvariabler. Så kunne hvert modul have sin egen session variabel, og var den lig 1 har brugeren rettigheder ellers ikke.

Jeg kan ikke få registreret disse rettigheder i mine sessions...

Hvad er den smarteste måde at gøre dette på?
Avatar billede detox Nybegynder
09. marts 2005 - 08:25 #1
Jeg vil mene at du kan registrere de godkendte moduler med:

<?php
session_start();
// dit kald til databasen
while ($row = mysql_fetch_assoc($res)) {
  $_SESSION[$row['modulnavn']] = 1;
}
Avatar billede steenolsen1 Nybegynder
09. marts 2005 - 08:51 #2
Det har jeg prøvet, men måske gør jeg det bare forkert. Som jeg har forstået det, kan jeg ikke registrere indhold i sessions, efter der har været en include eller en udskrift til skærmen - jeg includer min connection til databasen, og vil helst ikke lave om på det, da hver bruger kører på seperat database...
Avatar billede detox Nybegynder
09. marts 2005 - 08:54 #3
Nej det skulle ikke have noget at sige, du skal bare sørge for at: session_start() står allerøverst i scriptet.
Avatar billede steenolsen1 Nybegynder
09. marts 2005 - 08:59 #4
ok... Jeg har prøvet det af sådan her:

<?
session_start();
include("admin/connect.php");
$q_moduler = mysql_query("SELECT * FROM moduler");
while($modul_ja_nej = mysql_fetch_assoc($q_moduler)) {
    $_SESSION[$modul_ja_nej['modulnavn']] = 1;
}
if($_SESSION['mailingliste'] = 1) {
    echo 'mailingliste ok';
} else {
    echo 'mailingliste ikke ok';
}
?>

Desværre udskrives at mailinglisten er tilmeldt, selvom den ikke er det... (den er =0)
Avatar billede detox Nybegynder
09. marts 2005 - 09:02 #5
Jamen du må jo begrænse forespørgslen til kun at hente navnene på de moduler der er godkendt til den aktuelle bruger.
I øvrigt skal den se sådan ud:

if($_SESSION['mailingliste'] == 1) {
Avatar billede steenolsen1 Nybegynder
09. marts 2005 - 09:10 #6
Det prøvede jeg først, men det virkede heller ikke.

<?
session_start();
include("admin/connect.php");
$q_moduler = mysql_query("SELECT * FROM moduler WHERE aktiv = '1'");
while($modul_ja_nej = mysql_fetch_assoc($q_moduler)) {
    $_SESSION[$modul_ja_nej['modulnavn']] = 1;
}
if($_SESSION['mailingliste'] == 1) {
    echo 'mailingliste ok';
} else {
    echo 'mailingliste ikke ok';
}
?>

Udskriver fortsat Mailingliste ok
Avatar billede detox Nybegynder
09. marts 2005 - 09:14 #7
Jamen skal forespørgslen ikke begrænses til kun at udtrække rækker for den aktuelle bruger? Du skal osse huske at lukke alle browser vinduer for at 'nulstille' sessionen.
Avatar billede steenolsen1 Nybegynder
09. marts 2005 - 09:21 #8
Måske har jeg ikke forklaret situationen præcist nok :-) Det foregår på den måde, at brugeren får sit helt eget site - og dermed egen db.

Kunden køber en basisløsning, og kan tilkøbe moduler når han synes at det er på tide / der er behov for det eller whatever. Alle moduler ligger klar til brug, men skal aktiveres af mig, hvilket de gøres ved at jeg sætter et flueben... De forskellige moduler er registreret i tabellen 'moduler', og har bl.a. et felt der hedder aktiv. Hvis aktiv er sat til 1 er det aktivt...

Er du med på hvad jeg mener?
Avatar billede detox Nybegynder
09. marts 2005 - 09:24 #9
Ok så, men husker du at lukke dine browser vinduer, når du har rettet i scriptet.
Ellers vil $_SESSION['mailingliste'] stadig have værdien 1.
Avatar billede steenolsen1 Nybegynder
09. marts 2005 - 09:24 #10
ahhhh... det vidste jeg jo egentlig godt det med at lukke browservinduet....

Det virker nu - tak for det :-)

Har faktisk lige et tillægsspørgsmål... Kan $_SESSION['foo'] ikke sendes videre imellem forskellige sider. Jeg lavede engang et site, hvor jeg mistede værdien af min $_SESSION['foo'], men det kan måske have været, hvis jeg ikke på DEN side havde session_start(); i toppen?
Avatar billede detox Nybegynder
09. marts 2005 - 09:28 #11
Velbekommen. Ja, du skal have session_start() i toppen på dine sider, så skulle det virke.
I øvrigt, gik du kold her:
http://www.eksperten.dk/spm/594461
Avatar billede steenolsen1 Nybegynder
09. marts 2005 - 09:32 #12
Ok. Tak for hjælpen - det er helt super :-)

Ja - det var faktisk det næste jeg skulle til at tage fat på senere idag. Jeg har haft så travlt, at jeg ikke har haft tid til at følge op på det. Jeg har testet det, og det virker godt nok - bare ikke helt til mit formål. Det kan vi lige tage på det andet spørgsmål, så andre også kan bruge svarene der, ikke.
Avatar billede detox Nybegynder
09. marts 2005 - 09:34 #13
Yes yes ;O)
Avatar billede steenolsen1 Nybegynder
16. marts 2005 - 10:19 #14
detox (eller andre)..... har lige et spørgsmål til...

Jeg har indsat den kode du lavede til mig, og ville teste hvilke værdier der registreres ved at udskrive til skærmen om de forskellige moduler er slået til eller ej. Er de det udskrives "sat" eller "ikke sat". Når jeg så udskriver som angivet nedenfor udskrives der "satsat" til skærmen.... Hvorfor to gange?

include("connect.php");
$q_moduler = mysql_query("SELECT * FROM moduler WHERE aktiv = '1'");
while($modul_ja_nej = mysql_fetch_assoc($q_moduler)) {
    $_SESSION[$modul_ja_nej['modulnavn']] = 1;
    if($_SESSION[sprog] = '1') {
        echo 'sat';
    } else {
        echo 'ikke sat';
    }
}
Avatar billede detox Nybegynder
16. marts 2005 - 10:54 #15
Sikkert fordi du har 2 rækker i tabellen hvor aktiv='1' og du laver den samme fejl som tidligere:

if($_SESSION[sprog] = '1') {  // if($_SESSION[sprog] == '1') {

= : tildeler en værdi
== : sammenligner to værdier
Avatar billede steenolsen1 Nybegynder
16. marts 2005 - 11:18 #16
Ja jeg havde to rækker med aktiv = '1'....

Yes - den er jeg med på nu! Tak igen.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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