Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Anmelden - Session Variable erst beim 2. Mal interpretiert

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Anmelden - Session Variable erst beim 2. Mal interpretiert

    Ich habe versucht ein Script für eine Anmeldung zu schreiben.
    Das Recht, welches der User hat, wird einfach per Zahl übergeben. In der Menüführung wird dann ausgewertet, welcher User angemeldet ist und dann je nachdem das Menü gewählt.
    PROBLEM: Aus irgendeinem Grund wird der Code erst beim zweiten Mal interprtiert. Also, wenn ich nach dem Anmelden nochmals auf "reload" klicke, wird das Menü geändert. Wieso?!?

    Hier der Code: (ich weiss, dass ich die eine Abfrage doppelt mache, aber das sollte ja nicht das Problem sein)

    PHP-Code:
    <?php
        session_start
    ();
        
    error_reporting(E_ALL);
        include 
    '../insert/conf.php ';
        if(isset(
    $_SESSION['log']) && isset($_POST['pw'])) {
            if(@
    mysql_connect(HOSTUSERPASS) && mysql_select_db(DATABASE)) {
                
    $benutzer=$_POST['log'];
                
    $pw=$_POST['pw'];
                   
    $qu="SELECT `PW`, `Recht` FROM `benutzer` WHERE `Login` = '$benutzer'";
                   
    $rs=mySQL_query($qu);
                   
    $data mysql_fetch_array($rsMYSQL_NUM);
                   
    $_SESSION['r']=$data[1];
                   echo 
    "$data[1]";
            }
        }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <title>Anmelden zum geschlossenen Benutzerbereich</title>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <style type="text/css">
            @import url(../insert/style.css);
        </style>    
    </head>
    <body>
    <table id="tabelleGesamt" cellpadding=0 cellspacing=0>

    <tr>
        <td colspan=3>[img]../insert/v2_01.gif[/img]</td>
    </tr>

    <tr>
        <td colspan=3>[img]../insert/v2_02.gif[/img]</td>
    </tr>

    <tr>
        
        <td id="navigation">
            <?php 
                
    if ($_SESSION['r']=='1') {
                    include 
    '../insert/navi ma.php';
                } elseif (
    $_SESSION['r']=='2') {
                    include 
    '../insert/navi hiwi.php';
                } elseif (
    $_SESSION['r']=='3') {
                    include 
    '../insert/navi admin.php';
                } else {
                    include 
    '../insert/navi gast.php';
                }
         
    ?>
        </td>
        
        <td class="haupfenster">
        <div id="content" style="text-align:left;">
    <?php
        
    if(isset($_SESSION['login'])) {
            unset(
    $_SESSION['login']);
            if(@
    mysql_connect(HOSTUSERPASS) && mysql_select_db(DATABASE)) {
                
    $benutzer=$_POST['log'];
                
    $pw=$_POST['pw'];
                   
    $qu="SELECT `PW`, `Recht` FROM `benutzer` WHERE `Login` = '$benutzer'";
                   
    $rs=mySQL_query($qu);
                      
    $n=mysql_num_rows($rs);
                   if (
    $n==0) {
                    echo
    "[b]Der verwendete Benutzername ist nicht bekannt![/b]


                               <a href=\"
    $PHP_SELF\">Zurück zum Anmelden</a>";    
                } else {       
                    
    $data mysql_fetch_array($rsMYSQL_NUM);
                    if (
    $data[0]==$pw) {
                        
    $_SESSION['r']=$data[1];
                        echo
    "<h1 class='hl'>Willkommen</h1>
                              <h1 class='hr'>im geschlossenen Benutzerbereich</h1>
                              

    Ihre Anmeldung war erfolgreich.</p>
                              

    Bitte w&auml;hlen Sie im linken Men&uuml; den n&auml;chsten Schritt.</p>"
    ;
                    } else {
                        echo
    "[b]Das verwendete Passwort ist nicht korrekt![/b]


                                    <a href=\"
    $PHP_SELF\">Zurück zum Anmelden</a>";
                    }
               
                }      
                   
    mysql_close();
            }
        } else {
            
    $_SESSION['login']='true';
              echo 
    "<h3>Zugang nur für Mitarbeiter des Stadtmuseums Bautzen!</h3>
                  <form name='Eingabe' action=\"
    $PHP_SELF\" method='post'>                
                  <table style='align: center; margin: 40px 0 0 60px;'>
                    <tr><td colspan='2' style='height: 50px;'>[b]Bitte geben Sie Ihre Benutzerdaten ein![/b]</td>
                    </tr>
                    <tr><td style='width: 150px; height: 50px;'>Benutzername:</td>
                        <td><input name='log' size='30' type='text'></td>
                    </tr>
                    <tr><td style='width: 150px; height: 50px;'>Passwort:</td>
                        <td><input name='pw' size='30' type='password'></td>
                    </tr>
                    <tr><td class='reihe_unten' align='center'><input type='submit' value=' Anmelden '></td>
                        <td class='reihe_unten'><input type='reset' value=' Löschen'></td>
                    </tr>
                  </table>"
    ;
        }
        
    ?>                            
            </div>
          </td>
          
        <td id="rechterRand"></td>
    </tr>

    <tr>
        <td colspan=3 id="untererRand"></td>
    </tr>
    </table>
    </body>
    </html>
    Danke schonmal für eure Hilfe.
    Für weitere Tipps und Tricks bin ich gern offen .. aber bitte konstruktiv. :wink:

  • #2
    Nach meinem Verständnis dürfte der Login garnicht gelingen, denn beim 1.
    Aufruf komme ich nur in die unterste Bedingung (else), dann schicke ich
    das Formular ab und komme weder in den 1. Block ($_SESSION['log'] ist
    ja nicht gesetzt, meinst du $_POST['log']?) und damit ist niemals
    $_SESSION['r'] oder $_SESSION['login'] gesetzt und ich lande immer im
    else (also Login-Formular)...

    Als Tipp: Zentralisier die Login-Funktion, also lager sie aus, bastel dir eine
    Funktion dafür, also

    PHP-Code:
    <?php
    $recht 
    Login($_POST['user'], $_POST['pw']);
    if (
    $recht 0) {
      
    // eingeloggt
    } else {
      
    // kein Zugang
    }
    ?>
    Außerdem ist deine Rechte-Ordnung komisch, Mitarbeiter = 1, Hiwi = 2 (!),
    Admin = 3. Hiwis haben mehr Rechte als Mitarbeiter? Ich würde die
    Reihenfolge nach den tatsächlichen Rechten vergeben, dann kannst du
    auch > oder < Operationen sinnvoll einbinden.

    Zudem weist du $_SESSION['login'] = 'true' zu, $_SESSION['login'] =
    'false' ist übrigens auch positiv, denn es ist durch die Anführungszeichen
    zum Typ String geworden, und jeder String != 0 oder der nicht leer ist, ist
    positiv.

    Deine Benennung $_SESSION['login'] und $_SESSION['log'] ist ebenfalls
    irreführend.

    Kommentar


    • #3
      DAnke für deine Hilfe.

      Hiwi is der Hiwi vom Admin. (Ich wusste nicht, wie ich es sonst beschreiben sollte) Also der Hiwi kann später Daten eingeben (das draf der Mitarbeiter nicht), die dann vom Admin freigegeben werden.

      Kommentar


      • #4
        Juhu .. genau, ganz oben das Login war falsch. Ich danke dir Zerling!!

        So. Nun da werde ich jetzt mal deine Anmerkungen alle nochmal durchlesen und dann nochmal drüber gucken.

        Kommentar


        • #5
          Bin zu faul, um so viel Code durchzuforsten.

          Zitat von Zergling
          Außerdem ist deine Rechte-Ordnung komisch, Mitarbeiter = 1, Hiwi = 2 (!),
          Admin = 3. Hiwis haben mehr Rechte als Mitarbeiter? Ich würde die
          Reihenfolge nach den tatsächlichen Rechten vergeben, dann kannst du
          auch > oder < Operationen sinnvoll einbinden.
          Ich würde Konstanten verwenden, die die Rollen wiedergeben:

          Code:
          define("ROLE_ADMIN", 1);
          define("ROLE_HIWI", 2);
          define("ROLE_OTHER", 4);
          ...
          Dann kannst du die Bits kombinieren:

          Code:
          // User, der sowohl Hiwi als auch Admin ist:
          $userRole = ROLE_ADMIN | ROLE_HIWI;
          
          // Ist User Admin?:
          if($userRole & ROLE_ADMIN) {
          }

          Kommentar


          • #6
            So .. jetzt habe ich das mal mit der kompischen Hilfsvariable sein lassen und einfach nur mit $_POST('submit') probiert, aber das will nicht funktionieren. Wieso denn nur.

            PHP-Code:
            <?php
                error_reporting
            (7);
                include 
            '../insert/conf.php ';
                if(isset(
            $_POST['submit'])) {
                    
            session_start();
                    if(@
            mysql_connect(HOSTUSERPASS) && mysql_select_db(DATABASE)) {
                        
            $benutzer=$_POST['log'];
                        
            $pw=$_POST['pw'];
                           
            $qu="SELECT `PW`, `Recht` FROM `benutzer` WHERE `Login` = '$benutzer'";
                           
            $rs=mySQL_query($qu);
                           
            $n=mysql_num_rows($rs);
                           
            $data mysql_fetch_array($rsMYSQL_NUM);
                           
            $_SESSION['r']=$data[1];
                           echo 
            "$data[1]";
                           
            mysql_close();
                    }
                }
            ?>
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
               "http://www.w3.org/TR/html4/loose.dtd">
            <html>
            <head>
                <title>Anmelden zum geschlossenen Benutzerbereich</title>
                <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
                <style type="text/css">
                    @import url(../insert/style.css);
                </style>    
            </head>
            <body>
            <table id="tabelleGesamt" cellpadding=0 cellspacing=0>

            <tr>
                <td colspan=3>[img]../insert/v2_01.gif[/img]</td>
            </tr>

            <tr>
                <td colspan=3>[img]../insert/v2_02.gif[/img]</td>
            </tr>

            <tr>
                
                <td id="navigation">
                    <?php 
                        
            if ($_SESSION['r']=='1') {
                            include 
            '../insert/navi ma.php';
                        } elseif (
            $_SESSION['r']=='2') {
                            include 
            '../insert/navi hiwi.php';
                        } elseif (
            $_SESSION['r']=='3') {
                            include 
            '../insert/navi admin.php';
                        } else {
                            include 
            '../insert/navi gast.php';
                        }
                 
            ?>
                </td>
                
                <td class="haupfenster">
                <div id="content" style="text-align:left;">
            <?php
                
            if(isset($_POST['submit'])) {
                           if (
            $n==0) {
                            echo
            "[b]Der verwendete Benutzername ist nicht bekannt![/b]


                                       <a href=\"
            $PHP_SELF\">Zurück zum Anmelden</a>";    
                        } else {
                            if (
            $data[0]==$pw) {
                                
            $_SESSION['user']=$_POST['log'];
                                echo
            "<h1 class='hl'>Willkommen</h1>
                                      <h1 class='hr'>im geschlossenen Benutzerbereich</h1>
                                      

            Ihre Anmeldung war erfolgreich.</p>
                                      

            Bitte w&auml;hlen Sie im linken Men&uuml; den n&auml;chsten Schritt.</p>"
            ;
                            } else {
                                echo
            "[b]Das verwendete Passwort ist nicht korrekt![/b]


                                            <a href=\"
            $PHP_SELF\">Zurück zum Anmelden</a>";
                            }
                       
                        }      
                    } else {
                          echo 
            "<h3>Zugang nur für Mitarbeiter des Stadtmuseums Bautzen!</h3>
                              <form name='Eingabe' action=\"
            $PHP_SELF\" method='post'>                
                              <table style='align: center; margin: 40px 0 0 60px;'>
                                <tr><td colspan='2' style='height: 50px;'>[b]Bitte geben Sie Ihre Benutzerdaten ein![/b]</td>
                                </tr>
                                <tr><td style='width: 150px; height: 50px;'>Benutzername:</td>
                                    <td><input name='log' size='30' type='text'></td>
                                </tr>
                                <tr><td style='width: 150px; height: 50px;'>Passwort:</td>
                                    <td><input name='pw' size='30' type='password'></td>
                                </tr>
                                <tr><td class='reihe_unten' align='center'><input type='submit' value=' Anmelden '></td>
                                    <td class='reihe_unten'><input type='reset' value=' Löschen'></td>
                                </tr>
                              </table>"
            ;
                    }
                
            ?>                            
                    </div>
                  </td>
                  
                <td id="rechterRand"></td>
            </tr>

            <tr>
                <td colspan=3 id="untererRand"></td>
            </tr>
            </table>
            </body>
            </html>

            ?>

            Kommentar


            • #7
              Lern debugging. Gib wichtige Variablen per echo aus.

              Kommentar


              • #8
                Auch wenn ich dich grad für die Antwort verflucht habe .. Es hat geholfen.

                Ich hatte alles Notice ausgeschalten und konnte deswegen nicht sehen, was der Fehler ist. Danke.

                Kommentar


                • #9
                  Ich habe nochmal eine "technische Frage".

                  Ich habe oben das Script nochmal umgeändert. Und für die Kontrolle statt: if(isset($_POST['submit']))

                  lieber geschrieben: if(isset($_SESSION['r'])>0)

                  So, wenn ich nun im Browser einfach auf reload gehe, dann bleibt alles schön. Wenn ich aber in die URL Zeile gehe und da mit Enter nochmal bestätige, zeigt der Browser die Anmeldeseite an. Warum is das so? Eigentlich is doch die Session-Variable gespeichert, bis die Session zerstört wird, oder?

                  Kommentar


                  • #10
                    Die Session wird immer erkannt, wenn die Session-Id bei einem Seitenaufruf übermittelt wurde, entweder per Cookie oder per Parameterübergabe. Was ist bei dir der Fall?

                    Kommentar


                    • #11
                      Zur Zeit is keines von beiden der Fall ..

                      Wenn ich es im Tutorial richtig gelesen habe, reicht ja einfach die Parameterübergabe mittels nem Hiddenfield. Aber muss ich das denn dann nochmal aufrufen?!? Oder muss die Session ID lediglich übergeben werden?!

                      Kommentar


                      • #12
                        Irgendwie kann man doch im Browser nachschauen, ob eine Session ID gesetzt ist, oder?
                        Wenn ja, wo denn?!?

                        Ich habe das Gefühl, dass das alles gar nich geht...

                        Kommentar


                        • #13
                          Du schickst also ein Formular ab (in dem sich die SessionId befindet) und drückst auf der Folgeseite in der Adresszeile Return und wunderst dich, dass die Session verloren wird? Jetzt überleg mal scharf...

                          Kommentar


                          • #14
                            OK, ich hab es verstanden .. .. dann geht meine Überlegung nicht auf. Mist...

                            Kommentar


                            • #15
                              Sessions funktionieren wunderbar, was passt dir denn nicht?

                              Kommentar

                              Lädt...
                              X