automatischer Seitenwechsel bei 25 Einträgen

uwee

Erfahrenes Mitglied
Hallo!

ich weiss, ich nerve heute, aber ich sitze schon den ganzen Tag daran und die meisten Hürden konnte ich schon ohne Hilfe nehmen.
Mein Problem dürfte in JEDEM Forum gelöst sein:
Nach einer bestimmten Anzahl von Beiträgen soll eine weitere Seite hinzugefügt werden.
bei mir soll dies nach 25 Einträgen der Fall sein, allerdings handelt ses sich nicht um ein Forum, sondern um eine Auflistung in einer Tabelle.

Ausgabeteil meiner Abfrage an die MySQL Db:
PHP:
if(!$result or !mysql_num_rows($result))
echo "Keine Ergebnisse</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC><p>Keine Ergebnisse vorhanden</p>";
else {
echo mysql_num_rows($result)," Ergebnisse:</title></head><body link=blue vlink=blue alink=blue bgcolor=#CCCCCC>Es wurden <b>",mysql_num_rows($result),"</b> Titel mit ähnlichem oder gleichem Suchkriterium gefunden:<br>
<hr/><table border=0 cellpadding=3 bgcolor=#CCCCCC><tr><td><b><u>Bild</u></b></td><td><b><u>Name</u></b> / <i>Original Name</i></td><td><b><u>Jahr</u></b></td><td><b><u>Version</u></b></td><td><b><u>FSK</u></b></td><td><b><u>Kathegorie</u></b></td><td><b><u>Info</u></b></td><tr>\n";
while ($row=mysql_fetch_object($result)){
echo "<td><a href=bilder/",$row->bild,".jpg><img src=bilder/",$row->bild,".jpg width=110 heigth=158 border=0></a></td><td><b><font color=red size=4>",$row->name,"</font></b><br><br><i>",$row->original_name,"</i></td><td>",$row->jahr,"</td><td>",$row->version,"</td><td><img src=bilder/",$row->fsk,".jpg border=0></td><td>",$row->cat,"</td><td>",$row->kommentar,"</td></tr>
<tr><td colspan=8>",$row->info,"<br><i>Quelle: <a href=http://www.",$row->quelle,".de target=_blank>",$row->quelle,"</a></i></td></tr>
<tr><td colspan=8><b>Schauspieler:</b> ",$row->actors,"<hr size=5><br></td></tr>\n";
}

FRAGE:
WO muss ich WAS schreiben, damit nach 25 Angaben eine neue Seite beginnen soll und WAS muss ich tun, damit ich unten und/oder oben eine Leiste mit den Seiten habe?!

DANKE

UweE
 
Ums plump zu sagen, suchen.
Gabs hier im forum x mal.

Aber ums kurz zu machen, im SQL-Statement mit limit arbeiten (sie dazu die mysql-doku) und daran anknüpfend kannst du anhand der anzahl der Datensätze (die du natürlich auch auslesen muss -> select count(*) im statement oder num_rows() was allerdigns langsamer ist) jkannst du dir die Anzahl der Seiten berechnen.

Alles andere gibts von Hipp vorgekaut in gläsern
 
Ich habe sowas zwar noch nie programmiert, aber hier ein paar Ideen:
Zähle die Einträge der DB Tabelle.
Teile das Ergebnis durch die Menge der anzuzeigenden Ergebnisse pro Seite.
Mit der dadurch berechneten Zahl machst Du per if Schleife die Links ([1][2][3]...).
Dann Dein select Statement mit einem limit versehen und die Ergebnisse anzeigen lassen.

redlama
 
PHP:
SELECT *
FROM dvd_uebersicht
LIMIT 0,30

damit kann ich ALLE datensätze anzeigen lassen. er beginnt bei Ds 0 anzuzeigen und hört bei Ds 30 auf.
soweit bin ich ja... nur, wie bekomme ich diese menüleiste hin?!

es sind ja immer unterschiedlich viele ergebnisse, demnach kann ich nciht die gesamte Db auslesen lassen
 
Wie gesagt mit select count(*) from tabelle kannst du die Anzahl aller Einträge auslesen.
Diese Teilst du durch Anzahl der Einträge pro Seite (rundest das noch auf mit ceil()).
Dann kannst du daraus entsprechen eine Rechts / Links Navi aufbauen oder eben die Seitenzahlen unten als Links erstellen.

Was heisst unterschiedlich viele Ergebnisse? Weil neue hinzukommen oder wie?
 
es geht um ein projekt DVD-Datenbank!
Man kann nach Namen suchen, nach FSK einfach nach allem und es kommen immer welche dazu.
Und daher, je nach dem, wonach man sucht, kommen unterschiedliche Ds-Mengen heraus!

Mit
PHP:
select count(*) from dvd_uebersicht

Wenn ich das so schreibe, wird er alle Ds der Tabelle durchsuchen, ich will aber nur die Ds, die als Ergebnis ausgegeben wurden.

Wenn ich das LIMIT hinter die Abfrage schreibe, sagt er, dass NUR 30 Ds GEFUNDEN wurden. Aber das is tnicht der Fall, es sind momentan 500. Und er soll nicht auf 30 begrenzen, sondern nur 30 ANZEIGEN!
 
uwee hat gesagt.:
Wenn ich das so schreibe, wird er alle Ds der Tabelle durchsuchen, ich will aber nur die Ds, die als Ergebnis ausgegeben wurden.
Also das ist einfach zu lösen. Mach das Statement mit dem count(*) mit der gleichen where Klausel (oder was auch immer), aber ohne limit. Dann werden nur die Einträge gezählt, die Dir angezeigt werden würden.
uwee hat gesagt.:
Wenn ich das LIMIT hinter die Abfrage schreibe, sagt er, dass NUR 30 Ds GEFUNDEN wurden. Aber das is tnicht der Fall, es sind momentan 500. Und er soll nicht auf 30 begrenzen, sondern nur 30 ANZEIGEN!
Das ist logisch und richtig, denn wenn Du ihm sagst, dass er nur 30 suchen soll (bei 0 beginnend), dann findet er ja auch nur 30. Aber wenn Du Dir dann die 2. Seite anzeigen lässt, setzt Du das limit halt auf 30, 60 und schon hast Du die nächsten 30 Einträge!

redlama
 
brrrt... *durcheinander ist*

ALSO:
alter Quelltext:
PHP:
$suchen=($_POST['suchen']);
$erg_wort=($_POST['name']);
$sort=($_POST['ordnen']);
$sql="";
$result="";
if ($erg_wort!=""){
echo"<p>Treffer mit dem Schlagwort <b>",
($erg_wort), "</b></p>\n";
$sql="SELECT id,name,original_name,jahr,version,bild,cat,info,actors,fsk,quelle,kommentar FROM dvd_uebersicht ".
 "WHERE $suchen LIKE'%" . ($erg_wort) . "%' " .
"ORDER BY $sort LIMIT 0,25";
}

Quelltext zum Zählen:
PHP:
$suchen=($_POST['suchen']);
$erg_wort=($_POST['name']);
$sort=($_POST['ordnen']);
$sql="";
$result="";
if ($erg_wort!=""){
echo"<p>Treffer mit dem Schlagwort <b>",
($erg_wort), "</b></p>\n";
$sql="COUNT( id,name,original_name,jahr,version,bild,cat,info,actors,fsk,quelle,kommentar) FROM dvd_uebersicht ".
 "WHERE $suchen LIKE'%" . ($erg_wort) . "%' " .
"ORDER BY $sort";
}
Und die untereinandersetzen?!

Dann habe ich ja beim zweiten mal in der variable $sql eine ZAHL stehen, eben die Anzahl der Ds. die teile ich dann 25. soweit so gut.
das bedeutet schonmal, dass ich zwei abfragen in zwei variablen brauche.
ist das soweit richtig?
 
Ja... im Prinzip fürhst du einmal die Abfrage aus um die tatsächlichen Daten zu bekommen, ein zweites mal die gleiche Abfrage, jedoch mit einem select count(*) statt den anderne Datenfeldern, um eben zu zählen, wieviel Datensätze es insgesamt betrifft.
Denn du brauchst ja eine Zahl an der du Messen / berechnen kannst, wiviele Seiten es mal werden...

Zu dem Limit 0,30 müsste eher so sein, unter der annahme, das $max die Einträge pro Seite enthält und $seite die aktuell angezeigt Seite, gezählt ab Seite 1:

PHP:
mysql_query("SELECT..... LIMIT ($seite-1)*$max, $max");

Denn auf Seite 2 willst du ja dann von Eintrag 30 dir weitere 30 anschauen, auf Seite 3 von 60-90 usw...
 
uwee hat gesagt.:
Quelltext zum Zählen:
PHP:
$sql="COUNT( id,name,original_name,jahr,version,bild,cat,info,actors,fsk,quelle,kommentar) FROM dvd_uebersicht ".
 "WHERE $suchen LIKE'%" . ($erg_wort) . "%' " .
"ORDER BY $sort";
Fast!
So ist's richtig:
PHP:
$sql="SELECT COUNT(*) FROM dvd_uebersicht ".
 "WHERE $suchen LIKE'%" . ($erg_wort) . "%' " .
"ORDER BY $sort";

redlama
 
Zurück