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.

Hier ein kleines Beispiel wie Daten in der Datenbank-Tabelle eingetragen und bearbeitet werden können.

[Bildschirmfoto] 
Nachrichten
Nachrichten

Wer schon Erfahrung mit einer Datenbank und PDO hat für den ist das eintragen/bearbeiten der Daten ein alter Hut! Alle anderen sollten den Artikel » Erster Eintrag in eine MySQL-Datenbank mit PHP lesen da viele der Anweisungen 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
<?php
/* Einstellungen */

// 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''<em></em><img class="bild" src="" title="">'$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('/\[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>';
}

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 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
<?php
session_start
();

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

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

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

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

 
// 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">
 </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 method="post">
 <p>
  <label>
  Titel: <input type="text" name="titel" size="35" minlength="10" maxlength="100" required="required" autofocus="autofocus" placeholder="Titel mind. 10 Zeichen" spellcheck="true">
  </label>
 </p>

 <p>
  <label>Nachricht:<br>
   <textarea name="nachricht" rows="10" cols="50" minlength="25" required="required" placeholder="Nachricht mind. 25 Zeichen" spellcheck="true"></textarea>
  </label>

 </p>
 <input type="button" value="Abbrechen" onclick="window.location.href='eintragen.php'">&emsp;
 <input type="submit" value="Absenden">
</form>

</body>
</html>

Nachrichten 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

Datei "scripts/sqlite_datenbank/bearbeiten.php" wurde nicht gefunden!

Weitere Funktionen

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

Herunterladen: sqlite_datenbank.zip

Viel Spaß damit!

Tipps

10 Regeln zu Dateinamen
Die Entscheidung, wie Sie die Dateien und Verzeichnisse (Ordner) auf Ihrer Website benennen ist nicht ganz Ihnen überlassen. Es gibt einiges, worauf Sie bei dieser Wahl achten müssen.
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.
Erster Eintrag in eine MySQL-Datenbank mit PHP
Eine Anleitung wie man ein Nachrichten-System mit einer MySQL (oder MariaDB)-Datenbank über PHP realisieren kann. Komplett mit Formularen zum eintragen, anzeigen und bearbeiten der Daten.
Diese Schlagwörter könnten Sie interessieren:
Canvas Key Codes Audio-Player Counter Zebra-Tabelle Seitenformatierung Mauszeiger Zeichenkodierung Textgestaltung Dynamische Seiten Veranstaltungsliste Wecker Zugriffsrechte Sortierung PHPMailer JSON Mehrfachauswahl Zeitfunktionen Silbentrennung Zoom-Funktion