Eurokicker
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 08.07.2002, 12:43   #1
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
Question

brauche hilfe bei LIMIT und ... eintraege pro seite


hi leute,

hab am wochenende etwas rumprobiert und leider bin ich bei einem problem haengengeblieben.
sai hat schon recht mit der frage nach einem guten php-buch. mit bill mccartys "php4 - it-tutorial" hat es nicht geklappt und bei kofler in mysql ist es zwar beschrieben, aber nicht zu verstehen.
hier mein problem:

ich moechte, dass mein php-script daten aus einer db ausliest sie mit einer bestimmten anzahl pro seite ausgibt. soweit nicht schwierig.
dann soll er soundsoviele auf der ersten seite und dann die gleiche anzahl auf der zweiten und so weiter ...
das ganze mit seitenzahlen als links unten. wie in jedem forum, jedem suchsystem und so weiter. oder eben auch hier im tp.

jetzt bin ich nicht allein auf der suche nach einem script, sondern etwas zusaetzlicher hilfe. ich moechte nicht nur, dass es funktioniert ... ich moechte es verstehen!

gibt es unter euch einen nervenstarken hilfsbereiten menschen, der mir hier auf die spruenge helfen kann
wuerde mich freuen.

thx, theo
theo ist offline   Mit Zitat antworten


Alt 08.07.2002, 12:53   #2
TP-Greis
 
Benutzerbild von Lars
 
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
Lars bringt sich richtig ein
Lade Dir mal mein Gästebuch runter (-> Traum-Scripts), selbiges ist mit der von Dir gewünschten Funktionalität ausgestattet.

Hier die Theorie: Du ermittelst die Anzahl der Gesamteinträge und teilst diese durch die Anzahl der gewünschten Datensätze pro Seite (mit Restwert arbeiten und Übehang auf letzte Seite verteilen!). Dann erzeugst Du auf jeder Folgeseite einen "Vor"- und einen"Zurück"-Link, bei denen immer der Offset um die Anzahl der Datensätze pro Seite in- bzw. dekrementiert wird. Die Direkt-Links zu den einzelnen Seiten generierst Du in einer Schleife genau so. Dann noch ein paar Features (auf der ersten Seite keinen "Zurück"-Link etc.) hinzufügen - und fertig!
__________________
Give up yourself into the moment — The time is now.
Lars ist offline   Mit Zitat antworten
Alt 08.07.2002, 12:56   #3
TP-Greis
 
Benutzerbild von Lars
 
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
Lars bringt sich richtig ein
Hier das entsprechende Snipet:

PHP-Code:
$get_last_post mysql_query("SELECT id FROM gb");
    
$last_post mysql_affected_rows();
    
$rows $eintraege;

    
$prev_offset $offset -$rows;
    
$next_offset $offset +$rows;

    if(
$prev_offset < -1){
        
$prev "&nbsp;";
    }
    else{
        
$prev "<a href=\"$PHPSELF?what=show&offset=$prev_offset&limit=$rows\"><< Zur&uuml;ck</a>";
    }

    if(
$next_offset >= $last_post){
        
$next "&nbsp;";
    }
    else{
        
$next "<a href=\"$PHPSELF?what=show&offset=$next_offset&limit=$rows\">Weiter >></a>"
    }  

    if(
$last_post>$rows){
        
$pages=intval($last_post/$rows);
        if(
$last_post%$rows){
            
$pages++;
        }
    }

    for(
$i=1;$i<=$pages;$i++){
        
$go = ($i-1)*$rows;
        if(
$go==$offset){
            
$show_go .= "[<span class=\"bold\">$i</span>] ";
        }
    else{
        
$show_go .= "[<a href=\"$PHP_SELF?what=show&offset=$go&limit=$rows\">$i</a>]"
    } 
__________________
Give up yourself into the moment — The time is now.
Lars ist offline   Mit Zitat antworten
Alt 08.07.2002, 17:29   #4
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
Unhappy

immer noch nicht klar


hi lars,

danke fuer die hilfe!
ich hatte mit einer funktion gerechnet, etwa so:

count () from ... where ...

warum finde ich diesen eintrag in deinem script nicht?
vielleicht koennten wir schrittweise vorgehen.

einen limit-eintrag habe ich schon im script. aber dann ...?

theo
theo ist offline   Mit Zitat antworten
Alt 08.07.2002, 17:37   #5
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
Lightbulb

oh, vielleicht sollte ich noch erwaehnen ...


bei mir ist einen db mit einer ganzen reihe von eintraegen. ich lasse nicht alle anzeigen, sondern kann wahlweise das ergebnis einschraenken. d.h., dass das abfrageergebnis nicht immer gleich der anzahl der in der db vorhandenen datensaetze sein muss.

$anfrage= "SELECT ..., ..., ... FROM ... WHERE ... IN('$...','$...','$...','$...')";

er muesste daher erstmal die tatsaechliche anzahl der gewaehlten datensaetze ermitteln.
theo ist offline   Mit Zitat antworten
Alt 08.07.2002, 17:49   #6
TP-Greis
 
Benutzerbild von Lars
 
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
Lars bringt sich richtig ein
Wir gehen jetzt mal davon aus, dass auf jeder Seite zehn Einträge ausgegeben werden sollen. Die reine SQL-abfrage sähe dann für die ersten zehn Records so aus:

Code:
SELECT * FROM tabelle LIMIT 0,10

Ergebnis:
? ? ? ? ? ? ? ? ? ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Um die nächsten zehn (also Nr. 10 bis Nr. 19) abzufragen, müsste die Query so modifiziert werden:

Code:
SELECT * FROM tabelle LIMIT 10,10

Ergebnis:
                   ?  ?  ?  ?  ?  ?  ?  ?  ?  ?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Soweit die SQL-Theorie - da da ganze aber automatisiert werden soll, müssen wir den Offset (also die Startpostion der Abfrage) rechnerisch ermitteln. Wir bleiben für den Anfang mal bei zwei Links, mit denen der User Vor- und Zurückblättern kann. Um diese zu realisieren, müssen wir dem Script lediglich den aktuellen Offset mitteilen und entsprechend die Anzahl der auszugebenden Datensätze pro Seite addieren (Vor-Link) bzw. Subtrahieren (Zurück-Link):

Code:
// es wird davon ausgegangen, dass die URL des Scriptes die Variable $offset mit dem Wert 30 (dritte Seite) enthält

$anzahl_datensaetze_pro_seite = 10;

$vor = $offset - $anzahl_datensaetze_pro_seite;
$zurueck = $offset + $anzahl_datensaetze_pro_seite;

$link_vor = "<a href=\"$PHP_SELF?offset=$vor\">Vor</a>";
$link_zurueck = "<a href=\"$PHP_SELF?offset=$zurueck\">Zurück</a>";

// Die SQL-Abfrage sähe dann so aus

$zeug = mysql_query("SELECT * FROM tabelle LIMIT $offset,10");
Soweit alles klar?
__________________
Give up yourself into the moment — The time is now.
Lars ist offline   Mit Zitat antworten
Alt 09.07.2002, 16:44   #7
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
Thumbs up

ok, danke lars ...


soweit erstmal verstanden.
es gibt da nur ein problem: ich bekomme eine fehlermeldung.

ich habe in der config.inc.php die variable $offset mit 30 definiert (ich denke aber, er sollte sie ueber count() selber ermitteln) und die anzahl der anzuzeigenden datensaetze $pagesize mit 15 angegeben.
sobald ich die variable $offset in den select-befehl einbinde, zeigt meine abfrage kein ergebnis mehr.

mal eine andere frage: sollte bei <a href=\"$php_self?offset=$back\">back</a> bei offset nicht ein "$" davorstehen?!

theo
theo ist offline   Mit Zitat antworten
Alt 09.07.2002, 16:57   #8
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
Wink

sorry ...


die fehlermeldung war mein fehler semikolon vergessen

trotzdem habe ich noch immer das gleiche problem. er zeigt nichts an ... d.h. ... tut er schon, ich muss nur eine ganze menge zeug auswaehlen. ich denke, unter einer bestimmten anzahl datensaetze zeigt er nichts an. und das wiederum haengt sicherlich mit den variablen $pagesize und $offset zusammen.
theo ist offline   Mit Zitat antworten
Alt 09.07.2002, 22:04   #9
TP-Greis
 
Benutzerbild von Lars
 
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
Lars bringt sich richtig ein
Zeig' mal Dein Script, der Fehler sollte sich eigentlich schnell lokalisieren lassen.
__________________
Give up yourself into the moment — The time is now.
Lars ist offline   Mit Zitat antworten
Alt 09.07.2002, 22:28   #10
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
Post

das script ...


<?php

include("inc/config.inc.php");
include("inc/functions.inc.php");

$link=mysql_connect($db_host,$db_user,$db_pass);
mysql_select_db($db_name);

$anfrage="SELECT ... , ... , ... FROM ... WHERE ... IN($art1,$art2,$art3,$art4,$art5) LIMIT $offset,$pagesize";

?>

und in der config.inc.php

$pagesize = "15";

$offset = "30";
theo ist offline   Mit Zitat antworten
Alt 11.07.2002, 10:35   #11
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
Question

und wie weiter ...


trotz langem probieren habe ich das problem nicht loesen koennen.
findet sich vielleicht nochmal jemand, der ...
theo ist offline   Mit Zitat antworten
Alt 16.07.2002, 11:29   #12
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein
Question

???


ich bin der loesung immer noch nicht naeher gekommen.
hat vielleicht nochmal jemand einen augenblick ...

theo
theo ist offline   Mit Zitat antworten
Alt 16.07.2002, 12:52   #13
TP-Greis
 
Benutzerbild von Lars
 
Registriert seit: Jun 2001
Ort: Bonn-Altstadt
Lars bringt sich richtig ein
Nur zur Info: Ich konnte im obenen geposteten Code auch keinen Fehler entdedcken ... (nicht, dass Du denkstg, ich hätte kein Interesse mehr an der Lösung des Problems).
__________________
Give up yourself into the moment — The time is now.
Lars ist offline   Mit Zitat antworten
Alt 16.07.2002, 13:01   #14
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo bringt sich richtig ein

oh ...


hi lars,

dummerweise funktioniert es trotzdem nicht.
war denn der code soweit vollstaendig? sicher nicht oder?!
vielleicht, wenn der rest noch dazukommt, dass es dann geht!?

theo
theo ist offline   Mit Zitat antworten
Alt 16.07.2002, 13:13   #15
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
Wie wäre es mit meiner Variante (ist viel Kürzer, finde ich). Es gibt (nach Bedarf) einen "Nächste Seite" und "Vorherige Seite" an, und dazwischen Seitenzahlen, die man ebenfalls anklicken kann:

PHP-Code:
$eintraege=20// Anzahl der Eintraege pro Seite

if(!isset($limit)) $limit 0;
$result mysql_query("SELECT id,titel,time,content FROM news WHERE status='view'");
$anz mysql_num_rows($result);
$result mysql_query("SELECT id,titel,time,content FROM news WHERE status='view' ORDER BY time DESC LIMIT $limit,$eintraege");
$anz_pages ceil($anz/$eintraege);
$curr_page $limit/$eintraege
So, die Links - Vorherige Seite:

PHP-Code:
<?php
if($curr_page != 0)
{
?>
<a href="../news/?limit=<?php echo ($limit-$eintraege); ?>" class="cmsnavi">Vorherige Seite</a>
<?php ?>
Seitenzahlen:

PHP-Code:
<?php
for($a=0;$a<$anz_pages;$a++)
{
    if(
$a != $curr_page)
    { 
?>&nbsp;<a class="cmsnavi" href="../news/?limit=<?php echo ($a*$eintraege); ?>"><?php echo ($a+1); ?></a><?php
    
}
    else
    {
        echo 
"&nbsp;[".($a+1)."]";
    }
}
Nächste Seite:

PHP-Code:
<?php
if(($limit+$eintraege) < $anz)
{
?>
<a href="../news/?limit=<?php echo ($limit+$eintraege); ?>" class="cmsnavi">N&auml;chste Seite</a>
<?php ?>
Viel Spaß
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
brauche hilfe bei LIMIT und ... eintraege pro seite brauche hilfe bei LIMIT und ... eintraege pro seite
« [PHP] Datensätze über mehrere Seiten usw. ausgeben - aber wie?! | Mit PHP ein Autozeilenumbruch »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu