Menu met user level
Ik probeer voor mijn eenvoudige website die alleen voor privé doeleinde wordt gebruikt, een menu te maken dat kijkt wie er is ingelogd.
Het inloggen gaat prima nu wil ik een 2 tal menu links voor de gebruiker niet zichtbaar maken.
Gebruiker
home
dashboard
logboek
Beheerder
home
dashboard
logboek
service
Waar ik na laat kijken is
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
if (isset($_POST['submit']))
{
$UserName=$_POST['UserName'];
$Password=$_POST['Password'];
if ($UserName=="user1" && $Password=="pw1")
{
session_start();
$_SESSION['member']="User1";
header('location:service.php');
}
elseif ($UserName=="user2" && $Password=="pw2")
{
session_start();
$_SESSION['member']="User2";
header('location:settings.php');
}
else
{
header("location:index.php?error=1");
}
}
?>
if (isset($_POST['submit']))
{
$UserName=$_POST['UserName'];
$Password=$_POST['Password'];
if ($UserName=="user1" && $Password=="pw1")
{
session_start();
$_SESSION['member']="User1";
header('location:service.php');
}
elseif ($UserName=="user2" && $Password=="pw2")
{
session_start();
$_SESSION['member']="User2";
header('location:settings.php');
}
else
{
header("location:index.php?error=1");
}
}
?>
En dit doe ik om te kijken of de menu link zichtbaar mag worden.
Code (php)
Nu weet ik dat mijn kennis van PHP niet erg groot is maar ik kom met mijn kennis een heel eind voor mijn website.
Helaas is dit voor mij een struikelblok waar ik niet uit kom ik heb het idee dat ik er heel dicht bij ben maar ik zie niet.
Dus klop ik hier maar weer even aan om raad te vragen.
Ps. ik weet dat mijn kennis van PHP niet zo is als die van de meeste hier.
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 04/02/2016 09:59:27 door - Ariën -
Persoonlijk zou ik gewoon { en } bij je if-statement gebruiken, i.p.v. if: en endif. Het maakt het beter leesbaarder, vind ik.
Een database gaat overigens verder op in mijn voorkeur.
Gewijzigd op 04/02/2016 09:32:20 door - Ariën -
Het loopt vast bij het niet of wel zichtbaar maken van de link.
Op de site kan ik wel zien wie er is ingelogd, dat zie door middel van
Dus zou het naar mijn menig aan het wel en niet zichtbaar maken van de link
Gewijzigd op 04/02/2016 11:31:02 door - Ariën -
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
session_start();
if (!isset($_SESSION['member']))
{header('location:index.php');}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
session_start();
if (!isset($_SESSION['member']))
{header('location:index.php');}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
Gewijzigd op 04/02/2016 12:54:20 door Andreas Krale
Met dit zou het moeten lukken. Een afhandeling in de else is niet verplicht nodig.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
session_start();
if (isset($_SESSION['member'])) {
if ($_SESSION['member'] == "user2") {?>
<p><a href="service.php">Service</a></p>
<?php }
} else { ?>
<p>je bent niet ingelogd.</p>
<?php } ?>
session_start();
if (isset($_SESSION['member'])) {
if ($_SESSION['member'] == "user2") {?>
<p><a href="service.php">Service</a></p>
<?php }
} else { ?>
<p>je bent niet ingelogd.</p>
<?php } ?>
Gewijzigd op 04/02/2016 11:48:44 door - Ariën -
Zo heb ik het in mijn site staan.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<p><a href="logbuch.php">Logbuch</a></p>
<p><a href="hilfe.php">Hilfe</a></p>
<p><a href="settings.php">Settings</a></p>
<?php
session_start();
if (isset($_SESSION['member'])) {
if ($_SESSION['member'] == "user2") {?>
<p><a href="service.php">Service</a></p>
<?php }
} else { ?>
<p>je bent niet ingelogd.</p>
<?php } ?>
<br>
<br>
<p><a href="hilfe.php">Hilfe</a></p>
<p><a href="settings.php">Settings</a></p>
<?php
session_start();
if (isset($_SESSION['member'])) {
if ($_SESSION['member'] == "user2") {?>
<p><a href="service.php">Service</a></p>
<?php }
} else { ?>
<p>je bent niet ingelogd.</p>
<?php } ?>
<br>
<br>
Toevoeging op 04/02/2016 13:10:07:
SORRY het gaat wel goed had van "user2" in mijn login file als "beheerder" staan.
Toppie
Mijn Dank is groot
Dit zou bij voorbaat nu al een error op moeten leveren.
Zet dus bovenaan je code:
Gewijzigd op 04/02/2016 13:17:33 door - Ariën -
Andreas Krale op 04/02/2016 11:34:10:
Deze staat ook op elke pagina boven aan
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
session_start();
if (!isset($_SESSION['member']))
{header('location:index.php');}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
session_start();
if (!isset($_SESSION['member']))
{header('location:index.php');}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
Toevoeging op 04/02/2016 13:34:27:
De error reporting ga ik er nu ook in bouwen
Dank je
Onthoud wel dat dit inlogsysteem niet flexibel is. Het beste is om een database te gebruiken, dan kan je gebruikers eenvoudig toevoegen, de rechten heel makkelijk aan een gebruiker koppelen en een wachtwoord wijzigen.
Helaas kan ik geen database gebruiken en het is puur thuis gebruik hangt ook niet aan het net.
Het maakt het flexibeler. Want wat nu als één van je gebruikers zijn wachtwoord vergeten is, en geen toegang tot je code heeft?
Beschouw het volgende stuk code:
Code (php)
Aanname: $_SESSION['member'] bestaat niet.
Dit is wat er dan achtereenvolgens gebeurt bij aanroep van dit script:
1. de Location header wordt ingesteld op "elsewhere.php"
2. de code in het onderdeel "// gevoelige code die gegevens kan manipuleren" WORDT UITGEVOERD
3. na afloop van het script word je direct doorgestuurd naar "elsewhere.php"
Bijna altijd is het bij dit soort constructies de bedoeling dat je DIRECT (en niet na afloop) wordt doorgestuurd wanneer niet aan de condities is voldaan. De rest van het script mag dan simpelweg niet uitgevoerd worden. Dit kun je bereiken door direct na de header('Location: ...') aanroep een exit-statement te zetten. De rest van de uitvoer(ing) van het script wordt dan direct gestaakt.
Omdat je dan ook (heel) vaak eigenlijk hetzelfde doet, loont het misschien de moeite om hier een functie (of methode) voor te introduceren, zodat je het toevoegen van exit ook nooit meer vergeet:
Code (php)
Prent het volgende goed in je gedachten: het aanwezig zijn of ontbreken van een exit-statement in code kan het verschil betekenen tussen beveiligde of (onbedoeld) onbeveiligde operaties.
Dank je ik ga dit ook inbouwen.