Zur Navigation

Datenbanksuche [2]

11 Jörg

Du erhältst als Ergebnis vermutlich auch mehrere Datensätze, die in einer Schleife ausgelesen werden können

while ((list($title) = mysql_fetch_row($result)) {
    echo "$autor, $title<br>";
}

15.07.2008 14:33

12 Tilman

Hab den Code eingefügt:
<h2>Büchersuche</h2>
<?
  $autor = $_GET['autor'];
  $query = "SELECT title, imgurl FROM buecherdaten WHERE autor LIKE '%" . mysql_real_escape_string($autor) . "%'";
  $result = mysql_query($query);

  while ((list($title, $imgurl) = mysql_fetch_row($result)) {
    echo "<img src='buecherbilder/$imgurl'>$autor, $title<br>";
}
?>

Weißt du, was ich jetzt schon wieder falsch gemacht habe?

15.07.2008 15:21

13 Jörg

Weißt du, was ich jetzt schon wieder falsch gemacht habe?

Den Fehler habe ich produziert ;) eine Klammer war zuviel, so sollte es korrekt sein:

 while (list($title, $imgurl) = mysql_fetch_row($result)) {
    echo "<img src='buecherbilder/$imgurl'>$autor, $title<br>";
}

15.07.2008 15:25 | geändert: 15.07.2008 15:27

14 Tilman

Vielen Dank!

Ich hätte da noch zwei Fragen:
- Gibt es einen Code, dass z.B. nur 10 Ergebnisse pro "Seite" geliefert werden, dann muss man blättern?
- Wenn zu dem gesuchten Wort keine Ergebnisse gefunden wurden, dass man dann statt einer leeren Seite einen Fehlermeldung schreiben kann?

Tilman

16.07.2008 14:41

15 Jörg

- Gibt es einen Code, dass z.B. nur 10 Ergebnisse pro "Seite" geliefert werden, dann muss man blättern?

Du kannst mit einem LIMIT Statement die Ausgabe begrenzen. Beispiel:

$start = 20;
$anzahl = 10;

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

Hier werden die Ergebnisse 21 bis 30 zurückgegeben. Die konkreten Zahlen für $start und $anzahl musst du aus der Seitenzahl errechnen.

- Wenn zu dem gesuchten Wort keine Ergebnisse gefunden wurden, dass man dann statt einer leeren Seite einen Fehlermeldung schreiben kann?

Mit mysql_num_rows() kannst du die Anzahl der Ergebnisse ermitteln

$num = mysql_num_rows($query);
if ($num > 0) {

/* Ausgabe der Ergebnisse */

} else {
    echo "keine Ergebnisse";
}

16.07.2008 15:16

16 Tilman

Hallo Jörg.

Ich habe jetzt mal ausprobiert, noch mehr Felder in die Suche einzubinden, also nicht nur Autor. Das habe ich so gemacht:
<?
  $autor = $_GET['autor'];
  $title = $_GET['title'];
  $buchart = $_GET['buchart'];
  $query = "SELECT title, imgurl, autor FROM buecherdaten WHERE autor, title, buchart LIKE '%" . mysql_real_escape_string($autor, $title, $buchart) . "%'";
  $result = mysql_query($query);

   while (list($title, $imgurl, $autor) = mysql_fetch_row($result)) {
    echo "<img src='buecherbilder/$imgurl'>$autor, $title<br>";
}
?>

Da kommt aber eine Fehlermeldung

17.07.2008 14:46

17 Jörg

Du kannst die Such-Strings und Felder nicht so mit Kommas aneinanderreihen, das entsprcht nicht der SQL-Syntax. Die drei Bedingungen müssen alle voll ausgeschrieben und mit OR verknüpft werden, wenn mindestens eine erfüllt sein soll

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

PS:
Da kommt aber eine Fehlermeldung
Das ist in diesem Fall vielleicht nicht mehr nötig - aber ansonsten bitte immer die genaue Fehlermeldung mitteilen :)

17.07.2008 15:22

18 Tilman

Hallo Jörg!

Jetzt kommen aber immer alle Bücher aus der Datenbabk, egal ob alle Felder oder nur eins ausgefüllt sind!

17.07.2008 16:07

19 Jörg

Eine AND Verknüpfung ist hier wohl doch sinnvoller

$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) . "%'";

Dann müssen alle drei Bedingungen erfüllt sein und leere Felder sollten dann auch kein Problem mehr sein

17.07.2008 16:14

20 Tilman

Hallo Jörg, vielen Dank.

Da habe ich eine Frage:
Wie soll ich den Code mit der "Kein-Ergebnis-Meldung" einbinden?

$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);
   while (list($title, $imgurl, $autor) = mysql_fetch_row($result)) {
   $num = mysql_num_rows($query);
if ($num > 0) {
    echo "<img src='buecherbilder/$imgurl'>$autor, $title<br>";
 else {
    echo "keine Ergebnisse";
}
Funktioniert aber nicht!

18.07.2008 13:38