tutorials.de Buch-Aktion 05/2012
Seite 1 von 4 1234 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
48
ZUGRIFFE
2416
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    alexbot alexbot ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Ort
    Bottrop (NRW)
    Beiträge
    28
    Hallo,
    ich arbeite gerade fieberhaft an einen Login-System mit Session, nach dem Vorbild eines Tutorials von hier.
    Nun bin ich aber mit meinem Latein am Ende.
    Alle Datein funktionieren nis auf die Datei login.php. Die anderen sind ja auch nicht so schwer.
    1. Weiß ich gar nicht warum nichts geht, wenn ich die Passwortabfrage starte läuft login.php durch und formular.php sagt falsche eingabe.
    2. Hab ich mir die ID die über mysql_num_rows mal per echo anzeigen lassen, sie ist null, obwohl ich in php myadmin sehen kann das sie mindestens 1 ist. die Datenbank und der Zugriff funktionieren auch einwandfrei.
    Ich weiß nun wirklich net woran es liegt ich hab schon mindesten 5 Stunden alle Tricks probiert die ich kenn vielleicht könnt ihr mir ja helfen.?

    Hier mein login.php die x stehn für zeichen die net bekannt gebe
    PHP-Code:
    <?php
    session_start
    ();
      if (
    $_SERVER["HTTP_HOST"] == "127.0.0.1") {
        
    $server "localhost";
        
    $datenbank "xx-xxxxxxxx-xx";
        
    $benutzer "root";
        
    $passwort "";
      }
      else {
        
    $server "xxxxxxx.xxxxxxxxxxx.xxxxxxxxx.de";
        
    $datenbank "xx_xxxxxxxxxx_xx_2";
        
    $benutzer "ftpxxxxxx";
        
    $passwort "xxxxxxxxx";
      }
     
    $verbindung mysql_connect($server$benutzer$passwort) or die("Keine Verbindung zur Datenbank!");
      if(!
    mysql_select_db($datenbank$verbindung)) {die("Datenbank konnte nicht ausgewählt werden!");}
      
    $sql ="SELECT".
              
    "ID, Benutzer, Vorname, Nachname, Kennwort".
            
    "FROM".
            
    "otb_infologin".
            
    "WHERE".
            
    "(Benutzer like '".$_REQUEST["coname"]."')AND".
            
    "(Kennwort ='".md5 ($_REQUEST["pass"])."')";
      
    $result =mysql_query ($sql);
      if(
    mysql_num_rows($result) > 0)
      }
            
    $data=mysql_fetch_assoc ($result);
            
    $_SESSION["user_id"] =$data["ID"];
            
    $_SESSION["user_benutzer"] = $data["Benutzer"];
            
    $_SESSION["user_vorname"] = $data["Vorname"];
            
    $_SESSION["user_nachname"] = $data["Nachname"];
            
    header ("Location: intern.php");
            }
            else
            {
            
    header ("Location: formular.php?fehler=1");
            }
            echo 
    mysql_error();
            
    ?>
     

  2. #2
    Avatar von Mark
    Mark Mark ist offline Mod | Cinema4D
    tutorials.de Moderator
    Registriert seit
    Aug 2003
    Ort
    Vienna:Austria
    Beiträge
    8.123
    Blog-Einträge
    10
    Hi Alexbot,

    Herzlich Willkommen auf tutorials.de!

    Nach
    PHP-Code:
    if(mysql_num_rows($result) > 0
    ist die geschweifte Klammer falsch herum ... könnte das bereits der Fehler sein?

    Liebe Grüße,
    Mark.
     
    ... bitte keine C4D-Fragen per PN ...
    +++ OUT NOW for CINEMA4D:
    Al'em - Free Align Plugin + Shaderpack Vol 1 - Free Shaders
    + Roll-It v1.0 - Free Roll Plugin + Egg-Objekt - Free Egg Primitive +++
    eggtion.net

  3. #3
    Registriert seit
    Oct 2005
    Ort
    Nottuln
    Beiträge
    1.282
    Dein Query hat voll den falschen Syntax:

    Probiers so:
    PHP-Code:
    $sql 'SELECT 
                  `ID`, `Benutzer`, `Vorname`, `Nachname`, `Kennwort` 
              FROM 
                  `otb_infologin` 
              WHERE 
                  `Benutzer` = "'
    .$_POST['coname'].'" 
              AND 
                  `Kennwort` = "'
    .md5($_POST['pass']).'" 
              LIMIT 1'

    //edit
    Ich würde es machen mit `Benutzer` = ..., da das genauer ist. Der Name sollte ja eindeutig sein.
    Das Limit 1 am Ende kannst du rausnehmen, wenn es jeden Benutzernamen mehrmals geben darf

    Und du schreibst folgendes so:
    $result = mysql_query ($sql)
    lasse die Leerzeichen wech:
    $result = mysql_query($sql);


    Der Rest ist korrekt


    //edit2
    ja ok, das eine da. Mit der geschweiften Klammer. Musste mal gucken, wo die richtig beendet wird
    Geändert von Kalma (20.04.07 um 20:49 Uhr) Grund: Query eingerückt
     
    Nein, ich bin kein Programmier-könig. Aber Spaß macht es trotzdem!

  4. #4
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    Muss Kalma da mal widersprechen.

    Die Syntax des Queries ist in Ordnung. Auch Like könnte man nutzen, da es syntaktisch genau wie = arbeitet, solange keine WildCards verwendet werden. (Eben _ bzw. %)

    Die Verkettung von $sql ist zwar nicht notwendig, kann man aber durchaus trotzdem benutzen. Es ist also kein Fehler, sondern eine reine Formsache.

    Allerdings fehlen mir da einige Leerzeichen bei der Verkettung:
    PHP-Code:
    $sql ="SELECT".
              
    "ID, Benutzer, Vorname, Nachname, Kennwort".
            
    "FROM".
            
    "otb_infologin".
            
    "WHERE".
            
    "(Benutzer like '".$_REQUEST["coname"]."')AND".
            
    "(Kennwort ='".md5 ($_REQUEST["pass"])."')";
    # Ausgabe:
     
    SELECTIDBenutzerVornameNachnameKenntwortFROMotb_infologinWHERE # usw. 

    Ansonsten mal schön mysql_error() benutzen bzw. ggf. error_reporting() hochstellen.
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  5. #5
    Registriert seit
    Oct 2005
    Ort
    Nottuln
    Beiträge
    1.282
    Aber ist eigentlich doch schreibarbeit

    Ich kenns so wie von mir genannt.. Probierne kann ja nicht schaden :P
     
    Nein, ich bin kein Programmier-könig. Aber Spaß macht es trotzdem!

  6. #6
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    Zitat Zitat von Kalma Beitrag anzeigen
    Aber ist eigentlich doch schreibarbeit

    Ich kenns so wie von mir genannt.. Probierne kann ja nicht schaden :P
    Ich würde sagen, es ist einfach eine Frage des Stils, genauso wie bei den geschweiften Klammern:

    PHP-Code:
    if(xxx) {
    # do sth
    }

    if(
    xxx)
    {
      
    #do sth
    }

    if(
    xxx)
      {
        
    #do sth
      

    Alle syntaktisch korrekt, aber alle verschiedene Stile sozusagen. Alles eine Frage des Geschmacks würde ich sagen und wie man es persönlich vorzieht bzw. übersichtlicher empfindet...

    Alles natürlich auf eigene Projekte bezogen... Bei größeren Projekten sollte man sich natürlich an die Richtlinien halten bzw. an die vorgegebenen Dinge
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  7. #7
    alexbot alexbot ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Ort
    Bottrop (NRW)
    Beiträge
    28
    Danke für eure Antworten.
    Aber funktionieren tut es trozdem nicht.
    In den Kommentaren, die jeweils unter den echos stehen, seht ihr die Ausgabe des jeweiligen Echos.
    Der Fehler tritt meiner Meinung nach auf weil php die IF-Schleife unten nicht aufrufen kann, da $hollid =0 ist, was aber nicht sein dürfte, da mindestens ein Eintrag in der Datenbank ist und ID mit Not Null definiert ist. so kann das Programm ja nur die ELSE - Anweisung ausführen und im formular.php schreiben ungültiger Login.
    Also irgendein Bock ist darin und ich weiß nicht wie ich den daraus bekomme.
    Unter mysql_error() gibt es hierbei keine Meldung.
    Bitte Versucht weiter mir zu helfen
    lieber Gruß Alex

    @Felix Jacobi, Danke das mit den Freizeichen war auch son Ding das ich übersehen hatte sieht jetzt ja ganz gut aus. Danke , und die Klammer bei der IF-Schleife hab ich ausversehen hier so gesetzt im script war die richtig rum.

    PHP-Code:
    $sql ="SELECT ".
              
    "ID, Benutzer, Vorname, Nachname ".
            
    "FROM ".
            
    "otb_infologin ".
            
    "WHERE ".
            
    "(Benutzer = '".$_REQUEST["coname"]."') AND ".
            
    "(Kennwort = '".md5 ($_REQUEST["pass"])."')";
      echo 
    $sql;
      
    //SELECT ID, Benutzer, Vorname, Nachname FROM otb_infologin WHERE (Benutzer = '') AND (Kennwort = 'd41d8cd98f00b204e9800998ecf8427e')
      
    $result =mysql_query($sql);
      echo 
    $result;
      
    //Resource id #3
      
    $hollid=mysql_num_rows($result);
      echo 
    $hollid;
      
    //0
      
    if($hollid 0
      {
            
    $data=mysql_fetch_assoc($result);
            
    $_SESSION["user_id"] =$data["ID"];
            
    $_SESSION["user_benutzer"] = $data["Benutzer"];
            
    $_SESSION["user_vorname"] = $data["Vorname"];
            
    $_SESSION["user_nachname"] = $data["Nachname"];
            
    header ("Location: intern.php");
            } 
            else 
            { 
            
    header ("Location: formular.php?fehler=1"); 
            } 
            echo 
    mysql_error(); 

            
    ?> 
     

  8. #8
    Registriert seit
    Oct 2005
    Ort
    Nottuln
    Beiträge
    1.282
    Kann man mysql error so anwenden?


    Mach doch mal so:
    PHP-Code:
    $result mysql_query($sql) or die(mysql_error()); 
     
    Nein, ich bin kein Programmier-könig. Aber Spaß macht es trotzdem!

  9. #9
    alexbot alexbot ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Ort
    Bottrop (NRW)
    Beiträge
    28
    @Kalma
    hab das so gemacht wie du sagst, trotzdem bekomm ich nur die echos und kein error, also scheint da an der query abfrage ja nix zu sein.
    Aber könnt ihr mir nicht vielleicht sagen, woran es liegt das bei der mysql_num_rows abfrage der wert null ist statt 1 wie er sein sollte?
    gruß alex
     
    Nichts ist so wie es Scheint!
    http://www.skullbook.de

  10. #10
    Matze202 Matze202 ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Beiträge
    81
    Zitat Zitat von Kalma Beitrag anzeigen
    Kann man mysql error so anwenden?


    Mach doch mal so:
    PHP-Code:
    $result mysql_query($sql) or die(mysql_error()); 
    @Kalma: Jepp genau so

    @all

    Und dann noch nen Tipp, an alle die Login-Systeme erstellen wollen, vergesst nicht, eine $_SESSION mit einem User-eigenen Code zu übergeben, der sich bei jedem Loginversuch ändert, denn damit könnt ihr dies dann etwas.

    PHP-Code:
    if($_SESSION['code'] == NULL){
        
    $_SESSION['code'] = md5(123456789+time());
        
    $smarty->assign("code"$_SESSION['code']);
    }else{
        
    $smarty->assign("code"$_SESSION['code']);

    Die Zahl 123456789 könnt ihr entweder selbst verändern oder durch ein Random automatisch festlegen lassen.

    Den SESSION-Code übergebt ihr einfach noch in dem Formular mit einem HIDDEN-Feld, welches ja hoffentlich auf POST eingestellt ist.

    Dann überprüft ihr, ob die $_SESSION[code] und die $_POST['code'] den selben Inhalt haben. Wenn ja, dann wertet ihr die die restlichen Formular Daten aus, wenn nein, dann könnt ihr gleich eine Fehlermeldung zurückgeben, da der User (oder warschein Bot) verwendete nicht das eigentliche Loginformular.

    Direkt nach dem Auswerten könnt ihr die $_SESSION['code'] wieder vernichten, so dass wenn die Zugangsdaten falsch waren, der User sofort einen neuen Code erhält.

    Dies machst du mit:

    PHP-Code:
    unset($_SESSION['code']); 
    Dabei ist aber noch zu beachten, dass du die Session nur innerhalb eine Subdomain nutzen kannst. Also die $_SESSION['code'] unter www.deinedomain.de vergeben und unter login.deinedomain.de auswerten geht leider nicht.

    Gruß Matze202.

    Zitat Zitat von alexbot Beitrag anzeigen
    @Kalma
    hab das so gemacht wie du sagst, trotzdem bekomm ich nur die echos und kein error, also scheint da an der query abfrage ja nix zu sein.
    Aber könnt ihr mir nicht vielleicht sagen, woran es liegt das bei der mysql_num_rows abfrage der wert null ist statt 1 wie er sein sollte?
    gruß alex
    Hi @alexbot,

    Der wert ist nur NULL, wenn er keinen passenden Eintrag gefunden hat.

    Gruß Matze202.
     

  11. #11
    alexbot alexbot ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Ort
    Bottrop (NRW)
    Beiträge
    28
    @matze
    das versteh ich ja aber er ist auch null wen er einen passenden eintrag gefunden haben sollte. ich weiß net irgedwas stimmt da nicht und ich weiß net was.
     
    Nichts ist so wie es Scheint!
    http://www.skullbook.de

  12. #12
    Matze202 Matze202 ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Beiträge
    81
    @alexbot

    Zwischen sollen und haben ist leider ein großer Unterscheid.

    Dein Passwort hast du aber schon mit vor dem Speichern in der Datenbank mit md5 verschlüsselt oder?

    Weil wenn dies nicht der fall sein sollte, dann ist es auch kein Wunder, dass er nichts findet, da du ja das Passwort bei der Abfrage mit md5 verschlüsselst.

    Weshalb arbeitest du den eigentlich mit dem REQUEST?

    Aus Sicherheitsgründen würde ich bei Logins nur mit POST und SESSION arbeiten, da diese Inhalte nicht einfach mit der Adresszeile weitergegeben bzw. eingegeben werden können.

    Mit folgendem kannst du dir übrigens das gesamte Array ausgeben lassen:

    PHP-Code:
    echo nl2br(print_r($_POSTtrue)); 
    Ich habe dir noch dein Script mal so überarbeitet, wie ich es verwenden würde:

    PHP-Code:
    $sql ="SELECT ID, Benutzer, Vorname, Nachname FROM otb_infologin WHERE
            Benutzer = '"
    .$_POST['coname']."' AND  
            Kennwort = '"
    .md5 ($_REQUEST['pass'])."' LIMIT 1";
      echo 
    $sql;
      
    $result mysql_query($sql) OR DIE (mysql_error());
      echo 
    $result;
      
    $data=mysql_fetch_assoc($result);
      if(
    $data['ID'] != NULL
      {
            
    $_SESSION["user_id"] = $data["ID"];
            
    $_SESSION["user_benutzer"] = $data["Benutzer"];
            
    $_SESSION["user_vorname"] = $data["Vorname"];
            
    $_SESSION["user_nachname"] = $data["Nachname"];
            
    header ("Location: intern.php");
            } 
            else 
            { 
            
    header ("Location: formular.php?fehler=1"); 
            } 
            
    ?> 
    Die HEADER dürften aber nicht funktionieren, solange du davor noch die ECHO´s hast, da diese an vorher keine andere Ausgabe an den Browser erlauben.

    Gruß Matze202.
    Geändert von Matze202 (21.04.07 um 12:46 Uhr)
     

  13. #13
    alexbot alexbot ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Ort
    Bottrop (NRW)
    Beiträge
    28
    @Matze danke, ich glaub du hast grad meinen Fehler gefunden, denn genau diese md5 verschlüsselung hab ich nicht vorgenommen, sondern das passwort so wie auch die anderen benutzer information einfach in phpmyadmin erstellt. kennst du einen methode wie ich so auch das passwort md5 verschlüsseln kann ohne das direkt mit php zu machen?
    gruß alex
     
    Nichts ist so wie es Scheint!
    http://www.skullbook.de

  14. #14
    Matze202 Matze202 ist offline Mitglied Silber
    Registriert seit
    Jul 2005
    Beiträge
    81
    @alexbot,

    du wirst leider das Passwort mit md5() verschlüsselt abspeichern müssen, dazu lässt du es dir einmal anzeigen:

    PHP-Code:
    echo md5('deinpasswort'); 
    dann trägst du es in die Datenbank ein und schon kannst du das verschlüsselte Passwort überprüfen.

    Vergiss aber nicht, bei der Registration auch das Passwort verschlüsselt einzutragen, sonst haben deine User genau das selbe Problem.

    md5 ist übrigens eine Art der Verschlüsselung, welche nicht direkt entschlüsselt werden kann, sondern man nur im Verschlüsselten Modus vergleichen kann.

    Gruß Matze202.
     

  15. #15
    alexbot alexbot ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Ort
    Bottrop (NRW)
    Beiträge
    28
    @ matze hab grad gefunden wie ich die md5 auch in phpmyadmin hinbekomme

    Kann ich denn die Funtion des Feldes Kennwort denn schon im vorhinein auf md5 stellen oder geht das nur wenn ich ne neue Zeile zu tabelle hinzufüge
     
    Nichts ist so wie es Scheint!
    http://www.skullbook.de

Ähnliche Themen

  1. [PHP/mySQL] Login-System mit Sessions
    Von xytrax im Forum PHP
    Antworten: 4
    Letzter Beitrag: 03.05.07, 22:34
  2. Login System Mysql
    Von dandre im Forum PHP
    Antworten: 2
    Letzter Beitrag: 14.04.07, 14:57
  3. Mysql fehler im login system
    Von LiVe im Forum PHP
    Antworten: 2
    Letzter Beitrag: 18.09.05, 13:23
  4. Antworten: 9
    Letzter Beitrag: 01.09.04, 17:41