Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Ankündigungen, News und Feedback > Tutorials > [PHP] Ein sessionbasiertes Loginsystem
Antwort
 
Themen-Optionen
Alt 07.02.2005, 12:19   Nach oben    #1
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
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).
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.03.2005, 21:58   Nach oben    #2
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard [PHP] Ein sessionbasiertes Loginsystem

loginformular.html
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>
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://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>

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` (
  `_id` int(4) NOT NULL auto_increment,
  `_username` varchar(50) NOT NULL default '',
  `_passwort` varchar(35) NOT NULL default '',
  `_anzahlLogins` int(7) NOT NULL default '1',
  PRIMARY KEY  (`_id`),
  KEY `_username` (`_username`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;

#
# Dumping data for table `archiv_login`
#

INSERT INTO `archiv_login` (`_id`, `_username`, `_passwort`, `_anzahlLogins`) VALUES (1, 'Ben', '098f6bcd4621d373cade4e832627b4f6', 3),
(2, 'FreundVomBen', '598d4c200461b81522a3328565c25f7c', 3);
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.
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.03.2005, 16:31   Nach oben    #3
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
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
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.09.2005, 20:17   Nach oben    #4
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
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
Ben ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.10.2005, 14:12   Nach oben    #5
Jann Hendrik
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.207
Standard

Ich habe die notwendigen Dateien hier noch einmal angehängt.
Angehängte Dateien
Dateityp: zip [PHP] Ein sessionbasiertes Loginsystem.zip (3,3 KB, 188x aufgerufen)

Geändert von Jann Hendrik (13.11.2005 um 16:20 Uhr).
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.10.2005, 21:25   Nach oben    #6
Du-weisst-schon-wer
Neuer Benutzer
 
Registriert seit: 18.08.2005
Ort: Hürth
Beiträge: 28
Standard

Zitat:
$sql = "SELECT
_id,
_anzahlLogins
FROM
archiv_login
WHERE
_username = '" . trim($_POST['username']) . "'
[...]

Zitat:
if( mysql_num_rows($res) != 1 ) {
Bietet ne Prima Basis für SQL Injections...
Weiter hab ich mir das Ding nicht angesehen.
Du-weisst-schon-wer ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.10.2005, 21:27   Nach oben    #7
Ben
Erfahrener Benutzer
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
Standard

Cleverle .. das ist doch nur eine Struktur.
Thread dazu gibt es hier:
[ SQL ] Artikel: About Security (#11): SQL-Injection

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