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

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.
Zeitansage in JavaScript
Dieses JavaScript gibt die aktuelle Uhrzeit in Worten aus.
Mit PHP zeichnen - Eine Grafik mit PHP erstellen
Mit den Grafikfunktionen können Sie zur Laufzeit des PHP-Scripts auch Grafiken erzeugen.
Diese Schlagwörter könnten Sie interessieren:
SQLite Operatoren Zeichnen Audio-Player localStorage AJAX Fotoalbum Dynamische Seiten Rahmen Sitemaps-Protokoll Zeichenkodierung Counter Metadaten Sicherheit MySQL Datenschutz-Hinweis Zugriffsrechte Zeitbalken PHP-Fehlermeldungen Kommentar-Box