SQLite-Datei mit PHP und PDO erstellen

Der Vorteil von SQLite ist, das die Datenbank eine Text-Datei ist und keine Verbindung zu einem Datenbank-Server benötigt. Ideal für kleinere Datenmengen oder wenn die Datenbank transportabel sein soll.

Live-Demo - Nachrichten
(Demo öffnet in einem neuen Tab)
Live-Demo - Nachrichten

Wer schon Erfahrung mit einer Datenbank und PDO hat, für den ist das eintragen / bearbeiten der Daten ein alter Hut (hej!) Alle anderen sollten den Artikel » Erster Eintrag in eine MySQL-Datenbank mit PHP lesen, da viele der Anweisungen im Script dort beschrieben werden.

Verbindung zur Datenbank

Hier wird eine Verbindung zur Datei: datenbank.sqt hergestellt. Ist die Datei nicht vorhanden so wird diese angelegt. Des weiteren werden die Schreibrechte der Datei geprüft und evtl. korrigiert.

Quelltext „verbinden.phpKopierenAusblendenZeilen

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
/*
 * SQLite - Nachrichten Einstellungen - verbinden.php
 */


// Benutzer (Administrator)
$ADMINISTRATOR "user";

 
/* Passwort (Administrator)
 Aus Sicherheitsgründen sollte das Passwort min. 8 Zeichen enthalten! */
$BENUTZER_PASS[$ADMINISTRATOR] = "12345";

 
/* Weitere Benutzer und Passwörter hinzufügen (Optional).
 Die Kommentarzeichen (//) müssen entfernt werden
 um neue Benutzer hinzufügen zu können! */

// $BENUTZER_PASS["user2"] = "1234";
// $BENUTZER_PASS["user3"] = "007";

// Pfad zur Datenbank
$datenbank "db/datenbank.sqt";

// Anzahl der Datensätze (Nachrichten) pro Seite
$DatensaetzeSeite 3;

// Länge des minimalen Suchbegriffs
$suchbegriffMin 4;

 
/* Datenbank-Datei erstellen
 https://www.sqlite.org/datatype3.html */
if (!file_exists($datenbank)) {
 
$db = new PDO('sqlite:' $datenbank);
 
$db->exec("CREATE TABLE nachrichten(
  id INTEGER PRIMARY KEY,
  titel VARCHAR(100),
  autor VARCHAR(35),
  nachricht TEXT,
  anzeige VARCHAR(1),
  datum VARCHAR(20))");
}
else {
 
// Verbindung
 
$db = new PDO('sqlite:' $datenbank);
}

// Schreibrechte überprüfen
if (!is_writable($datenbank)) {
 
// Schreibrechte setzen
 
chmod($datenbank0777);
}

// Fehlermeldungen anzeigen
error_reporting(E_ALL);
ini_set('display_errors'true);

function 
sqlFehler($meldung) {
 die(
'<p class="status_ko">Fehler in der SQL-Anweisung!<br><em>$meldung '</em></p>');
}

// Nachrichten formatieren
function format($text) {
 
$text htmlspecialchars($textENT_HTML5'UTF-8');
 
$text preg_replace_callback('#(( |^)(((http|https|)://)|www.)\S+)#mi''linkUmwandeln'$text);

 
$text preg_replace('/\[b\](.*)\[\/b\]/Usi''<b></b>'$text); // [b]
 
$text preg_replace('/\[i\](.*)\[\/i\]/Usi''<i></i>'$text); // [i]
 
$text preg_replace('/\[s\](.*)\[\/s\]/Usi''<s></s>'$text); // [s]
 
$text preg_replace('/\[q\](.*)\[\/q\]/Usi''<q></q>'$text); // [q]
 
$text preg_replace('/\[u\](.*)\[\/u\]/Usi''<u></u>'$text); // [u]
 
$text preg_replace('/\[color=(.*)\](.*)\[\/color\]/Usi''<span style=\'color:\'></span>'$text); // [color=#FF12345]  [color=green]
 
$text preg_replace('/\[sup\](.*)\[\/sup\]/Usi''<sup></sup>'$text); // [sup]
 
$text preg_replace('/\[sub\](.*)\[\/sub\]/Usi''<sub></sub>'$text); // [sub]
 
$text preg_replace('/\[img=(.*)\](.*)\[\/img\]/Usi''<img class="bild" src="" title=""><em></em>'$text); // [img]
 
$text preg_replace('/\[list\](.*)\[\/list\]/Usi''<ul></ul>'$text); // [list]
 
$text preg_replace('/\[olist\](.*)\[\/olist\]/Usi''<ol></ol>'$text); // [olist]
 
$text preg_replace('/\[li\](.*)\[\/li\]/Usi''<li></li>'$text); // [li]
 
$text preg_replace('/\[code\](.*)\[\/code\]/Usi''<code></code>'$text); // [code]
 
$text preg_replace('/\[bcolor=(.*)\](.*)\[\/bcolor\]/Usi''<span style=\'background:\'></span>'$text); // [bcolor=#FF12345]  [bcolor=green]

 
return nl2br($text);
}

function 
linkUmwandeln($hit) {
 
$url trim($hit[1]);

 if ((
substr($url07) != 'http://') && (substr($url08) != 'https://')) {
  
$url "http://" $url;
 }
 return 
<a href="' $url '" target="_blank" rel="noopener">$url '</a>';
}

function 
formatierung() {
 return 
'<details>
<summary>Formatierung</summary>
<p id="format">
 b = <b>fett</b> <code id="b">[b]Text[/b]</code><br>
 Bild =  &#127917; <code id="url">[img=<b>url</b>]Titeltext[/img]</code><br>
 <span style="background:yellow">Hintergrundfarbe</span> <code id="bcolor">[bcolor=<b>yellow</b>]Text[/bcolor]</code><br>
 i = <i>kursiv</i> <code id="i">[i]Text[/i]</code><br>
 ol = Geordnete Liste <code id="ol">[ol]Text[/ol]</code><br>
 ul = Ungeordnete Liste <code id="ul">[ul]Text[/ul]</code><br>
 li = &bull; Listenelement <code id="li">[li]Text[/li]</code><br>
 q = <q>Anführungszeichen</q> <code id="q">[q]Text[/q]</code><br>
 s = <s>Durchgestrichen</s> <code id="s">[s]Text[/s]</code><br>
 sub = <sub>Tiefgestellt</sub> <code id="sub">[sub]Text[/sub]</code><br>
 sup = <sup>Hochgestellt</sup> <code id="sup">[sup]Text[/sup]</code><br>
 <span style="color:#FF12345">Textfarbe</span> <code id="color">[color=<b>red</b>]Text[/color]</code><br>
 u = <u>Unterstreichen</u> <code id="u">[u]Text[/u]</code><br>
</p>
</details>';
}

Bitte nehmen Sie per Hand keine Änderungen an der Datei: "datenbank.sqt" vor (enthält zum Teil unsichtbare Steuerzeichen), da dadurch die Datei unbrauchbar werden kann! Bearbeiten können Sie diese Datei zum Beispiel mit dem Programm: DB Browser for SQLite

Nachricht eintragen

Die Daten werden über ein Formular in die Datei eintragen.

[Bildschirmfoto] 
Nachricht eintragen
Nachricht eintragen

Quelltext „eintragen.phpKopierenAusblendenZeilen

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
/*
 * SQLite - Nachrichten Eintragen - eintragen.php
 */


session_start();

 
// Verbindung zur Datenbank-Datei herstellen
 
include "verbinden.php";

// Vorschau
if (isset($_GET["vorschau"])) {
 if (!empty(
$_POST["nachricht"])) {
  echo 
format($_POST["nachricht"]);
 }
 exit;
}

// Benutzername gesetzt
if (!isset($_SESSION["benutzername"])) {

 
// Zur Anmeldung weiterleiten
 
header("Location: anmelden.php");
 exit;
}

// Überprüfen ob das Formular versendet wurde.
if ($_SERVER["REQUEST_METHOD"] == "POST") {

 
// Die Nachricht vom  Admin. sofort anzeigen
 
$anzeige $_SESSION["benutzername"] == $ADMINISTRATOR 0;

 
/* prepare() bereitet die Anweisung für die Ausführung vor.
  Die Platzhalter werden hier anstatt den POST-Variablen eingesetzt. */
 
$insert $db -> prepare("INSERT INTO nachrichten 
         (`titel`, `autor`, `nachricht`, `anzeige`, `datum`)
  VALUES (:titel, :autor, :nachricht, :anzeige, :datum)") or sqlFehler($db->errorInfo()[2]);

 
/* Die Platzhalter werden mit $insert->bindValue() durch den
  Inhalt der POST-Variablen ersetzt und maskiert. */
 
$insert->bindValue(':titel'$_POST["titel"]);
 
$insert->bindValue(':autor'$_SESSION["benutzername"]);
 
$insert->bindValue(':nachricht'$_POST["nachricht"]);
 
$insert->bindValue(':anzeige'$anzeige);
 
$insert->bindValue(':datum'date("Y-m-d H:i:s"));

 
/* $insert->execute() führt die vorbereitete Anweisung aus.
  Bei einem erfolgreichen Eintrag wird 'true' zurück gegeben. */
 
if ($insert->execute()) {

  
// Zu den Nachrichten weiterleiten
  
header("Location: nachrichten.php");
  exit;
 }
}
?>
<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="UTF-8">
  <title>Nachricht eintragen</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="style.css">
  <script src="script.js"></script>
 </head>
<body>

<nav>
 <a href="nachrichten.php">Nachrichten</a> |
 <?=isset($_SESSION["benutzername"]) ? '<u>Eintragen</u> |' '';?>
 <a href="suchen.php">Suchen</a> |
 <?=isset($_SESSION["benutzername"]) ? '<a href="anmelden.php?abmeldung">Abmelden</a>'<a href="anmelden.php">Anmelden</a>';?>
</nav>

<form id="form" method="post">
 <div id="vorschau"></div>
 <p>
  <label>
  <ins>T</ins>itel: <input type="text" name="titel" size="35" minlength="10" maxlength="100" required="required" accesskey="t" autofocus="autofocus" placeholder="Titel mind. 10 Zeichen" spellcheck="true">
  </label>
 </p>

 <p>
  <label><ins>N</ins>achricht: <span id="zeichen" title="Zeilen / Wörter / Zeichen"></span><br>
   <textarea name="nachricht" id="nachricht" rows="10" cols="50" minlength="25" required="required" accesskey="n" placeholder="Nachricht mind. 25 Zeichen" spellcheck="true"></textarea>
  </label>
 </p>

<?=formatierung();?>

 <p>
 <input type="button" value="Vorschau" id="btn_vorschau" title="Eine Vorschau anzeigen">&emsp;
 <input type="submit" value="Absenden" title="Das Formular absenden">
 </p>
</form>

</body>
</html>

Nachrichten anzeigen und bearbeiten

Die eingetragenen Daten werden hier aus der Datei ausgelesen, diese können einzeln über ein Formular bearbeitet oder gelöscht werden.

[Bildschirmfoto] 
Nachrichten bearbeiten
Nachrichten bearbeiten

Quelltext „nachrichten.phpKopierenAusblendenZeilen

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
<?php
/*
 * SQLite - Nachrichten - nachrichten.php
 */


session_start();

// Verbindung zur Datenbank aufbauen
include "verbinden.php";

// Ausgabe in HTML
$ausgabe '';

// Willkommen
if (isset($_SESSION["benutzername"])) {
 if (!isset(
$_SESSION["willkommen"])) {
  
$ausgabe .= '<h3><q><em>Willkommen ' . ($ADMINISTRATOR == $_SESSION["benutzername"] ? 'Admin. ' 'Benutzer ') .
   
$_SESSION["benutzername"] . '</em></q></h3>';
  
$_SESSION["willkommen"] = true;
 }
}

// Anzahl der Datensätze ermitteln
$select $db->query("SELECT `id` FROM `nachrichten`" .
 (!isset(
$_SESSION["benutzername"]) ? "WHERE `anzeige` = '1'" "")) or sqlFehler($db->errorInfo()[2]);
$AnzahlDatensaetze count($select->fetchAll());

// Sind Datensätze vorhanden?
if ($AnzahlDatensaetze > 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;


// Nachricht bearbeiten
if (isset($_GET["id"], $_SESSION["benutzername"])) {

 
/* Eine Nachricht auslesen
  prepare() bereitet die Anweisung für die Ausführung vor. */
 
$select $db->prepare("SELECT `id`, `titel`, `nachricht`, `anzeige`, `datum`
                                       FROM `nachrichten`
                                       WHERE `id` = :id") or sqlFehler($db->errorInfo()[2]);

 
// $select->execute(array) führt die vorbereitete Anweisung aus.
 
$select->execute([':id' => $_GET["id"]]);

 
// $select->fetch() holt die Zeile aus dem Ergebnis.
 
$nachricht $select->fetch();

 
// Die gespeicherte ID vergleichen
 
if ($nachricht["id"] == $_GET["id"]) {

  
// Die Checkbox auswählen
  
$anzeigeCK = ($nachricht["anzeige"] == "1") ? ' checked="checked"' '';

  
// Formular zum bearbeiten der Nachricht ausgeben
  
$ausgabe '<form id="form" action="?seite=' $AktuelleSeite '" method="post">
   <div id="vorschau"></div>
   <p>
    <label><ins>T</ins>itel: 
     <input type="text" name="titel" value="' $nachricht["titel"] . '" size="45" minlength="10" maxlength="100" required="required" accesskey="t" placeholder="Titel mind. 10 Zeichen" spellcheck="true">
    </label>
   </p>

   <p>
    <label><ins>N</ins>achricht: <span id="zeichen" title="Zeilen / Wörter / Zeichen"></span><br>
     <textarea rows="10" cols="50" name="nachricht" id="nachricht" minlength="25" required="required" accesskey="n" placeholder="Nachricht mind. 25 Zeichen">$nachricht["nachricht"] . '</textarea>
    </label>
   </p>

  ' formatierung() . '

   ' . ($_SESSION["benutzername"] != $ADMINISTRATOR
        
'' :
          
'<p>
            <input type="checkbox" name="anzeige" id="anzeige"' $anzeigeCK ' accesskey="n"> 
            <label for="anzeige" title="Die Nachricht öffentlich anzeigen"><ins>N</ins>achricht anzeigen</label>
          </p>'
       ) . '

   <p>
    <input type="radio" name="option" id="edit" value="edit" checked="checked" accesskey="b"> <label for="edit" title="Die Nachricht bearbeiten"><ins>B</ins>earbeiten</label>&emsp;
    <input type="radio" name="option" id="delete" value="delete" required="required" accesskey="l"> <label for="delete" title="Die Nachricht löschen"><ins>L</ins>öschen</label>
    <input type="hidden" name="id" value="' $nachricht["id"] . '">
   </p>

   <p>
    <input type="button" value="Abbrechen" ondblclick="window.location.href=\'nachrichten.php?seite=' $AktuelleSeite '\'" title="Änderung abbrechen mit Doppelklick!">&emsp;
    <input type="button" value="Vorschau" id="btn_vorschau" title="Eine Vorschau anzeigen">&emsp;
    <input type="submit" value="Absenden" title="Das Formular absenden">
   </p>
  </form>';
 }
}

// Überprüfen ob das Formular versendet wurde.
if ("POST" == $_SERVER["REQUEST_METHOD"]) {

 
// Benutzer überprüfen
 
$select $db->prepare("SELECT `autor`
                                        FROM `nachrichten`
                                        WHERE `id` = :id") or sqlFehler($db->errorInfo()[2]);
  
$select->execute([':id' => $_POST["id"]]);
  
$status $select->fetch();

 if (
$_SESSION["benutzername"] === $status["autor"] ||
      
$_SESSION["benutzername"] === $ADMINISTRATOR) {

  
// Nachricht aktualisieren
  
if ($_POST["option"] == 'edit') {

  
/* Der Variable: $anzeige einen Wert zuweisen, entweder 1 oder 0.
   Je nachdem ob die Checkbox gesetzt (ausgewählt) wurde. */
   
$anzeige = isset($_POST["anzeige"]) ? 0;

   
// prepare() bereitet die Anweisung für die Ausführung vor.
   
$update $db->prepare("UPDATE `nachrichten`
                                             SET 
                                               `titel` = :titel,
                                               `nachricht` = :nachricht,
                                               `anzeige` = :anzeige
                                             WHERE
                                                 `id` = :id") or sqlFehler($db->errorInfo()[2]);

   
/* $update->bindValue() bindet einen Wert an den angegebenen Variablennamen
    (die Platzhalter werden mit den POST-Variablen ersetzt). */
   
$update->bindValue(':titel'$_POST["titel"]);
   
$update->bindValue(':nachricht'$_POST["nachricht"]);
   
$update->bindValue(':anzeige'$anzeige);
   
$update->bindValue(':id'$_POST["id"]);

   
// $update->execute() führt die vorbereitete Anweisung aus.
   
if ($update->execute()) {
    
$ausgabe .= '<p class="status_ok">Die Nachricht wurde aktualisiert.</p>';
   }
  }

  
// Nachricht löschen
  
if ($_POST["option"] == 'delete') {

   
// prepare() bereitet die Anweisung für die Ausführung vor.
   
$delete $db->prepare("DELETE FROM `nachrichten`
                                         WHERE `id` = :id") or sqlFehler($db->errorInfo()[2]);

   
// $delete->execute(array) führt die Anweisung aus.
   
if ($delete->execute([':id' => $_POST["id"]])) {
    
$ausgabe .= '<p class="status_ok">Die Nachricht wurde gelöscht.</p>';
   }
  }
 }
 else {
  
$ausgabe .= '<p class="status_ko">Keine Berechtigung die Nachricht zu bearbeiten!</p>';
 }
}

 
// Formular.- und Blätterfunktion (Wer sich da auskennt bekommt einen Preis verliehen ;)
 
$leaves '<form method="GET" autocomplete="off" class="leaves">$AnzahlDatensaetze . ($AnzahlDatensaetze == ' Nachricht  ' ' Nachrichten ') . 
  ((
$AktuelleSeite 1> ?
    
'<a href="?seite=' . ($AktuelleSeite 1) . '" title="Eine Seite zurück" class="seite">&#9664;</a>:
    
'<span class="seite seite_">&#9664;</span>') .
 
<label>Seite <input type="number" value="' $AktuelleSeite '" name="seite" accesskey="s" min="1" required="required"' .
 
' title="Seitenzahl eingeben und die Eingabetaste drücken.&#10;Zugriffstaste: S"> von ' $AnzahlSeiten '</label> ' .
  ((
$AktuelleSeite 1<$AnzahlSeiten ?
    
'<a href="?seite=' . ($AktuelleSeite 1) . '" title="Eine Seite vor" class="seite">&#9654;</a>:
    
'<span class="seite seite_">&#9654;</span>') .
 
'</form>';

 
// Blätterfunktion anzeigen
 
$ausgabe .= $DatensaetzeSeite >$leaves '';


 
/* Alle Datensätze auslesen die in der DB-Spalte `anzeige` den Wert 1 haben.
  Mit LIMIT die Ausgabe der Datensätze begrenzen (Versatz und Datensätze pro Seite). */
 
$select $db->prepare("SELECT `id`, `titel`, `autor`, `nachricht`, `datum`, `anzeige`
                                       FROM `nachrichten`
                                       " . (!isset($_SESSION["benutzername"]) ? "WHERE `anzeige` = '1'" "") . "
                                       ORDER BY `datum` DESC
                                       LIMIT :versatz, :DatensaetzeSeite") or sqlFehler($db->errorInfo()[2]);

 
$select->bindParam(':versatz'$VersatzPDO::PARAM_INT);
 
$select->bindParam(':DatensaetzeSeite'$DatensaetzeSeitePDO::PARAM_INT);
 
$select->execute();
 
$nachrichten $select->fetchAll();

 
// Ausgabe über eine Foreach-Schleife
 
foreach ($nachrichten as $nr => $nachricht) {

  
// Mit sscanf() wird das Format des Datums in die Variablen $jahr, $monat und $tag extrahiert.
  
sscanf($nachricht["datum"], "%4s-%2s-%2s %5s"$jahr$monat$tag$uhr);

  
$anzeige $bearbeiten '';
  if (isset(
$_SESSION["benutzername"])) {
   
$anzeige $nachricht["anzeige"] == ?
    
<span class="anzeigen" title="Diese Nachricht wird angezeigt.">&#10004;</span> ' <span class="nichtanzeigen" title="Diese Nachricht wird nicht angezeigt!">&#10006;</span> ';
   
$bearbeiten = ($_SESSION["benutzername"] === $nachricht["autor"] || $_SESSION["benutzername"] === $ADMINISTRATOR)
    ? 
'<a href="?id=' $nachricht["id"] . '&amp;seite=' $AktuelleSeite '">Bearbeiten</a>'';
  }

  
// Wechselnde Nachrichten (Hintergrund einfärben)
  
$wechselNachricht = ($nr 2) ? "wechselNachricht1 " "wechselNachricht2 ";

  
// Aktive Nachricht hervorheben
  
$aktiveNachricht ' class="' $wechselNachricht '"';
  if (isset(
$_GET["id"]) && $_GET["id"] == $nachricht["id"]) {
   
$aktiveNachricht ' class="' $wechselNachricht 'aktiveNachricht"';
  }

  
$ausgabe .= '<dl' $aktiveNachricht '><dt class="zeit">$tag '.' $monat '.' $jahr .
   
' - ' $uhr ' Uhr - Autor: ' htmlspecialchars($nachricht["autor"], ENT_HTML5'UTF-8') . $anzeige $bearbeiten '</dt>.
   
'<dd class="titel">htmlspecialchars($nachricht["titel"], ENT_HTML5'UTF-8') . '<dd>.
   
'<dd class="inhalt">format($nachricht["nachricht"]) . '</dd></dl>';
 }

 
// Blätterfunktion anzeigen
 
$ausgabe .= $leaves;
}
else {
 
$ausgabe .= '<p class="status_ko">Keine Nachrichten vorhanden!</p>';
}
?>
<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="UTF-8">
  <title>Nachrichten</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="style.css">
  <script src="script.js"></script>
 </head>
<body>

<nav>
 <u>Nachrichten</u> |
 <?=isset($_SESSION["benutzername"]) ? '<a href="eintragen.php">Eintragen</a> |' '';?>
 <a href="suchen.php">Suchen</a> |
 <?=isset($_SESSION["benutzername"]) ? '<a href="anmelden.php?abmeldung">Abmelden</a>'<a href="anmelden.php">Anmelden</a>';?>
</nav>

<?=$ausgabe;?>

</body>
</html>

Eigenschaften

Neu

Weitere Funktionen

[Bildschirmfoto] 
Nachrichten suchen
Nachrichten suchen
[Bildschirmfoto] 
Nachrichten - Anmeldung
Nachrichten - Anmeldung

Was fehlt in diesem Script noch?
Zum Beispiel eine Funktion mit der man die Nachrichten in verschiedene Kategorien unterteilen kann.
Wie das funktioniert finden Sie unter: Erster Eintrag in eine MySQL-Datenbank mit PHP

Herunterladen: sqlite_datenbank.zip

Viel Spaß damit!

Tipps

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.
Verzeichnis auslesen und mit einem Link verknüpfen
Beispiele wie ein Verzeichnis (Ordner) über PHP ausgelesen und mit einem Link verknüpft wird.
PHP mit Sicherheit
Sicheres Programmieren – Traue niemals den Eingaben des Benutzers! Speichern Sie fremde Benutzereingaben nie ohne eine Überprüfung in einer Datenbank oder in einer Datei ab.