Avatar billede Frederik Nybegynder
16. oktober 2007 - 11:14 Der er 10 kommentarer og
1 løsning

Tildeling af rettigheder i et brugersystem.

Hej.
Jeg har et brugersystem hvor jeg har tildelt forskellige brugere hver sin rank. Den almindelige bruger har rank 3, en moderator har rank 2 og admin har rank 1.
Kan jeg lave en session eller lignende så ranken bliver gemt når en bruger logger ind, så der kan tildeles forskellige rettigheder.


Jeg håber i kan hjælpe.

jeg har følgende felter i min tabel:
id
username
password
rank


#adduser_confirm.php#

<?php

require("config.php");

$adduser = $_POST['adduser'];

if(empty($adduser)) {

  print "Felterne i oprettelses formularen skal udfyldes"

  ?>

  <br><a href="adduser.php">Klik her for at oprette en bruger</a>

  <?php

  } else {

$username = $_POST['username'];

$password = $_POST['password'];

if(empty($username) OR empty($password)) {

    echo 'Alle felterne skal udfyldes!';}   

    else {

mysql_connect($mysql_host, $mysql_user, $mysql_pw);

mysql_select_db($mysql_db);

$result = mysql_query("select username from usersystem where username = '$username'")

or die (mysql_error());

$number = mysql_num_rows($result);

if ($number > 0) {

print 'Desværre, brugernavnet er optaget.';

} else {

mysql_query("insert into usersystem (username, password, rank) values ('$username', '$password', '3')")

or die(mysql_error());

print "Brugernavn $username er oprettet!";

?>

<a href="login.php">Klik her for at logge ind</a>

<?php

}

}

}

?>


#Login_confirm.php#

<?php
session_start();
require("config.php");
$login = $_POST['login'];
if(empty($login)) {
    echo 'Denne side kræver login adgang';
} else {
    $username = $_POST['username'];
    $password = $_POST['password'];

    if(empty($username) || empty($password)) {
        echo 'Felterne "Brugernavn" og "Password" skal udfyldes!';
    } else {
        mysql_connect($mysql_host, $mysql_user, $mysql_pw);
        mysql_select_db($mysql_db);
        $tael = mysql_query("SELECT COUNT(*) FROM usersystem WHERE username = '$username' AND password = '$password'")or die (mysql_error());
        $antal = mysql_result($tael, 0);

        if($antal == 1) {
            $_SESSION[login] = true;
            header("location: test_side.php");
            exit;
        } else {
            echo 'Forkerte login oplysninger!';
        }
    }
}
?>

#test_side.php#

<? session_start(); ?>
<html>
<head></head>
<body>
<?php
if($_SESSION[login] == true){
  echo 'du er logget ind.!';
} else {
            echo 'Forkerte login oplysninger!';
        }
?>
</body>
</html>


- Frederik
Avatar billede nielle Nybegynder
16. oktober 2007 - 11:40 #1
Sådan?

#Login_confirm.php#

<?php
session_start();
require("config.php");
$login = $_POST['login'];
if(empty($login)) {
    echo 'Denne side kræver login adgang';
} else {
    $username = $_POST['username'];
    $password = $_POST['password'];

    if(empty($username) || empty($password)) {
        echo 'Felterne "Brugernavn" og "Password" skal udfyldes!';
    } else {
        mysql_connect($mysql_host, $mysql_user, $mysql_pw);
        mysql_select_db($mysql_db);
        $tael = mysql_query("SELECT rank FROM usersystem WHERE username = '$username' AND password = '$password'")or die (mysql_error());

        if(mysql_num_rows($tael) == 1) {
            $_SESSION['login'] = true;

            $row = mysql_fetch_assoc($tael);
            $_SESSION['rank'] = $row['rank'];

            header("location: test_side.php");
            exit;
        } else {
            echo 'Forkerte login oplysninger!';
        }
    }
}
?>
Avatar billede Frederik Nybegynder
16. oktober 2007 - 11:57 #2
Hvis jeg så på siden hvor funktionen skal være, skal have vist fx et link for brugere med rank 2. skal det så se sådan her ud?

<? session_start(); ?>
<html>
<head></head>
<body>
<?php
if($_SESSION[login] == true){
  echo 'du er logget ind.!';
} else {
            echo 'Forkerte login oplysninger!';
        }
?>

<?php
if($_SESSION[rank] == 2){
?>
<a href="link.dk">Link</a>
<?php
} else {}
?>
</body>
</html>
Avatar billede nielle Nybegynder
16. oktober 2007 - 12:07 #3
Ja, det ser meget fornuftigt ud.

Dog vil jeg råde dig til at ændre:

$_SESSION[rank]

til:

$_SESSION['rank']
Avatar billede Frederik Nybegynder
16. oktober 2007 - 12:26 #4
Hmm.. det ser ikke ud til at virke...

mine filer ser således ud:

login_confirm.php
<?php
session_start();
require("config.php");
$login = $_POST['login'];
if(empty($login)) {
    echo 'Denne side kræver login adgang';
} else {
    $username = $_POST['username'];
    $password = $_POST['password'];

    if(empty($username) || empty($password)) {
        echo 'Felterne "Brugernavn" og "Password" skal udfyldes!';
    } else {
        mysql_connect($mysql_host, $mysql_user, $mysql_pw);
        mysql_select_db($mysql_db);
        $tael = mysql_query("SELECT COUNT(*) FROM usersystem WHERE username = '$username' AND password = '$password'")or die (mysql_error());
        $antal = mysql_result($tael, 0);

        if($antal == 1) {
            $_SESSION[login] = true;
            $row = mysql_fetch_assoc($tael);
            $_SESSION['rank'] = $row['rank'];
            header("location: test_side.php");
            exit;
        } else {
            echo 'Forkerte login oplysninger!';
        }
    }
}
?>

test_side.php
<? session_start(); ?>
<html>
<head></head>
<body>
<?php
if($_SESSION['login'] == true){
  echo 'du er logget ind.!';
} else {
            echo 'Forkerte login oplysninger!';
        }
?>
<?php
if($_SESSION['rank'] == 2){
?>
<a href="link.dk">Link</a>
<?php
} else {}
?>
</body>
</html>
Avatar billede dkfire Nybegynder
16. oktober 2007 - 12:36 #5
Du skal lige ændre lidt:
$tael = mysql_query("SELECT rank FROM usersystem WHERE username = '$username' AND password = '$password'")or die (mysql_error());
$antal = mysql_num_rows( $tael );
Avatar billede Frederik Nybegynder
16. oktober 2007 - 12:49 #6
Hmm.. jamen ødelægger det så ikke det, at den går ind og tjekker, at værdien kun skal være 1  ved et login?
Avatar billede nielle Nybegynder
16. oktober 2007 - 12:50 #7
Nej, det tjek er nemlig lagt over i brugen af mysql_num_rows()
Avatar billede Frederik Nybegynder
16. oktober 2007 - 13:00 #8
Okay. Tak for hjælpen, det virker nu :)

Hmm.. med hvad med point? er det muligt at dele forskelligt? for nielle's indsats ser ud til at have været størst?

I hvert fald, smid nogle svar, så får i point ;)
Avatar billede nielle Nybegynder
16. oktober 2007 - 13:02 #9
Svar :^)

Og ja, du kan godt fordele point forskelligt.
Avatar billede dkfire Nybegynder
16. oktober 2007 - 13:24 #10
Giv du bare nielle point, han havde skrevet løsningen første gang.
Avatar billede Frederik Nybegynder
16. oktober 2007 - 13:53 #11
dkfire--> Dejligt med storsindede brugere.!

Tak for hjælpen til jer begge!
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