Zur Navigation

Datenbanksuche [6]

51 Jörg Kruse

Ja, richtig, du benötigst ja die Gesamtanzahl der Suchergebnisse - also muss hier auch noch die WHERE Klausel der Such-Abfrage übernommen werden:

$result_2 = mysql_query("SELECT COUNT(*) 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) . "%'");

23.07.2008 17:48

52 Tilman

Ja, jetzt funktionierts!

Kann man eigentlich auch mit diesem Script irgendwie die letzte Seite der Ergebnisse errechnen?

24.07.2008 14:49

53 Jörg Kruse

Dazu teilst du $totalnum durch $anzahl und rundest das Ergebnis mit ceil() auf

$letzteseite = ceil($totalnum / $anzahl)

24.07.2008 14:55

54 Tilman

Hallo Jörg!

Wahrscheinlich werde ich dich mit dem PHP-Zeug schon nerven:
Ich will, dass bei jedem Buch weitere Bücher (wenn vorhanden) von diesem Autoren verlinkt werden.

Ich habe diesen Codeteil:
autor LIKE '%"
so umggewandelt:
$query = "autor LIKE $autor

Wie gehts richtig?

31.07.2008 15:51

55 Jörg Kruse

Das ist nur ein kaputtes Bruchstück einer SQL-Abfrage. Wie lautet denn die komplette Abfrage?

PS: ich empfehle dir auch, nochmal die SQL-Einleitung durchzukauen, die ich in diesem Thread verlinkt habe - so dass du wenigstens die grundlegenden Einheiten einer SQL-Abfrage identifizieren kannst - denn ohne die Basics ist es schweirig, komplexere Abfragen zu entwerfen. Hier sind auch noch ein paar gute MySQL-Tutorials aufgeführt.

31.07.2008 16:16

56 Tilman

<?
$otherbooks = "SELECT id, title FROM buecherdaten WHERE autor == $autor . mysql_real_escape_string($autor) . $autor;
$result = mysql_query($otherbooks);
while ((list($title, $id) = mysql_fetch_row($result)) {
    echo "$id, $title<br>";
}
?>

01.08.2008 14:55

57 Jörg Kruse

Du hast da dreimal hintereinander den String $autor mit "." verkettet - das macht so keinen Sinn. Zudem wird ein Vergleich in SQL mit einem einfachen "=" durchgeführt (im Gegensatz zu PHP). So wäre die Syntax z.B. korrekt:

$otherbooks = "SELECT id, title FROM buecherdaten WHERE autor = '$autor'";

Der String $autor sollte dann allerdings noch mithilfe von mysql_real_escape_string() gegen SQL-Injection abgesichert werden:

$autor = mysql_real_escape_string($autor);
$otherbooks = "SELECT id, title FROM buecherdaten WHERE autor = '$autor'";

... oder direkt in die Abfrage eingebaut würde diese dann so ausschauen:

$otherbooks = "SELECT id, title FROM buecherdaten WHERE autor = '" . mysql_real_escape_string($autor) . "'";

Dann sollte die Reihenfolge hier der in der Abfrage entsprechen:
while ((list($id, $title) = mysql_fetch_row($result)) {

Sonst werden in den Ergebnissen title und id vertauscht

01.08.2008 15:22

58 Tilman

Hallo Jörg!

Ja, funktioniert, hier war aber ne Klammer zu viel:
while ((list($id, $title) = mysql_fetch_row($result)) {

Letztes Mal hast du mir ja einen Link geschickt:
http://www.php-einfach.de/

Da arbeite ich mich einfach ein bisschen durch.

01.08.2008 15:29

59 Jörg Kruse

Ja, da war noch 'ne Klammer zuviel.

Da arbeite ich mich einfach ein bisschen durch.

Ja, das mach mal :) und wenn du dazu allgemeine Fragen hast, kannst du die hier auch (in einem neuen Thread) stellen. Wenn man sich erst einmal das Grundgerüst angeeignet hat, ist der Rest dann nicht mehr ganz so schwer.

01.08.2008 15:43

60 Tilman

Hallo Jörg!

Wenn man in das Feld z.B. "Eragon Drachenreiter" eingibt, wird das Buch (so ist es in der Datenbank eingetragen) "Eragon - Das Vermächtnis der Drachenreiter" nicht gefunden.

Gibt man aber "Vermächtnis der Drachenreiter", "Eragon" oder nur "Drachenreiter" ein, so wird das Buch gefunden.

Gibt es denn eine Möglichkeit, dass das Script den Suchbegriff in einzelne Wörter aufteilt und dann nach Büchern sucht, die all diese Wörter enthalten (egeal welche Reihenfolge)?

03.11.2008 11:18