Login-Session/Script

Wir sammeln alle Infos der Bonusepisode von Pokémon Karmesin und Purpur für euch!

Zu der Infoseite von „Die Mo-Mo-Manie“
  • Hallo liebe Bisaboardler.


    Ich lerne grade PHP und habe nun eigenständig ein Loginscript geschrieben. In der Zeile 46 befindet sich jedoch ein Syntaxfehler und ich weiß nicht wie ich diesen beheben kann, wäre über Hilfe also sehr dankbar :)
    Einmal ein paar kurze Infos zum Script:
    Das Script habe ich grade erst geschrieben und noch nicht getestet, aufgrund des Syntax-fehlers, deshalb weiß ich auch nicht, ob das Script überhaupt funktioniert, wenn der Fehler behoben ist.
    Benutzername und Passwort sind in der Datei und werden nicht aus einer Datenbank bezogen.


    Hier der Code:


    [PHP]<?php
    session_start();
    $logged_in = $_SESSION['logged_in'];
    ?>
    <html>
    <head>
    <title>Loginscript</title>
    <meta name="author" content="Andre Sieverding" />
    </head>
    <body>
    <?php
    $username = 'admin';
    $password = 'pass2013';
    if(!isset($logged_in))
    {
    if($_POST['login'] && $_POST['username'] == $username && $_POST['password'] == $password )
    {
    $err_nr = '0';
    $logged_in = 'set';
    $_SESSION['logged_in'] = $logged_in;
    echo 'Angemeldet';
    }
    else
    {
    $err_nr = '1';
    echo 'Passwort und/oder Benutzername falsch!';
    ?>
    <form methode="POST" action="login.php">
    <span>Benutzername:</span><br />
    <input type="text" name="username" <?php if($err_nr == '1'){echo "style=\" background-color: #ffdbdb; border: 1px solid red; \""; ?>/><br /><br />
    <span>Passwort:</span><br />
    <input type="password" name="password" <?php if($err_nr == '1'){echo "style=\" background-color: #ffdbdb; border: 1px solid red; \""; ?>/><br />
    <input type="submit" name="login" value="Anmelden" />
    </form>
    <?php
    }
    }
    else
    {
    if($logged_in == 'set')
    {
    echo 'Angemeldet';
    }
    }
    ?>
    </body>
    </html>[/PHP]

  • Die if-Bedingungen in den Zeilen 14 und 16 wurden nicht beendet.
    Zudem muss es in Zeile 28 nicht "methode" heißen, sondern "method".


    So sollte es zumindest keine Syntax-Fehler mehr geben:


    Ob es so funktioniert, wie du es haben möchtest, weiß ich nicht, hab nur grob drübergeschaut.


    PS: Zeile 14, isset($logged_in) würde immer true zurückgeben, weil du es am Anfang (Zeile 3) deklariert hast. Das ist sicher nicht gewollt, denn aktuell würde die Überprüfung keinen Sinn machen ;)

  • Danke für die schnelle Antwort :)
    Ich habe das ganze Script grade noch einmal umgeschrieben, weil es mir doch noch irgendwie unlogisch vorkam. Nun sieht es wie folgt aus:
    [PHP]
    <?php
    session_start();
    $logged_in = $_SESSION['logged_in'];
    $username = 'admin';
    $password = 'pass2013';
    ?>
    <html>
    <head>
    <title>Andre-Sieverding.de Loginscript</title>
    <meta name="author" content="Andre Sieverding" />
    </head>
    <body>
    <?php
    if($logged_in == 'set')
    {
    $is_logged_in = 'yes';
    }
    if($_POST['login'] && $_POST['username'] == $username && $_POST['password'] == $password)
    {
    $err_nr = '0';
    $logged_in = 'set';
    $_SESSION['logged_in'] = $logged_in;
    $is_logged_in = 'yes';
    }
    else
    {
    $err_nr = '1';
    $err_text = 'Passwort und/oder Benutzername falsch!';
    }
    if(isset($is_logged_in))
    {
    echo 'Angemeldet';
    }
    else
    {
    echo $err_text;
    ?>
    <form method="POST" action="admin.php">
    <span>Benutzername:</span><br />
    <input type="text" name="username" <?php if($err_nr== '1' ){echo "style=\" background-color: #ffdbdb; border: 1px solid red; \"";} ?> />
    <br /><br />
    <span>Passwort:</span><br />
    <input type="password" name="password" <?php if($err_nr == '1' ){echo "style=\" background-color: #ffdbdb; border: 1px solid red; \"";} ?> />
    <br />
    <input type="submit" name="login" value="Anmelden" />
    </form>
    <?php
    }
    ?>
    </body>
    </html>[/PHP]


    Das Script funktioniert nun auch, nur wird schon direkt am Anfang beim laden der Seite die Fehlermeldung ausgegeben, dass das Passwort oder der Benutzername falsch ist. Das soll eigentlich erst erscheinen, wenn man das wirklich falsch angegeben hat.

  • So, ich habe nun alles geschafft, das Script läuft wie geschmiert :D
    Hier noch einmal das fertige Script:
    [PHP]
    <?php
    session_start();
    $logged_in = $_SESSION['logged_in'];
    $username = 'admin';
    $password = 'pass2013';
    ?>
    <html>
    <head>
    <title>Andre-Sieverding.de Loginscript</title>
    <meta name="author" content="Andre Sieverding" />
    </head>
    <body>
    <?php
    if($logged_in == 'set')
    {
    $is_logged_in = 'yes';
    }
    if($_POST['login'] && $_POST['username'] != $username){$err_username = '1'; $err_text = 'Benutzername und/oder Passwort falsch!';}else{$err_username = '0'; $err_text = '';}
    if($_POST['login'] && $_POST['password'] != $password){$err_password = '1'; $err_text = 'Benutzername und/oder Passwort falsch!';}else{$err_password = '0'; $err_text = '';}
    if($_POST['login'] && $_POST['username'] == $username && $_POST['password'] == $password)
    {
    $logged_in = 'set';
    $_SESSION['logged_in'] = $logged_in;
    $is_logged_in = 'yes';
    }
    if(isset($is_logged_in))
    {
    echo 'Angemeldet';
    }
    else
    {
    echo $err_text;
    ?>
    <form method="POST" action="admin.php">
    <span>Benutzername:</span><br />
    <input type="text" name="username" <?php if($err_username== '1' ){echo "style=\" background-color: #ffdbdb; border: 1px solid red; \"";} ?> value="<?php echo $_POST['username']; ?>" />
    <br /><br />
    <span>Passwort:</span><br />
    <input type="password" name="password" <?php if($err_password == '1' ){echo "style=\" background-color: #ffdbdb; border: 1px solid red; \"";} ?> />
    <br />
    <input type="submit" name="login" value="Anmelden" />
    </form>
    <?php
    }
    ?>
    </body>
    </html>[/PHP]


    Liebe Grüße :D

  • Kleiner Tipp noch von mir: Du kannst die Einrückmethode verwenden, um untergeordnete Funktionen, Anweisungen (if, else, Schleifen, ...), etc. optisch auch als untergeordnet zu markieren.
    Besonders bei großen Scripts ist das hilfreich, weil die Übersichtlichkeit erhöht wird.


    Für dein aktuelles Script wäre es zum Beispiel:


    Wenn man es per Hand macht, ist es anfangs etwas gewöhnungsbedürftig, aber manche Programme rücken automatisch ein und manche haben auch eine Auto-Formatierungsfunktion.

  • Den Tipp von Niernen solltest du auf jeden Fall beherzigen, zum einen verbessert das deinen Stil, zum anderen hilft es auch solche Klammern-Fehler von Anfang an zu vermeiden, da man direkt sieht, wenn etwas fehlt.

  • Dreamweaver? Öhm....
    In älteren Versionen ging es wohl über folgende Einstellung: "Quelltext in Dreamweaver markieren (Codeansicht) -> Menü Befehle -> Quellenformatierung auf Auswahl anwenden."
    Ob das immer noch so ist weiß ich nicht, und ich bin mir nicht einmal sicher, ob damit auch neu geschriebener Code ordentlich formatiert wird, aber selbst wenn nicht: Tab klärt.

  • Noch ein kleiner Tipp
    Benutze boolische Ausdrücke anstelle von "$err_username = '1'" kannst du "$err_username = true" schreiben
    und bei einer if abfrage ist es dann ein einfaches "if($err_username)"
    Damit kannst du deinen ganzen code viel einfacher gestalten.
    Generell hast du ein paar Abfragen und Variable zu oft eingesetzt.
    Hier ein simpel gehaltener code (geht noch kompakter)


    Beispiel :
    [PHP]<?php
    session_start();
    $username = 'admin';
    $password = 'pass2013';
    ?>
    <html>
    <head>
    <title>Andre-Sieverding.de Loginscript</title>
    <meta name="author" content="Andre Sieverding" />
    </head>
    <body>
    <?php
    if($_POST['login'] && !$_SESSION['logged_in']){
    $err_username = false;
    $err_password = false;
    $err_text = "";
    if($_POST['username'] != $username){$err_username = true; $err_text = 'Benutzername und/oder Passwort falsch!';}
    if($_POST['password'] != $password){ $err_password = false; $err_text = 'Benutzername und/oder Passwort falsch!';}

    if(!$err_password && !$err_username)
    {
    $_SESSION['logged_in'] = true;
    echo 'Erfolgreich angemeldet';
    }
    else
    {
    echo $err_text;
    ?>
    <form method="POST" action="admin.php">
    <span>Benutzername:</span><br />
    <input type="text" name="username" <?php if($err_username){echo "style=\" background-color: #ffdbdb; border: 1px solid red; \"";} ?> value="<?php echo $_POST['username']; ?>" />
    <br /><br />
    <span>Passwort:</span><br />
    <input type="password" name="password" <?php if($err_password){echo "style=\" background-color: #ffdbdb; border: 1px solid red; \"";} ?> />
    <br />
    <input type="submit" name="login" value="Anmelden" />
    </form>
    <?php
    }
    }else{
    echo 'Angemeldet';
    }
    ?>
    </body>
    </html>[/PHP]