Guten Morgen,
Arne Drews $ cottton :
Vielen Dank für eure sehr gute Hilfe und Mühe.
Okay. Wenn ich es nach der Syntax erstelle und die Werte so eintrage wird trotzdem nichts Ausgegeben.
Wenn ich OFFSET in die SQL-Query Eingebe verfärbt sich das aber nicht Rot. Und es kommt zum Fehler.
Dies ist der Codeteil vom Limit und Offset:
$limit = 5;
$offset = 0;
if($page >= 1){
$offset = ($page-1) * $limit;
}
if($offset >= $userCount){
$offset = 0;
}
$selectUsers = $dbv->prepare("SELECT userId, username, avatar, rang FROM users LIMIT :start, :offset");
Alles anzeigen
Beispiel:
Wir sind auf Seite 1. Also wird dem Offset der Wert null zugewiesen, denn (1 -1) * 5 = 0. Somit steht in der SQL-Query drin:
Select columns FROM users LIMIT 5, 0 . Da wird nichts aus der DB gezogen. Nun gehen wir auf Seite 2. Da lautet die Rechnung (2 - 1) * 5. Da kommt dann 5 raus. Das heißt es werden ab dem startIndex 5, 5 columns aus der DB gezogen. Nun gehen wir auf Seite 3. Rechnung : (3 - 1) * 5 = 10. Nun werden von startIndex 5, 10 Columns aus der DB gezogen. Und so weiter....
Seite 1 bekommt somit keine Resultate zurück Weil der Offset 0 ist. Deswegen bekommt erst Seite 2 die Daten aus der Datenbank.
Da liegt irgendwo dann ein Fehler vor. Aber wenn bei Seite 3 vom startIndex 5, 10 Reihen gefetcht werden sollte man doch 10 Ausgaben haben?
Zitat
Ohne bindParam() - also die Parameter per execute übergeben - werden die Values default immer als String in die Query eingefügt.
Gibst Du also ein array('limit' => 5) als integer rein, wird trotzdem (default) ein String eingefügt.
Aso okay. Darum funktioniert das nicht. Jetzt wird es mir verständlich warum es nicht funktioniert.
Zitat
Zu Deinem Script: ich glaub ich weiß jetzt, was Du willst.
Du willst die Links
<< Previous [1][2][3][4][5] Next >>
darstellen. Das aber dynamisch, damit sowas nicht passiert:
<< Previous [1][2][3][4][5][6][7][8][9][10][12][13][14][15]... Next >>
sondern:
<< Previous [5][6][7][8][9] Next >>
Alles anzeigen
Nein. Da hast du mich falsch verstanden. Das ist mir nicht so wichtig. Es geht um die Anzeige wie viel User von so viel Usern angezeigt wurden.
Beispiel:
Page 1: 5 von 18 User
Page 2: 10 von 18 User
Page 3: 15 von 18 User
Page 4: 18 von 18 User.
Diese Anzeige funktioniert solange man beim löschen keine ganze Page "löscht". Das heißt wenn man auf Page 4 nun alle 3 User löscht kommt man automatisch auf Page 3 weil Page 4 leer ist. Auf Page 3 sind aber nur 15 von 15 User. In der Url steht trotz automatischen Wechsel auf Page 3 noch als Parameter page=4 drin. Somit ist die Anzeige nicht 15 von 15 User sondern 20 von 15 User. Nun wenn ich über die Pagination auf Seite 3 klicke wird wieder alles normal dargestellt.
Wie erreiche ich es, dass wenn Page 4 leer ist und dann automatisch man auf Page 3 kommt dies auch in der Url beim Parameter angepasst wird.
Damit meine ich wenn eine Seite leer ist, dass dann in der Url man auf die darunterliegende Seite, in diesem Fall Seite 3, geleitet wird, sodass diese Ungereimtheiten bei der Anzeige x von x User nicht vorkommen.
Hier ist die Live Demonstration:
Link: http://stef97.bplaced.net/admin/php/manageUser.php
Wenn du den User basti1012 auf der Page 2, der Pagination löschst, wird dir die Page 1 Angezeigt, aber in der Url steht immernoch ?page=2 drin.
basti1012 & Co :
Wenn es euch was ausmacht, dass ich eure Namen da zum testen erstelle dann sagt es mir bitte.
Grüße,
Stef