Ingo: Variablen vergleichen

Hallo Leute,

hab da ein Problen, ich nehme eine Varible aus einem Fromularfeld namens "ticket" und hole ein gespeichertes Wort oder Zahl aus der DB namens "pass" soweit gso gut, nun möchte ich beide auf übereinstimmung prüfen und genau da liegt mein Problem.
Ich gebe ins Formularfeld 123 ein und in der DB steht 512 er sagt mir alles OK

$result = mysql_query("SELECT pass,domain FROM kunden WHERE domain = '$domain' ");
   $row = mysql_fetch_assoc($result) OR die (mysql_error());
    {
    if(($row['pass']) == $ticket) {
        $error = "Sie haben kein Passwort / keine Ticket-Nr. angegeben!";
     }
     print "Alles OK";
     print $ticket;
     print $row['pass'];

Wo verdammt ist da ein Fehler, bin über jede Hilfe Dankbar,
Gruß Ingo

  1. n'abend,

    schau dir mal mysql_real_escape_string() an

    $result = mysql_query("SELECT pass,domain FROM kunden WHERE domain = '$domain' ");

    Bist du sicher, dass du das »OR die()« an der richtigen Stelle hast?

    $row = mysql_fetch_assoc($result) OR die (mysql_error());
        {

    woher kommt $ticket? warum sind da klammern um »$row['pass']«?

    if(($row['pass']) == $ticket) {

    Du merkst dir den Fehler also in einer Variablen, gibst ihn hier aber nicht aus?

    $error = "Sie haben kein Passwort / keine Ticket-Nr. angegeben!";
         }

    Die folgenden Zeilen werden auch ausgeführt, wenn ein Fehler aufgetreten ist.

    print "Alles OK";
         print $ticket;
         print $row['pass'];

    weiterhin schönen abend...

    --
    Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
    1. n'abend,

      schau dir mal mysql_real_escape_string() an

      $result = mysql_query("SELECT pass,domain FROM kunden WHERE domain = '$domain' ");
      Bist du sicher, dass du das »OR die()« an der richtigen Stelle hast?
         $row = mysql_fetch_assoc($result) OR die (mysql_error());
          {
      woher kommt $ticket? warum sind da klammern um »$row['pass']«?
          if(($row['pass']) == $ticket) {
      Du merkst dir den Fehler also in einer Variablen, gibst ihn hier aber nicht aus?
              $error = "Sie haben kein Passwort / keine Ticket-Nr. angegeben!";
           }
      Die folgenden Zeilen werden auch ausgeführt, wenn ein Fehler aufgetreten ist.
           print "Alles OK";
           print $ticket;
           print $row['pass'];

      weiterhin schönen abend...

      Hallo,

      soll ja nur ein auszug sein: ticket kommt aus dem Formularfeld einer Vorgängerseite, steht aber alles in meinem Text. Ich habe geschriebn für Hilfe wäre ich dankbar nicht für nicht lesen und diskriminieren.

      Danke

      1. n'abend,

        soll ja nur ein auszug sein: ticket kommt aus dem Formularfeld einer Vorgängerseite, steht aber alles in meinem Text.

        Da der Text nicht beschreibt auf welche Art du diese Variable mit Inhalt versiehst, ist das eine berechtigte Frage. Nur all zu oft liegen derartige Probleme in fehlerhaft initialisierten Variablen begründet.

        Ich habe geschriebn für Hilfe wäre ich dankbar nicht für nicht lesen und diskriminieren.

        Ich Diskriminiere nicht. Solltest du das herausgelesen haben, möchtest du meine Einwürfe gegebenenfalls anders interpretieren. Ich habe deinen Code beäugt und mit Hinweisen und Fragen versehen, die es von dir zu beantworten gilt. Ich weise dich auf mögliche Fehlerquellen hin - ich behebe sie aber nicht für dich. Würde ich dir diese Arbeit abnehmen, wärst du übermorgen mit einem ähnlichen Problem wieder hier, was dem Gedanken »Hilfe zur Selbsthilfe« irgendwie nicht dienlich wäre.

        weiterhin schönen abend...

        --
        Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
        sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
        1. n'abend,

          soll ja nur ein auszug sein: ticket kommt aus dem Formularfeld einer Vorgängerseite, steht aber alles in meinem Text.

          Da der Text nicht beschreibt auf welche Art du diese Variable mit Inhalt versiehst, ist das eine berechtigte Frage. Nur all zu oft liegen derartige Probleme in fehlerhaft initialisierten Variablen begründet.

          Ich habe geschriebn für Hilfe wäre ich dankbar nicht für nicht lesen und diskriminieren.

          Ich Diskriminiere nicht. Solltest du das herausgelesen haben, möchtest du meine Einwürfe gegebenenfalls anders interpretieren. Ich habe deinen Code beäugt und mit Hinweisen und Fragen versehen, die es von dir zu beantworten gilt. Ich weise dich auf mögliche Fehlerquellen hin - ich behebe sie aber nicht für dich. Würde ich dir diese Arbeit abnehmen, wärst du übermorgen mit einem ähnlichen Problem wieder hier, was dem Gedanken »Hilfe zur Selbsthilfe« irgendwie nicht dienlich wäre.

          weiterhin schönen abend...

          Hallo,

          dann nehme ich an Du bist ein Feiner!

          hier noch einmal in geänderter Form und das ich den Fehler in einer Variable speichere hat seine Richtigkeit da dieser an einer bestimmten Position angezeigt wird.
          Die Variable die übernommen(aus Formularfeld) kommt richtig an und die aus der DB ebenfalls.
          Formular 123 , BD 512 aber irgend warum werden beide nicht miteinander verglichen warum? Das war meine Frage.

          Code:
           if(isset($_POST['register']))
            {
            $ok = 1;
            if ($ticket == "" ) {$ok = 0;
                $error = "Sie haben kein Passwort / keine Ticket-Nr. angegeben!";
             }
            if ($domain == "" ) {$ok = 0;
                $error = "Sie haben keinen Domainnamen angegeben!";
             }
            } // Hier wird die IF-Bedingung von oben geschlossen
            if($ok)
             {
             $result = mysql_query("SELECT pass,domain FROM kunden WHERE domain = '$domain' ");
             while($row = mysql_fetch_array($result))
              {
              if($row['pass'] == $ticket) { $ok = 0;
               $error = "Sorry, Ihre Eingabe stimmt leider nicht!";
               }
                  print "Alles OK";
              }
          }
          else
          {
          ?><blink><? print $error; ?></blink></TD>weitere HTML Tags

          Gruß Ingo

          1. n'abend,

            dann nehme ich an Du bist ein Feiner!

            ein feiner Pinkel?

            Die Variable die übernommen(aus Formularfeld) kommt richtig an und die aus der DB ebenfalls.

            Gibt es zu einer Domain mehrere Datensätze?

            Formular 123 , BD 512 aber irgend warum werden beide nicht miteinander verglichen warum? Das war meine Frage.

            Siehe vorherige Frage. Wenn es mehrere Datensätze gibt, musst du das entsprechend behandeln.

            $result = mysql_query("SELECT pass,domain FROM kunden WHERE domain = '$domain' ");
               while($row = mysql_fetch_array($result))
                {

            Stimmt das »==« an dieser Stelle? Also willst du den Fehler gefunden haben, wenn pass (aus der Datenbank) und ticket (aus der Benutzereingabe) übereinstimmen?

            if($row['pass'] == $ticket) { $ok = 0;
                 $error = "Sorry, Ihre Eingabe stimmt leider nicht!";
                 }
                    print "Alles OK";
                }

            füge doch bitte überall echo-statements (var_dump()) ein, um die jeweiligen Variablen Inhalte auszugeben, damit man überhaupt mal sieht, was da ganz konkret funktioniert.

            Warum fragst du das Ticket eigentlich nicht direkt in der SQL-Query mit ab? Ich sehe hier keinen Grund, der es nötig machen würde alle Daten zu einer Domain zu laden. Hierdurch würde auch die Datenbank den Vergleich (und die Optimierung) übernehmen:

            $res = mysql_query( 'SELECT 1  
                FROM kunden  
               WHERE domain = "'. mysql_real_escape_string( $domain ) .'"  
                 AND pass = "'. mysql_real_escape_string( $ticket ) .'"' );  
              
              
            if( !$res || !mysql_num_rows($res) )  
            {  
              // es konnte kein Datensatz gefunden werden  
            }  
            else  
            {  
              // wir haben einen Datensatz  
            }
            

            mysql_real_escape_string() dient dazu, besondere zeichen zu maskieren, um z.b. »SQL-injection« zu verhindern.  !$res ist die Anwendung des Wissens, dass eine mysql_query() im Fehlerfall und im Falle keiner gefundenen Datensätze  false zurück liefert.

            weiterhin schönen abend...

            --
            Freundlich wie man war, hat man mir Großbuchstaben geschenkt.
            sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
            1. -- Morgen auch. danke für deine weiteren Denkanstöße, werde Sie beherzigen nach der Lösung dieses Problem?s.
              --

              n'abend,

              dann nehme ich an Du bist ein Feiner!

              ein feiner Pinkel?

              -- ne, das kommt von Mario Barth

              Die Variable die übernommen(aus Formularfeld) kommt richtig an und die aus der DB ebenfalls.

              Gibt es zu einer Domain mehrere Datensätze?

              -- nein, jeweils nur einen.

              Formular 123 , BD 512 aber irgend warum werden beide nicht miteinander verglichen warum? Das war meine Frage.

              Siehe vorherige Frage. Wenn es mehrere Datensätze gibt, musst du das entsprechend behandeln.

              $result = mysql_query("SELECT pass,domain FROM kunden WHERE domain = '$domain' ");
                 while($row = mysql_fetch_array($result))
                  {

              Stimmt das »==« an dieser Stelle? Also willst du den Fehler gefunden haben, wenn pass (aus der Datenbank) und ticket (aus der Benutzereingabe) übereinstimmen?

              --           /***\ Ergebnis pass aus db 512 und ticket aus formuler 123

              if($row['pass'] == $ticket) { $ok = 0;
                   $error = "Sorry, Ihre Eingabe stimmt leider nicht!";
                   }
                      print "Alles OK";
                  }

              füge doch bitte überall echo-statements (var_dump()) ein, um die jeweiligen Variablen Inhalte auszugeben, damit man überhaupt mal sieht, was da ganz konkret funktioniert.

              Warum fragst du das Ticket eigentlich nicht direkt in der SQL-Query mit ab?

              -- weil es eine spalte namens Ticket gibt, die nicht überschrieben werden darf! Diese spalte ist mit pass identisch pass wird nach erfolgreichem login geändert.

              Ich sehe hier keinen Grund, der es nötig machen würde alle Daten zu einer Domain zu laden.
              -- ich lade doch nur $domein und dann gezielt $pass aus der DB.

              Hierdurch würde auch die Datenbank den Vergleich (und die Optimierung) übernehmen:

              $res = mysql_query( 'SELECT 1

              FROM kunden
                 WHERE domain = "'. mysql_real_escape_string( $domain ) .'"
                   AND pass = "'. mysql_real_escape_string( $ticket ) .'"' );

              if( !$res || !mysql_num_rows($res) )
              {
                // es konnte kein Datensatz gefunden werden
              }
              else
              {
                // wir haben einen Datensatz
              }

              
              >   
              > `mysql_real_escape_string()`{:.language-php} dient dazu, besondere zeichen zu maskieren, um z.b. »SQL-injection« zu verhindern.  `!$res`{:.language-php} ist die Anwendung des Wissens, dass eine `mysql_query()`{:.language-php} im Fehlerfall und im Falle keiner gefundenen Datensätze  `false`{:.language-php} zurück liefert.  
                
              \-- nicht soviel auf einmal, immer langsam mit den unwissenden Pferden, mach das auch noch nicht lange genug! Habe mir einfach mal die Daten an folgender Stelle /\*\*\*\ anzeigen lassen und geneu die Daten sind die , die vorhanden sind!  
                
              Danke Gruß Ingo  
                
              
              >   
              > weiterhin schönen abend...