Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Login-System Probleme

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Login-System Probleme

    Hallo Zusammen,
    Ich habe neulich ein Registierungs & Login-Script programmiert.
    Allerdings schlägt der Login immer wieder fehl!
    Das HTML-Dokument, wo man Benutzername und Passwort eingibt brauch ich wohl nicht zu zeigen. Also wenn ich mich einloggen möchte dann steht da immer:"Login fehlgeschlagen!". Ich habe mich bereits 2x registiert. Funktionierte aber immernoch nicht! Die Daten gebe ich korrekt ein.
    Hier das Login-Scriptlogin_inne.php)
    PHP-Code:
    <?php
      session_start
    ();

    include(
    'config.php'); 
      
    $username mysql_real_escape_string($_POST['username']);
      
    $password mysql_real_escape_string($_POST['password']);
        
    $ergebnis mysql_query("SELECT * FROM user WHERE name = '".$_POST['username']."'");
        if(
    $username != "" AND $password != "") {
            
    $passwort md5(sha1($password));
        
    $sql mysql_query("SELECT * FROM user WHERE (passwort = '$passwort') AND (name = '$username')");
        if (
    mysql_num_rows($sql) == 1) {
        
          
    $row mysql_fetch_assoc($sql);
          
    $_SESSION['erlaubt'] = true;
          
    $_SESSION['uid'] = $row->id;
          
    $_SESSION['username'] = $username;
          
    $_SESSION['grpid'] = $row->gruppen_id;
        } 

      if(
    $_SESSION['erlaubt']) {
      
        echo 
    "Du wurdest eingeloggt!";
        
    mysql_query("UPDATE user SET ip = '".$_SERVER['REMOTE_ADDR']."' WHERE username = '".$_SESSION['username']."'");
      }
      else
      {                           
        echo 
    "Login fehlgeschlagen!";
      }      
      }
      else
     { echo 
    "Du hast ein Feld ausgelassen!";
    }
    ?>
    Registierungscriptauch hier ohne HTML-Dokument)
    PHP-Code:
    <?php
    include('config.php');
      
    $username mysql_real_escape_string($_POST['username']);
      
    $email mysql_real_escape_string($_POST['email']);
      
    $username_lower strtolower($username);
      
    $password mysql_real_escape_string($_POST['password']);
      
    $wdh $_POST['wdh'];
    $charakter $_POST["charakter"];
    $geschlecht $_POST["geschlecht"];
    $alter mysql_real_escape_string($_POST["alter"]);
    $pokemon $_POST["starterpokemon"];
    $ip $_SERVER['REMOTE_ADDR']; 
    $result mysql_query("SELECT * FROM user WHERE name = '".$username_lower."'");
    $num_rows "mysql_num_rows($result)";
    $emailaddy mysql_query("SELECT * FROM user WHERE mail = '".$email."'");
    $email_rows "mysql_num_rows($emailaddy)";
      if((
    $username == "") || ($password == "") || ($wdh == ""))
      {
        echo 
    "Du hast eines der Felder ausgelassen!";
      }
      else
      {
        if(
    $password != $wdh)
        {
          echo 
    "Die Passwörter stimmen nicht überein.";
        }

        elseif(
    $num_rows != 0)
            {
            echo 
    "Der Benutzername existiert schon!";
            }
                elseif(
    $email_rows != 0)
            {
            echo 
    "Die E-Mail Adresse wird schon benutzt!";
            }
        else
        {
          
    $passwort md5(sha1($password));
          
    $sql "INSERT INTO game_user " .
    "VALUES ('', '$username', '$username_lower', '$email', '$passwort', '$ip', 'NOW()', '', '$geschlecht', '$alter', '', '$pokemon', '1', '10', '', '10000', '0', '$charakter', '10', '1', '', '1', '0', '')";
    if (
    mysql_query($sql)) {
     echo 
    "Registierung erfolgreich! ";
    } else {
    echo 
    "Es trat ein Fehler auf!";
    }
    $sql1 "INSERT INTO game_items " .
    "VALUES('', '$name', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0')";
    if (
    mysql_query($sql1)) {
    echo 
    "Nun kannst du dich einloggen!";
    }
    }
    }
    ?>
    Vielen Dankim Vorraus
    Gruß vTasker

  • #2
    1. In if-Blöcke kommt eine Ausgabe rein, die dir mitteilt, das der Block ausgeführt wurde.
    2. if-Anweisungen bekommen einen else-Block, der dir mitteilt, warum die Bedingung der if-Anweisung nicht erfüllt ist. Beispiel:
      PHP-Code:
      if (mysql_num_rows($sql) == 1) {
        
      // ...
      }  else {
        
      printf("<pre>Eine Zeile erwartet aber %d Zeilen bekommen</pre>"mysql_num_rows($sql));
        
      // TODO: Alle Zeilen des Ergebnisses ausgeben


    Damit solltest du den Fehler selbst finden können.

    Übrigens: Das Ergebnis einer kryptographischen Hash-Funktionen an eine andere kryptographische Hash-Funktionen zu übergeben ist Scheiße. Das hat genau den gegenteiligen Effekt zu dem den du erreichen willst.
    Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

    Kommentar


    • #3
      Versteh ich nicht?
      Bitte ein bisschen genauer.
      Tut mir Leid, bin noch ein Anfänger :P.

      Kommentar


      • #4
        Okay ich habe jetzt md5(sha1($password)) durch sha1($password) ersetzt. Das gleiche gilt auch im Registierungs-Script.
        Allerdings funktioniert es immernoch nicht.

        Kommentar


        • #5
          Zitat von vTasker Beitrag anzeigen
          Okay ich habe jetzt md5(sha1($password)) durch sha1($password) ersetzt. Das gleiche gilt auch im Registierungs-Script.
          Dann musst du dich natürlich neu registrieren. Danach diesen Block:

          PHP-Code:
              if (mysql_num_rows($sql) == 1) {    

                
          $row mysql_fetch_assoc($sql);
                
          $_SESSION['erlaubt'] = true;
                
          $_SESSION['uid'] = $row->id;
                
          $_SESSION['username'] = $username;
                
          $_SESSION['grpid'] = $row->gruppen_id;
              } 
          ersetzen durch

          PHP-Code:
              if (mysql_num_rows($sql) == 1) {
                
          printf("<pre>Es wurde genau der Datensatz gefunden, der erwartet wurde.</pre>");
                
          $row mysql_fetch_assoc($sql);
                
          $_SESSION['erlaubt'] = true;
                
          $_SESSION['uid'] = $row->id;
                
          $_SESSION['username'] = $username;
                
          $_SESSION['grpid'] = $row->gruppen_id;
              } else {
                
          printf('<pre>Eine Zeile erwartet aber %d Zeilen bekommen. Gefundene Datensätze:</pre>'mysql_num_rows($sql));
                while (
          $record mysql_fetch_assoc($sql)) {
                  
          var_dump($record);
                  echo 
          '<br/>';
                }
              } 
          Dann einloggen und schauen was ausgegeben wird. Dann versuchen zu verstehen was ausgegeben wird und warum.
          Meinungen, die ich geäußert habe, sind nicht notwendigerweise meine eigenen. Abweichungen von der deutschen Rechtschreibung unterliegen dem Urheberrecht, dürfen aber unter den Bedingungen von verwendet werden

          Kommentar


          • #6
            Jetzt steht:
            Eine Zeile erwartet aber 0 Zeilen bekommen. Gefundene Datensätze:

            Login fehlgeschlagen!
            also klappt es immernoch nicht Ich habe es schon mit verschiednene Accounts versucht.

            Kommentar


            • #7
              PHP-Code:
              $num_rows "mysql_num_rows($result)";
              $emailaddy mysql_query("SELECT * FROM user WHERE mail = '".$email."'");
              $email_rows "mysql_num_rows($emailaddy)"
              Ist das Absicht das da 2 Funktionsaufrufe als Strings gespeichert werden um die doppelte Registrierung zu ermöglichen?

              Eine Zeile erwartet aber 0 Zeilen bekommen.
              Muss man dir alles vorkauen? mysql_num_rows() liefert 0, du erwartest aber 1, nächster Schritt ist deinen SQL Befehl ausgeben zu lassen um herauszufinden WARUM es bei korrekten Daten 0 liefert und nicht 1.

              Bzw hier ist der Fehler mehr als offensichtlich weil bei der Registrierung gar keine Daten in die Tabelle "user" eingetragen werden...
              "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

              Kommentar


              • #8
                Ohh nein eigentlich nciht.
                Ich entferne mal die Zeile.
                @Oben: Doch, es werden Daten eingetragen.
                $sql = "INSERT INTO game_user " .
                "VALUES ('', '$username', '$username_lower', '$email', '$passwort', '$ip', 'NOW()', '', '$geschlecht', '$alter', '', '$pokemon', '1', '10', '', '10000', '0', '$charakter', '10', '1', '', '1', '

                Kommentar


                • #9
                  na kommt doch langsam vorwärts ..

                  aber dein SQL sieht merkwürdig aus ...

                  $sql = "INSERT INTO game_user " .
                  "VALUES ('', '$username', '$username_lower', '$email', '$passwort', '$ip', 'NOW()', '', '$geschlecht', '$alter', '', '$pokemon', '1', '10', '', '10000', '0', '$charakter', '10', '1', '', '1', '

                  sollte wohl eher

                  PHP-Code:

                  $sql
                  ="INSERT INTO game_user () VALUES ".
                  "( NULL, '".$username."', '".$username_lower."', '".$email."' , '".$passwort."',".
                  " '".$ip."', now(), NULL, '".$geschlecht."', '".$alter."' , NULL".
                  ", '".$pokemon."' , '1', '10, NULL, '10000', '0', '".$character."' , '10', '1', NULL, '1', NULL ) "
                  lauten - es sei denn deine '' - Spalten haben irgendeine wichtige Bedeutung und brauchen unbedingt leere Strings ...

                  besonders aber die Funktion now() darf nicht in Apostrophe, sonst versucht mysql den text "now()" in ein Datumsfeld zu schreiben, was dort wohl zu 0000-00-00 wird ....
                  "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                  Kommentar


                  • #10
                    Zitat von vTasker Beitrag anzeigen
                    @Oben: Doch, es werden Daten eingetragen.
                    Du willst uns veräppeln oder du bist blind...

                    Registrierung:

                    Code:
                    INSERT INTO game_user
                    Bzw hier ist der Fehler mehr als offensichtlich weil bei der Registrierung gar keine Daten in die Tabelle "user" eingetragen werden...
                    Im Klartext: Wenn du deine User in game_user einträgst, dann aber die Tabelle user abfragst kann das nichts werden...

                    Also dringend bitte hier entlang: http://www.php.de/php-einsteiger/489...nsammlung.html auch weil du offenbar die Methoden des Debugging die hier vorgeschlagen wurden nicht verstehst was dnenoch absolute Grundlagen sind.
                    "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                    Kommentar


                    • #11
                      Aber in der Datenbank sind die Daten doch da, die bei der Registierung eingegeben wurden. Bei der Registierung läuft nichts schief.

                      Kommentar


                      • #12
                        dann nutz bitte auch die RICHTIGE Tabelle um die User abzugleichen beim Login ...
                        "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                        Kommentar


                        • #13
                          Registrierung
                          INSERT INTO game_user

                          Login
                          SELECT * FROM user

                          Da sollte dir was auffallen, zumal du schon mal darauf hingewiesen wurdest!

                          Kommentar


                          • #14
                            Zitat von vTasker Beitrag anzeigen
                            Aber in der Datenbank sind die Daten doch da, die bei der Registierung eingegeben wurden. Bei der Registierung läuft nichts schief.
                            Kannst du lesen?

                            Du wurdest mittlerweile 3 mal auf das Problem hingewießen.

                            Wär ich n Mod wär der Thread jetzt dicht... das ist doch nicht zu glauben.
                            "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                            Kommentar


                            • #15
                              Upps ja danke für den Tipp ich werd es morgen versuchen .

                              Kommentar

                              Lädt...
                              X