Thema geschlossen
Ergebnis 1 bis 6 von 6

Thema: [PHP] Ein sessionbasiertes Loginsystem

  1. #1
    Ben
    Ben ist offline
    Erfahrener Benutzer Avatar von Ben
    Registriert seit
    02.12.2004
    Ort
    Koblenz
    Beiträge
    4.815

    Standard [PHP] Ein sessionbasiertes Loginsystem

    Ein sessionbasiertes Loginsystem

    Irgendwann kommt man an den Punkt, an dem man gerne einen Bereich mit einem Passwort schützen möchte. Die Kombination von Sessions und einer Datenbank - in diesem Fall MySQL - ist dafür prädestiniert.


    Achtung:
    Dieses Tutorial gewährleistet keinerlei Sicherheit des Logins. Die Verwendung der hier vorgestellten Quelltext erfolgt auf eigene Gefahr.


    Aber jetzt mal zum Thema.
    Wir möchten also eine geheime Seite haben, die nur per Login erreicht werden kann. Wir brauchen also auf jeden Fall mal ein Loginformular.

    Fangen wir direkt einmal damit an.
    Die Datei enthält keinerlei PHP-Code, da dies nicht unbedingt nötig ist. Aus diesem Grunde habe ich der Datei auch die Endung .html gegeben. Das kann natürlich je nach Bedarf geändert werden.

    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
       <title>Login</title>
    </head>
    <body>
       
        <h1>Loginformular</h1> 
       
          <form action="validateLogin.inc.php" method="post">
    
             <input type="text" name="username"> 
             <input type="password" name="passwort">
    
             <input type="submit" name="login" value="Einloggen">
    
          </form>
    
    </body>
    </html>
    
    Da gibt es nicht viel zu sagen. Das Formular wird an die PHP-Datei "validateLogin.inc.php" geschickt. Diese Datei überprüft die Richtigkeit der Eingaben und leitet den User je nach Ergebnis der Überprüfung weiter.

    Schauen wir uns also diese Datei etwas näher an.


    Die Datei validateLogin.inc.php - das Kernstück des Logins
    Hier passiert relativ viel. Da wird mit Sessions arbeiten müssen wird zunächst einmal die Session starten.
    PHP-Code:
    <?php

        session_start
    ();

    ?>
    Danach überprüfen wir, ob der User die Eingaben überhaupt gemacht hat. Ist dies der Fall, so beginnt die eigentliche Validierung der Eingaben.

    Unser Nutzerdaten sind in einer Datenbank gespeichert. Erst wenn wir sicher sind, dass der Nutzer die Angaben komplett gemacht hat erstellen wir eine Verbindung zur Datenbank. Dazu binden wir eine Konfigurationsdatei ein, die die Zugangsdaten zur Datenbank enthält.
    Danach erstellen wir die Verbindung.

    PHP-Code:
    <?php

        
    // Überprüfen, ob das Formular abgeschickt wurde und ob beide Angaben gemacht wurden.
        
    if( isset($_POST['username'], $_POST['passwort'])
            AND
            
    strcmp(trim($_POST['username']),'') != 0
            
    AND
            
    strcmp(trim($_POST['passwort']),'') != ) {

    ]          
              
    // Einbinden der Konfigurationsdatei
              
    include_once 'config.inc.php';
              
              
    // Erstellen der Verbindung zur MySQL-Datenbank 
              
    if( !$connection mysql_connect$_config['host'], $_config['user'], $_config['password'] ) ) {
                   die( 
    'Verbindung zum Datenbankserver konnte nicht hergestellt werden.' );
              }

              if( !
    mysql_select_db$_config['database'], $connection ) ) {
                  die ( 
    'Die Datenbank ' $_config['database'] . ' kann nicht verwendet werden. <br />
                           MySQL-Error: <br />' 
    mysql_error() );
              }
              
    ?>
    Nun schicken wir eine SQL-Anweisung an die Datenbank, die den Datensatz selektiert, der dem User entspricht, der sich gerade einloggen möchte.
    Den Datensatz identifizieren wir durch die Kombination aus Usernamen und Passwort.
    Das Passwort steht aus Sicherheitsgründen nicht im Klartext in der Datenbank, sondern als md5-Verschlüsselung.
    PHP-Code:
    <?php
              
              
    // SQL-Anweisung an die Datenbank senden, um erstens herauszufinden, ob 
              // diese Kombination von Usernamen und Passwort überhaupt existiert und 
              // zweitens bei Existenz Userinformationen auszulesen
              
    $sql "SELECT 
                               _id,
                               _anzahlLogins
                          FROM         
                               archiv_login
                          WHERE
                               _username = '" 
    trim($_POST['username']) . "'
                          AND
                               _passwort = '" 
    md5(trim($_POST['passwort'])) . "'";
                               
              
    $res mysql_query($sql) or die( 'Error[SELECT|User]: <br />
                                                               <pre>' 
    $sql '</pre>
                                                               <br />
                                                               MySQL-Error: ' 
    mysql_error() );

    ?>
    Nun ist es natürlich möglich, dass es keinen Datensatz mit der angegebenen Kombination aus Usernamen und Passwort gibt. In diesem Fall ist kein Datensatz selektiert worden.
    Sollte aus unvorhersehbaren Gründen mehr als einen selektierten Datensatz geben brechen wir den Login aus Sicherheitsgründen ab.
    Je nach Bedarf kann man sich für diesen Spezialfall noch etwas individuelles ausdenken.
    Wir fassen nun diese beiden Fälle allerdings zusammen.
    PHP-Code:
    <?php

              
    // Nur wenn genau ein Datensatz selektiert wurde wird der User eingeloggt.
              // In allen anderen Fällen wird er zurück zum Loginformular geleitet.
              
    if( mysql_num_rows($res) != ) {
                  
    header'Location: http://localhost/loginfehler.html' );              
                  exit();
              } 

    ?>
    Der User wird also zur Datei "loginfehler.html" weitergeleitet, wenn er falsche Logindaten eingegeben hat. Auf diese Datei gehe ich später in diesem Tutorial ein, da sie nicht wirklich spannend ist ;)

    Viel interessanter ist der Erfolgsfall. Der User hat sich also mit seinen richtigen Daten angemeldet. Der Login ist also erfolgreich.
    In diesem Fall wird die Session mit Informationen gefüllt. Als wichtigste Handlung wird die Variale $_SESSION['loggendIn'] auf true gesetzt. So kann der User im passwortgesicherten Bereich als eingeloggt identifiziert werden.

    PHP-Code:
    <?php

                 
    // Der Schlüssel 'loggedIn' erhält den Wert 'true'. So kann überprüft später werden, 
                 // ob der User eingeloggt ist oder nicht.
                 
    $_SESSION['loggedIn'] = true;

    ?>
    Als Zusatz füllen wir die Session mit noch einigen weiteren userspezifischen Daten.
    PHP-Code:
    <?php

                 
    // Die userspezifischen Daten werden ausgelesen und der Session hinzugefügt
                 
    $user mysql_fetch_object($res);
                 
    $_SESSION['anzahlLogins'] = $user->_anzahlLogins;
                 
    $_SESSION['id'] = $user->_id;

    ?>
    Nun können wir auch direkt die Anzahl der bisherigen Logins aktualisieren und damit den Login abschließen. Dieses Feature ist natürlich optional. Ich möchte damit nur andeuten, dass diese Datei natürlich viel mehr machen kann, als nur die Logindaten zu überprüfen
    PHP-Code:
    <?php
                 
                 
    // Aktualisierung des Anzahl der Logins
                 
    $sql 'UPDATE 
                                  archiv_login
                             SET
                                  _anzahlLogins = _anzahlLogins + 1
                             WHERE
                                  _id = ' 
    $user->_id;
                                  
                 
    mysql_query($sql) or die( 'Error[UPDATE|User]: <br />
                                                              <pre>' 
    $sql '</pre>
                                                              <br />
                                                              MySQL-Error: ' 
    mysql_error() );  

    ?>
    Als letzte Handlung dieser Datei wird der User jetzt natürlich noch zu einer Seite im geschützten Bereich weitergeleitet.
    PHP-Code:
    <?php

                 
    // Der Login war erfolgreich und der User wird zur Startseite des 
                 // passwortgeschützen Bereichs weitergeleitet
                 
    header'Location: http://localhost/geheim.php' );
                 exit();                                            
    ?>

    Kommen wir nun zu den restlichen Dateien, die uns noch fehlen, um ein geschlossenes System zu erhalten.

    Zunächst trage ich noch die Datei "loginfehler.html" nach.
    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
       <title>Fehler beim Login</title>
       <meta http-equiv="refresh" content="5; URL=http://localhost/loginformular.html"> 
    </head>
    <body>
       
       <h1>Es ist ein Fehler beim Login aufgetreten.</h1>
       <p>Eventuell handelt es sich nur um einen Tippfehler. Bitte versuchen Sie es nochmals.</p>
    
       Sie werden nach von 5 Sekunden automatisch weitergeleitet.
       
    </body>
    </html>
    
    Ich denke nicht, dass ich da etwas zu sagen brauche. Die Weiterleitung erfolgt salopp gesagt per 'meta-refresh'.


    Dann wurde oben natürlich schon die Datei "geheim.php" verwendet. Da wird der User nach dem Login ja hingeleitet.
    Diese Datei bindet ganz zu Beginn eine weitere Datei ein.
    PHP-Code:
    <?php

        
    include_once 'checkLogin.inc.php';  

    ?>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "[url]http://www.w3.org/TR/html4/loose.dtd">[/url]
    <html>
    <head>
       <title>Geheime Seite</title>
    </head>
    <body>
       
       <h1>Das ist die <i>geheime</i> Seite</h1>
       
       <p>Die Daten, die in der Session zum weiteren Gebrauch gespeichert sind:</p>
       
       <?php
       
           
    echo '<pre>';
           
    print_r($_SESSION);
           echo 
    '</pre>';
       
       
    ?>
       
       <p><a href="logout.php">Logout</a></p>
          
    </body>
    </html>

    Die Datei "checkLogin.inc.php" macht nur eine einzige Sache. Sie überprüft, ob die Session-Variable $_SESSION['loggendIn'] mit true belegt ist oder nicht.
    Ist dies nicht der Fall, so wird der User zum Loginformular geschickt, da er ja nicht eingeloggt ist. Somit ist sichergestellt, dass nur eingeloggte User die Seite "geheim.php" zu sehen bekommen.
    Die Datei "checkLogin.inc.php" sieht somit folgendermaßen aus:
    PHP-Code:
    <?php

        session_start
    ();

        if( !
    $_SESSION['loggedIn'] ) { 
            
    header'Location: http://localhost/loginformular.html' );
            exit();
        }

    ?>

    Aber nochmal zurück zur Datei "geheim.php". In diesem Tutorial ist da natürlich nichts interessantes zu sehen. Es geht ja nur um das Prinzip. Allerdings erkennt man am Ende der Datei noch eine sehr wichtige und oft vergessene Funktionalität - den Logout.

    Klickt man auf den Link, so wird die Datei "logout.php" aufgerufen
    PHP-Code:
    <?php

         session_start
    ();
         
    $_SESSION['loggedIn'] = false;

         
    header'Location: http://localhost/loginformular.html' );
         exit(); 

    ?>
    Hier entsteht nun ein Diskussionspunkt. Sollte man die Session nicht direkt komplett zerstören, z.B. per session_destroy()?
    Ich persönlich sehe das nicht so. Ich setze einfach die Variable $_SESSION['loggedIn'] auf false. Dadurch wird abgesichert, dass der User nach dem Logout nicht mehr in den geschützen Bereich kann (das wird ja durch die Datei "checkLogin.inc.php" gewährleistet!) und die Session kann trotzdem noch weiterverwendet werden.

    Sinnvoll wäre es natürlich alle Session-Variablen, die irgendwas mit dem geschützten Bereich zu tun haben zu löschen. Aber es können sich ja auch andere Daten in der Session befinden.
    Das kann aber jeder für sich individuell entscheiden.


    Ich möchte hier noch auf den nächsten Beitrag verweisen. Dort findet man noch einmal alle Dateien mit komplettem Quelltext und zusätzlich einen SQL-Export, so dass man das Tutorial direkt testen kann.

    Ich denke, dass man mit diesem Tutorial einen guten Einblick in das prinzipielle Vorgehen bei einem Login gewinnen kann.

    Ich wünsche viel Spaß und Erfolg beim Basteln


    Solltet Ihr Fragen zu dem Tutorial haben, so schreibt bitte einen Beitrag im Forum für Allgemeine PHP-Programmierung mit einem Verweis auf dieses Tutorial.
    Danke.
    Geändert von Ben (02.03.2007 um 14:46 Uhr)
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

  2. #2
    Ben
    Ben ist offline
    Erfahrener Benutzer Avatar von Ben
    Registriert seit
    02.12.2004
    Ort
    Koblenz
    Beiträge
    4.815

    Standard [PHP] Ein sessionbasiertes Loginsystem

    loginformular.html
    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http&#58;//www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
       <title>Login</title>
    </head>
    <body>
       
        <h1>Loginformular</h1> 
       
          <form action="validateLogin.inc.php" method="post">
    
             <input type="text" name="username"> 
             <input type="password" name="passwort">
    
             <input type="submit" name="login" value="Einloggen">
    
          </form>
    
    </body>
    </html>
    
    validateLogin.inc.php
    PHP-Code:
    <?php

        session_start
    ();
        
        
    // Überprüfen, ob das Formular abgeschickt wurde und ob beide Angaben gemacht wurden.
        
    if( isset($_POST['username'], $_POST['passwort'])
            AND
            
    strcmp(trim($_POST['username']),'') != 0
            
    AND
            
    strcmp(trim($_POST['username']),'') != ) {

              
              
    // Einbinden der Konfigurationsdatei
              
    include_once 'config.inc.php';
              
              
    // Erstellen der Verbindung zur MySQL-Datenbank 
              
    if( !$connection mysql_connect$_config['host'], $_config['user'], $_config['password'] ) ) {
                   die( 
    'Verbindung zum Datenbankserver konnte nicht hergestellt werden.' );
              }

              if( !
    mysql_select_db$_config['database'], $connection ) ) {
                  die ( 
    'Die Datenbank ' $_config['database'] . ' kann nicht verwendet werden. <br />
                           MySQL-Error: <br />' 
    mysql_error() );
              }
              
              
              
    // SQL-Anweisung an die Datenbank senden, um erstens herauszufinden, ob 
              // diese Kombination von Usernamen und Passwort überhaupt existiert und 
              // zweitens bei Existenz Userinformationen auszulesen
              
    $sql "SELECT 
                               _id,
                               _anzahlLogins
                          FROM         
                               archiv_login
                          WHERE
                               _username = '" 
    trim($_POST['username']) . "'
                          AND
                               _passwort = '" 
    md5(trim($_POST['passwort'])) . "'";
                               
              
    $res mysql_query($sql) or die( 'Error[SELECT|User]: <br />
                                                               <pre>' 
    $sql '</pre>
                                                               <br />
                                                               MySQL-Error: ' 
    mysql_error() );
                  
              
    // Nur wenn genau ein Datensatz selektiert wurde wird der User eingeloggt.
              // In allen anderen Fällen wird er zurück zum Loginformular geleitet.
              
    if( mysql_num_rows($res) != ) {
                  
    header'Location: http://localhost/loginfehler.html' );              
                  exit();
              } 
              else {
                 
    // Der Schlüssel 'loggedIn' erhält den Wert 'true'. So kann überprüft später werden, 
                 // ob der User eingeloggt ist oder nicht.
                 
    $_SESSION['loggedIn'] = true;
                 
                 
    // Die userspezifischen Daten werden ausgelesen und der Session hinzugefügt
                 
    $user mysql_fetch_object($res);
                 
    $_SESSION['anzahlLogins'] = $user->_anzahlLogins;
                 
    $_SESSION['id'] = $user->_id;
                 
                 
    // Aktualisierung des Anzahl der Logins
                 
    $sql 'UPDATE 
                                  archiv_login
                             SET
                                  _anzahlLogins = _anzahlLogins + 1
                             WHERE
                                  _id = ' 
    $user->_id;
                                  
                 
    mysql_query($sql) or die( 'Error[UPDATE|User]: <br />
                                                              <pre>' 
    $sql '</pre>
                                                              <br />
                                                              MySQL-Error: ' 
    mysql_error() );  
                                                              
                 
    // Der Login war erfolgreich und der User wird zur Startseite des 
                 // passwortgeschützen Bereichs weitergeleitet
                 
    header'Location: http://localhost/geheim.php' );
                 exit();                                            
              }
              
        }
        else {
              
    header'Location: http://localhost/loginformular.html' );
              exit();
        } 

    ?>
    loginfehler.html
    Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http&#58;//www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
       <title>Fehler beim Login</title>
       <meta http-equiv="refresh" content="5; URL=http&#58;//localhost/loginformular.html"> 
    </head>
    <body>
       
       <h1>Es ist ein Fehler beim Login aufgetreten.</h1>
       <p>Eventuell handelt es sich nur um einen Tippfehler. Bitte versuchen Sie es nochmals.</p>
    
       Sie werden nach von 5 Sekunden automatisch weitergeleitet.
       
    </body>
    </html>
    

    geheim.php
    PHP-Code:
    <?php

        
    include_once 'checkLogin.inc.php';  

    ?>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "[url]http://www.w3.org/TR/html4/loose.dtd">[/url]
    <html>
    <head>
       <title>Geheime Seite</title>
    </head>
    <body>
       
       <h1>Das ist die <i>geheime</i> Seite</h1>
       
       <p>Die Daten, die in der Session zum weiteren Gebrauch gespeichert sind:</p>
       
       <?php
       
           
    echo '<pre>';
           
    print_r($_SESSION);
           echo 
    '</pre>';
       
       
    ?>
       
       <p><a href="logout.php">Logout</a></p>
          
    </body>
    </html>
    checkLogin.inc.php
    PHP-Code:
    <?php

        session_start
    ();

        if( !
    $_SESSION['loggedIn'] ) {
            
    header'Location: http://localhost/loginformular.html' );
            exit();
        }

    ?>

    logout.php
    PHP-Code:
    <?php

         session_start
    ();
         
    $_SESSION['loggedIn'] = false;

         
    header'Location: http://localhost/loginformular.html' );
         exit(); 

    ?>

    SQL-Export
    Code:
    #
    # Table structure for table `archiv_login`
    #
    
    CREATE TABLE `archiv_login` &#40;
      `_id` int&#40;4&#41; NOT NULL auto_increment,
      `_username` varchar&#40;50&#41; NOT NULL default '',
      `_passwort` varchar&#40;35&#41; NOT NULL default '',
      `_anzahlLogins` int&#40;7&#41; NOT NULL default '1',
      PRIMARY KEY  &#40;`_id`&#41;,
      KEY `_username` &#40;`_username`&#41;
    &#41; TYPE=MyISAM AUTO_INCREMENT=3 ;
    
    #
    # Dumping data for table `archiv_login`
    #
    
    INSERT INTO `archiv_login` &#40;`_id`, `_username`, `_passwort`, `_anzahlLogins`&#41; VALUES &#40;1, 'Ben', '098f6bcd4621d373cade4e832627b4f6', 3&#41;,
    &#40;2, 'FreundVomBen', '598d4c200461b81522a3328565c25f7c', 3&#41;;
    
    Die Passwörter und User
    Code:
    Ben -> test
    FreundVomBen -> hallo
    
    Und nein .. es ist nicht mein richtiges Passwort ;)

    // edit by supertramp: 13.05.2005: Fehler in checkLogin.inc.php verbessert.
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

  3. #3
    Ben
    Ben ist offline
    Erfahrener Benutzer Avatar von Ben
    Registriert seit
    02.12.2004
    Ort
    Koblenz
    Beiträge
    4.815

    Standard [PHP] Ein sessionbasiertes Loginsystem

    Hallo,
    ich wurde kürzlich gefragt, wie denn die Datei config.inc.php auszusehen hat. Gute Frage .. vor allem für PHP-Einsteiger.

    Die Datei, die ich in diesem Fall verwende sieht im Prinzip folgendermaßen aus.
    PHP-Code:
    <?php

        
    // Array initialisieren ...
        
    $_config = array();

        
    // ... und mit Werten füllen

        // Der Datenbankserver. 
        
    $_config['host'] = 'localhost';  

        
    // Ein User, der auf den Server zugreifen darf.
        
    $_config['user'] = 'user';        

        
    // Das zum User passende Passwort.
        
    $_config['password']  = 'password'

        
    // Der Name der Datenbank, die auf dem Datenbankserver angesprochen werden soll.
        
    $_config['database'] = 'database';

    ?>
    Die Daten werden in einem Array gespeichert. Mehr zu findet man im entsprechenden FAQ-Beitrag:
    [PHP] Was sind eigentlich Arrays?

    Ich hoffe, dass ich auch dieses Problemchen wenigstens zu 90% mit Euch zusammen lösen konnte.
    Geändert von Jann Hendrik (28.05.2008 um 19:46 Uhr) Grund: link aktualisiert
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

  4. #4
    Ben
    Ben ist offline
    Erfahrener Benutzer Avatar von Ben
    Registriert seit
    02.12.2004
    Ort
    Koblenz
    Beiträge
    4.815

    Standard

    Hallo,
    da ich öfters mal gefragt werde, wie man das Login-Script so erweitern kann, dass sich auch User anmelden können ... schreibe ich hier mal ein paar Gedanken dazu auf.

    Zunächst brauchen wir natürlich wieder mal ein Formular mit zumindest mal einem, im Normalfall aber zwei Eingabefeldern und einem Button, der das Formular abschickt.

    Also irgendwie so:
    HTML-Code:
    <form action="register.php" method="post">
        
        <!-- Beschriftungen und Formatierungen lasse ich hier bewusst entfallen -->
    
        <input type="text" name="username" size="20" />
        <input type="text" name="password" size="20" />    
    
        <input type="submit" name="submit" value="anmelden" />
    </form> 
    Jut. Damit hat man sozusagen die Anmeldemaske.

    Als nächsten Schritt gehen wir die Datei register.php an. Im oben skizzierten Formular sehen wir ja, dass der POST-Request, also "die Daten aus dem Formular", an diese Datei gesendet werden (mal etwas grob gesprochen )

    Was muss diese Datei können?
    Ahja, stimmt .. diese Datei muss den User, der sich registrieren will ja irgendwie in der Datenbanktabelle abspeichern, damit er beim Login bzw. der Datei validateLogin.inc.php (siehe oben) auch als registrierter User erkannt wird.

    Generell ist das ja auch kein Problem. MySQL ist ja bekanntlich sehr anwenderfreundlich und so finden wir im MySQL-Handbuch (deutsche Version) heraus, dass man Datensätze mit INSERT einer Datenbanktabelle hinzufügen kann.

    Super. Dann machen wir das doch einfach mal.
    PHP-Code:
    $sql "INSERT INTO 
                user
           (
                _username,
                _password
           )
           VALUES
           (
                '" 
    $username "',
                MD5('" 
    $passwort "')
           ) 
    Die Variablen $username und $passwort enthalten dann die entsprechenden Daten (wer hätte das gedacht?). *g*
    Bitte sorgt dafür, dass die SQL-Statements so geprüft werden, dass potentielle Gefahren wie SQL-Injection vermieden werden.

    Bitte lest diesen Thread und lernt mit den dort beschriebenen Tipps
    SQL-Injection vermeiden

    Jou. Also weiter im Text.
    Obiger "Code" hat allerings einen Haken. Er geht davon aus, dass niemals zwei User den selben Usernamen haben möchten.
    Da davon aber nicht ausgegangen werden darf müssen wir das vorher abfangen.

    Wir überprüfen also, ob der Usernamen, den der sich registrierende User haben möchte, schon vergeben ist oder ob er sich mit dem Namen anmelden kann.
    Wie kann man das jetzt machen?

    Ganz einfach. Wir haben so eine Abfrage schon einmal verwendet und zwar in der Datei validateLogin.inc.php. Dort überprüfen wir ja auch, ob der User existiert. Wenn das der Fall und sogar das Passwort korrekt ist, dann lassen wir ihn sich einloggen.

    Hier bauen wir das jetzt etwas um.
    Existiert der Username schon, so ist das ja kein "Erfolg", sondern der User muss sich einen anderne Namen ausdenken.

    Ich lasse an dieser Stelle bewusst die Codepassage weg, da ich der Ansicht bin, dass man wenigstens ein klein wenig denken sollte, wenn man dieses Tutorial und dieses Update verwenden möchte.
    Niemand von euch ist so dumm, dass er das nicht hinbekommen würde.

    Als Tipp kann ich nur sagen, dass es zwei Möglichkeiten gibt herauszufinden wie viele Datensätze eine SQL-Abfrage erbracht hat.
    1. bereits in der SQL-Abfrage anzuwenden: COUNT
    2. die PHP-Funktion mysql_num_rows()

    Dazu noch eine if-Abfrage, in der überprüft wird, ob es mehr als 0 Datensätze sind und wenn das nicht der Fall ist, dann wird der oben beschriebene INSERT-"Befehl" ausgeführt .. mysql_query() und mysql_error() kennt ihr ja bereits


    Ich habe das hier jetzt nicht getestet - es gibt ja auch nicht wirklich was zu testen - aber vom Prinzip her funktioniert das wunderbar *g*

    Probiert es aus und verzweifelt nicht, wenn es mal länger als 30 Minuten dauert.
    Für Fragen stehen wir (die Mitglieder dieses Forums) generell und ständig zur Verfügung. Eine Anmeldung und eine gut gestellte Frage reichen da oftmals aus.

    Hoffe, dass das hier dem ein oder anderen weiterhilft.

    Grüße Ben.
    Geändert von Jann Hendrik (28.05.2008 um 19:47 Uhr) Grund: link aktualisiert
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

  5. #5
    Projektleiter Avatar von Jann Hendrik
    Registriert seit
    02.12.2004
    Ort
    Wildeshausen
    Beiträge
    3.298
    Blog-Einträge
    32

    Standard

    Ich habe die notwendigen Dateien hier noch einmal angehängt.
    Angehängte Dateien
    Geändert von Jann Hendrik (13.11.2005 um 16:20 Uhr)
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

  6. #6
    Projektleiter Avatar von Jann Hendrik
    Registriert seit
    02.12.2004
    Ort
    Wildeshausen
    Beiträge
    3.298
    Blog-Einträge
    32

    Standard

    Dieser link ist für die Leser des Tutorials sicherlich ein guter Hinweis:
    sql Abfrage will nicht - Fehler im php Code ?

    Hier erklärt Ben anhand eines konkreten Problems nocheinmal den Ansatz dieses Tutorials, daher sollte er von jedem Tutorial-Leser noch einmal zusätzlich gelesen werden.
    Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!

Thema geschlossen

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Ähnliche Themen

  1. Problem mit Ein sessionbasiertes Loginsystem von Ben
    Von compoundbow83 im Forum PHP-Programmierung
    Antworten: 24
    Letzter Beitrag: 21.11.2008, 13:59
  2. Ein sessionbasiertes Loginsystem
    Von lino im Forum PHP-Programmierung
    Antworten: 53
    Letzter Beitrag: 22.04.2008, 17:24
  3. Frage zum Tut: [PHP] Fremde Webseiten auslesen
    Von the_cRu im Forum PHP-Programmierung
    Antworten: 27
    Letzter Beitrag: 10.02.2007, 19:59
  4. fehler beim loginsystem
    Von mitch im Forum PHP-Programmierung
    Antworten: 15
    Letzter Beitrag: 08.03.2006, 13:44
  5. [PHP] Ein einfaches Template-System
    Von MrNiceGuy im Forum Tutorials
    Antworten: 0
    Letzter Beitrag: 09.10.2005, 18:30

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein

Impressum · Tutorials · Nutzungsbedingungen · thematisch sortierte Linklisten · Spendenaufruf · Team · Partnerprojekte

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48