Compu: Datenbank gibt immer einen Datensatz zu wenig zurück :-(

Hi,

komischerweise gibt mir die DB immer ein Produkt zu wenig zurück. Ich glaube das Problem ist darin begründet, dass ich zweimal auf die DB zugreifen muss, um die Kategorie für eine Übeschrift zu erhalten.
Dabei geht wohl eine Zeile flöten. Kann es sein, dass ich der interne Zeiger dadurch um eins verschiebt?
Wenn ja, wie korrigiert man das?

if (isset($_GET['opt']))
{
    $sql = "SELECT *
            FROM produktkuerzel pk, produktkategorie pkat
            WHERE (pk.d_kategorie = ".$_GET['opt'].")
            AND (pkat.id=pk.d_kategorie)";

$result = @mysql_query($sql,$dbConnection);
    $anz = @mysql_num_rows($result);

echo "<table border="0">";
    echo "<tr><td>";
 $kategorie=$language."_kat";
    $result = @mysql_query($sql,$dbConnection);
    $row=mysql_fetch_array($result);
 echo "<h2>".$row[$kategorie]."</h2>";
 echo $t_ergebnisse." 1-".$anz."<br><br>\n";

echo "<ul>";
    while($row = @mysql_fetch_array($result))
    {
        echo "<li><a href="catalog.php?produktname=".$row['d_produktname']."">".$row['d_produktnamehtml']."</li></a><br>";
    }
    echo "</ul>";
    echo "</td></tr>";
 echo "</table>";

}

DANKE,

Compu

  1. Hallo Compu!

    Ich weiß zwar nicht, was Du da tust - aber bei jedem mysql_fetch_array wird eine neue Datensatzzeile eingelesen. Nachdem Du diese Funktion zwei mal verwendest, fehlt dir wahrscheinlich in der <ul>-Liste der erste Datensatz:

    $row=mysql_fetch_array($result); /* Erster wird ausgegeben */
     echo "<h2>".$row[$kategorie]."</h2>";

    ...

    echo "<ul>";
        while($row = @mysql_fetch_array($result)) /* und jetzt die anderen */
        {
            echo "..."»»     }
        echo "</ul>";

    Ich glaube, Du solltest den Code nochmal überarbeiten ;-)

    mfg

    norbert =:-)

    1. Hi Norbert,

      Ich weiß zwar nicht, was Du da tust - aber bei jedem mysql_fetch_array wird eine neue Datensatzzeile eingelesen. Nachdem Du diese Funktion zwei mal verwendest, fehlt dir wahrscheinlich in der <ul>-Liste der erste Datensatz:

      Ja, ich weiß.
      Kann man den Zeiger nicht um einen zurücksetzen?

      Compu

      1. Hallo Compu!

        1.) Warum fragst du dann, wenn du es weißt?

        2.) Nein - aber man kann es anders Programmieren:

        if (isset($_GET['opt']))
        {
            $sql = "SELECT *
                    FROM produktkuerzel pk, produktkategorie pkat
                    WHERE (pk.d_kategorie = ".$_GET['opt'].")
                    AND (pkat.id=pk.d_kategorie)";

        $result = @mysql_query($sql,$dbConnection);
            $anz = @mysql_num_rows($result);

        echo "<table border="0">";
            echo "<tr><td>";
            $kategorie=$language."_kat";

        $row=mysql_fetch_array($result);

        echo "<h2>".$row[$kategorie]."</h2>";
            echo $t_ergebnisse." 1-".$anz."<br><br>\n";

        echo "<ul>";
            echo "<li><a href="catalog.php?produktname=".$row['d_produktname']."">".$row['d_produktnamehtml']."</li></a><br>";

        while($row = @mysql_fetch_array($result))
            {
                echo "<li><a href="catalog.php?produktname=".$row['d_produktname']."">".$row['d_produktnamehtml']."</li></a><br>";
            }
            echo "</ul>";
            echo "</td></tr>";
         echo "</table>";

        }

        mfg

        norbert =:-)

        1. Hi Norbert,

          Das war eine einfache Lösung !!!!
          Da wäre ich nie drauf gekommen. Peinlich.
          Hatte schon alle möglichen mysql Befehle ausprobiert.

          DANKE!!!!!

          Gruss
          Compu

          PS: Mit "Ja, ich weiß" meinte ich, dass ich weiß, dass der Code nochmal überarbeitet werden muss. :-)

          1. Hallo Compu!

            Der Vollständigkeit halber möchte ich noch anmerken, dass du die ganze Ausgabe noch in ein "if" packen musst - könnte ja sein, dass es gar keinen Datensatz gibt:

            if (mysql_num_rows($result) > 0)
            {

            $row=mysql_fetch_array($result);

            echo "<h2>".$row[$kategorie]."</h2>";
                echo $t_ergebnisse." 1-".$anz."<br><br>\n";

            echo "<ul>";
                echo "<li><a href="catalog.php?produktname=".$row['d_produktname']."">".$row['d_produktnamehtml']."</li></a><br>";

            while($row = @mysql_fetch_array($result))
                {
                    echo "<li><a href="catalog.php?produktname=".$row['d_produktname']."">".$row['d_produktnamehtml']."</li></a><br>";
                }
                echo "</ul>";
            }

            mfg

            norbert =:-)

            1. Moin,

              Hallo Compu!

              Der Vollständigkeit halber möchte ich noch anmerken, dass du die ganze Ausgabe noch in ein "if" packen musst - könnte ja sein, dass es gar keinen Datensatz gibt:

              Wo wir schon bei Vollständigkeit sind: Ihr habt doch hoffentlich nichts gegen ein bisschen Eleganz?

              if (mysql_num_rows($result) > 0)
              {
                  $row=mysql_fetch_array($result);

              echo "<h2>".$row[$kategorie]."</h2>";
                  echo $t_ergebnisse." 1-".$anz."<br><br>\n";

              echo "<ul>";
                  do {
                      echo "<li><a href="catalog.php?produktname=".$row['d_produktname']."">".$row['d_produktnamehtml']."</li></a><br>";
                  } while($row = @mysql_fetch_array($result));
                  echo "</ul>";
              }

              --
              Henryk Plötz
              Grüße aus Berlin
              ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
              ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
              1. Hallo Henryk!

                Perfekt - mehr kann ich da nicht sagen - aber man sollte Compu doch auch noch ein wenig überlassen ;-)

                mfg

                norbert =:-)