Avatar billede msdb Nybegynder
24. august 2011 - 19:52 Der er 3 kommentarer og
1 løsning

php brugerniveau redirect

Jeg er igang med at designe et site som benytter et brugerlogin, og hvor brugeren føres hen efter login, skal bestemmes af et brugerniveau.
Jeg er nybegynder hvad angår php, så jeg har brugt dreamweavers indbyggede login funktioner, hvilket virker fint. Jeg kan logge ind med min bruger og bliver ført til næste side uden problemer.
Jeg kan dog ikke finde ud af hvordan jeg udfører op til flere redirects, hvilket i dette tilfælde blot er to, da værdien i min database enten er "admin" eller "member".

Her er den sektion som sender brugeren videre til næste side:

if (isset($_POST['bruger'])) {
  $loginUsername=$_POST['bruger'];
  $password=$_POST['kode'];
  $MM_fldUserAuthorization = "level";
  $MM_redirectLoginSuccess = "home.php";
  $MM_redirectLoginFailed = "denied.php";
  $MM_redirecttoReferrer = false;
  mysql_select_db($database_cliche, $cliche);

Er det muligt at ændre denne portion kode til at omfatte mine to niveauer eller er det i home.php jeg skal implementere nogle redirects?

Mine mange forsøg på at finde et svar via google er mislykket så nu prøver jeg her.
Al inspiration/hjælp påskønnes.
24. august 2011 - 21:44 #1
Hvordan ved systemet hvad en brugers niveau er?  Det må vel stå i en tabel i databasen.  Hvis jeg antager at tabellen hedder User og har (mindst) felterne brugernavn og niveau, og hvis du har brugernavnet i $loginUsername, så må du kunne få niveauet med en forespørgsel som:

$output = mysql_query("SELECT niveau FROM User WHERE brugernavn = $loginUsername");
$MM_fldUserAuthorization = mysql_result($output);

og så:

if($MM_fldUserAuthorization "admin") $MM_redirectLoginSuccess = "admin.php";
else $MM_redirectLoginSuccess = "home.php";

Altså noget i denne henretning:

if (isset($_POST['bruger']))
{
  mysql_select_db($database_cliche, $cliche);
  $loginUsername=$_POST['bruger'];
  $password=$_POST['kode'];
  $output = mysql_query("SELECT niveau FROM User WHERE brugernavn = $loginUsername");
  $MM_fldUserAuthorization = mysql_result($output);
  if($MM_fldUserAuthorization "admin") $MM_redirectLoginSuccess = "admin.php";
  else $MM_redirectLoginSuccess = "home.php";
  $MM_redirectLoginFailed = "denied.php";
  $MM_redirecttoReferrer = false;

Eller har jeg misforstået situationen?
Avatar billede msdb Nybegynder
24. august 2011 - 22:15 #2
Korrekt forstået og dit forslag kan jeg også få til at give mening.

Jeg tænker dog, af æstetiske og designmæssige årsager, at det måske er nemmere at inkludere et link til admin.php et sted i home.php som kun vises når den nuværende bruger hører under "admin"-gruppen.
Dette kan vel udrettes med en simpel if-statement der midner om dette:

if ($_SESSION['MM_fldUserAuthorization'] == 'admin') {
    echo <a href="/admin.php">AdminPage</a>
  }

Er det en for simpel løsning og er den originale at foretrække istedet?
25. august 2011 - 06:03 #3
Jeg forstod problemstillingen således, at brugerne skulle føres forskellige steder hen alt efter deres niveau, og at du spurgte, om det var muligt at ændre den viste portion kode til at omfatte de to niveauer.  Det var ud fra denne opfattelse, at jeg svarede.  (Jeg ser en trykfejl i mit eksempel, det skulle naturligvis have været "if($MM_fldUserAuthorization = admin) ...."  Det kan naturligvis udbredes til flere end to niveauer ved at tilføje kode som:  elseif($MM_fldUserAuthorization "author") $MM_redirectLoginSuccess = "author.php";)

Fordi du siger "Korrekt forstået" og at mit forslag giver mening tillader jeg mig at oprette dette som et svar.

Du foretrækker så måske en anden løsning, at der kun er en enkel redirekt der fører alle brugerne til home.php, og at der på home.php er link til andre sider der kun er synlige for højere niveauer.  Men for at kunne bruge $_SESSION['MM_fldUserAuthorization'] på siden home.php, så må du først bringe referencen til niveauet med over, for eksempel således:

if (isset($_POST['bruger']))
{
  mysql_select_db($database_cliche, $cliche);
  $loginUsername=$_POST['bruger'];
  $password=$_POST['kode'];
  $output = mysql_query("SELECT niveau FROM User WHERE brugernavn = $loginUsername");
  $_SESSION['MM_fldUserAuthorization'] = mysql_result($output);
  $MM_redirectLoginFailed = "denied.php";
  $MM_redirecttoReferrer = false;

Derefter kan du på home.php etablere dit link til admin.php som du foreslår.
Avatar billede msdb Nybegynder
25. august 2011 - 10:05 #4
Ah, super. Tak for hjælpen på trods af den forvirrede problemstilling.
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
Kurser inden for grundlæggende programmering

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