Bernd: Navigation bei Login erweitern

Hallo!

Ich habe einen Login gemacht mit MySQL. (Tutorial)

Nun meine Frage, wie kann ich meiner Navigation sagen, sie soll einen bestimmten Menüpunkt nur anzeigen, wenn man eingeloggt ist?

Ich verwende nur PHP Dateien.

Navigation.php

  
<div class="side-body">  
<div class="navigation" id="nav">  
<br />  
<ul>  
<li><a href="index.php" class="side" title="Startseite">Startseite</a></li>  
<li><a href="forum.php" class="side" title="Forum">Forum</a></li>  
<li><a href="kontakt.php" class="side" title="Kontakt">Kontakt</a></li>  
<li><a href="fotoalbum.php" class="side" title="Fotoalbum">Fotoalbum</a></li>  
<li><a href="entwickler.php" class="side" title="Die Entwickler">Die Entwickler</a></li>  
</ul>  
<br />  
</div>  
</div>  

z.B. Ein neuer Menüpunkt, Intern, wie sag ich der Seite sie soll den nur anzeigen, wenn eine Session besteht? Bzw wie prüfe ich, ob eine Session besteht?

  
<?php  
session_start();  
?>  
  
<?php  
if(!isset($_SESSION["username"]))  
   {  
   echo "Bitte erst <a href=\"login.html\">einloggen</a>";  
   exit;  
   }  
?>  

  1. Om nah hoo pez nyeetz, Bernd!

    z.B. Ein neuer Menüpunkt, Intern, wie sag ich der Seite sie soll den nur anzeigen, wenn eine Session besteht? Bzw wie prüfe ich, ob eine Session besteht?

    In der Login.php beispielsweise so

    if ($username == 'Test' && $passwort == '1234') {  
           $_SESSION['angemeldet'] = true; }
    

    Dann gibst du dem body eine (weitere) Klasse

    <body<?php [code lang=php]if ($_SESSION['angemeldet']) {echo " class='angemeldet'"}?>>[/code]

    und verwendest den Nachfahrenselektor.

    Matthias

    --
    1/z ist kein Blatt Papier.

    1. Om nah hoo pez nyeetz, Bernd!

      In der Login.php beispielsweise so

      if ($username == 'Test' && $passwort == '1234') {

      $_SESSION['angemeldet'] = true; }

      
      >   
      > Dann gibst du dem body eine (weitere) Klasse  
      >   
      > `<body<?php [code lang=php]if ($_SESSION['angemeldet']) {echo " class='angemeldet'"}`{:.language-html}?>>[/code]  
      >   
      > und verwendest den Nachfahrenselektor.  
      >   
      > Matthias  
        
      Hallo Matthias!  
        
      Danke für deine Antwort.  
        
      Werde es mal versuchen, vielen dank.  
        
      Liebe grüße,  
      Bernd  
      P.S: Was heißt denn das "Om nah.."? :D
      
      1. Om nah hoo pez nyeetz, Bernd!

        und verwendest den Nachfahrenselektor.

        Werde es mal versuchen, vielen dank.

        Wobei es sicher besser wäre, die unerwünschten Menüpunkte tauchten im Markup garnicht auf, als dass sie nur mit CSS ausgeblendet werden.

        Matthias

        --
        1/z ist kein Blatt Papier.

  2. Hello,

    Hallo!

    Ich habe einen Login gemacht mit MySQL. (Tutorial)

    Mit diesem Script kann man eher schlecht als recht neue Benutzer anlegen.
    Es enthält etliche mittlere Fehler und sogar einen groben. Post-Daten dürfen keinesfalls ungeprüft und unabgesichert in ein Query übernommen werden!

    Nun meine Frage, wie kann ich meiner Navigation sagen, sie soll einen bestimmten Menüpunkt nur anzeigen, wenn man eingeloggt ist?

    Dazu müsstest Du erst einmal eine  Zugriffsmechanismus festlegen, also die Kriterien, unter denen ein User überhaupt auf Daten zugreifen darf.

    Dann kannst Du im nächsten Schritt Abfragen an die Datenbank stellen, die diese Kriterien berücksichtigen. Die Ergebnisdatensätze kannst Du dann zur Anzeige des Menus verwenden.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Mit diesem Script kann man eher schlecht als recht neue Benutzer anlegen.
      Es enthält etliche mittlere Fehler und sogar einen groben. Post-Daten dürfen keinesfalls ungeprüft und unabgesichert in ein Query übernommen werden!

      Hallo!

      Ist das eine Sichere PHP Funktion?
      http://www.tutorials.de/content/499-php-mysql-login-system-mit-sessions.html

      Lg

      1. Hallo,

        Es enthält etliche mittlere Fehler und sogar einen groben. Post-Daten dürfen keinesfalls ungeprüft und unabgesichert in ein Query übernommen werden!

        http://www.tutorials.de/content/499-php-mysql-login-system-mit-sessions.html

        Nein. Noch schlimmer! Das Login-Formular arbeitet mit der Methode POST, die Daten werden aber aus $_REQUEST gelesen. Das ist eher dämlich. Aber sie werden genauso ungeprüft und unabgesichert in die Query übernommen. Man benötigt gar kein Passwort, um sich anzumelden - ein geeignet gewählter Benutzername reicht völlig aus, siehe Exploits of a Mom.

        Grausames HTML und überflüssiges Google Analytics kommt erschwerend hinzu ...

        Freundliche Grüße

        Vinzenz

        1. Nein. Noch schlimmer!
          [...]
          Freundliche Grüße

          Vinzenz

          Hallo!

          Kennst du denn ein sicheres Tutorial für sowas? Oder wie soll ich das machen?

          Liebe grüße,
          Bernd

  3. Hallo,

    Ich habe einen Login gemacht mit MySQL. (Tutorial)

    Nun meine Frage, wie kann ich meiner Navigation sagen, sie soll einen bestimmten Menüpunkt nur anzeigen, wenn man eingeloggt ist?

    Dein Tutorial sagt, dass man eingeloggt ist, wenn das Arrayelement $_SESSION['username'] gesetzt ist. Wenn Deine Navigation den Status wissen muss, dann ist jede Seite mit dieser Navigation eine "geschützte" Seite:

    Du musst gleich zu Beginn session_start() aufrufen:

      
    <?php  
        session_start();  
    ?>  
      
    und kannst bei der Navigation gemäß Einlogstatus reagieren:  
      
    
    > [code lang=html]  
      
    
    > <ul class="side">  
    > <li><a href="index.php" title="Startseite">Startseite</a></li>  
    > <li><a href="forum.php" title="Forum">Forum</a></li>  
    > <li><a href="kontakt.php" title="Kontakt">Kontakt</a></li>  
    > <li><a href="fotoalbum.php" title="Fotoalbum">Fotoalbum</a></li>  
    > <li><a href="entwickler.php" title="Die Entwickler">Die Entwickler</a></li>  
    
    [code lang=php]<?php  
        // Wenn das Arrayelement $_SESSION['username'] etwas enthält, dann  
        // ist der Benutzer eingeloggt  
        // Anmerkung: Der Benutzername "0" ist somit nicht zulässig :-)  
        if(![link:http://de3.php.net/manual/de/function.empty.php@title=empty]($_SESSION["username"])) {  
            // zeige den Menüpunkt mit dem internen Bereich an.  
            echo '[code lang=html]<li><a href="intern.php" title="Intern">Intern</a></li>
    ~~~', "\n";  
        }  
    ?>[/code]  
    
    > </ul>  
    > [/code]  
      
    überflüssiges Markup hab' ich entfernt wie die Abstand-brrs ...  
    Beachte [Toms Hinweise](https://forum.selfhtml.org/?t=209193&m=1423403), dass das Tutorial nicht besonders empfehlenswert ist.  
      
    Ach übrigens: selbstverständlich musst Du in intern.php den Einlogstatus überprüfen.  
      
      
    Freundliche Grüße  
      
    Vinzenz