php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.12.2005, 10:01  
Gast
 
Beiträge: n/a
Standard [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:
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.12.2005, 10:20  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

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.
Zergling-new ist offline  
Alt 09.12.2005, 10:29  
Gast
 
Beiträge: n/a
Standard

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.
 
Alt 09.12.2005, 10:42  
Gast
 
Beiträge: n/a
Standard

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.
 
Alt 09.12.2005, 10:45  
Gast
 
Beiträge: n/a
Standard

Bin zu faul, um so viel Code durchzuforsten.

Zitat:
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) {
}
 
Alt 09.12.2005, 11:06  
Gast
 
Beiträge: n/a
Standard

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>

?>
 
Alt 09.12.2005, 11:45  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Lern debugging. Gib wichtige Variablen per echo aus.
Zergling-new ist offline  
Alt 09.12.2005, 13:00  
Gast
 
Beiträge: n/a
Standard

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.
 
Alt 09.12.2005, 13:13  
Gast
 
Beiträge: n/a
Standard

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?
 
Alt 09.12.2005, 13:39  
Gast
 
Beiträge: n/a
Standard

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?
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Session Variable wird nicht geändert Potterfans PHP Tipps 2008 41 18.05.2008 15:44
Session Variable wird nicht geändert Potterfans PHP Tipps 2008 8 18.05.2008 11:50
SESSION Variable - Array Wert hinzufügen ruferp PHP Tipps 2006 10 31.10.2006 19:09
[Erledigt] MySQL Abfrage mit Session Variable PHP Tipps 2005-2 5 13.10.2005 13:17
Session Variable oder Globale Variable ? PHP Tipps 2005-2 3 27.06.2005 21:49
session variable übergeben PHP Tipps 2005 31 27.05.2005 11:02
eine SESSION Variable wird geleert PHP Tipps 2005 6 06.04.2005 17:10
Session Variable geht verloren! (Homepage inside) PHP Tipps 2005 11 15.02.2005 09:17
Session Problem mit Variable übergeben PHP Tipps 2004-2 6 13.12.2004 13:16
Problem mit Session Variable PHP Tipps 2004-2 3 23.11.2004 11:11
session übergibt variable nicht (ich weiß es liegt an mir) PHP Tipps 2004-2 7 15.11.2004 12:54
Session Variable über Hyperlink übergeben DannyD PHP Tipps 2004-2 2 07.11.2004 14:22
Variable / wert auf neue seite mit session... WIE?! PHP Tipps 2004 3 05.10.2004 15:21
[Erledigt] Session Variable setzen und Link per click auf ein Image PHP Tipps 2004 7 23.08.2004 20:45
session variable will nicht PHP Tipps 2004 2 14.07.2004 19:59

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php session 2 mal anmelden, php session erst beim zweiten mal, php session variablen erst beim zwieten aufruf aktualisiert, menü erst nach login php, session variable erst nach zweitem submit, if ($_post[\'log\'] == \'log\' or $row[\'passwort\'] == $pw)), skript wird erst nach 2. mal anmelden geladen, session erst beim zweiten aufruf, php session login 2 mal, php5 user 2x anmelden lassen, php session erst nach 2., php include menüeintrag erst nach login freigeben, php session erst beim zweiten, session erst bei 2tem login, php session variable zweiten mal, session variable erst nach, nach session_start nochmal einloggen, php seite erst nach 2 mal laden, session erst nach 2 login, php session immer 2 mal

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.