Zur Navigation

Datenbanksuche [3]

21 Jörg

Du musst die while Schleife komplett in den if Abschnitt packen - dort sollen ja alle Ergebnisse ausgegeben werden. Und die Definition von $num muss noch vor dem if Konstrukt erfolgen - sonst kann ja nicht sinnvoll überpüft werden, ob $num > 0

$result = mysql_query($query);
$num = mysql_num_rows($query);
if ($num > 0) {
    while (list($title, $imgurl, $autor) = mysql_fetch_row($result)) {
        echo "<img src='buecherbilder/$imgurl'>$autor, $title<br>";
    }
} else {
    echo "keine Ergebnisse";
}

18.07.2008 13:50

22 Tilman

Hallo Jörg!

Da kommt jetzt aber eine andere Fehlermeldung, und zwar die, dass ein Fehler im Code ist!

18.07.2008 17:02

23 Jörg

Wie ich weiter oben schon schrieb: bitte den vollständigen und genauen Wortlaut solcher Fehlermeldung wiedergeben. Diese enthalten meist noch wertvolle Informationen - und sei es nur der Hinweis auf die Zeile, in welcher der Fehler auftritt

18.07.2008 17:09

24 Tilman

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in E:\TIL\xampp\htdocs\buecher\results.php on line 37

19.07.2008 10:35 | geändert: 19.07.2008 10:36

25 Jörg

Das heißt: die Datenbankabfrage, auf die in Zeile 37 in der Datei results.php zurückgegriffen wird, liefert kein gültiges Ergebnis. Du musst schauen, welche Datenbankabfrage in oder vor der Zeile 37 gestellt wurde und diese dann hierher kopieren. Bei der Gelegenheit kannst du dir auch gleich den etwas aussagekräftigeren MySQL-Fehler ausgeben lassen, indem du folgende Code-Zeile direkt nach der Abfrage einfügst:

echo mysql_error();

Die Fehlerausgabe dann auch hierher kopieren.

19.07.2008 10:51

26 Tilman

Hallo!

In Zeile 37 steht:
$num = mysql_num_rows($query);

Wenn ich den Code
echo mysql_error();
danach einfüge, erscheint immer noch die Fehlermeldung von Beitrag 24, sonst aber nichts.

19.07.2008 11:03

27 Jörg

Du hast $query aber auch noch vor der Zeile 37 definiert?

$query = "SELECT title, imgurl, autor FROM buecherdaten WHERE autor LIKE '%" . mysql_real_escape_string($autor) . "%'  AND title LIKE '%" . mysql_real_escape_string($title) . "%' AND buchart LIKE '%" . mysql_real_escape_string($buchart) . "%'";

$num = mysql_num_rows($query);

19.07.2008 11:10

28 Tilman

Ja, natürlich! Ich habe es eigentlich so gemacht, wie du es geschrieben hast:

<?
  $autor = $_GET['autor'];
  $title = $_GET['title'];
  $buchart = $_GET['buchart'];
 $query = "SELECT title, imgurl, autor FROM buecherdaten WHERE autor LIKE '%" . mysql_real_escape_string($autor) . "%'  AND title LIKE '%" . mysql_real_escape_string($title) . "%' AND buchart LIKE '%" . mysql_real_escape_string($buchart) . "%'";
  $result = mysql_query($query);
  $num = mysql_num_rows($query);
  echo mysql_error();
if ($num > 0) {
    while (list($title, $imgurl, $autor) = mysql_fetch_row($result)) {
        echo "<img src='buecherbilder/$imgurl'>$autor, $title<br>";
    }
} else {
    echo "keine Ergebnisse";
}
?>

19.07.2008 11:17

29 Jörg

Der Fehler fällt mir jetzt erst auf: mysql_num_rows() muss genauso wie mysql_fetch_row() auf eine Ressource, d.h. dem Ergebnis einer ABfrage, zugreifen. $query ist aber ja nur die Abfrage selbst - nicht deren Ergebnis. So sollte es funktionieren:

$query = "SELECT title, imgurl, autor FROM buecherdaten WHERE autor LIKE '%" . mysql_real_escape_string($autor) . "%'  AND title LIKE '%" . mysql_real_escape_string($title) . "%' AND buchart LIKE '%" . mysql_real_escape_string($buchart) . "%'";
$result = mysql_query($query);
$num = mysql_num_rows($result);
if ($num > 0) {
    while (list($title, $imgurl, $autor) = mysql_fetch_row($result)) {
        echo "<img src='buecherbilder/$imgurl'>$autor, $title<br>";
    }
} else {
    echo "keine Ergebnisse";
}

19.07.2008 11:20

30 Tilman

Ja, danke, funktioniert.

19.07.2008 11:48