Zur Navigation

Datenbanksuche

1 Tilman

Hallo.

Ich würde gerne eine Suche auf meiner Webseite haben, die die Datenbank durchsucht.

Man soll verschiedene Felder wie Titel oder Autor ausfüllen können.
Werden die Eingabe in der bestimmten Spalte der Datenbank (z.B. Autor) gefunden, so soll das Buch / die Bücher (+ Bild) angezeigt werden. Das gesuchte Wort oder die Wörter sollen dann fett merkiert werden. (Die Suchmaschine soll mit Stichwörtern arbeiten!)

Kann man das auch nach Relevanz sortieren?
Kann man ein bestimmtes Layout für jedes Suchergebnis einstellen (wo das dazugehörige Bild hin soll, Schrift des Titels, usw.)

09.07.2008 17:17

2 Jörg

Hallo Tilman,

Werden die Eingabe in der bestimmten Spalte der Datenbank (z.B. Autor) gefunden, so soll das Buch / die Bücher (+ Bild) angezeigt werden.

Dazu kannst du ein entsprechendes WHERE Statement verwenden, z.B.:

$query = "SELECT buch FROM tabelle WHERE autor LIKE '%" . mysql_real_escape_string($autor) . "%'";

Das gesuchte Wort oder die Wörter sollen dann fett merkiert werden. (Die Suchmaschine soll mit Stichwörtern arbeiten!)

Die Markierung kannst du anschließend in PHP vornehmen. Hierzu könntest du z.B. die Funktion str_replace() verwenden

Kann man das auch nach Relevanz sortieren?

Das kommt darauf an, wie du Relevanz definierst

Kann man ein bestimmtes Layout für jedes Suchergebnis einstellen (wo das dazugehörige Bild hin soll, Schrift des Titels, usw.)

Was heißt "für jedes Suchergebnis" - bzw. wovon genau soll das Layout abhängen, vom jeweiligen Datensatz? Im letzteren Fall musst du die Layout-Infos entsprechend mit abspeichern und bei der Abfrage wieder mit abrufen

09.07.2008 18:28 | geändert: 09.07.2008 18:29

4 Tilman

Was heißt "für jedes Suchergebnis" - bzw. wovon genau soll das Layout abhängen, vom jeweiligen Datensatz? Im letzteren Fall musst du die Layout-Infos entsprechend mit abspeichern und bei der Abfrage wieder mit abrufen

Hallo Jörg,

ich meine, dass z.B. der Titel des Buches (Schriftart, Farbe, Schriftgröße) ode die Platzierung des Bildes eingestellt werden können.

11.07.2008 14:32

5 Tilman

Hallo Jörg!

Also, ich habe das mal ausprobiert:


<?
  $host = "localhost";
  $user = "xxx";
  $pass = "xxx";
  $database = "xxx";
  $dz = mysql_connect($host, $user, $pass);
  mysql_select_db($database, $dz);

?>

<?
  $query = "SELECT title FROM tabelle WHERE autor LIKE '%" . mysql_real_escape_string($autor) . "%'";
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
...
</head>
...
<?
    echo "$autor, $title<br>";
?>
...
</html>
Funktioniert aber nicht. Mach ich was falsch? Fehlt vielleicht was?

11.07.2008 15:16

6 Jörg

Du musst die Variable $autor noch aufnehmen - je nachdem wie dein Suchformular aufgebaut ist. Wenn z.B. die Variable im Suchformular auch "autor" heißt und das Attribut method den Wert "post" enthält:

$autor = $_POST['autor'];

Bei method="get":

$autor = $_GET['autor'];

Dann muss die Abfrage gestellt und ausgewertet werden:

$query = "SELECT title FROM tabelle WHERE autor LIKE '%" . mysql_real_escape_string($autor) . "%'";
$result = mysql_query($query);
list($title) = mysql_fetch_row($result);

11.07.2008 16:02

7 Tilman

Hallo Jörg,

also ich habe das mal gemacht - wahrscheinlich falsch ;-(
Bei mir erscheint diese Fehlermeldung:
Warning: mysql_fetch_row(): supplied argument is not a valid ...



<?
  $host = "localhost";
  $user = "xxx";
  $pass = "xxx";
  $database = "xxx";
  $dz = mysql_connect($host, $user, $pass);
  mysql_select_db($database, $dz);

?>

<?
  $autor = $_GET['autor'];
  $query = "SELECT title FROM tabelle WHERE autor LIKE '%" . mysql_real_escape_string($autor) . "%'";
  $result = mysql_query($query);
  list($title) = mysql_fetch_row($result);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
...
<?
    echo "$autor, $title<br>";

?>
...</html>

11.07.2008 19:24

8 Jörg

Dann lass dir mal den genauen MySQL-Fehler ausgeben:

$result = mysql_query($query);
echo mysql_error();
  list($title) = mysql_fetch_row($result);

11.07.2008 19:27

9 Tilman

Hallo Jörg!

Ich habe den Fehler gefunden:
$query = "SELECT title FROM tabelle WHERE autor LIKE '%" . mysql_real_escape_string($autor) . "%'";

Meine Tabelle heißt ja nicht "tabelle", sondern buecherdaten

Aber da hab ich doch gleich das nächste Problem:
Ich habe in meiner Datenbank 4 Bücher, die von Cornelia Funke geschrieben wurden.
Wenn ich jetzt aber "Cornelia Funke" eingebe, dann erscheint nur das erste Buch? Muss man irgendetwas am Code ändern?

13.07.2008 10:33 | geändert: 13.07.2008 10:36

10 Tilman

Aber da hab ich doch gleich das nächste Problem:
Ich habe in meiner Datenbank 4 Bücher, die von Cornelia Funke geschrieben wurden.
Wenn ich jetzt aber "Cornelia Funke" eingebe, dann erscheint nur das erste Buch? Muss man irgendetwas am Code ändern?

15.07.2008 14:25