Zur Navigation

Nächste Seite Button erstellen

1 Tom12

Hallo,
Ich lese hier aus einer DB mehrere Daten aus
Es sollen auf einer Seite immer nur 18 angezeigt werden
Wie kann ich dies jetzt machen, dass wenn man auf den Button klickt, dass die vorherigen nicht mehr angezeigt werden und dafür die 18 nächsten Daten, sodass man das ganze (solange Daten da sind) unendlich lange durchführen kann und in einem echo eine Fehlermeldung (bzw. ein Hinweis) ausgegeben wird, dass keine Daten zum ausgeben mehr da sind

<?php 
	$statement = $pdo->prepare("SELECT * FROM `test` ORDER BY `id` DESC");
	$result = $statement->execute();
	$count = 0;
	while($row = $statement->fetch()) {
		if ($count < 18) {
			echo $row['title'];
		}
		$count = $count + 1;
	}
?>
<form method="post">
	<button type="submit" name="nextpage">Nächste Seite &rarr;</button>
</form>

09.09.2018 21:35

2 Jörg Kruse

Normalerweise regelt man dies über eine Pagination. An die URL wird ein entsprechender Parameter angehangen, z.B. page=2 für die zweite Seite. Mithilfe dieses Parameters wird dann ein LIMIT Statement für die SQL-Abfrage erzeugt

$page = (empty($_GET['page'])) ? 1 : intval($_GET['page']);

$per_page = 18;
$offset = ($per_page * ($page - 1)) + 1;

$statement = $pdo->prepare("SELECT * FROM `test` ORDER BY `id` DESC LIMIT ?, ?");
$statement->bind_param("ii", $offset, $per_page);
$result = $statement->execute();

Wenn keine Ergebnisse zurückgegeben werden, gibst du deine Fehlermeldung aus

Beim Formular verweist man auf denselben Pfad und erhöht den Parameter $page um 1:

<form method="post" action="script.php?page="<?= $page + 1 ?>">

... falls keine Parameter über POST übergeben werden, geht das auch per method=get:

<form method="get">
        <input type="hidden" name="page" value="<?= $page + 1 ?>">
	<button type="submit" name="nextpage">Nächste Seite &rarr;</button>
</form>

09.09.2018 22:13 | geändert: 09.09.2018 22:23

1 Forenmitglied fand diesen Beitrag gut

3 Tom12

Hi, klappt schonmal ganz gut
Jetzt möchte ich allerdings die URL sauber halten also möglichst keine Get Parameter verwenden
klappt das ganze auch nur über post?
und wie kann ich jetzt herrausfinden, wann keine Daten mehr da sind?

Und ich habe noch ein Problem und zwar ist com CSS her mein Button eigentlich ein <div>, also wüsste ich nicht wie ich damit das Formular bestätigen könnte :/

10.09.2018 21:34

4 Jörg Kruse

Jetzt möchte ich allerdings die URL sauber halten also möglichst keine Get Parameter verwenden
klappt das ganze auch nur über post?

Das geht auch über POST, hat dann allerdings den Nachteil, dass beim Blättern über die Browser-Navigation (Zurück, Aktualisieren) Fehlermeldungen ausgegeben werden, dass das Formular bereits abgesendet wurde.

und wie kann ich jetzt herrausfinden, wann keine Daten mehr da sind?

Du kannst die Ergebnisse vorab zählen, auf stackoverflow sind für PDO einige Möglichkeiten aufgezählt:

https://stackoverflow.com/questions/883365/row-count-with-pdo

Wenn du die Ergebnisse mit fetchAll() statt mit fetch() holst, erhältst du ein Array. Wenn das Array leer ist, gibst du deine Fehlermeldung aus, andernfalls durchläufst du es mit foreach (statt mit while)

Und ich habe noch ein Problem und zwar ist com CSS her mein Button eigentlich ein <div>, also wüsste ich nicht wie ich damit das Formular bestätigen könnte :/

Du kannst ein <button> genauso gestalten wie ein <div>, indem du background-color, border und border-radius entsprechend definierst.

11.09.2018 09:24

1 Forenmitglied fand diesen Beitrag gut

5 Tom12

Danke klappt jetzt alles :D

Dein Forum ist echt toll!

11.09.2018 15:42

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]