Menu met user level

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Andreas Krale

Andreas Krale

04/02/2016 08:14:20
Quote Anchor link
Goedemorgen U allen,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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");
    }
}

?>


En dit doe ik om te kijken of de menu link zichtbaar mag worden.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$UserName
= "user2";
 
if ($UserName == "user2"):?>

    <p><a href="service.php">Service</a></p>
<?php else:  
    echo "  ";
 endif;
?>



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!
Gewijzigd op 04/02/2016 09:59:27 door - Ariën -
 
PHP hulp

PHP hulp

24/12/2024 03:18:01
 
- Ariën  -
Beheerder

- Ariën -

04/02/2016 09:23:32
Quote Anchor link
Waar loop je precies op vast? Je username staat nu nog wel hardcoded. Die kan je uit je sessie ophalen.

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 -
 
Andreas Krale

Andreas Krale

04/02/2016 09:56:10
Quote Anchor link
Hallo Arien,

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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$member
=$_SESSION['member'];
echo "Welkom"."<br/>";
echo $member. "<br/>";
?>

Dus zou het naar mijn menig aan het wel en niet zichtbaar maken van de link
 
- Ariën  -
Beheerder

- Ariën -

04/02/2016 09:58:49
Quote Anchor link
Ik zou je session_start() beter altijd bovenaan je pagina inladen, dan hoef je deze niet meer steeds halverwege per statement uit te voeren. Zonder deze functie worden sessions niet opgestart.
Gewijzigd op 04/02/2016 11:31:02 door - Ariën -
 
Andreas Krale

Andreas Krale

04/02/2016 11:34:10
Quote Anchor link
Deze staat ook op elke pagina boven aan


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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" />
Gewijzigd op 04/02/2016 12:54:20 door Andreas Krale
 
- Ariën  -
Beheerder

- Ariën -

04/02/2016 11:38:52
Quote Anchor link
We hebben gelukkig code-tags op het forum, om je code tussen te plaatsen ;-)

Met dit zou het moeten lukken. Een afhandeling in de else is niet verplicht nodig.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 } ?>
Gewijzigd op 04/02/2016 11:48:44 door - Ariën -
 
Andreas Krale

Andreas Krale

04/02/2016 13:03:29
Quote Anchor link
Ik denk dat ik iets fout doe de link wordt niet zichtbaar.
Zo heb ik het in mijn site staan.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


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
 
- Ariën  -
Beheerder

- Ariën -

04/02/2016 13:12:10
Quote Anchor link
session_start() hoort niet tussen de HTML-code thuis, maar enkel bovenaan je script.
Dit zou bij voorbaat nu al een error op moeten leveren.

Zet dus bovenaan je code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors',1);
?>
Gewijzigd op 04/02/2016 13:17:33 door - Ariën -
 
Andreas Krale

Andreas Krale

04/02/2016 13:33:33
Quote Anchor link
Andreas Krale op 04/02/2016 11:34:10:
Deze staat ook op elke pagina boven aan


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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" />





Toevoeging op 04/02/2016 13:34:27:

De error reporting ga ik er nu ook in bouwen

Dank je
 
- Ariën  -
Beheerder

- Ariën -

04/02/2016 13:47:20
Quote Anchor link
Okee, succes.

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.
 
Andreas Krale

Andreas Krale

04/02/2016 14:24:01
Quote Anchor link
Arien Dank je voor je hulp

Helaas kan ik geen database gebruiken en het is puur thuis gebruik hangt ook niet aan het net.
 
- Ariën  -
Beheerder

- Ariën -

04/02/2016 14:27:46
Quote Anchor link
Ook voor thuis gebruik kan je prima een database gebruiken. En dat het niet aan het internet hangt staat er ook los van.

Het maakt het flexibeler. Want wat nu als één van je gebruikers zijn wachtwoord vergeten is, en geen toegang tot je code heeft?
 
Thomas van den Heuvel

Thomas van den Heuvel

04/02/2016 14:52:07
Quote Anchor link
Wederom, header('Location: ...'); transporteert je niet direct automagisch naar de nieuwe locatie, dit gebeurt pas aan het einde van het script omdat headers onderdeel van output zijn.

Beschouw het volgende stuk code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if (isset($_SESSION['member']) === false) {
    header('Location: elsewhere.php');
}

// gevoelige code die gegevens kan manipuleren
// ...

?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
function redirect($link) {
    header('HTTP/1.1 303 See Other');
    header('Location: '.$link);
    exit; // opdat we dit NOOIT meer vergeten
}
?>

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.
 
Andreas Krale

Andreas Krale

04/02/2016 15:20:14
Quote Anchor link
Thomas van den Heuvel,

Dank je ik ga dit ook inbouwen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.