Kombinierte Formular.- und Blätterfunktion

Damit nicht alle Daten einer DB-Tabelle (MySQL/MariaDB) auf einmal auf der Seite zu sehen sind, sondern übersichtlich auf mehreren Seiten verteilt stehen, benutzt man eine Seitennavigation zum blättern (Pagination).

Mit den Pfeil-Symbolen (◄ ►) kann man zur nächsten oder vorherigen Seite wechseln oder einfach direkt durch die Eingabe einer Seitenzahl in das Formularfeld.

Anwendungsbeispiel

[Bildschirmfoto] 
Kombinierte Formular.- und Blätterfunktion

Dieses Script ist ein Teil der Anleitung: Erster Eintrag in eine MySQL-Datenbank mit PHP. Ein Beispiel für mysqli() finden Sie unter: Daten auf mehreren Seiten aufteilen.

QuelltextKopierenAusblendenZeilen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="UTF-8">
  <title>Nachrichten</title>

  <style>
  body {
   font-family: Verdana, Arial, Sans-Serif;
  }

  a:link, a:visited {
   color: Royalblue;
   text-decoration: None;
  }
  </style>


 </head>
<body>

<h3>Nachrichten</h3>

<?php
// Verbindung zur Datenbank aufbauen.
$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8''root''');

// Anzeige der Datensätze pro Seite
$DatensaetzeSeite 3;

// Anzahl der Datensätze ermitteln
$AnzahlDatensaetze $db->query("SELECT COUNT(*) FROM `nachrichten`")->fetchColumn(0);

// Die Anzahl der Seiten ermitteln
$AnzahlSeiten ceil($AnzahlDatensaetze $DatensaetzeSeite);

 
// Die aktuelle Seite ermitteln
$AktuelleSeite = isset($_GET["seite"]) ? $_GET["seite"] : 1;

// Den Wert überprüfen und ggf. ändern
$AktuelleSeite ctype_digit($AktuelleSeite) ? $AktuelleSeite 1;
$AktuelleSeite $AktuelleSeite < || $AktuelleSeite > $AnzahlSeiten $AktuelleSeite;

// Den Versatz ermitteln
$Versatz $AktuelleSeite $DatensaetzeSeite $DatensaetzeSeite;

// Datensätze auslesen
$select $db->prepare("SELECT `titel`, `autor`, `nachricht`, `datum`
                                  FROM `nachrichten`
                                  ORDER BY `datum` DESC
                                  LIMIT :versatz, :dseite");
$select->bindValue(':versatz'$VersatzPDO::PARAM_INT);
$select->bindValue(':dseite'$DatensaetzeSeitePDO::PARAM_INT);
$select->execute();
$nachrichten $select->fetchAll(PDO::FETCH_OBJ);

// Ausgabe über eine Foreach-Schleife
if ($AnzahlDatensaetze > 0) {
 foreach (
$nachrichten as $nachricht) {
  
sscanf($nachricht->datum"%4s-%2s-%2s"$jahr$monat$tag);
  echo 
'<p><small>.  $tag '.' $monat '.' $jahr .
   
'</small> - <b>$nachricht->titel '</b><br>.
   
' Autor: <em>$nachricht->autor '</em><br>.
   
nl2br($nachricht->nachricht) . '</p>';
 }

 
// Formular.- und Blätterfunktion
 
echo '<form action="' $_SERVER["SCRIPT_NAME"] . '" method="GET" autocomplete="off">.
  ((
$AktuelleSeite 1> ?
  
'<a href="?seite=' . ($AktuelleSeite 1) . '">&#9668;</a>:
  
&#9668;') .
 
<label>Seite <input type="text" value="' $AktuelleSeite '" name="seite" size="3"
  title="Seitenzahl eingeben und Eingabetaste betätigen"> von ' $AnzahlSeiten '</label>.
  ((
$AktuelleSeite 1<$AnzahlSeiten ?
   
<a href="?seite=' . ($AktuelleSeite 1) . '">&#9658;</a>:
   
&#9658;') .
 
'</form>';
}
else {
 echo 
'<p>Keine Nachrichten vorhanden.</p>';
}
?>

</body>
</html>

DB-Tabelle

Folgende DB-Tabelle wurde im Anwendungsbeispiel verwendet:

CREATE TABLE `nachrichten` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `titel` varchar(80) COLLATE utf8_unicode_ci NOT NULL,
  `autor` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `nachricht` text COLLATE utf8_unicode_ci NOT NULL,
  `datum` date NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `nachrichten` (`id`, `titel`, `autor`, `nachricht`, `datum`) VALUES
(1,	'Sprüche 1',	'Werner',	'Stur lächeln und winken, Männer!',	'2016-07-01'),
(2,	'Yeti gefunden',	'Jörg',	'Gestern in den Morgenstunden sah Reinhold M. einen ...',	'2016-07-04'),
(3,	'Eine Scheibe',	'Hans',	'Die Erde ist eine Scheibe Käse, hier der Beweis ...',	'2016-07-02'),
(4,	'Wasser und Balken',	'Stefan',	'Wasser hat keine Balken. Wirklich! ...',	'2016-07-09');

Voraussetzung

PHP 5.6+, MySQL/MariaDB - Datenbank

Tipps

Berechnungen mit dem Datum
Feiertage, Mondphase, Wochentag, Sonnenaufgang und Sonnenuntergang, Julianisches Datum, Sternzeichen, ...
Seiten dynamisch mit PHP erstellen
Vielleicht kennen Sie dieses Problem: Sie möchten gerne eine Seite ohne Frames erstellen, wollen aber auch nicht bei jeder Änderung an der Navigation alle Seiten ändern. Nur mit HTML gibt es hier keine Lösung und nicht jeder Benutzer hat JavaScript im Browser aktiviert, stattdessen sollten Sie auf PHP zurückgreifen.
Seiten druckfrisch gestalten
Mancher Besucher einer Website möchte eine bestimmte Seite ausdrucken, auf dem Papier stören dann Elemente wie Werbung, Navigationsleisten, großflächige Design-Elemente oder andere Elemente. Wie Sie diese vor dem drucken "wegzaubern" erfahren Sie hier.
Diese Schlagwörter könnten Sie interessieren:
SQLite Webseitenschutz Counter Suchmaschine Zebra-Tabelle Sprachumschaltung Operatoren Zugriffsrechte Kommentar-Box Quelltext Dynamische Seiten Wasserzeichen Zeichnen Wecker Rahmen Diashow Floodsperre Lokaler Webserver Textgestaltung Zeitansage