einfacher Login

  • Hallo Gemeinde,


    ich möchte auf meiner Webseite einen einfachen Loginbereich erstellen und hoffe,
    dass mich jemand unterstützen kann, da ich im Bereich SQL und PHP nicht firm bin und mir die Suche zu komplizierte Ergebnisse liefert :)
    Also ich möchte einen einfachen Login mit 2 Feldern, Name und Passwort. Diese Daten möchte ich vorab festlegen ohne dass sich Besucher selbst anmelden können. Nur auf Anfrage werden die Daten dann mir weitergegeben.
    Ich habe bereits eine DB angelegt und nun stehe ich vor einem großen Berg.
    Wie muss die Tabelle mit den 2 Feldern definiert sein?
    Wie binde ich diese DB dann in meine Loginseite ein?
    Wer kann mir Hinweise zur PHP-Seite geben – kennt jemand einen einfaches, deutsches Tutorial?
    Danke schon mal für Eure Zeit, LG dennis

  • Also der Google tipp ist schon mal nicht schlecht ;)
    Also es ist nicht weiter schwer ein paar kleine befehle reichen dir da schon.
    Aber erstmal hier ein paar Seiten die dich weiter bringen könnten:
    Alles was mit MYSQL selber zu tun hat: MySQL :: Developer Zone
    Alles rund im PHP: PHP: Hypertext Preprocessor


    Zunächst baust du eine Verbindung zu deinem MYSQL-Server auf.
    Befehl: mysql_connect()
    Danach stellst du eine verbindung zu deiner Datenbank her (da du ja mehrere haben kannst)
    Befehl: mysql_select_db()
    So nun noch die passenden Daten einsetzen und die Verbindung steht!
    [PHP]
    <?php
    mysql_connect( "localhost", "root", "test");
    mysql_select_db("login");
    [/PHP]


    Jetzt brauchst du noch eine MYSQL abfrage.
    Befehl: mysql_query()
    Die dort gewonnenen Daten musst du nun ich eine Variable laden. (Variablen beginnen in PHP immer mit einem $)
    Befehl: mysql_fetch_array()
    oder mysql_fetch_row()
    (mysql_fetch_array() ist jedoch gemütlicher)


    Wenn du also dein Formular schon hast (in HTML)...
    [HTML]
    <form action="login.php" method="post">
    <input type="text" name="login_name">
    <input type="password" name="login_pass">
    <input type="submit" value="Login">
    </form>
    [/HTML]
    Dann kannst du anfangen danach zu suchen.


    Eine Abfrage mit mysql_query ist recht einfach
    [PHP]
    mysql_query("SELECT * FROM user WHERE [dazu komme ich noch]");
    [/PHP]
    SELECT wählt die "Spalten" aus die in deiner Tabelle sind. Ein * sagt dass alles ausgewählt werden soll.
    FROM sagt wie die Tabelle heißt. (ich habe sie user getauft)
    WHERE filtert den/die Datensatz raus den/die du haben willst.
    In diesem Fall willst du nur einen Datensatz erhalten da es einen Benutzernamen nur einmal gibt.
    Bei WHERE nutzt du Logische operatoren. also = oder <= usw. ungleich schreibt man != und Identisch == (wobei Identisch bei MYSQL nicht vorhanden ist)
    Also kann deine abfrage wie folgst aussehen wenn deine Datenbank folgende Spalten hat:
    id_user, nick, passwort, real_name


    [PHP]
    $sql = mysql_query("SELECT * FROM user WHERE nick='".$_POST['login_name']."' && passwort='".$_POST['login_pass']."'")
    [/PHP]
    $_POST[] gibt wieder was dein Formular mit der Methode "POST" übermittelt hat. (wichtig ist dass du das $_POST[] mit ".." verbindest. Sonst funktioniert das nicht)
    Das war die abfrage. Nun musst du nur noch überprüfen ob der User existiert und das Passwort richtig war. Dies geht recht einfach mit mysql_num_rows() und einer if abfrage ob der wert == 1 ist.
    Dann setzt du am besten noch eine Session oder einen COOKIE damit du auch eingeloggt bleibst. Ansonsten musst du dich nach jedem weiteren Klick neu einloggen.
    Da helf ich dir nun gerade aber nicht. Versuch das mal selber herraus zu finden. Wenn du nicht weiter kommst kannst du dich ja immernoch mal melden. Nächstest mal schickst du aber bitte deinen schon vorhandenes Script und dienen Tabellenaufbau mit. So kann man einfacher helfen ohne raten zu müssen ;) Hier noch ein paar funktionen die dir helfen könnten:
    mysql_close();
    ob_start ();
    session_start ();
    $_SESSION[]
    setcookie();
    $_COOKIE[]


    Achja diese Methode ist wirklich sehr simpel und auch sehr unsicher also für just4fun ok aber für sensiblere Daten solltest du dies nicht verwenden!
    Viel spaß beim Bastellen ;)

    Die deutsche Rechtschreibung ist Freeware, Du darfst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

  • Hallo,


    Danke vielmals für die Hilfe! Ich habe jetzt folgendes gesucht-gefunden-kopiert-angepasst....
    aber es klapp nicht so ganz.
    Nach der Eingabe von Benutzer und Kennwort gelange ich zu der Folgeseite, wo mir allerdings, nach Klick auf die "testseite" angezeigt wird, dass ich nicht angemeldet sei :(
    Dies dürfte ja nicht passieren - wo liegt der Fehler?
    Logindaten sind ausge-xt
    Anbei meine Codes der 4 PHP-Seiten:


    [PHP]login.php:
    <?php


    session_start();
    include_once('sessionhelpers.inc.php');


    if ( isset($_POST['login']) ) {
    $userid = check_user($_POST['username'], $_POST['userpass']);
    if ( $userid ) {
    login($userid);
    } else {
    echo '<p>Ihre Anmeldedaten waren nicht korrekt!</p>';
    }
    }


    if ( !logged_in() ) {
    echo <<<END
    <form method="post" action="login.php">
    <label>Benutzername:</label> <input name="username" type="text"><br />
    <label>Passwort:</label> <input name="userpass" type="password" id="userpass"><br />
    <input name="login" type="submit" id="login" value="Einloggen">
    </form>
    END;
    } else {
    echo '<p><a href="soll-geschuetzt-werden.php">Testseite</a></p>';
    echo '<p><a href="logout.php">Ausloggen</a></p>';
    }


    ?>


    _______________________________________


    logout.php:


    <?php


    session_start();
    include_once('sessionhelpers.inc.php');


    echo '<p>Sie sind ';
    if ( !logged_in() ) {
    echo 'nicht ';
    }
    echo 'eingeloggt.</p>';


    logout();


    echo '<p>Sie sind ';
    if ( !logged_in() ) {
    echo 'nicht ';
    }
    echo 'eingeloggt.</p>';


    echo '<p><a href="login.php">Einloggen</a></p>';


    ?>


    _____________________________________________


    sessionhelpers.inc.php:
    <?php



    /**
    * @return void
    */
    function connect () {
    $con = mysql_connect('xxx', 'xxx', 'xxx) or exit(mysql_error());
    mysql_select_db('xxx', $con) or exit(mysql_error());
    }



    /**
    * @param string $name
    * @param string $pass
    * @return boolean
    */
    function check_user ( $name, $pass ) {
    // magic quotes anpassen
    if ( get_magic_quotes_gpc() ) {
    $name = stripslashes($name);
    $pass = stripslashes($pass);
    }
    // escapen von \x00, \n, \r, \, ', " und \x1a
    $name = mysql_real_escape_string($name);
    // escapen von % und _
    $name = str_replace('%', '\%', $name);
    $name = str_replace('_', '\_', $name);


    $sql = 'SELECT UserId FROM users WHERE UserName = \'' . $name . '\' AND UserPass=\'' . md5($pass) . '\'';
    if ( !$result = mysql_query($sql) ) {
    exit(mysql_error());
    }
    if ( mysql_num_rows($result) == 1 ) {
    $user = mysql_fetch_assoc($result);
    return ( $user['UserId'] );
    } else {
    return ( false );
    }
    }



    /**
    * @param int $userid
    * @return void
    */
    function login ( $userid ) {
    $sql = 'UPDATE users SET UserSession = \'' . session_id() . '\' WHERE UserId = ' . ((int)$userid);
    if ( !mysql_query($sql) ) {
    exit(mysql_error());
    }
    }



    /**
    * @return boolean
    */
    function logged_in () {
    $sql = 'SELECT UserId FROM users WHERE UserSession = \'' . session_id() . '\'';
    if ( !$result = mysql_query($sql) ) {
    exit(mysql_error());
    }
    return (mysql_num_rows($result) == 1);
    }



    /**
    * @return void
    */
    function logout () {
    $sql = 'UPDATE users SET UserSession = NULL WHERE UserSession = \'' . session_id() . '\'';
    if ( mysql_query($sql) ) {
    exit(mysql_error());
    }
    }


    connect();


    ?>


    ________________________________________________


    soll-geschuetzt-werden.php:


    <?php


    session_start();
    include_once('sessionhelpers.inc.php');


    echo 'Sie sind ';
    if ( !logged_in() ) {
    echo 'nicht ';
    }
    echo 'eingeloggt.<p />';


    if ( !logged_in() ) {
    echo '<p><a href="login.php">Anmelden</a></p>';
    }




    if ( logged_in() ) {
    echo '<p>Geschützter Bereich</p>';


    echo '<p><a href="logout.php">Ausloggen</a></p>';
    }


    ?>[/PHP]

  • hi also erstmal bitte ich dich dein Script in einen PHP Tag hier im Form zu laden!


    Öffne mit [PHP ]
    und schließe mit[/PHP ]
    (Ohne das leerzeichen)
    Oder nutze diesen Button im Editor:
    Dann haben wir auch eine Formatierung und es ist einfacher zu sehen was evtl. falsch ist! Ehrlich gesagt habe ich nicht die lust das teil neu zu formatiren wenn das eig. schon formatiert ist ;)


    Ich habe das script mal überflogen. Ich weiß nciht ob das nicht evtl ein bissel überzogen ist für deine zwecke aber naja ^^
    Versuchs mal so:


    login.php
    [PHP]
    <?php


    session_start();
    include_once('sessionhelpers.inc.php');


    if ( isset($_POST['login']) ) {
    $userid = check_user($_POST['username'], $_POST['userpass']);
    if ( $userid ) {
    login($userid);
    } else {
    echo '<p>Ihre Anmeldedaten waren nicht korrekt!</p>';
    }
    }


    if ( !logged_in() ) {
    echo <<<END
    <form method="post" action="login.php">
    <label>Benutzername:</label> <input name="username" type="text"><br />
    <label>Passwort:</label> <input name="userpass" type="password" id="userpass"><br />
    <input name="login" type="submit" id="login" value="Einloggen">
    </form>
    END;
    } else {
    echo '<p><a href="soll-geschuetzt-werden.php">Testseite</a></p>';
    echo '<p><a href="logout.php">Ausloggen</a></p>';
    }
    echo session_id();
    ?>
    [/PHP]
    Ganz unten nur das Echo hinzufügen! Dann schaust du in deinen Datensatz und schaust ob deine Änderung vorgenommen wurde! Also steht bei UserSession wirklich diese nummer!
    Wenn JA dann klick auf deinen Link.
    In deiner (geschützten Datei) legst du unter session_start(); das gleiche Echo wie oben und schaust dir die nummer an.
    So grenzen wir den Fehler immer weiter ein bis wir wissen an welcher Funktion es evtl. liegen kann oder an welcher Abfrage!

    Die deutsche Rechtschreibung ist Freeware, Du darfst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

  • Hallo ruNN0r,


    mit Deiner login.php funzt es nun, cool!!!
    Habe auch die Nummer angezeigt bekommen!!!


    Mal eine andere Frage: ist diese Art des Logins sicher?
    welche Mängel bzw. Sicherheitshinweise gibt es dabei?


    LG

  • jaein. also für dich ausreichend denke ich.
    Aber du speicherst lediglich die session id in der Datenbank! Man kann dieses Sessionid jedoch "klauen". Wenn ich also deine SessionID kenne (deine aktuelle ODER du hast dich nicht ausgeloggt) dann kann ich mich mit deiner SessionID theoretisch einloggen.
    Sessions sind echt eine verzwickte geschichte!!! Ich bin kein Profi in der PHP Programmierung und verstehe es auch noch nicht 100%ig!
    Aber Tatsache ist: Man kann diese ID klauen und sich für einen anderen ausgeben! Da du jedoch deine Daten nicht per URL übergibst (deine ID) findet man die sooo einfach auch keiner raus. Wenn du deine register_globals nun noch auf OFF hast und immer schon mit $_GET[] und $_POST[] arbeitest sollte es für dich reichen.


    Ansonsten musst du die SessionID verschlüssel! Dazu findest du hier einige Infos:
    Session Sicherheit - PHP Forum: phpforum.de
    kleine Tip: Leg ein weiteren Tupel (Spalte) in deiner Tabelle an! Dort schreibst du die Browser infos rein
    Befehl: $_SERVER['HTTP_USER_AGENT']; (pack den einfach mal so in eine datei: echo $_SERVER['HTTP_USER_AGENT']; Dann siehst du was ich meine)
    Dieses Feld überprüfst du zusammen mit der SID (sessionid). Das bietet dir schon ein bissel mehr sicherheit! Wenn dann einer sich einloggen will MUSS er auch diese Werte fälschen. Ist aber auch keine Prikelnde Lösung nur eine einfache!

    Die deutsche Rechtschreibung ist Freeware, Du darfst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

  • Servus,


    ich muss bezüglich der Funktionalität doch etwas zurückrudern.
    Der Login hat beim ersten Test funktioniert, jedoch "spinnt" das Skriot etwas herum,
    wenn ich es mal so formulieren darf.
    Im IE beispielsweise geht esüberhaupt nicht und im FF nur noch sporadisch.
    Dabei habe ich nichts weiter getan, als den PHP-Code in den Body meiner Seiten engebaut.
    Ich verzweifel...


    Desweitern würde mich interessieren, wie ich direkt auf den geschützen Bereich nach Login weiterleiten kann, anstatt diesen noch einmal zu verlinken.


    Danke vielmals im Voraus!!

  • hmm also direkt nach dem Login weiterleiten ist einfach:
    [PHP]
    <?php
    header("LOCATION: ./testseite.php");
    ?>
    [/PHP]Fertig!


    WICHTIG: Bei der headerweiterleitung darf zuvor KEINE ausgabe stattfinden. Also kein Echo! Was eh keinen sinn machen würde da er direkt weiterleiten würde bevor man das lesen kann ;D


    Also sieht deine LoginPHP so aus:
    [PHP]
    login.php:
    <?php


    session_start();
    include_once('sessionhelpers.inc.php');


    if ( isset($_POST['login']) ) {
    $userid = check_user($_POST['username'], $_POST['userpass']);
    if ( $userid ) {
    login($userid);
    } else {
    echo '<p>Ihre Anmeldedaten waren nicht korrekt!</p>';
    }
    }


    if ( !logged_in() ) {
    echo <<<END
    <form method="post" action="login.php">
    <label>Benutzername:</label> <input name="username" type="text"><br />
    <label>Passwort:</label> <input name="userpass" type="password" id="userpass"><br />
    <input name="login" type="submit" id="login" value="Einloggen">
    </form>
    END;
    } else {
    header("LOCATION: ./testseite.php");
    }
    [/PHP]


    Überprüf mal ob du Cookies zulässt!
    Liegt deine "zu schützende Seite" auf dem Server? oder einer anderen Domain? Ich weiß die Frage klingt doof aber das Problem hatte schon mal jemand :D
    ansonsten wüsste ich so auch nicht weiter!

    Die deutsche Rechtschreibung ist Freeware, Du darfst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

  • Also, ich würde an deiner Stelle ein paar Grundlagen von Php lernen, am Ende hast du noch irgend einen Code den du nicht kapierst und voller Fehler bzw. Sicherheitslücken ist. Für den Einstieg ist so ein kleines Loginscript perfekt als Übung geeignet.
    Ich kann dir eigentlich 2 Tutorials empfehlen:
    Quakenet/#php Tutorial - de - Einleitung -> einfach erklärt ist aber schon mehr als du brauchst (obwohl es nichts schadet wenn du mehr weißt :D)
    Nützliche Funktionen für Arrays - PHP-Kurs.com - PHP programmieren lernen -> nicht so ganz gut erklärt, reciht aber völlig für deine Bedürfnisse

    Wichtiger Hinweis: Tipp- und Rechtschreibfehler sind absichtlich eingebaut und dienen der Belustigung des Lesers.

  • Es basiert schon auf MySQL. Jedoch hat Dennis77 die anderen Seiten, seines Scriptes, aus seinem Post entfernt.

    Die deutsche Rechtschreibung ist Freeware, Du darfst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!