Pagination

  • Guten Morgen,


    ich bin etwas verzweifelt, bekomme meine Pagination einfach nicht hin. Vielleicht könnt ihr mir weiterhelfen.


    Meine Funktion um alle Mitarbeiter auszulesen sieht so aus



    Der Aufruf dann so:


    PHP
    $mitarbeiter = mitarbeiter($mysqli);


    Die Ausgabe dann so (etwas verkürzt, HTML Tabelle habe ich weg gelassen


    PHP
    foreach($mitarbeiter as $array){ 
     htmlspecialchars($array['ud_vorname']);
    }


    Das alles funktioniert auch, aber ich möchte gerne auf einer Seite immer nur 5 dargestellt haben, wenn es mehr sind, sollte man unten weiterblättern können, ich bekomme dieses einfach nicht hin. Habt Ihr vielleicht eine "einfache" Lösung für mich? Cool wäre es natürlich wenn es ohne Seitenladen geschehen würde, aber ich denken mal das wird sehr kompliziert und aufwendig sein.

  • Wenn du dir 90% sicher bist das weiter geblättert wird, dann kannst du auch alle laden und via JS ausblenden


    Habe ich mir auch erst überlegt, aber es sind gut 5000 Artikel, die bei jedem Seitenaufruf direkt zu laden finde ich etwas hart oder?



    Zitat von cottton

    Das hatten wir vor kurzem -- hatte das mal hier gepostet: Einfache Seitennavigation (PageNav)


    Hab mir die Funktion mal angesehen nur leider verstehe ich überhaupt nicht, wie ich die mit meinem Code verbinden soll :/

  • @Cotton, gibts in SQL sowas wie 'START BY'?
    Weil dann könnte man einfach n button haben der n SQL auführt aka 'gib mir alles, starte bei x limit 5' oder in der Art. :)

  • Ich habe herausgefunden, dass ich so arbeiten kann


    PHP
    $start = 0; $postsPerPage = 30;
    		$stmt = $mysqli->prepare("SELECT user_id, user_code, user_type, user_nickname, user_login, ud_name, ud_vorname 
    									FROM users
    									LEFT JOIN users_detail ON users_detail.ud_Uid =users.user_code LIMIT ?, ?
    								");
    		$stmt->bind_param('ii', $start, $postsPerPage);
    		$stmt->execute();
    		$stmt->bind_result($user_id, $user_code, $user_type, $user_nickname, $user_login, $ud_name, $ud_vorname);
    		$stmt->store_result();


    Bei $start und $postsPerPage kann ich Zahlen eintragen, die dann bei LIMIT beachtet werden. Jetzt müsste ich das noch irgendwie mit dynamisch füllen und mit der Funktion von @Cotton verbinden.

  • Hab ne gute idee :)

    SQL
    SELECT user_id, user_code, user_type, user_nickname, user_login, ud_name, ud_vorname 
    FROM users
    LEFT JOIN users_detail ON users_detail.ud_Uid =users.user_code
    WHERE user_id BETWEEN :start AND :end;


    Beim ausgeben gibst du dem 'next' button einfach die letzzte augegebene ID+1 mit und der bindet dann diese ID+1 wiederum mit :start .. und so weiter, verstehst du?
    Am besten noch ein bisschen AJAX un die Sache läuft

  • Gut, dann hier mal eine kleine ajax.php die du aufrufen kannst um die Daten via AJAX zu laden z.B. so:
    http://hcp-forum.lima-city.de/5128-pagination/0/ajax.php?start=0&end=4
    Das ganze kannst du dann mit JS JSON.parse() Parsen und hast ein Objekt mit den ganzen Benutzern..

  • Hallo,


    vielen dank für deine Hilfe. Wollte mir die Seite ansehen, aber ich sehe nur dieses:


    Zitat

    [{"uid":1,"first_name":"Ruth","last_name":"Jackson","email":"rjackson0@howstuffworks.com","password":"1A5a9fgmV3JUvdhS6ZbW8EWvCL5GXfyJTh","ip_address":"239.221.141.168","last_seen":"2014-10-26"},


    Ist das richtig? :O Wenn ja, dieses sieht natürlich etwas anderes aus wie ich diese benötige?

  • Du wandelst hier beim Ajax-Call die aus der DB kommenden Daten in ein JSON-Objekt um(Java Script Object Notation). Damit musst du dann weiterarbeiten, in wolfs Beispiel wird das ganze nur ausgegeben um zu zeigen was du zurückbekommen wirst :)

  • Ok verstehe, aber warum müssen die Daten so ausgeben werden? Außerdem muss ich ja noch irgendwie ein Zahlenreihe an das ende meiner Seite bekommen um durchzuschalten. Ich habe fast das Gefühl, die Klasse, die ganz oben verlinkt wurde, ist doch besser für mich.

  • Welche Daten du ausgeben willst, weiß ich nicht, dies und auch die Art der Ausgabe musst du dir selbst überlegen.
    Wolf hat dir oben nur eine ajax.php gezeigt die du mit einem AJAX-Call und den entsprechenden Parametern aufrufen musst.
    DU musst im Grunde also Links kreieren ([1-5],[6-10],[11-15]) und denen als Click-Eventhandler die Call-Funktion mit den entsprechenden
    Datensätzen übergeben :)

  • Es gibt kein Start By :D aber LIIMIT :p


    probier mal: (ungetestet)

  • Ich wusste nicht das du auf alle Seiten kommen willst, dachte du willst nur einen Load More Button.
    Und ich wollte dir nicht Vorbeten wie man das macht sondern dir ein Besipiel geben was du dann abwandeln kannst..

  • Hallo cottton,


    vielen Dank für den Code, wollte diesen gerade einbinden, erhalte allerdings eine Fehlermeldung, die wie folgt lautet:


    Zitat

    Warning: Missing argument 2 for countMitarbeiter(), called in /mitarbeiter2.php on line 112 and defined in /mitarbeiter2.php on line 124 Warning: Missing argument 3 for countMitarbeiter(), called in /mitarbeiter2.php on line 112 and defined in /mitarbeiter2.php on line 124


    In Zeile 112 steht dieses:


    PHP
    $lines_count_all = countMitarbeiter($mysqli);


    In Zeile 124 steht dieses:


    PHP
    function countMitarbeiter($mysqli, $start, $postsPerPage){


    Mein ganzer Code sieht derzeit so aus


Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!