PHP+MySQL - Loginscript

  • Ihr k?nnt schon mal folgende Dateien erstellen:


    - config.php
    - login.php (Das Formular )
    - check_login.php ( Datenvalidierung )
    - valid_user.php ( ?berpr?fung )
    - intern.php ( Die gesch?tzte Seite )


    Wir erstellen die Datenbank "my_page" und folgende Tabelle names "my_user":


    ID (INT, AUTO INCREMENT, NOT NULL und PRIMARY KEY)
    Username (VARCHAR(30), NOT NULL)
    Password (VARCHAR(30), NOT NULL)


    Erkl?rung:


    ID:
    INT = Integer(Ganzzahl), kann immer nur eine ganze Zahl sein (1,2,3,4,...).
    AUTO INCREMENT = Erh?ht sich nach anlegen jedes neuen Users von selbst um 1. Somit gehen wir sicher dass kein User die selbe ID hat.
    NOT NULL = Selbsterkl?rend.
    PRIMARY KEY = Anhand dieses Prim?rschl?ssels identifizieren wir einen User eindeutig anhand seiner ID, da diese ja nicht doppelt vorkommen kann (Im Gegensatz zum Usernamen).


    Username:
    VARCHAR = 1 bis 255 Zeichen (a,b,c,d..1,2,3,4,..). Durch die (30) begrenzen wir den Usernamen auf 30 Zeichen.



    Fangen wir mal an. Moment,.. so jetzt.


    Die config.php


    Code
    define ("HOST",  "localhost"); // Meistens der Lokale.define ("USER",   "root"); // Username zur Datenbank.define ("PASS",   "passwort"); // Euer Passwort.define ("DB",      "my_page"); // Die erstellte Datenbank.mysql_connect(HOST, USER, PASS) OR die("Error: Keine Verbindung zum Server"); // Wir verbinden uns damit zum SQL-Server.mysql_select_db(DB) OR die("Error: Keine Verbindung zur Datenbank"); // Wir sagen welche Datenbank wir gerne verwenden m?chten.


    Die login.php


    Code
    <form method=post" action="check_login.php">Username: <input type="text" name="user">Password: <input type="password" name="pass"><input type="submit" name="submit" value="- Login -"></form>


    Erkl?rung login.php


    Wir erstellen ein Formular und verwenden zum Versenden die "post" Methode. Die eingegebenen Daten werden mittels action="" an die check_login.php ?bergeben. Wenn du dir hier schwer tust solltest du dir HTML Grundkenntnisse aneignen, denn das war reines HTML. Ja man kann die Datei auch login.html benennen.


    Die check_login.php:


    Code
    session_start();include_once("config.php");if (isset($_POST["user]) && isset($_POST["pass"])) {    $user = mysql_real_escape_string(trim($_POST["user"]));    $pass = mysql_real_escape_string(trim($_POST["pass"]));   if (!empty($user) && !empty($pass)) {       $sql = "SELECT                     Username,                     Password                 FROM                     my_user                 WHERE                     Username = '".$user."' AND Password = '".$pass."'";";           $result = mysql_query($sql) OR die("Die Anfrage konnte nicht gesendet werden ".mysql_error());


    Erkl?rung check_login.php:


    Mit session_start() starten wir eine Sitzung und inkludieren danach mit include_once() unsere config.php damit wir eine Verbindung mit der Datenbank herstellen.


    Mit isset() ?berpr?fen wir ob die Variablen Username und Passwort von login.php ?bergeben wurden, denn man k?nnte ja direkt auf die check_login.php browsen und somit h?tte das ganze keinen Sinn.


    Mit !empty() ?berpr?fen wir ob uns da nicht wer versucht hat ein leeres Formular zu senden.


    Sind beide Bedingungen erf?llt deklarieren wir unseren Befehl an MySQL. Wir sagen w?hle den Usernamen und das dazugeh?rige Passwort ausgehend von den ?bermittelten Daten aus.


    Jetzt verschicken wir mit mysql_query($sql) die Anfrage und speichern das Resultat in die Variable $result.


    Nun fragen wir mit if(mysql_num_rows($result) != 1) ab ob er ein passendes Resultat gefunden hat, und zwar nur 1!
    Ist dies der Fall so setzen wir $_SESSION["valid"] auf TRUE, $_SESSION["username"] auf $user (also den Usernamen) und leiten mit header() auf die intern.php weiter.
    Falls nicht so kommt eine Fehlermeldung.


    Die valid_user.php


    Code
    if ($_SESSION["valid"] == FALSE) {    session_start();    session_destroy();    header("Location: login.php");    exit();}


    Erkl?rung valid_user.php:


    Wir ?berpr?fen ob die global _SESSION["valid"] FALSE ist, wenn ja hei?t dass der Besucher ist nicht eingeloggt und hat somit kein Recht die Seite zu betreten, also mit header() wieder ab auf die login.php.


    Mit session_destroy() "zerst?ren" wir sicherheitshalber die Sitzung.


    Der Sinn dieser Datei ist es, sie ?berall dort zu includen (include()) wo die Seite gesch?tzt sein soll, also wo man sich zuerst eingeloggt haben muss um diese zu betreten.


    Die intern.php


    Code
    session_start();include_once("valid_user.php");echo "Willkommen im internen Bereich ".$_SESSION["username"]; [url=logout.php]Logout[/url]


    Erkl?rung intern.php:


    Wir starten die Sitzung und anhand der inkludierten "valid_user.php" wir ?berpr?ft ob der Besucher der Seite eingeloggt ist. Falls ja kommt die Meldung : Willkommen im internen Bereich + der Username.


    So wir sind fast fertig, eine Datei fehlt noch.


    Die logout.php


    Code
    session_start();
    session_destroy();
    
    
    header("Location: login.php");


    Erkl?rung logout.php:


    Hier gibts nicht viel zu erkl?ren, die Sitzung wird wieder beendet und der Besucher zur?ck auf die login.php geleitet.





    So das wars eigentlich schon. Ihr m?sst jetzt nur noch ?ber zB den phpmyadmin einen User und ein Passwort in der Tabelle my_user anlegen und k?nnt das Skript schon testen. Ich verliere bei dem "Editor" schnell den ?berblick so kann es gut sein dass sich Fehler eingeschlichen haben, also bitte melden wenn ihr was findet.


    M?gliche Erweiterungen:


    - Registerscript ( Um User anzulegen )
    - md5 Passwort ( Passw?rter gehasht in der Datenbank ablegen )



    greetz & hf, gene =)

  • Jo ganz gut, ich erweiter es einfach mal um das registrierscript ;)


    register.php:


    So, editiert, wenn ihr noch Fehler findet macht mich drauf aufmerksam

  • Ist zwar nett von dir aber wenn schon dann richtig.


    So wie du es jetzt stehen hast ist das Ding sogar noch SQL-Injection anf?llig. Am Ende nimmt das noch wer so und verwendet es produktiv :schockiert: .


    Also entweder nimm dir mehr Zeit und schreib es richtig oder editier es weg.

  • ja ok hast ja rech...


    Ich mach erstmal die groben Fehler, sp?ter mache ich dann die feinheiten, auch mit dem aus der Datenbank lesen ob der Benutzer vorhanden ist und gucken ob das Passwort mindestens 4 Zeichen enth?llt....

  • Hallo,


    den Script btw. besser gesagt dein Tutorials ist gut geworden.
    Man versteht alles sehr gut und es ist sogar für Anfänger gut verständlich :>
    Sehr gut.



    r3miX.

  • Zitat von r3miX;6264

    Hallo,


    den Script btw. besser gesagt dein Tutorials ist gut geworden.
    Man versteht alles sehr gut und es ist sogar für Anfänger gut verständlich :>
    Sehr gut.


    r3miX.


    Zitat


    also dein loginscript find ich SEHR gut :D
    werds auf meiner seite mit einbauen dann muss ich das nicht selbst machen xDD


    Danke !


    Zitat


    Preview von meinem captcha:
    http://neofusion.de/Learn/ccc.html


    Die Idee ist gut aber ich schaff es nicht den richtigen Code einzugeben :P