Sady: Datenbankabfrage

Es ist wahrscheinlich ganz einfach, das Problem zu lösen, vor dem ich stehe, aber ich bin einfach nur zu sehr am Anfang. Ich schreibe grad an einem Script, damit ich nicht immer die ganzen Artikel für meine Seite selbst schreiben muss. Ja und da hakts nun gen Ende und ich weiß nicht warum ... Ich zeigs mal kurz auf ...

1. Schritt : Ich übergebe die variable $rubrik um bei der übersicht nur die entsprechenden Beiträge der Rubrik anzeigen zu lassen ...
<a href="index.php?rubrik=ausruestung" class="kat">Ausrüstung</a>

2. Schritt : Ich lasse mir die Einträge auflisten und einen link generieren, um dann den entsprechenden Beitrag anzeigen zu lassen

include "../admin/connect.php";

$query = "SELECT * FROM pl_magazin WHERE rubrik = '$rubrik' ORDER BY ID DESC";
$result = mysql_query($query,$link);

while($row = mysql_fetch_array($result))
{

$eintrag = ( $row[artikel] );

$preview = substr($eintrag, 0, 80);

echo "<tr>\n";
echo "<td class='utitel'><a href='index.php?vgl=$row[id]' class='utitel'><b>$row[titel]</b><br />$preview ...</a></td>\n";
echo "</tr>\n";

}

3. Schritt : Hier sollte dann eigentlich der Beitrag aufgelistet werden, stattdessen wird aber nur eine leere Tabelle angezeigt ... Er übergibt mir die variable $vgl auch mit 1, also der id, aber trotzdem ...

include "../admin/connect.php";

$query = "SELECT * FROM pl_magazin WHERE id = '$vgl'";
$result = mysql_query($query,$link);

while($row = mysql_fetch_array($result))
{
echo "<tr>\n";
echo "<td class='titel'>$row[titel]</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='untertitel'>$row[untertitel]</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td class='text'><p align='justify'><b>" . nl2br( $row[einleitung] ) . "</b></p><p align='justify'>" . nl2br( $row[artikel] ) . "</p></td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<td>Copyright by <a href='mailto:$row[email]'>$row[autor]</a></td>\n";
echo "</tr>\n";
}

So, hat jemand ne Ahnung ?

Danke,
Sady

  1. Hallo Sady,

    Du hast da noch einige Haken in Deinem Script...

    <a href="index.php?rubrik=ausruestung" class="kat">Ausrüstung</a>

    soweit OK

    1. Schritt : Ich lasse mir die Einträge auflisten und einen link generieren, um dann den entsprechenden Beitrag anzeigen zu lassen

    include "../admin/connect.php";

    $query = "SELECT * FROM pl_magazin WHERE rubrik = '$rubrik' ORDER BY ID DESC";
    $result = mysql_query($query,$link);

    Auch noch OK

    hier gehört eine Abfrage dazwischen:
    if ($result)  // wenn nicht, gabs einen SQL-Fehler...
    {

    while($row = mysql_fetch_array($result))
    {

    $eintrag = ( $row[artikel] );

    $preview = substr($eintrag, 0, 80);

    echo "<tr>\n";
    echo "<td class='utitel'><a href='index.php?vgl=$row[id]' class='utitel'><b>$row[titel]</b><br />$preview ...</a></td>\n";
    echo "</tr>\n";

    }

    1. Schritt : Hier sollte dann eigentlich der Beitrag aufgelistet werden, stattdessen wird aber nur eine leere Tabelle angezeigt ... Er übergibt mir die variable $vgl auch mit 1, also der id, aber trotzdem ...

    include "../admin/connect.php";

    $query = "SELECT * FROM pl_magazin WHERE id = '$vgl'";
    $result = mysql_query($query,$link);

    while($row = mysql_fetch_array($result))
    {
    echo "<tr>\n";
    echo "<td class='titel'>".$row[titel]."</td>\n";

    ^^           ^^
    Versuchs mal so. Vielleicht hilfts ja.

    Grüße aus BS

    Tom

  2. Hallo,

    $query = "SELECT * FROM pl_magazin WHERE id = '$vgl'";

    ^    ^

    Ich vermute einmal, daß mySQL, wie viele ander Datenbanken auch, ein Problem damit haben, wenn Du einen numerischen Wert als String angibst.

    Da Du aber nicht, wie Thomas schon festgestellt hat, überprüfst, ob mysql_query() erfolgreich war, bekommst Du einfach nichts mehr mit.

    Gewöhne Dir einfach an, jede Aktion, die potenziell auch schief gehen kann, zu prüfen, ob nicht doch etwas passiert ist, und gib in diesem Falle eine brauchbare Fehlermeldung aus. Auch ein Logging mit mehr Debug-Informationen ist immer hilfreich.

    Grüße
      Klaus

    1. Hallo ihr Zwei,

      $query = "SELECT * FROM pl_magazin WHERE id = '$vgl'";
                                                       ^    ^

      Ich vermute einmal, daß mySQL, wie viele ander Datenbanken auch, ein Problem damit haben, wenn Du einen numerischen Wert als String angibst.

      Da ich dieser Tage sowieso mit MySQL und PHP rumteste, habe ich das da oben auch mal ausgetestet. Das ist nicht der Fehler. MySQL akzeptiert alle Felder in Hochkommata, sogar in doppelten, wenn es sein muss.

      Aber ich vermute, dass in $vgl zum Zeitpunkt der Zuweisung an $query noch nichts drin steht. Da $vgl bereits während der Zuweisung ersetzt wird durch seinen Inhalt, würde dann ggf NULL bzw als Text eben gar nix dort stehen.

      Ich schau mir den Quelltext nochmal an.

      Gruß

      Tom

      1. Hallo,

        Aber ich vermute, dass in $vgl zum Zeitpunkt der Zuweisung an $query noch nichts drin steht. Da $vgl bereits während der Zuweisung ersetzt wird durch seinen Inhalt, würde dann ggf NULL bzw als Text eben gar nix dort stehen.

        Ich hab eben versucht, mir $vgl ausgeben zu lassen mit echo und es passierte nichts. Aber ich kann mir nicht erklären, warum die variable nicht übergeben wird, denn schliesslich sieht mein link ja so aus ... http://localhost/pferde-liebe/3/pferdemagazin/index.php?vgl=1

        Ich schau mir den Quelltext nochmal an.

        Wär echt nett ...

        Sady

  3. while($row = mysql_fetch_array($result))
    {

    $eintrag = ( $row[artikel] );

    $preview = substr($eintrag, 0, 80);

    echo "<tr>\n";
    echo "<td class='utitel'><a href='index.php?vgl=$row[id]' class='utitel'><b>$row[titel]</b><br />$preview ...</a></td>\n";
    echo "</tr>\n";
    }                            ^

    |
    Kommt hier noch eine Ausgabe? --+

    1. Schritt : Hier sollte dann eigentlich der Beitrag aufgelistet werden, stattdessen wird aber nur eine leere Tabelle angezeigt ... Er übergibt mir die variable $vgl auch mit 1, also der id, aber trotzdem ...

    include "../admin/connect.php";

    $query = "SELECT * FROM pl_magazin WHERE id = '$vgl'";
    $result = mysql_query($query,$link);

    Frag hier mal ab:

    $debug=true;  // irgendwo zentral festlegen

    if ($debug)   // dann können die Teststatements erstmal drin bleiben
    {
      if ($result)
      {
        echo mysql_num_rows($result)." Datensätze gefunden";
      }
      else
      {
        echo mysql_error;
      }
    }

    while($row = mysql_fetch_array($result))
    {
    echo "<tr>\n";
    echo "<td class='titel'>$row[titel]</td>\n";
    echo "</tr>\n";
    echo "<tr>\n";
    echo "<td class='untertitel'>$row[untertitel]</td>\n";
    echo "</tr>\n";
    echo "<tr>\n";
    echo "<td class='text'><p align='justify'><b>" . nl2br( $row[einleitung] ) . "</b></p><p align='justify'>" . nl2br( $row[artikel] ) . "</p></td>\n";
    echo "</tr>\n";
    echo "<tr>\n";
    echo "<td>Copyright by <a href='mailto:$row[email]'>$row[autor]</a></td>\n";
    echo "</tr>\n";
    }

    Sonst kann der Fehler nur noch im assoziativen Array stecken. Dann musst Du Dir das mal anders anzeigen lassen.

    Lässt mir ja keine Ruhe, dass man den Fehler nicht gleich sieht.

    Mal ganz dumm gefragt, hast Du überhaupt Benzin im Tank - äh - Daten in der Tabelle? Muss denn diese Abfrage ein Ergebnis liefern?

    Grüße

    Tom