PHP Sessie informatie uit MySQL database halen

Status
Niet open voor verdere reacties.

Egel007

Gebruiker
Lid geworden
4 dec 2007
Berichten
271
Goedemorgen iedereen,

Ik moet voor school een inlogsysteem maken met behulp van PHP en een MySQL database. Hierbij moet een administratorpaneel gemaakt worden, waarmee de administrator o.a. gebruikers moet kunnen toevoegen. Vanwege het inloggen en uitloggen en het beveiligen van het administratorpaneel, moet er dus gewerkt worden met sessies.

Na 3 dagen knutselen (ik ben een beginner met PHP) heb ik eindelijk een script waarmee op elke pagina wordt gecontroleerd of de gebruiker is ingelogd. Dat werkt dus al prima. De basissessie waarop dus bij elke pagina wordt gecontroleerd is $_SESSION['ingelogd'] == 1. Maar voor het administratorpaneel heb ik zogenaamde gebruikerlevels in de database gezet. Level 3 is Administrator.
Er moet dus bij het administratorpaneel gecontrolleerd worden of de sessie $_SESSION['gebruikerslevel'] == 3 is. Als deze niet zo is, is de gene geen administrator en kan hij dus niet in het administratorpaneel.

Dat gedeelte begrijp ik, maar hoe maak ik na het inloggen de sessie gebruikerslevel?
Het gebruikerslevel moet ik uit de database halen. Ik heb werkelijk geen idee hoe ik dat precies moet doen. Ik heb nu onderstaande code (wat van toepassing is op mijn vraag). Zoals daar te zien is, heb ik dus al $_SESSION['gebruikerslevel'] == "". Tussen die "" moet dus een variabele of iets komen te staan waarmee het gebruikerslevel uit de database wordt gelezen.

Ik hoop dat iemand mij hiermee kan helpen.
Alvast hartelijk dank voor de hulp.

Mvg,
Egel

PHP:
if($_POST){
		$gebruikersnaam = $_POST['gebruikersnaam'];
		$wachtwoord = $_POST['wachtwoord'];
		$query = "SELECT * FROM gebruikers WHERE gebruikersnaam = '$gebruikersnaam' AND wachtwoord = '$wachtwoord'";
		$result = mysql_num_rows(mysql_query($query));
		if($result==1)
		{
			$_SESSION['ingelogd'] = 1;
			$_SESSION['gebruikerslevel'] = "";
			echo "U bent succesvol ingelogd.";
		}
		else
		{
			echo "De ingevulde gegevens zijn onjuist!";
		}
 
Ik ga er van uit dat het gebruikerslevel ook in de gebruikerstabel staat?

Je kunt de data die je opgevraagd hebt opvragen met mysql_fetch_assoc(), en dan daaruit het gebruikerslevel opvragen en opslaan.

PHP:
        $query = "SELECT * FROM gebruikers WHERE gebruikersnaam = '$gebruikersnaam' AND wachtwoord = '$wachtwoord'";
$resource = mysql_query($query);
        $result = mysql_num_rows( $resource );
        if($result==1)
        {
            $_SESSION['ingelogd'] = 1;
            $data = mysql_fetch_assoc( $resource );
            $_SESSION['gebruikerslevel'] = $data['gebruikerslevel'];
            echo "U bent succesvol ingelogd.";
        }

Zo ongeveer. Je moet even opletten dat wat bij $data tussen de haakjes staat precies de naam van het veld voor gebruikerslevel in de tabel is.
 
Hartelijk dank voor de hulp!

Nu heb ik dus ongeveer jouw code een stukje overgenomen, dus momenteel heb ik onderstaande code op login.php (hier wordt alles vanuit het formulier op index.php gecontroleerd en worden dus de sessies aangemaakt):
PHP:
login.php
if($_POST){
		$gebruikersnaam = $_POST['gebruikersnaam'];
		$wachtwoord = $_POST['wachtwoord'];
		$query = "SELECT * FROM gebruikers WHERE gebruikersnaam = '$gebruikersnaam' AND wachtwoord = '$wachtwoord'";
		$resource = mysql_query($query);
		$result = mysql_num_rows(mysql_query($query));
		if($result==1)
		{
			$_SESSION['ingelogd'] = 1;
			$data = mysql_fetch_assoc($resource);
			$_SESSION['gebruikerslevel'] = $data['gebruikerslevel'];
			echo "U bent succesvol ingelogd.";
		}
		else
		{
			echo "De ingevulde gegevens zijn onjuist!";
		}

Maar als ik nu naar het administratorpaneel ga met de gewone testgebruiker (deze heeft gebruikerslevel 1, en moet dus eigenlijk geen toegang hebben tot het paneel), krijg ik geen error met dat diegene geen administrator is, wat eigenlijk wel zou moeten. Ook wanneer ik inlog met administrator, geen error. Maar het lijkt nu dus wel alsof de gebruikerslevel sessie niet werkt op de admin.php pagina. Deze bevat onderstaande code:
PHP:
admin.php
<?php
	// Sessie starten
	session_start();
	
	// Controleren of er een gebruiker is ingelogd, zoniet; terugsturen naar het inlogscherm
	if (!$_SESSION['ingelogd'] == 1) {
		header ('Refresh: 5; url=../index.php');
		echo "U bent niet ingelogd. U wordt binnen 5 seconden teruggestuurd naar de inlogpagina.";
		die();
	}
	
	// Zo ja, controleren of diegene administrator is
	if(!$_SESSION['gebruikerslevel'] == 3) {
		header ('Refresh: 5; url=../index.php');
		echo "U bent geen administrator. U bent niet gemachtigd om deze pagina te bekijken.";
	}
?>

Moet ik bij admin.php dan ook connecten met de database en dat gedeelte met $data enzo erin zetten, net zoals bij de login.php? Of heb ik gewoon een foutje gemaakt?

Bij voorbaat dank!
 
Ervan uitgaande dat de database er zo uit ziet als Frats verwacht met zijn stukje code klopt je controle niet.
PHP:
if(!$_SESSION['gebruikerslevel'] == 3)
Hier staat iets anders dan je bedoelt. Eerst wordt $_SESSION['gebruikerslevel'] "ge not" (dat doet het uitroepteken). Omdat $_SESSION['gebruikerslevel'] niet-nul is (true) levert dit false op. Vervolgens wordt false (daar wordt een 0 van gemaakt) vergeleken met 3. Omdat 0 niet gelijk is aan 3 krijg je de foutmelding niet te zien.

Wat je hier eigenlijk bedoelt is
PHP:
if ($_SESSION['gebruikerslevel'] != 3)

Hoewel het op deze manier ook werkt (maar op een andere manier dan je bedoeld hebt), zou ik de eerste controle "if (!$_SESSION['ingelogd'] == 1)" ook zo veranderen.
 
Laatst bewerkt:
Hartstikke bedankt!
Nu werkt het inderdaad.

Nou, een klasgenoot van mij vertelde juist dat er dan staat 'wanneer die sessie NIET geset is, blablabla..', vandaar dat ik het zo gebruikte. Maar nu heb ik de uitroeptekens weggehaald en werkt het inderdaad. Helemaal top!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan