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.

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 „verbindung.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
<?php
// Pfad zur Datenbank
$datenbank "db/datenbank.sqt";

// Datenbank-Datei erstellen
if (!file_exists($datenbank)) {
 
$db = new PDO('sqlite:' $datenbank);
 
$db->exec("CREATE TABLE nachrichten(
  id INTEGER PRIMARY KEY,
  titel CHAR(255),
  autor CHAR(255),
  nachricht TEXT,
  datum DATE)");
}
else {
 
// Verbindung
 
$db = new PDO('sqlite:' $datenbank);
}

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

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 PHP-Programm: Adminer oder mit dem SQLite Manager (Firefox Addon).

Datensatz eintragen

Die Daten werden über ein Formular in die Datei 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
<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="UTF-8">
  <title>Nachricht eintragen</title>

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

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


 </head>
<body>

<h3>Nachricht eintragen</h3>

<p><a href="bearbeiten.php">Nachricht anzeigen/bearbeiten</a></p>

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

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

 
// Die Formulareingaben müssen hier überprüft werden ...

 // 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`, `datum`)
  VALUES (:titel, :autor, :nachricht, :datum)");

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

 
// $insert->execute() führt die vorbereitete Anweisung aus.
 // Bei einem erfolgreichen Eintrag wird 'true' zurück gegeben.
 
if ($insert->execute()) {
  echo 
'<p>Die Nachricht wurde eingetragen.</p>';
 }
 else {
  
// SQL-Fehlermeldung anzeigen.
  
print_r($insert->errorInfo());
 }
}
?>

<form action="eintragen.php" method="post">
 <p>
  <label>Titel: <input type="text" name="titel" size="35" required="required">
  </label>
 </p>
 <p>
  <label>Autor: <input type="text" name="autor" required="required">
  </label>
 </p>
 <p>
  <label>Nachricht:<br>
   <textarea name="nachricht" rows="10" cols="40" required="required"></textarea>
  </label>
 </p>
 <input type="submit" value="Absenden">
</form>

</body>
</html>

Datensatz bearbeiten

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

Quelltext „bearbeiten.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
<!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="UTF-8">
  <title>Nachrichten</title>

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

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


 </head>
<body>

<h3>Nachrichten</h3>

<p><a href="eintragen.php">Nachricht eintragen</a></p>

<?php
// Verbindung zur Datenbank aufbauen.
include "verbindung.php";

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

 
// Eine Nachricht auslesen
 // prepare() bereitet die Anweisung für die Ausführung vor
 
$select $db->prepare("SELECT `id`, `titel`, `autor`, `nachricht`, `datum`
                                   FROM `nachrichten`
                                   WHERE `id` = :id");

 
// $select->bindValue() bindet einen Wert an den angegebenen Variablennamen
 // (die Platzhalter werden mit den GET-Variablen ersetzt).
 
$select->bindValue(':id'$_GET["id"]);

 
// $select->execute() führt die vorbereitete Anweisung aus.
 
$select->execute();

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

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

  
// Formular zum bearbeiten der Nachricht ausgeben
  
echo '<form action="bearbeiten.php" method="post">
   <p>
    <label>Titel: 
     <input type="text" name="titel" value="' $nachricht["titel"] . '" size="45" maxlength="80" required="required">
    </label>
   </p>
   <p>
    <label>Autor: 
     <input type="text" name="autor" value="' $nachricht["autor"] . '" size="25" maxlength="30" required="required">
    </label>
   </p>
   <p>
    <label>Nachricht: <br>
     <textarea rows="10" cols="40" name="nachricht" required="required">$nachricht["nachricht"] . '</textarea>
    </label>
   </p>
   <p>
    <label><input type="radio" name="option" value="edit" checked="checked"> Ändern</label>
    <label><input type="radio" name="option" value="delete" required="required"> Löschen</label>
    <input type="hidden" name="id" value="' $nachricht["id"] . '">
   </p>
    <input type="submit" value="Absenden">
  </form>';
 }
}

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

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

  
// Die Formulareingaben müssen hier überprüft werden ...

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

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

  
// $update->execute() führt die vorbereitete Anweisung aus.
  
if ($update->execute()) {
   echo 
'<p>Die Nachricht wurde überschrieben.</p>';
  }
  else {
   
// SQL-Fehlermeldung anzeigen.
   
print_r($update->errorInfo());
  }
 }

 
// 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");

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

  
// $delete->execute() führt die vorbereitete Anweisung aus.
  
if ($delete->execute()) {
   echo 
'<p>Die Nachricht wurde gelöscht</p>';
  }
  else {
   
// SQL-Fehlermeldung anzeigen.
   
print_r($delete->errorInfo());
  }
 }
}

// Nachrichten auslesen
// $select->query() führt die SQL-Anweisung aus,
// die eine Ergebnismenge als PDOStatement Objekt zurück gibt.
$select $db->query("SELECT `id`, `titel`, `autor`, `nachricht`, `datum`
                                FROM `nachrichten`
                                ORDER BY `datum` DESC");

// $select->fetchAll(...) gibt ein Array mit allen Datensätzen zurück.
// PDO::FETCH_ASSOC gibt ein Objekt mit Eigenschaftennamen zurück,
// diese entsprechen den Spaltennamen.
$nachrichten $select->fetchAll(PDO::FETCH_ASSOC);

// Anzahl der Nachrichten mit count($nachrichten) ausgeben.
echo '<h5>count($nachrichten) . ' Nachrichten</h5>';

// Ausgabe über eine Foreach-Schleife
foreach ($nachrichten as $nachricht) {
 
extract($nachricht);
 
sscanf($datum"%4s-%2s-%2s"$jahr$monat$tag);
 echo 
'<p><small>$tag '.' $monat '.' $jahr .
  
'</small> - <b>$titel '</b><br>.
  
' Autor: <em>$autor '</em><br>.
  
nl2br($nachricht) . '<br>.
  
'<a href="?id=' $id '"><small>Nachricht bearbeiten</small></a></p>';
}
?>

</body>
</html>

Herunterladen: sqlite_datenbank.zip

Viel Spaß damit!

Tipps

Daten auf mehreren Seiten aufteilen / Kombinierte Formular.- und Blätterfunktion
Damit nicht alle Daten einer DB-Tabelle auf einmal auf der Seite zu sehen sind, sondern übersichtlich auf mehreren Seiten verteilt stehen, benutzt man eine Seitennavigation zum blättern (Pagination).
Eine MySQL-Tabelle über Links sortieren
Tabellen haben oft den Nachteil das diese nicht vom Benutzer sortiert werden können, dabei ist es eigentlich ganz einfach.
Text-Dateien über PHP laden und bearbeiten
Über PHP lassen sich Text-Dateien in ein Formular laden und bearbeiten. Der geänderte Text wird, nach dem absenden des Formulars, wieder in der Datei gespeichert.
Diese Schlagwörter könnten Sie interessieren:
Sprachumschaltung localStorage Mehrfachauswahl Dateibrowser Suchmaschine Kommentar-Box Event-Kalender Hover-Effekt Zeichenkodierung Silbentrennung SQLite Blätterfunktion Zoom-Funktion Lokaler Webserver Wasserzeichen Veranstaltungsliste Chatroom Textgestaltung Sicherheit Metadaten