Zur Navigation

Datenbanksuche [4]

31 Tilman

Hallo Jörg!

In Beitrag 15 hast du geschrieben, wie man die Ergebnisse auf Seiten aufteilen kann:
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.

Wie du sicher schon gemerkt hast, bin ich in PHP noch ein Anfänger.
Wie kann man denn die konkreten Zahlen für $start und $anzahl aus der Seitenzahl ausrechnen? Und wie kann man die "Blätterlinks" programmieren?

19.07.2008 20:55

32 Jörg Kruse

Wie du sicher schon gemerkt hast, bin ich in PHP noch ein Anfänger.

Hier kommt es eher auf mathematische Fertigkeiten an :)

Wie kann man denn die konkreten Zahlen für $start und $anzahl aus der Seitenzahl ausrechnen?

Mit $anzahl definierst du die Anzahl der Ergebnisse pro Seite. Den Startwert erhältst du, wenn du Seitenzahl mit ($anzahl - 1) multiplizierst und dazu 1 addierst.

$anzahl = 20;
$start = ($_GET['seite'] * ($anzahl -1)) + 1;

Und wie kann man die "Blätterlinks" programmieren?

Du fügst an die URL den Parameter für die Seitenanzahl an; beim Vorwärtsblättern z.B. wird der betreffende Wert dann einfach um einen hochgezählt

<a href="script.php?seite=<?php echo $_GET['seite'] + 1 ?>">nächste Seite</a>

20.07.2008 10:47

33 Tilman

Hallo Jörg!

Du hast in Beitrag 15 geschrieben, wo man den Code einsetzen soll:
$start = 20;
$anzahl = 10;

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

Jetzt habe ich aber nicht mehr ein Formularfeld, sondern mehrere:
$query = "SELECT title, imgurl, autor, id, buchart 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) . "%'";

Wo muss ich da den Code einsetzen?

20.07.2008 12:12

34 Jörg Kruse

Das LIMIT Statement kommt auch hier ans Ende

$query = "SELECT title, imgurl, autor, id, buchart 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) . "%' LIMIT " . $start . "," . $anzahl;

Wieviele Spalten du abfragst, ist dabei unerheblich.

In diesem MySQL-Tutorial ist auf dieser Seite die grundlegende Syntax einer SELECT-Abfrage erklärt:

http://www.php-einfach.de/einf_mysql_weitere_abfragen.php

20.07.2008 12:35 | geändert: 20.07.2008 12:35

35 Tilman

Hallo Jörg!

Vielen Dank! Auf der Seite stehen echt viele interessante Dinge drinnen.

Ich habe aber (schon wieder) ein Problem:
Bei dem Code, den du mir geschickt hast, kommt das letzte Buch (das 10.) auf der ersten Seite auf der zweiten Seite wieder:
$anzahl = 10;
  $start = ($_GET['seite'] * ($anzahl -1)) + 1;
Außerdem fehlt das erste Buch aus der Datenbank auf Seite 1.

20.07.2008 13:59

36 Jörg Kruse

Hmja, MySQL fängt ja auch bei 0 an zu zählen :/ - das "+ 1" kann man sich wohl schenken

 $start = $_GET['seite'] * ($anzahl -1);

20.07.2008 14:06

37 Tilman

Merci!

Jetzt kommt aber immer noch das auf der 1. Seite letzte Ergebnis auf der 2. als erstes, also doppelt.

20.07.2008 14:12

38 Jörg Kruse

Ja, irgendwie sind meine mathematischen Fertigkeiten heute auch nicht so ausgeprägt ;). Die 1 muss von der Seitenzahl abgezogen werden

$start = ($_GET['seite'] - 1) * $anzahl;

D.h. bei $anzahl = 10 werden auf Seite 3 die Ergebnisse 20 bis 29 ausgegeben

20.07.2008 14:28

39 Tilman

Jetzt kommt statt den Ergebnissen diese Fehlermeldung:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in E:\TIL\xampp\htdocs\buecher\results.php on line 93

In Zeile 93 steht:
$num = mysql_num_rows($result);

Davor, bei diesem Code
$start = $_GET['seite'] * ($anzahl -1);
ist aber keine Fehlermeldung gekommen.

20.07.2008 14:40

40 Jörg Kruse

Auf welcher Seite kommt das denn?

Falls du die erste Seite ohne Seitenparamater ("?seite=1") aufrufst, musst du innerhalb des Scriptes noch die Seitenzahl 1 setzen

if (!isset(GET['seite'])) {
    $seite = 1;
}

Andernfalls denkt das Script, dass $seite = 0 ist und errechnet dann einen negativen Startwert

20.07.2008 14:47 | geändert: 20.07.2008 14:48