Gå til innhold

Problemer med menyer


Anbefalte innlegg

Jeg har ei side som bruker php og mysql til å håndtere sikkerheten mellom 3 forskjellige brukernivå. Hvilken meny den enkelte brukeren skal få opp bestemmes av hvilken brukertype som er registrert i mysql databasen.

(bruker, admin, superadmin)

Jeg har hele tiden trodd at dette har fungert bra, og det gjør det i IE 6.0.

Installerte Opera 7.5 her om dagen, og fikk sjokk. Når jeg logget inn med laveste brukernivå (minst rettigheter) fikk jeg opp menyen til høyeste brukernivå.

Hvordan går dette an? Fungerer ikke php like bra i alle browsere?

Kanskje noen finner feil i koden:

<?php
$brukernavn = session_hentverdi("brukernavn");
$passord = session_hentverdi("passord");
$res = mysql_query("SELECT brutyp FROM bruker WHERE brukernavn = '$brukernavn' AND passord = '$passord'") or
die (mysql_error());
while ($rad = mysql_fetch_array($res))
{ $tp = $rad["brutyp"]; }

if ($tp == "admin") {
include("menya.php");
$ok = true;
}
else 
if ($tp == "superadmin") {
include("menys.php");
$ok = true;
}
else 
if ($tp == "bruker") {
include("menyb.php");
$ok = true;
}
else {
echo "Du er ikke logget inn<br>";
$ok = false;
}
if ($ok) { //Her kommer innholdet på siden

Lenke til kommentar
Videoannonse
Annonse

php fungerer likt uansett browser. det er fordi en nettleser analyserer informasjonen fra serveren, og den informasjonen er det php som genererer.

 

hva som kan være feil her vet jeg ikke; men du kan jo rydde litt opp i scriptet ved å bruke

 

} elseif () {

 

istedenfor

}

else

if () {

 

:)

Lenke til kommentar
Har du husket

session_start()

?

Ja, det er nok ikke det som er problemet. En annen ting er at det er en slette funksjon på siden. Man kan f.eks. slette brukere. Når jeg gjør dette i IE, ser man resultatet med en gang i en oversikt over brukere. I Opera må jeg refreshe siden for at endringen skal vises i oversikten. Er det noe med browserinnstillinger og cookies som gjør at dette blir feil i Opera? Har noen opplevd noe lignende?

 

Har testet med Netscape Navigator 7.1, og det er ingen problemer med denne browseren. Det er altså bare Opera som skaper problemer...

Endret av Amos
Lenke til kommentar
Skriv ut brukernavn og passord så du får se hva variablene inneholder.

Liker ikke helt while løkka di

Ville heller brukt

$tp = "";
if ($rad = mysql_fetch_array($res) {
tp = $rad["brutyp"]; 
}

Testet $brukernavn og $passord, og de skrev ut akkurat det de skulle skrive ut.

Har også endret scriptet med å legge inn if istedenfor while. Er det noen spesiell grunn til at en if betingelse vil fungere bedre enn en while-løkke her?

Lenke til kommentar

Hvis du mot formodning skulle få flere resulltater fra SQL-setningen din, vil $tp bli satt til verdien til siste post. Kan være vanskelig å forutsi hvilken post dette er. Egentlig bør de alltid gi samme resultat da, ettersom en bruker bare bør lligge inne en gang. Så det har egentlig ikke så mye å bety.

 

Er koden i første post klippet direkte?

Sjekk at det ikke er enkle = -tegn noen steder i ifene

 

Skriv ut $tp før if($ok) {

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...