Loginscript: Login geht nicht, trotz richtiger Zugangsdaten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Loginscript: Login geht nicht, trotz richtiger Zugangsdaten

    Hallo allerseits,

    ich habe im Web ein Loginscript aufgestöbert
    und dies ein wenig meinen Ansprüchen angepasst.

    Nun passiert folgendes:
    Der User registriert sich, wird vom Admin freigeschaltet,
    steht in der db auch richtig drin (soweit ich das sagen kann),
    loggt sich dann mit seinem Usernamen und
    Userpasswort (Testuser / 1234567) ein und
    bekommt nur die Nachricht, dass Username
    oder Passwort falsch ist.

    Ich habe mir den Code mehrfach angesehen und
    überlegt woran es liegen könnte, doch ich kann
    keinen Fehler sehen.

    PHP-Code:
    <?
    echo "<center>";

    if (isset($_POST["submit"])) {

        //wenn submit button betätigt...
        $username = $_POST["username"];
        //speichere eingegebenen Usernamen in Variable
        $passwort = md5($_POST["passwort"]);
        //speichere eingegebenes Passwort in
        //Varaible und verschlüssele es mit md5()
        $user = mysql_fetch_object(mysql_query("SELECT id, username, passwort,
    aktiv FROM benutzerdaten WHERE username='" . $username . "'"));
        //userdaten aus datenbank holen

        if ($username == "" or $passwort == "d41d8cd98f00b204e9800998ecf8427e") {

            echo "<b>Du hast nicht alle Felder ausgefüllt!</b>";
            //felder aus inhalt überprüfen, wenn leer error ausgeben (Hinweis:
            //bei passwort steht so eine zeichenfolge, weil mit md5 auch leerer
            //inhalt verschlüsselt wird

        } elseif ($user->aktiv == "0") {

            echo "<b>Dein Account muß erst noch freischaltet werden, bevor
           du dich einloggen kannst!<br>Benachrichtige bitte den Vorstand.</b>";
            //überprüfen ob account mit bestätigungslink freigeschaltet wurde,
            //wenn nicht error ausgeben

        } elseif ($username == $user->username && $passwort == $user->passwort) {

            //daten überprüfen, wenn richtig...
            $_SESSION["id"] = $user->id;
            //registriere die sesson id, mit der ID des users
            header("Location: main.php");
            //leite zu main.php weiter
            exit;
            //ab hier tu nix mehr ^^

        } else {

            //wenn nicht richtig...
            echo "<b>Du hast einen falschen Nutzernamen oder ein falsches
         Kennwort eingegeben!</b>";
            //gib einen error aus

        }
    }
    echo "</center>";
    ?>
    Die Daten die in der db stehen:
    id | username | passwort | aktiv
    25 | Testuser | fcea920f7412b5da7be0cf42b8c93759 | 1

    Vielleicht sieht einer von Euch, wo der Fehler sich versteckt. Vielleicht ist der Fehler ja schon drin gewesen,
    bevor ich an dem Script etwas verändert habe.

    Daten und Fakten vom Server (phpinfo)
    Zuletzt geändert von Skywalker031; 02.05.2009, 12:24.
    lg
    Stefan

  • #2
    Ändere die Zeile in:

    elseif ($username == $user->username && $passwort == $user->passwort)

    Auch schon $user->username und $user->passwort zur Kontrolle ausgegeben?

    Kommentar


    • #3
      Hi,

      also habe die änderung durch "&&" gemacht, aber hat sich
      nichts durch geändert, es kommt immer noch die Fehlermeldung
      das Username oder PW falsch sei.

      Was meinst du mit

      Auch schon $user->username und $user->passwort zur Kontrolle ausgegeben?
      das verstehe ich nicht.
      Ich muss auch dazu sagen, dass ich in Sachen PHP-Programmierung
      ein totaler Anfänger bin und mich noch nicht wirklich auskenne.
      lg
      Stefan

      Kommentar


      • #4
        Warum lernst du dann nicht die Grundlagen oder machst ein paar Tutorials?

        Lass dir alle Variablen, die du verwendest, mit var_dump() ausgeben und überprüfe ob sie stimmen.

        Lass dir einen eventuellen MySQL Fehler mit mysql_error() ausgeben.

        Und rück deinen Code ein, damit man sieht, was zu welcher IF-Bedingung gehört.
        Zuletzt geändert von h3ll; 02.05.2009, 10:20.

        Kommentar


        • #5
          Ich habe nun mal das mit dem var_dump()
          probiert

          PHP-Code:
          if (isset($_POST["submit"])){  
            
          //wenn submit button betätigt...  
            
          $username $_POST["username"];  
            
          //speichere eingegebenen Usernamen in Variable
            
          $passwort md5($_POST["passwort"]);  
            
          //speichere eingegebenes Passwort in Varaible und verschlüssele es mit md5()  
            
          echo "eingegebener Username:";  
            
          var_dump($username);
            echo 
          "<br>unverschl. Passwort:";
            
          var_dump($_POST["passwort"]);
            echo 
          "<br>verschl. Passwort:";
            
          var_dump($passwort);
            echo 
          "<br>";

            
          $user=mysql_fetch_object(mysql_query("SELECT id, username, passwort, aktiv 
          FROM benutzerdaten WHERE username='"
          .$username."'"));
            
          //userdaten aus datenbank holen
            
          echo "db-Fehlermeldung:";
            
          mysql_error();
            echo 
          "<br><br>"
          und bekomme nach dem Login-Versuch
          folgende Meldung:

          eingegebener Username:string(8) "Testuser"
          unverschl. Passwort:string(7) "1234567"
          verschl. Passwort:string(32) "fcea920f7412b5da7be0cf42b8c93759"
          db-Fehlermeldung:

          Sieht alles korrekt aus. Die db meldet keinen Fehler.

          Was das mit den Grundlagen angeht und den Tutorials,
          das hab ich mal vor langer Zeit gemacht, hat mir aber
          nicht wirklich geholfen.
          lg
          Stefan

          Kommentar


          • #6
            Und welche Werte liefert das Query?

            Kommentar


            • #7
              nun habe ich noch folgenden Code hinzugefügt:

              PHP-Code:
              $user=mysql_fetch_object(mysql_query
              ("SELECT id, username, passwort, aktiv 
              FROM benutzerdaten WHERE username='"
              .$username."'"));
              //userdaten aus datenbank holen
              echo "db-Fehlermeldung:";
              mysql_error();
              echo 
              "<br>";
              echo 
              "query:";
              var_dump($user);
              echo 
              "<br>"
              daraufhin kam folgende Ausgabe:
              db-Fehlermeldung:
              query:bool(false)

              was genau heisst das?
              also eine db-Fehlermeldung kam nicht,
              aber bei query eben diese "bool(false)"
              lg
              Stefan

              Kommentar


              • #8
                Da fehlt eine }. An welcher Stelle darfst du selber herausfinden. So gewöhnst du dir vielleicht, deinen Code vernünftig einzurücken.

                Kommentar


                • #9
                  Eine Klammer?

                  Das FALSE kommt hier her:
                  Liefert ein Objekt mit Eigenschaften, die den Feldern des geholten Datensatzes entsprechen, oder FALSE wenn keine weiteren Datensätze vorhanden sind.
                  Aus: http://de3.php.net/manual/de/functio...tch-object.php
                  Wir werden alle sterben

                  Kommentar


                  • #10
                    @onemorenerd:

                    Ich hab nun oben in meinem ersten Post,
                    den Code gänzlich überarbeitet, so das
                    er (hoffentlich) eingerückt ist.

                    (Nachtrag: Beim formatieren des Codes hat mir
                    dieses Tool geholfen)

                    Allerdings die } die da fehlen soll, habe
                    ich dadurch dennoch nicht gefunden.

                    Die } von
                    PHP-Code:
                    if (isset($_POST["submit"])) { 
                    endet ganz unten bei
                    PHP-Code:
                    }
                      echo 
                    "</center>";  
                    ?> 
                    die von
                    PHP-Code:
                    if ($username == "" or $passwort == 
                    "d41d8cd98f00b204e9800998ecf8427e") { 
                    wird bei
                    PHP-Code:
                    } elseif ($user->aktiv == "0") { 
                    unterbrochen und fortgesetzt

                    diese wiederum wird durch
                    PHP-Code:
                    } elseif ($username == $user->username && 
                    $passwort == $user->passwort) { 
                    erneut unterbrochen und fortgesetzt,
                    welche wiederum durch
                    PHP-Code:
                    } else { 
                    unterbrochen und fortgesetzt wird.

                    diese wird dann bei

                    PHP-Code:
                        }
                      }  
                    echo 
                    "</center>"
                    geschlossen.

                    Also wo fehlt da noch eine }?


                    @combie:

                    Und was heisst das genau?
                    Das ausser 2 Datensätzen keine in der DB sind?
                    Denn genau soviele Datensätze sind in der DB.
                    Oder das keine Datensätze zum suchen da sind?

                    ich blick da einfach nicht durch!
                    Für Euch scheint es einfach zu sein,
                    für mich jedoch ist es jedesmal erneut
                    ein echter Kampf... dabei bin ich eigentlich
                    gar nicht so schwer von Begriff... *kopfkratz*
                    Zuletzt geändert von Skywalker031; 02.05.2009, 13:06.
                    lg
                    Stefan

                    Kommentar


                    • #11
                      @combie:

                      Und was heisst das genau?
                      Das ausser 2 Datensätzen keine in der DB sind?
                      Denn genau soviele Datensätze sind in der DB.
                      Oder das keine Datensätze zum suchen da sind?
                      Nein, das heißt:
                      Deine Abfrage hat keinen Datensatz gefunden!


                      PS:
                      Und denke auch an SQL-Injections
                      Wir werden alle sterben

                      Kommentar


                      • #12
                        Ich kann da nicht mehr zuschauen.

                        PHP-Code:
                        <?php

                        if (isset($_POST['submit'])) {
                            
                        $username trim($_POST['username']);
                            
                        $passwort trim($_POST['passwort']);
                            
                            if (
                        $username == '' || $passwort == '') {
                                echo 
                        'Geben Sie Username und Passwort ein.';
                            } else {
                                
                        $sql "
                                    SELECT
                                        id, username, passwort, aktiv 
                                    FROM
                                        benutzerdaten
                                    WHERE
                                        username = '%s' AND passwort = '%s'
                                    LIMIT
                                        1
                                "
                        ;
                                
                                
                        $result mysql_query(sprintf($sqlmysql_real_escape_string($username), md5($passwort));
                                
                                if (!
                        $result) {
                                    die(
                        'Invalid query: ' mysql_error());
                                }
                                
                                
                        $row mysql_fetch_assoc($result);
                                
                                if (!
                        $row) {
                                    echo 
                        'Username oder Passwort sind nicht korrekt.';
                                } elseif (!
                        $row['aktiv']) {
                                    echo 
                        'Login muss aktiviert werden.';
                                } else {
                                    echo 
                        'Login erfolgreich.';
                                }
                            }
                        }
                          
                        ?>

                        Kommentar


                        • #13
                          Original geschrieben von Skywalker031
                          ... den Code gänzlich überarbeitet, so das er (hoffentlich) eingerückt ist.

                          Allerdings die } die da fehlen soll, habe ich dadurch dennoch nicht gefunden.
                          Dann hat wohl doch keine gefehlt. Jetzt sieht der Code aber viel übersichtlicher aus und ich seh auch auf den ersten Blick, dass ich mich bzgl. der Klammer geirrt habe. Mea culpa.

                          Du verwendest $username in der Query, prüfst aber erst danach, ob diese Variable überhaupt etwas sinnvolles enthält.
                          Code:
                          wenn Formular abgeschickt {
                              wenn alle felder ausgefüllt {
                                  Userdaten aus DB laden
                                  wenn User geladen werden konnte {
                                      wenn User aktiv {
                                          einloggen;
                                          weiterleiten;
                                      } sonst Fehlermeldung "Erst freischalten lassen";
                                  } sonst Fehlermeldung "False Eingabe";
                              } sonst Fehlermeldung "Nicht alles ausgefüllt";
                          }
                          BTW: Kommentare stehen normalerweise vor dem Code, auf den sie sich beziehen.
                          EDIT:
                          Schade, ich war zu langsam. Aber mit der besseren Absicht.
                          Zuletzt geändert von onemorenerd; 02.05.2009, 13:00.

                          Kommentar


                          • #14
                            @combie:

                            Aha, wieso findet er mit diesem Code keinen Datensatz,
                            obwohl doch 2 Datensätze vorhanden sind?

                            @h3ll:

                            Ich habe nun deinen umgeschriebenen Code
                            anstelle des alten ersetzt. Wenn man nun die
                            Seite aufruft, bekomme ich einen HTTP 500 Internen
                            Serverfehler angezeigt - sprich die Seite lässt sich
                            nicht aufrufen

                            @onemorenerd:

                            Das mit den Kommentaren, und wie der Code aufgebaut
                            ist, von wegen was, wann und wo und in welcher Reihen-
                            folge, kam nicht von mir, sondern war schon so von Anfang an.

                            @all:

                            Ich hatte im ersten Post ja schon geschrieben,
                            dass ich das Grundscript aus dem Web habe.
                            An der Index, hatte ich ausser ein paar "Echo"-Zeilen
                            nichts verändert - also die index war so schon
                            als ich sie bekommen habe.
                            Zuletzt geändert von Skywalker031; 02.05.2009, 13:03.
                            lg
                            Stefan

                            Kommentar


                            • #15
                              Original geschrieben von Skywalker031
                              [B]@combie:

                              Aha, wieso findet er mit diesem Code keinen Datensatz,
                              obwohl doch 2 Datensätze vorhanden sind?
                              Da gibts genau 2 Möglichkeiten:
                              1. In der DB steht nicht das, was du erwartest, was da drin stehen sollte.
                              2. Im Query steht nicht das, was du erwartest, was da drin stehen sollte.

                              Also eine einfache Differenz zwischen IST Zustand und Erwartungshaltung.
                              Zuletzt geändert von combie; 02.05.2009, 13:08.
                              Wir werden alle sterben

                              Kommentar

                              Lädt...
                              X