Ankündigung

Einklappen
Keine Ankündigung bisher.

Unklarheit beim Auslesen eines Fields

Einklappen

Neue Werbung 2019

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

  • Unklarheit beim Auslesen eines Fields

    Hallo

    Ich möchte aus einer Datenbank die 3.Spalte mit dem Namen Passwot auslesen. Sie ist ein Varchar und beinhaltet einen MD5 Hash. Ich wähle das Field aus und möchte es mit dem Passwort aus einer Eingabemaske abgleichen.

    Jedoch kommt immer die else-Bediengung. Ich habe von jemanden gehört, dass ich nicht den Wert des Feldes auslese sondern sonst was. Darum bin ich mir nicht sicher, was dazwischen an Code noch rein kommt. Ich wäre um Hilfe sehr froh, da ich mich mit dem richtigen MySQL nochnicht so auskenne, ich habe bisher nur mit einer MySQL-Version eines Spieles gearbeitet, welche aber weniger komplex, also sehr einfach war. Hier der Code:

    PHP-Code:
    else if(isset($_POST['username'])) // Wenn Variable Username (im Speicher) existiert, führe Loginabfrage aus
    {
        
    $verbindung mysql_connect("localhost","samp1111","XXXXXX") or die ("Keine Verbindung zum Server möglich");
        
    mysql_select_db("samp1111") or die ("Keine Verbindung zur Datenbank möglich");    
        
    $result mysql_query("SELECT Passwort FROM Spieler WHERE Name = '$_POST['username']'");    
        
    //Hier muss ein Code rein
        
    if($result == md5($_POST['password']))      
        {
            
    $_SESSION['username'] = $_POST['username'];
        }
        else 
    // Sendet Misserfolgs-Meldung aus 
        
    {
            echo 
    startcontent();
            echo 
    title("Loginversuch");
            echo 
    '<p align=center><b>Benutzername oder Passwort falsch</b></p><meta http-equiv="refresh" content="3; URL=">';
            echo 
    endcontent();
            include 
    'templates/navlogin.tpl'
            include 
    'templates/footer.tpl';
            die; 
        }    

    MfG dUDALUS

  • #2
    Guten Morgen!

    Wenn immer den den else ZWeig gesprungen wird, scheint deine POST Variable nicht zu existieren. Sicher, dass es das Feld mit dem Namen so gibt? Ansonsten kannst du mit $result nicht den Wert auslesen. Das musst Du z.B. so machen:

    PHP-Code:
    $result mysql_query("SELECT Passwort FROM Spieler WHERE Name = '".$_POST['username']."'");

    While (
    $row mysql_fetch_array($result)){
     echo 
    "Passwort: ".$row["password"]; //Name deines Passwort-Feldes in der DB

    Weiterhin solltest Du Dir mal das Thema SQL Injection anschauen - du hast Sicherheitslücken und üblicherweise arbeitest Du nicht mit Mitgliedernamen sondern mit ID's, um Datensätze zu ermitteln (prüfst du bei einer Registrierung auch, dass kein Name doppelt eingetragen wird?).

    mfg Wolf29

    Kommentar


    • #3
      Hallo

      Vielen Dank für die freundliche Hilfe. Also zurück zum Thema. Ich habe einen Gameserver, welcher über eine MySQL Datenbank läuft. Ich rufe vom Webspace per MySQL Verbindung die Daten vom anderen Server (Beide sind lokal) ab und will sie in einem Panel darstellen.

      Folglich erübrigt sich deine Frage also, ob ich abfrage, ob der Name bereits existiert, da in dem Sinn nichts geschrieben wird. In der Datenbank arbeite ich mit AutoIncrement-IDs, ich weiss aber nicht, wie ich die möglicherwiese hier benutzen kann. Ich schau mir mal deinen Code an und meld mich wieder, danke aber.

      Hättest Du eine leicht verständliche Quelle, welche das Thema MySQL Injection genauer thematisiert ?
      MfG dUDA


      Edit:
      Ich habe das login.tpl als .txt Datei angehängt. Sie "verarbeitet" den Loginnamen und der Username aus dem Loginfenster
      Angehängte Dateien

      Kommentar


      • #4
        Hi.

        Über google findest du ne Mengez u dem Thema, z.B.:

        http://de.wikipedia.org/wiki/SQL-Injection
        http://php.net/manual/de/security.da...-injection.php
        usw.

        da in dem Sinn nichts geschrieben wird
        Was meinst du damit? Registrieren sich die Leute den gar nicht dafür? Wenn ja, prüfst Du auch, ob der Name bereits vergeben ist?

        mfg Wolf29

        Kommentar


        • #5
          Hallo

          Das Script das ich schreibe, zeigt dem User einfach die Daten an, die er auf dem Server hat. Wenn ein Name nicht existiert kann er sich auch nicht einlogen (Da das Password "" Nicht passen wird oder).

          Ich habe mal deine Zeilen reingetan und jetzt kommt der MD% Hash auch, dank dir vielmals. Wenn ich wieder an einer Stelle anstehe, melde ich mich, vielen Dank aber

          dUDA

          Edit:
          Ich habe jetzt mal die Passwortabfrage eingebaut, aber es wird immer das else ausgeführt. Hier mein aktueller Code:

          PHP-Code:
          else if(isset($_POST['username'])) // Wenn Variable Username (im Speicher) existiert, führe Loginabfrage aus
          {
              
          $verbindung mysql_connect("localhost","samp1111","xxxxxxxx") or die ("Keine Verbindung zum Server möglich");
              
          mysql_select_db("samp1111") or die ("Keine Verbindung zur Datenbank möglich");    
              
          $result mysql_query("SELECT Passwort FROM Spieler WHERE Name = '".$_POST['username']."'");
              While (
          $row mysql_fetch_array($result))
              {
                  echo 
          "Passwort: ".$row["Passwort"]; //Name deines Passwort-Feldes in der DB
              
          }      
              if(
          $row["Passwort"] == md5($_POST['password']))  
              {
                  
          $_SESSION['username'] = $_POST['username'];
              }
              else 
          // Sendet Misserfolgs-Meldung aus 
              
          {
                  echo 
          startcontent();
                  echo 
          title("Loginversuch");
                  echo 
          '<p align=center><b>Benutzername oder Passwort falsch</b></p><meta http-equiv="refresh" content="3; URL=">';
                  echo 
          endcontent();
                  include 
          'templates/navlogin.tpl'
                  include 
          'templates/footer.tpl';
                  die; 
              }

          Edit 2:
          Ich habe per Echo die beiden Strings geprüft und sie stimmen. Der Fehler liegt, nachdem ich mit dem direkten MD5 Hash getestet habe, im linken Teil der Abfrage. Ich schau grad noch, ob es evt. an der Gross- und Kleinschreibung liegen könnte, was ich aber nicht denke.

          Edit 3:
          Es geht jetzt. Ich habe eine Zwischenvariable benutzt. Vielen dank.
          dUDA

          Kommentar

          Lädt...
          X