Blätterfunktion funktioniert nicht gescheit

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Blätterfunktion funktioniert nicht gescheit

    Hallo,

    ich programmier ja derzeitig ein Gästebuch mit einer Blätterfunktion.

    Das Problem ist jetzt das die Blätterfunktion nicht die richtigen Einträge ausgibt.

    Sozusagen ist die Ansicht der Einträge gerade anders rum, auf der letzten Seite stehen die wenigsten Einträge während auf der ersten Seite die meisten Einträge stehen (also max. 5).

    Quellcode

    1. // number of entries completly
    2. $entries_query = $myDB->query("SELECT entry_ID FROM ".TABLE_PREFIX."entry ORDER BY entry_date DESC");
    3. $entries_complete = $myDB->affected_rows();
    4. // get maximum number of entries per site
    5. $entries_per_site = $myDB->getData("SELECT setting_value FROM ".TABLE_PREFIX."settings WHERE setting_name = 'entries_per_site'");
    6. // calculate number of sites
    7. $number_of_sites = ceil($entries_complete/$entries_per_site[0]);
    8. // get site number per GET and check if site number numeric and not over 0 or over number_of_sites
    9. if(!isset($_GET["siteID"]) OR $_GET["siteID"] < 0 OR $_GET["siteID"] > $number_of_sites OR !is_numeric($_GET["siteID"]))
    10. {
    11. $currentSite = 1;
    12. }
    13. else
    14. {
    15. $currentSite = $_GET["siteID"];
    16. }
    17. // calculate start entry
    18. $start = $number_of_sites*$entries_per_site[0]-$entries_per_site[0]; [b]// Das Problem liegt jetzt glaube ich hier![/b]
    19. // get entries
    20. $entries = $gbook->getEntries($start, $entries_per_site[0]);
    Alles anzeigen


    Die Funktion getEntries bei der die Einträge geholt werden sieht so aus:

    Quellcode

    1. function getEntries($start, $end)
    2. {
    3. // save entries in an array
    4. $query = myDB::getInstance()->query("SELECT entry_name, entry_text, DATE_FORMAT(entry_date,'".DATETIME_FORMAT."') AS entry_date_form, entry_mail, entry_website FROM ".TABLE_PREFIX."entry ORDER BY entry_date DESC LIMIT ".$start.",".$end."");
    5. while($row = myDB::getInstance()->fetchArray())
    6. {
    7. $entries[] = $row;
    8. }
    9. return $entries;
    10. }


    Ich habe das ja mittels LIMIT bestimmt welche Einträge geholt werden. $end ist in dem Fall $entries_per_site[0] und der Wert beträgt 5 (den Wert bekommt er aus der Datenbank).

    Nochmal zur Veranschaulichen: Ich habe 28 Einträge und 6 Seiten und 5 Einträge pro Seite. Auf der ersten Seite stehen Einträge von 24-28 und auf der letzten Seite Einträge von 1-3.

    Müsste ja jetzt genau andersrum sein: 26-28 und auf der letzten Seite 1-5.

    Findet da einer den Fehler - das macht mich noch ganz wahnsinnig :(!
  • Sinn macht es meiner Meinung schon. Die letzte Seite ist schließlich dann gefüllt und nicht halb leer und dafür erste Seite rand voll.
    Ich weis nicht, es ist komisch. Ich habe 5 Leute dazu gefragt und alle haben sozusagen das selbe gemeint wie du. Warum versuch ich unbedingt anders zu denken :D .

    Also würde die Sortierung der Einträge wie es jetzt stimmen?

    Mit Sortierung ändern meinst du DESC zu ASC so das die neusten auf Seite 6 sind und die ältersten auf Seite 1, oder?
  • Ich habe dir mal ein Beispiel, das so weit funktioniert, geschrieben. Du musst das dann lediglich an dein Script anpassen. Solltest du Probleme oder Fragen haben einfach schreien:

    Quellcode

    1. $data = Core::getDatabase()->query("
    2. SELECT count(*) as num,
    3. '5' as per_site,
    4. count(*) % 5 as buffer,
    5. CEIL(count(*) / 5) as sites
    6. FROM test");
    7. $data = $data->toArray(0);
    8. if(isset($_GET['site']) && $_GET['site'] > 0) {
    9. $site = $_GET['site'];
    10. }
    11. else $site = 1;
    12. if($site == 1) {
    13. $start = 0;
    14. $end = $data['buffer'];
    15. }
    16. else if($site == 2) {
    17. $start = $data['buffer'];
    18. $end = $data['per_site'];
    19. }
    20. else if($site == $data['sites']) {
    21. $start = $data['num'] - $data['per_site'];
    22. $end = $data['per_site'];
    23. }
    24. else {
    25. $start = $data['buffer'] + (($site - 2) * $data['per_site']);
    26. $end = $data['per_site'];
    27. }
    28. $result = Core::getDatabase()->query("SELECT * FROM test ORDER BY domainid LIMIT %u,%u", $start, $end);
    29. return "$start - $end <br /><pre>".print_r($result->toArray(), true);
    Alles anzeigen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Szabo ()