Vergleich zweier Variablen schlägt fehl

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

  • Vergleich zweier Variablen schlägt fehl

    Hallo liebe Community!

    Ich sitze seit ca. 4 Std an folgendem Problem und komme einfach nicht weiter... vielleicht sehe ich ja den Wald vor Bäumen nicht, aber ich find einfach die Lösung nicht.
    Mein Projekt ist ein kleiner Terminkalender, der mithilfe zweier Schleifen seine Tabellenzellen erstellt, in denen die Tage von 1 bis 31 eines jeden Monats dargestellt werden. Tage, an denen ein Termin hinterlegt ist, sollen hervorgehoben werden, z.B. durch Fettdruck. Um herauszufinden ob am Tag x ein Termin ist, vergleiche ich x mit den Daten die ich aus meiner DB geholt habe.
    Mein Problem ist es zu überprüfen, ob der Tag, sagen wir der 27. August, gleich dem Zellenzähler $y ist.

    ...
    // Hiervor ist der Teil in dem jede Zelle der Tabelle mit Inhalt gefüllt wird.
    //

    PHP-Code:
    $$row mysql_fetch_array($ergebnis);
    $tag explode("-"$row[datum]); // z.B. 2007-8-27
    if ($x == $tag[2])  //$x ist der Zellenzähler
     
    {
        echo 
    "x und tag sind gleich"
     
    }
     else 
     {
        echo 
    "x und tag sind nicht gleich"
     
    }
    //Problem: x ist niemals == $tag[2] 
    ...

    Ich vermute sehr stark, dass es an den verschiedenen Datentypen liegt. $tag ist ja ein String-Array und $x ein integer, aber glaubt mir, ich habe mit settype rumexperimentiert und es hat sich nichts am Ergebnis geändert... Ich habe auch schon $x in einen String umgewandelt und dann verglichen mit strnatcmp(), hat auch nichts genutzt... Wenn ich mit echo $x . ":" . $tag[2] die Variablen zum testen ausgebe, zeigt er mir, dass sie tatsächlich gleich sind. (z.B. 13 : 13) .

    Ich hoffe ihr könnt mir aus meiner Verwirrung helfen :-)

  • #2
    $tag ist ja ein String-Array und $x ein integer...
    Solange du den Vergleich nicht mit === machst, ist das PHP schnuppe (Stichwort Type Cast)
    Hast du ggf noch irgendwie ein nicht darstellbares Zeichen drin ? Hast du $tag mal mit var_dump() ausgegeben ? Sind das die erwarteten Werte ? Und wieso hast du $$row im Code ? Ausserdem solltest du $row['datum'] und NICHT $row[datum] schreiben. Auch dein error_reporting(E_ALL) wäre von Vorteil.

    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Danke für die schnelle Antwort. Hier nochmal etwas mehr vom Skript: die gesamte Schleife, die die Tabelle erstellt. Achtung, $x aus dem letzten beitrag ist hier $y. $$row war ein Tippfehler.

      PHP-Code:
      function erstelle_tabellenkoerper() {
        
      $x 1;
        
      $y 1;       
      // Hier beginnt die Schleife, die die Tabellenzellen erstellt und füllt.
          
        
      while ($p 5)                              // Für die Zeilen zuständig      
          
      {
              echo 
      "<tr>\n";
              
              while (
      $k 7)                         // Für die Spalten bzw. Zellen pro Reihe
               
      {
                  echo 
      " <td>";        
                  
      $r 0;
                  if (
      $x >= date(w) && $y <= 31)  
      /* Ist vielleicht etwas kompliziert gelöst. Soll dafür sorgen, dass
       wenn z.B. der 1 August ein Mittwoch ist, "1" auch unter Mittwoch
       in der Tabelle steht und nicht unter Montag. 
      (Zuordnung: Wochentag-> numerischer Tag des Monats ) */
                   
      {
                      
      $row mysql_fetch_array($ergebnis);
                        
      $tag explode("-"$row['datum']);
                      echo 
      " " var_dump($tag) . " ";
                      if (
      $y == $tag[2]) 
                      {
                      echo 
      "y und tag sind gleich";
                      
      // Ausgabe Zellenzähler fett

                      
      }
                      else 
                      {
                      echo 
      "y und tag sind nicht gleich";
                      
      // Ausgabe Zellenzähler normal
                      
      }
                      
                      echo  
      " " $y ":" $day[$y];                
                       echo 
      "</td>\n";        
                      
      $y++; 
                   }
                     else
                   {
                      echo 
      " </td>";                
                   }
                  
      $k++;
                  
      $x++;                
              }
              echo 
      "</tr>";
              
      $p++;
              
      $k 0;
          }
       } 
      vardump() ergibt:
      array(3) {
      [0]=> string(4) "2007"
      [1]=> string(2) "08"
      [2]=> string(2) "13" }

      Wobei es könnte auch ein Denkfehler meinerseits sein... ich lese die erste Zeile aus meiner MySQL Abfrage aus und vergleiche diese mit $y, aber eben nur mit einem $y und nicht mit allen... deshalb kann $y ja niemals $tag[2] sein, weil bei jedem Schleifendurchlauf ein anderes $tag[2] mit nur einem einzigen $y verglichen wird. Was sagt ihr dazu?

      Kommentar


      • #4
        So habe die Lösung nun doch gefunden; es war wohl so wie zuvor vermutet, dass ein Denkfehler drin war und das Programm die falschen Werte verglichen hat. Wen's interessiert hier das funktionierende Listing:
        PHP-Code:
         function erstelle_tabellenkoerper() {
         global 
        $ergebnis;
         
        $f 1
         while (
        $f <= mysql_num_rows($ergebnis)) // Array mit Tagen füllen
          
        {
             global 
        $days;
            
        $row mysql_fetch_array($ergebnis);
              
        $tag explode("-"$row['datum']);
             
        $days[$tag[2]] = $tag[2];
            
        $f++; 
         } 
         echo 
        var_dump($days);
          
        $x 1;
          
        $y 1;                                   // Hier beginnt die Schleife, die die Tabellenzellen erstellt und füllt.
            
        while ($p 5)                              // Für die Reihen zuständig      
            
        {
                echo 
        "<tr>\n";
                
                while (
        $k 7)                         // Für die Spalten bzw. Zellen pro Reihe
                 
        {
                    echo 
        " <td>";        
                    
        $r 0;
                    if (
        $x >= date(w) && $y <= 31
                     {
                        if (
        $y == $days[$y]) 
                        {
                        echo 
        "<font style=\"color:red\"> " $y "</font>";
                        }
                        else 
                        {
                        echo 
        "<font style=\"color:black\"> " $y "</font>";
                        }
                         echo 
        "</td>\n";        
                        
        $y++; 
                     }
                       else
                     {
                        echo 
        " </td>";                
                     }
                    
        $k++;
                    
        $x++;                
                }
                echo 
        "</tr>";
                
        $p++;
                
        $k 0;
            }
         } 

        Kommentar


        • #5
          warum nutzt du sowas??

          PHP-Code:
          "<font style=\"color:black\"> 
          das läßt sich doch viel besser über eine css-class regeln...

          Kommentar


          • #6
            naja, eine Eigenschaft muss man nicht in eine Klasse verpacken~
            Was wesentlich störender ist, ist das obsolete Font-Tag.

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              ....

              Verstehe ich richtig, du willst alle Einträge aus einer Tabelle haben die mit deinem Tag x im Feld datum übereinstimmen?

              Wenn ja, warum machst du nicht gleich den dazu passenden SQL query?

              Schau mal unter
              http://dev.mysql.com/doc/refman/5.0/...culations.html

              Vielleicht mit mysql> SELECT * FROM table WHERE DAYOFMONTH(datum) = $x;

              Kommentar

              Lädt...
              X