Avatar billede Slettet bruger
10. marts 2011 - 11:21 Der er 14 kommentarer og
1 løsning

Bruger niveau

Hvorfor virker dette ikke?

<?php
if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '5') {
?>

indhold skjult for alle andre end niveau 5

<?php
  }
  } else {
    echo "Ups, denne side kræver niveau 5!";
}
?>
--------------------------------------------------------
Den gamle sætning hvor der kun var 0 og 1 i admin
<?php
if (isset($_SESSION["username"]) && isset($_SESSION["userid"])) {
  if ($_SESSION["admin"] == '1') {
?>

indhold skjult for alle andre end niveau 5

<?php
  }
  } else {
    echo "Ups, denne side kræver bruger niveau 5!";
}
?>

--------------------------------------------------------
Og kan man ikke skrive disse to sætninger sammen?

if (isset($_SESSION["username"]) && isset($_SESSION["userid"])) {
  if ($_SESSION["admin"] == '5') {



til:

if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '5') {


??
10. marts 2011 - 11:45 #1
Jeg observerer at du i den nye saetning har en kroellet aabningsparantes for meget.  Proev om det virker med:

if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '5')
{
?>

indhold skjult for alle andre end niveau 5

<?php
}
else {
    echo "Ups, denne side kræver niveau 5!";
}
?>
Avatar billede Slettet bruger
10. marts 2011 - 13:08 #2
Nu kom der tekst på for de brugere der ikke har 5 i admin feltet, men selv den med 5 i admin feltet, får samme besked.
10. marts 2011 - 14:20 #3
Du har ikke vaeret god til at forklare problemet.  Der tusind maader hvorpaa et program kan 'ikke virke.'  Jeg undlod at gaette og rapporterede den manglende parantesat.  Og aabenbart hjalp det da du rettede det.  Saa egenlig burde du afslutte spoergsmaalet (bede om svar og acceptere det) og saa oprette nye spoergsmaal hvis du har yderligere problemer. 

Men jeg haenger paa endnu en runde HVIS du vil forklare dig mere tydeligt.  Jeg har disse spoergsmaal:

1.  Bruger du nu denne  (rettede) kode:

<?PHP
if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '5')
{
?>

indhold skjult for alle andre end niveau 5

<?php
}
else
{
    echo "Ups, denne side kræver niveau 5!";
}
?>

2.  Hvis du kalder siden med et username og en userid i $_SESSION men ingenting i $_SESSION-'admin'] hvad sker der saa?  Faar du udskrevet "Ups, denne side kraever bruger niveau 5!"? 

3.  Hvis du kalder siden med 5 i $_SESSION['admin'] hvad sker der saa?  Faar du stadig den samme saetning udskrever ("Ups, denne....") eller faar du en blank side?  Hvis du faar saetningen saa er det nok $_SESSION['admin'] det er galt med.  Hvis du faar en blank side er det nok det skjulte indhold det er galt med.

Hvis det tyder paa at problemet ligger i $_SESSION['admin'], saa er det maaske fordi $_SESSION['admin'] er 5 hvorimod du soeger for '5', altsaa en tekststreng i stedet for et tal.  Du kunne saa proeve at fjerne apostrofferne, saaledes:

if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '5)

(Jeg opretter dette som svar fordi jeg mener at mit foerst indlaeg bidrog til loesning.)
Avatar billede Slettet bruger
10. marts 2011 - 17:51 #4
Jeg bruger den rettede streng, det jeg ikke forstår er at det virker når der i DB står 1 i feltet admin, men hvis jeg ændrer det til 5 virker det ikke ?!?

Jeg har prøvet at fjerne '' om 5 tallet, men det ændrer ikke noget.

Det var nok lidt sparsomt med info, men jeg ville heller ikke skrive en hel roman. Det er tanken at jeg med forskellige brugerprofiler kan dele min hjemmeside ind i områder hvor en given admin 1, 2, 3, 4 giver adgang til forskellige områder.

Jeg har ikke fået blanke sider, men der har været sider hvor "ups..." ikke er kommet frem.


if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '') {
giver "Ups..."

if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '1') {
giver "Ups..."

if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '5') {
giver "Ups..." - men BURDE give adgang

CREATE TABLE IF NOT EXISTS `brugere` (
  `id` int(11) NOT NULL auto_increment,
  `admin` tinyint(2) NOT NULL,
  `brugernavn` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

Eksempel på "opret_bruger"
<?php
  $page_title         = "Opret bruger";
  $stylesheet        = "style";
  $menu                = "";
  $menu2            = "";
  $fotoalbum        = "";
  include($DOCUMENT_ROOT.'/php/start.php');
/*
Første linje i start.php er
session_start();
*/

// if (isset($_SESSION["username"]) && isset($_SESSION["userid"])) {
//  if ($_SESSION["admin"] == '5') {
if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '5') {
?>

<form action="/admin/indsaet_bruger.php" method="post">
<table width="100%" border="0" cellspacing="5">
wagga wagga..
</table>
</form>

<?php
//  }
  } else {
    echo "<center><strong>Denne side kræver bruger niveau 5!</strong></center>";
}
  include($DOCUMENT_ROOT.'/php/end.php');
?>

Håber det hjalp
10. marts 2011 - 18:56 #5
Du siger, tror jeg, at uanset om du bruger $_SESSION['admin'] = '' eller '1' eller '5' eller 5 (uden apostroffer) faar du "Ups..".

Altsaa, af en eller anden aarsag genkender din if saetning ikke vaerdien af $_SESSION['admin'].  Det synes at vaere en kendsgerning.  Saa spoergsmaalet er naturligvis hvorfor.

Jeg vil gaette paa at aarsagen er at $_SESSION['admin'] er tom paa det tidspunkt hvor den bruges i if saetningen!  Men det kan du nemt teste ved midlertidigt at bruge denne kode:

<?php
$echo "SESSION ADMIN = " . $_SESSION['admin'];
if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '') {
....

Hvis du faar udskrevet "SESSION ADMIN =  " og ikke mere, saa er $_SESSION['admin'] tom!  Hvis det er tilfaeldet, saa ligger problemet sandsynligvis i den kode der skal placere en vaerdi i $_SESSION['admin'].  Hvordan giver du $_SESSION['admin'] en vaerdi?  Hvordan ser den kode ud?
Avatar billede Slettet bruger
10. marts 2011 - 21:35 #6
Jeg får denne fejl

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING

i denne linje

$echo "SESSION ADMIN = " . $_SESSION['admin'];


Jeg er ikke sikker på at jeg forstår hvad du mener med hvordan jeg angiver en værdi for admin, det er et tinyint felt i DB, og jeg troede den blev angivet i

$_SESSION["admin"] == '5'
Avatar billede Slettet bruger
10. marts 2011 - 21:37 #7
Er der en anden eller måske nemmere måde at give forskellige brugere adgang til forskellige områder?

Min tanke var at admin=1 har adgang til begrænsede områder, admin=2 har adgang til de samme områder som 1 og lidt til, osv. for 3 og 4, mens 5 er fuld adgang.
10. marts 2011 - 22:49 #8
Vi kommunikerer ikke.  Naar du koerer den kode du viser, saa forventer du at $_SESSION['admin'] indeholder en vaerdi.  Ikke sandt?  Hvor faar $_SESSION['admin'] den vaerdi fra? 

Jeg spoerger fordi $_SESSION['admin'] aabenbart ikke indeholder en vaerdi som din if saetning genkender, og det er kaernen i dit problem!  Vil du vaere med til at undersoege det?  I saa fald tror jeg vi finder ud af det.  Hvis du synes det er for meget besvaer, saa stopper vi.

Foerst, forstaar du forskellen mellem '5' som er en tekststreng og 5 som er et tal?  Hvis du siger at vaerdien i $_SESSION['admin'] har datatype tinyint, saa kan den ikke vaere '5' (fordi '5' er en tekst, ikke et tal), saa 'if($_SESSION['admin']=='5')' vil give FALSE.

Dernaest, det at du faar parse error kunne tyde paa at der er noget galt med $_SESSION['admin'].  Proev denne kode:

<?php
$admin = $_SESSION['admin'];
$echo "SESSION ADMIN = $admin";
if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '') {
....

og fortael hvad du faar.

Tilsidst, $_SESSION['admin'] kan kun have en vaerdi hvis du har placered en vaerdi i den.  Hvor og hvordan goer du det?  Der maa vaere en kode paa en side der gaar forud for den kode du viser hvor der er noget saasom '....$_SESSION['admin'] = [et eller andet].'  Vis mig den kode.
Avatar billede Slettet bruger
11. marts 2011 - 09:15 #9
Jeg troede at $_SESSION['admin'] fik sin værdi fra feltet i databasen, når nu username og password trækkes fra samme.

Når jeg bruger den sætning du angiver, får jeg parse error, men fjerner jeg $ i linje 2 ->

$admin = $_SESSION['admin'];
echo "SESSION ADMIN = $admin";
if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '') {

får jeg SESSION ADMIN = 1 sammen med "Ups..."

Jeg skal blankt erkende at jeg ikke forstår php på et særlig højt niveau, så når du beder om en kode med admin forud for dem jeg har givet dig, så ved jeg ikke hvilke du vil se, for det er de eneste der er. Jeg har en brugerdatabase med id, brugernavn, password og admin felter, og nu tænker jeg så at tinyint er forkert angivet, jeg har blot kopieret den fra et andet script hvor der er flere forskellige tal i.

Jeg kan kun håbe du er tålmodig, for mine php kundskaber strækker sig til at rette her og der (har installeret rigtig mange mods i phpbb op til version 2.0.19 - men de gange sætningerne ikke matcher har jeg måtte opgive, for jeg aner ikke hvordan man skriver det selv eller hvad der kunne stå i stedet.)
Avatar billede Slettet bruger
11. marts 2011 - 09:17 #10
Der er ingen kode forud for $_SESSION['admin'] = ligesom der heller ikke er noget forud for username og userid.

Det eneste jeg kan finde der har med det at gøre er første sætning på alle sider:

session_start();
Avatar billede Slettet bruger
11. marts 2011 - 09:18 #11
Jeg forstår ikke at det kan virke med 1 men ikke med 5, hvad er forskellen på de to tal ?!?
11. marts 2011 - 09:57 #12
Undskyld min fejl, det skal selvfoelgelig vaere

echo "SESSION ADMIN = $admin";

som du saa selv fandt ud af.

Saa det du fandt ud af er at skoent du troede vaerdien af $_SESSION['admin'] var 5 og du forventede det skjulte indhold, saa var vaerdien i virkeligheden 1, og derfor gav koden dig, korrekt, "Ups..."  Er vi enige om det?  Saa du har ret, koden virker for 1.  Du ved endnu ikke om den virker for 5 (jeg tror den vil virke) fordi det ikke er lykkedes dig at putte et femtal i $_SESSION['admin'].  Du tror du har 5, men echo koden beviser at du af en eller anden grund har 1!

Hvis du kan erkende det, saa er vi et stort skridt naermere paa en loesning.  (Hvis du ikke kan indse at du rent faktisk har en anden vaerdi end du troede, saa lad os stoppe.)

Saa spoergsmaalet er hvorfor du tror du har 5. 

Du siger i #9 "Jeg troede at $_SESSION['admin'] fik sin værdi fra feltet i databasen, når nu username og password trækkes fra samme."  Saa lad os kikke paa dette databaseudtraek.  Fortael hvordan og med hvilken kode du laver dette databaseudtraek.  Du viser i #4 hvordan du opretter tabellen og hvordan du putter vaerdier ind i tabellen, men hvordan faar du vaerdierne ud af tabellen og placeret i $_SESSION['username'] o.s.v.
Avatar billede Slettet bruger
11. marts 2011 - 10:49 #13
Jeg kan sagtens erkende at jeg opfatter det således, og ved nærmere eftertanke tror jeg at scriptet læser feltet som 1 (med indhold) og 0 (som uden indhold) hvor jeg havde håbet den læste det som den værdi jeg angav - derfor virker 5 ikke som 5, men som 1 fordi der står noget i feltet. - Tager jeg helt fejl?

Ahh.. der er jo login delen som jeg havde overset, det er den der opretter session (hvis det er noget andet er jeg helt lost)

login.php

<?php
session_start();

    if (isset($_POST['login'])) {

        mysql_connect();
        mysql_select_db();

        $bruger = $_POST["brugernavn"];
        $pass = md5($_POST["password"]);

        $userQuery = mysql_query("SELECT id, brugernavn, password, admin FROM brugere WHERE brugernavn = '$bruger'") or die(mysql_error());
//        $userQuery = mysql_query("SELECT brugernavn FROM brugere WHERE id = '$_SESSION[userid]'") or die(mysql_error());
        if (mysql_num_rows($userQuery) != 1) {
     
            $error = "Brugeren eksisterer ikke (" . mysql_num_rows($userQuery) . ").<br>";
        } else {
            while ($data = mysql_fetch_array($userQuery)) {
         
                $brugerId = $data['id'];
                $brugerNavn = $data['brugernavn'];
                $brugerPass = $data['password'];
                $admin = $data['admin'];
            }
            if ($brugerPass != $pass) {
         
                $error = "Password og brugernavn passer ikke sammen.<br>";
            }
            if (!$error) {
             
                $_SESSION["username"] = $brugerNavn;
                $_SESSION["userid"] = $brugerId;
             
                if ($admin == 1) {
                    $_SESSION["admin"] = 1;
                }
                header("location: $redirect");
//                echo "test";
            } else {
                echo $error;
            }
        }
    }
?>

Og det står jo tydeligt lige der, at admin aldrig kan være andet end 1 eller 0, der er slet ikke taget højde for 2, 3, 4 eller 5.

Skal det så skrives som en masse else if eller kan det gøres mere elegant?

                if ($admin == 1) {
                    $_SESSION["admin"] = 1;
                } else {
                if ($admin == 2) {
                    $_SESSION["admin"] = 2;
osv..
11. marts 2011 - 11:25 #14
i dette udsnit af koden du viser

    if (!$error)
    {
           
      $_SESSION["username"] = $brugerNavn;
      $_SESSION["userid"] = $brugerId;
           
      if ($admin == 1) $_SESSION["admin"] = 1;
      header("location: $redirect");
    }

proev i stedet at skrive

    if (!$error)
    {
           
      $_SESSION["username"] = $brugerNavn;
      $_SESSION["userid"] = $brugerId;
      $_SESSION["admin"] = $admin;
      header("location: $redirect");
    }

Saa faar $_SESSION['admin'] den vaerdi feltet admin i tabellen brugere har.  Hvis det er 5, saa skulle du faa det skjulte indhold at se i stedet for "Ups.."  MEN hvis det stadig ikke virker saa ret ...&& $_SESSION["admin"] == '5') til ...&& $_SESSION["admin"] == 5).  Saa skulle den forhaabenlig vaere hjemme.
Avatar billede Slettet bruger
11. marts 2011 - 15:54 #15
Så virker det! Og jeg tror jeg blev en smule klogere, ikke meget, men lidt hjalp det :)
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