tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Steusi
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
474
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    smyle smyle ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    217
    Hallo an alle
    ...
    Und wieder versuche ich PhP erfolglos zu programmieren
    Ich habe aus der folgenden Seite einen Script für das login gedownloaded.

    http://www.php-einfach.de/tuts_php_l...teien.php#oben

    Die eintragen.php Datei schreibt jedoch die Registrierungsdaten in einer *.txt Datei und die login.php liest diese aus der *.txt Datei aus.

    Wie kann ich denn Code der login.php Datei umschreiben damit es die Daten aus der Datenbank ausliehst und immer noch das selbe bewirkt, wie das Original?
    Hier der Code:
    login.php

    PHP-Code:
    session_start();
    $username $_POST["username"];
    $passwort $_POST["password"];
    $passwort md5($passwort);
    $log=0;

    $userdatei fopen ("user.txt","r");
    while (!
    feof($userdatei))
       {
       
    $zeile fgets($userdatei,500);
       
    $userdata explode("|"$zeile);

       if (
    $userdata[0]==$username and $passwort==trim($userdata[1]))
          {
          
    $_SESSION['username'] = $username;
          echo 
    "Login war erfolgreich. <a href=\"geheim.php\" target=\"IFRAME\">Gesch&uuml;tzer Bereich</a>";
          
    $log 1;
          }
       }
    fclose($userdatei);

    if (
    $log==0)
       {
       echo 
    "Zugriff verweigert <a href=\"login.html\">Zur&uuml;ck</a>";
       } 
    In der Datenbank habe ich die Felder: ID, Benutzername und Passwort.
    Ich denke ich benötige nicht mehr. Oder?

    Ich wäre natürlich über Glücklich und Dankbar wen mir jemand helfen könnte.
    Denn ich habe 2 Tage an dieser Datei gesessen und mir sind die Ideen ausgegangen.
    Geändert von smyle (25.06.09 um 16:03 Uhr)
     

  2. #2
    00d4vid 00d4vid ist offline Mitglied Silber
    Registriert seit
    Nov 2007
    Ort
    München
    Beiträge
    51
    Mach nen Select auf die Datenbank mit dem du dir Benutzername und Passwort holst und vergleiche halt statt den Strings aus dem Array von der Textdatei die Ergebnisse im Result Set.
    Und die Datenbankfelder brauchst du schon wenn du die Sachen auslesen willst:P
    Code :
    1
    
    userdata = explode("|", $zeile);
    Das hier ist übrigens etwas suboptimal. Ich hatte mich mal in nem Forum als clan00|d4vid angemeldet. Bei solchen Nicknames würde dein Login nicht mehr funktionieren.
     
    Hallo Nuray!

  3. #3
    Avatar von Steusi
    Steusi Steusi ist offline Nasenbär
    Registriert seit
    Sep 2006
    Ort
    MV
    Beiträge
    431
    Dieses Script kannst du für die DB nicht nutzen.
    Zudem empfehle ich dir vielleicht noch einige zusätzliche Spalten, wie User_Agent, letzte Login, durch vernünftiges Login beendet und und und.
    Für einfache Sachen ist es aber völlig ausreichend.

    Damit es nicht zu scher wird. Also ich würde es in Etwa so machen:

    Einloggen:
    PHP-Code:
    <form action="login.php" method="post">  
    <
    table border="0">  
      <
    tr>
        <
    td>Name:</td>
        <
    td><input type="text" name="Nickname" size="20" value=""></td>
      </
    tr>
      <
    tr>
        <
    td>Kennwort:</td>
        <
    td><input type="password" name="Kennwort" size="20" value=""></td>
      </
    tr>
      <
    tr>
        <
    td colspan="2" align="center"><input type="submit" value="Login">  </td>
      </
    tr>     
    </
    table>
    </
    form

    zur Login.php
    PHP-Code:
    $Nickname trim($_POST["Nickname"]);
    // Eingegebene Date prüfen, ob diese in der Datenbank enthalten sind
    $sql "SELECT ".  
        
    "Id, Nickname, Kennwort".  
      
    "FROM ".  
        
    "benutzerdaten ".  
      
    "WHERE ".  
          
    // mysql_escape_string um SQL-Injection zu vermeiden (ungeklärt)
        
    "(Nickname like '".$Nickname."') AND ".  
        
    "(Kennwort = '".md5(trim($_POST["Kennwort"]))."')";  
    $result mysql_query ($sql);  

    if (
    mysql_num_rows ($result) > 0)  
    {  
      
    // Benutzerdaten in ein Array auslesen.  
      
    $data mysql_fetch_array ($result);  

    #####################_____Sessionvariabeln definieren_____#######################

      // Sessionvariablen erstellen und registrieren aus den Arrayelementen
      
    $_SESSION["user_id"] = $data["Id"];  

    Auf jeder Seite sollte am Anfang folgendes stehen:
    PHP-Code:
    <?php  
    if(!isset($_SESSION)) {
        
    session_start();


    if ((!isset (
    $_SESSION["user_id"])))  { 
        
    header ("Location: http://localhost/XXXX/index.php?session=1");  
    }

    So sollte alles klappen, ich hab das mal schnell aus meinem Code raus gezogen, ich hab gleich Feierabend und hoff nicht zu viel oder zu wenig weg genommen
     
    Gruß Steusi

    Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
    Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
    PHP-Code:
    $fehler "dummer Tippfehler";
    echo(
    "Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!"); 

  4. #4
    smyle smyle ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    217
    Ich habe den Code kopiert.
    Und zwar habe ich eine login.html Datei, eine login.php Datei und eine Index.php Datei.
    Wenn ich nun das Programm ausführe kommt diese Fehlermeldung:

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Programme\xampp\htdocs\Homepage\login.php on line 17

    Deswegen habe ich den 3.Teil des Codes noch zu Oberst in die login.php Datei eingefügt. Die Fehlermeldung ist nicht mehr gekommen, jedoch kontrolliert er nicht ob man das richtige Passwort zum angegebenen Benutzernamen gehört, er leitet beim klicken des Login Button einfach weiter.

    Meine Frage:
    Sollte der Code nicht kontrolliert, ob man eingelegt ist und somit zu den "geschützten" Seiten weiter leiten?

    Und dann noch eine blöde Frage: wie kann ich jemand bewerten?

    Übrigens, vielen Dank für die Hilfe
    Geändert von smyle (26.06.09 um 08:20 Uhr)
     

  5. #5
    Avatar von Steusi
    Steusi Steusi ist offline Nasenbär
    Registriert seit
    Sep 2006
    Ort
    MV
    Beiträge
    431
    Bewerten?
    Bei dem Beitrag unten links bei dem Smiley

    So, jetzt noch mal ganz langsam:

    Deine index.php muss folgendermaßen aussehen:

    PHP-Code:
    if(!isset($_SESSION)) { 
        
    session_start(); 


    <
    form action="login.php" method="post">  
    <
    table border="0">  
      <
    tr>
        <
    td>Name:</td>
        <
    td><input type="text" name="Nickname" size="20" value=""></td>
      </
    tr>
      <
    tr>
        <
    td>Kennwort:</td>
        <
    td><input type="password" name="Kennwort" size="20" value=""></td>
      </
    tr>
      <
    tr>
        <
    td colspan="2" align="center"><input type="submit" value="Login">  </td>
      </
    tr>     
    </
    table>
    </
    form
    Dann geht es weiter zur login.php:

    PHP-Code:
    if(!isset($_SESSION)) { 
        
    session_start(); 

    // Datenbankverbindung aufbauen  
    require ("lib/dbconnect.inc.php");

    $Nickname trim($_POST["Nickname"]);
    // Eingegebene Date prüfen, ob diese in der Datenbank enthalten sind
    $sql "SELECT ".  
        
    "Id, Nickname, Kennwort ".  
      
    "FROM ".  
        
    "benutzerdaten ".  
      
    "WHERE ".  
          
    // mysql_escape_string um SQL-Injection zu vermeiden (ungeklärt)
        
    "(Nickname like '".$Nickname."') AND ".  
        
    "(Kennwort = '".md5(trim($_POST["Kennwort"]))."')";  
    $result mysql_query ($sql);  

    if (
    mysql_num_rows ($result) > 0)  
    {  
      
    // Benutzerdaten in ein Array auslesen.  
      
    $data mysql_fetch_array ($result);  

    #####################_____Sessionvariabeln definieren_____#######################

      // Sessionvariablen erstellen und registrieren aus den Arrayelementen
      
    $_SESSION["user_id"] = $data["Id"];  
      
    $_SESSION["user_nickname"] = $data["Nickname"];
     
    #######################_____Login-Daten speichern_____###########################

    // Logfile mit Informationen füllen
    $host gethostbyaddr($_SERVER['REMOTE_ADDR']);
    $domain explode("."$host); $domain_array count($domain)-2;
    $msg =  "Nickname: "$_SESSION["user_nickname"] . " | "
    $msg .= "Besuch: " date("d.m.Y H:i") . " Uhr | ";
    $msg .= "IP-Adresse: " $_SERVER['REMOTE_ADDR'] . " | ";
    $msg .= "Hostname: " gethostbyaddr($_SERVER['REMOTE_ADDR']) . " | ";
    $msg .= "User_Agend: "$_SERVER['HTTP_USER_AGENT'] . "\n";

    $Dateiname "lib/log/logfile.txt";
    $Datei fOpen($Dateiname,"a+");
    fPuts($Datei,$msg);
    fClose($Datei);

    ###########################_____Weiterleitung_____###############################

        // Userdaten in der DB enthalten, weiterleitung zur Hauptseite
        
    header ("Location: WOHIN_AUCH_IMMER.php");  
    }  else  {
        
    // Falsche Userdateneingabe, erneuter Aufruf des Formular
        
    header ("Location: index.php?fehler=1");  

    Wichtig die Daten in der DB müssen mittels md5() eingetragen werden!


    Natürlich gibt es viel was man schicker machen kann, ist ja auch nur ein Auszug vom Script sollte aber wunderbar funktionieren, wenn man es auch sein Script etwas anpasst.

    Ich füg die 3 erforderlichen Datein einfach mal an. Wirst schon das passende finden, klar sieht es mit Klassen schöner aus. Aber damals hat mir das auch gereicht!
    Angehängte Dateien Angehängte Dateien
    Geändert von Steusi (26.06.09 um 09:31 Uhr)
    smyle bedankt sich. 
    Gruß Steusi

    Sollte dir ein Tipp von mir geholfen haben, freue ich mich auch über eine kleine Bewertung.
    Und wenn ein Problem gelöst ist, markiere deinen Beitrag bitte als erledigt.
    PHP-Code:
    $fehler "dummer Tippfehler";
    echo(
    "Und ist das Programm noch so klein, es passt immer noch ein ".$fehler". rein!"); 

  6. #6
    smyle smyle ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    217
    Du hasst mir sehr geholfen
    Denn…
    …es funktioniert bis auf die Verbindung mit der Datenbank, glaube ich.

    Denn ich habe extra ein neuer Benutzer erstellt und beim anmelden, statt mich zur nächsten Seite weiter zu leiten, komme ich immer wieder auf die index.php seit, egal ob ich das Passwort richtig oder falsch angegeben habe.
    Deswegen denke ich dass die Verbindung zur DB nicht ganz stimmt.

    Hier den Code den ich angepasst habe:
    login.php

    PHP-Code:
    if(!isset($_SESSION)) {  
        
    session_start();  
    }

    include(
    'inc.php');

    $Nickname trim($_POST["Nickname"]);
    $pw trim($_POST["Passwort"]);

    // Eingegebene Date prüfen, ob diese in der Datenbank enthalten sind 
    $sql "SELECT ".   
        
    "ID, Benutzername, Passwort ".   
      
    "FROM ".   
        
    "login ".   
      
    "WHERE ".   
          
    // mysql_escape_string um SQL-Injection zu vermeiden (ungeklärt) 
        
    "(Benutzername like '".$Nickname."') AND ".   
        
    "(Passwort = '".md5($pw)."')";   


    $result mysql_query($sql);   

    if (
    mysql_num_rows($result) > 0)   
    {   
      
    // Benutzerdaten in ein Array auslesen.   
      
    $data mysql_fetch_array($result);   

    #####################_____Sessionvariabeln definieren_____####################### 

      // Sessionvariablen erstellen und registrieren aus den Arrayelementen 
      
    $_SESSION["user_id"] = $data["ID"];
      
    $_SESSION["user_nickname"] = $data["Benutzername"]; 
      
    #######################_____Login-Daten speichern_____########################### 

    // Logfile mit Informationen füllen 
    $host gethostbyaddr($_SERVER['REMOTE_ADDR']); 
    $domain explode("."$host); $domain_array count($domain)-2
    $msg =  "Benutzername: "$_SESSION["user_nickname"] . " | ";  
    $msg .= "Besuch: " date("d.m.Y H:i") . " Uhr | "
    $msg .= "IP-Adresse: " $_SERVER['REMOTE_ADDR'] . " | "
    $msg .= "Hostname: " gethostbyaddr($_SERVER['REMOTE_ADDR']) . " | "
    $msg .= "User_Agend: "$_SERVER['HTTP_USER_AGENT'] . "\n"

    $Dateiname "log/logfile.txt"
    $Datei fOpen($Dateiname,"a+"); 
    fPuts($Datei,$msg); 
    fClose($Datei); 

    ###########################_____Weiterleitung_____############################### 

        // Userdaten in der DB enthalten, weiterleitung zur Hauptseite 
        
    header ("Location: home.php");   
    }  else  { 
        
    // Falsche Userdateneingabe, erneuter Aufruf des Formular 
        
    header ("Location: index.php");     
       

    index.php

    PHP-Code:
    if(!isset($_SESSION)) { 
        
    session_start(); 

    HTML-Code:
    <form action="login.php" method="post">   
    <table border="0">   
      <tr> 
        <td>Name:</td> 
        <td><input type="text" name="Nickname" size="20" value=""></td> 
      </tr> 
      <tr> 
        <td>Kennwort:</td> 
        <td><input type="password" name="Kennwort" size="20" value=""></td> 
      </tr> 
      <tr> 
        <td colspan="2" align="center"><input type="submit" value="Login">  </td> 
      </tr>      
    </table> 
    </form>
    Und den Code meiner Datenbankverbindung:
    inc.php

    PHP-Code:
    $mysqlhost="localhost"
    $mysqluser="dbbenutzer";
    $mysqlpwd="passwort";
    $mysqldb="dbname";

     
    $connection=mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die
    (
    "Verbindungsversuch fehlgeschlagen");

    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht
    waehlen."
    ); 
    Da es nicht funktionierte habe ich eine andere Datei erstellt um zu sehen ob sich die Datenbank überhaupt verbindet und die Daten herausgelesen werden können.
    Select.php

    PHP-Code:
    echo "Erster Versuch <br>";
    require(
    "inc.php");
    mysql_query($conn);
    $sql "SELECT * FROM `login`";
    $ausgabe mysql_query($sql) or die (mysql_error());
    $erg mysql_db_query($mysqldb,$connection);
    $anzahl mysql_num_rows($ausgabe);

    echo 
    $ausgabe;
    echo 
    "<br>";
    echo 
    mysql_error();
    echo 
    "<br>";
    echo 
    "Anzahl der Datensätze: $anzahl"
    echo 
    "<br>"
    PHP-Code:
    echo "Zweiter Versuch";

    //Inhalt der inc.php

    $sql "SELECT * FROM `login`";
    $adressen_query mysql_query($sql) or die("Anfrage nicht erfolgreich");
    $anzahl mysql_num_rows($adressen_query);

    echo 
    "Anzahl der Datensätze: $anzahl";
    echo 
    "<br>";
    echo 
    $adressen_query;
    echo 
    "<br>";
    echo 
    mysql_error(); 
    Leider habe ich beim ausführen der Select Datei diese Meldungen bekommen:

    Erster Versuch:
    Resource id #4
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id #3' at line 1
    Anzahl der Datensätze: 2


    Zweiter Versuch:
    Anzahl der Datensätze: 2
    Resource id #5



    Beim ersten Versuch habe ich die inc.php Datei durch include und require eingebunden.
    Beim zweiten Versuch habe ich den Code direkt in der Select Datei hineingeschrieben.

    Da die Datensätze angezeigt werden, frage ich mich:
    Was mache ich Falsch?
    Denn es scheint als würde die Datenbank verbunden werden.
     

  7. #7
    smyle smyle ist offline Mitglied Gold
    Registriert seit
    Jun 2008
    Beiträge
    217
    Das Problem mit der Select.php Datei konnte ich lösen. ich hatte den Code falsch verwendet.
    Aber das andere Problem leider immernoch nicht
     

  8. #8
    Money Tutorials.de Gastzugang
    Hallo,
    Ich habe den selben Code aus folgender Seite und bekomme diesen Fehler: http://www.php-resource.de/tutorials...nd-mySQL,1.htm
    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\Programme\xampp\htdocs\Ordner\Ordner\Login\function.inc.php on line 27
    Auf der Zeile 27 befindet sich
    PHP-Code:
    return(mysql_num_rows($result)==1); 
    und das ist der ganze Code
    PHP-Code:
    function logged_in()
    {
     
    $sql="SELECT `ID` FROM `benutzer` WHERE `Session`='".session_id()."' LIMIT 1";
     
    $result=mysql_query($sql);
     return(
    mysql_num_rows($result)==1);

    Was ist mein Fehler?
    Übrigens ich arbeite mit der neuen Version von Xampp Lite
     

Ähnliche Themen

  1. Nach Login wieder Login, Treiberfehler ?
    Von Crazy_down im Forum Linux & Unix
    Antworten: 4
    Letzter Beitrag: 11.02.08, 00:09
  2. Antworten: 2
    Letzter Beitrag: 08.10.07, 11:38
  3. Antworten: 2
    Letzter Beitrag: 04.09.07, 23:19
  4. Antworten: 1
    Letzter Beitrag: 29.01.05, 12:11
  5. Antworten: 3
    Letzter Beitrag: 12.01.05, 21:14

Stichworte