Erster Eintrag in eine MySQL-Datenbank mit PHP 1 2 3
- Die Verbindung zur Datenbank herstellen
- Der Aufbau einer Datenbank-Tabelle
- Die Datenbank-Tabelle anlegen
- Die Daten einfügen, auslesen und bearbeiten
- MySQL-Fehlermeldungen anzeigen
- Die Daten über ein Formular sicher eintragen
- Die Daten über ein Formular bearbeiten
- Die Daten sortiert und begrenzt ausgeben
- Hinweise zu den MySQL-Anweisungen
10. Die Daten schnell durchsuchen
Aufgrund zahlreicher Rückmeldungen zeige ich Ihnen hier, wie eine Suchfunktion funktioniert.
Eine Suchfunktion ist sehr nützlich für Besucher, besonders für umfangreiche Nachrichten ist diese unverzichtbar.
Um nach Daten in unserer „Nachrichten”-Tabelle zu suchen, wird die Datei:
suchen.php
erstellt die das
mit wenigen Anweisungen erledigt.
Nach dem eingegebenen Suchbegriff wird in den Spalten titel, autor, nachricht und kategorie gesucht, die Groß.- und Kleinschreibung des Begriffs spielt dabei keine Rolle.
Dieses Bildschirmfoto zeigt die gefundenen Nachrichten der Suchfunktion an.
Quelltext: suchen.php Ausblenden ❘ Kopieren ❘ Link ❘ Zeilen ❘
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
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<title>Nachrichten suchen</title>
<style>
body {
font-family: Verdana, Arial, Sans-Serif;
background-color: Whitesmoke;
}
a:link, a:visited {
color: Royalblue;
text-decoration: None;
}
</style>
</head>
<body>
<nav>
<a href="auslesen.php">Nachrichten</a> |
<a href="eintragen.php">Eintragen</a> |
<a href="bearbeiten.php">Bearbeiten</a> |
<u>Suchen</u>
</nav>
<form action="suchen.php" method="get">
<p>
<input type="text" name="suchbegriff" required="required"
value="<?php echo isset($_GET["suchbegriff"]) ? htmlspecialchars($_GET["suchbegriff"], ENT_HTML5, 'UTF-8') : '' ?>">
<input type="submit" name="suche" value="los">
</p>
</form>
<?php
// Wurde eine Suchanfrage über GET gesendet?
if (isset($_GET["suche"])) {
// Leerzeichen im Suchbegriff löschen.
$_GET["suchbegriff"] = trim($_GET["suchbegriff"]);
// Suchbegriff größer als 3 Zeichen?
if (strlen($_GET["suchbegriff"]) >= 4) {
// Verbindung zur Datenbank aufbauen.
include "verbinden.php";
/* Nachrichten auslesen
prepare() führt die SQL-Anweisung aus, die eine
Ergebnismenge als PDO-Statement Objekt zurück gibt. */
$select = $db->prepare("SELECT *
FROM `nachrichten`
WHERE (`titel` LIKE :suchbegriff OR
`autor` LIKE :suchbegriff OR
`nachricht` LIKE :suchbegriff OR
`kategorie` LIKE :suchbegriff)
AND `anzeige` = '1'
ORDER BY `datum` DESC
LIMIT 0, 25");
/* $select->bindValue() bindet einen Wert an den angegebenen Variablennamen
(der Platzhalter wird mit dem Inhalt der GET-Variable ersetzt). */
$select->bindValue(':suchbegriff', '%' . $_GET["suchbegriff"] . '%');
// $select->execute() führt die vorbereitete Anweisung aus.
if ($select->execute() == false) {
// Gibt bei einer fehlerhaften Anweisung eine SQL-Fehlermeldung aus.
print_r($select->errorInfo());
}
// $select->fetchAll() gibt ein Array mit allen Datensätzen zurück.
$nachrichten = $select->fetchAll();
// Anzahl der Nachrichten überprüfen
$AnzahlNachrichten = $select->rowCount();
if ($AnzahlNachrichten > 0) {
echo '<p>▷ ' . $AnzahlNachrichten .
($AnzahlNachrichten == 1 ? ' Nachricht' : ' Nachrichten') . ' gefunden.</p>';
// Die gefundenen Nachrichten über eine Foreach-Schleife ausgeben.
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> Kategorie: ' .
$nachricht['kategorie'] . '<br>' .
nl2br($nachricht['nachricht']) . '</p>';
}
}
else {
echo '<p>▷ Es wurden keine Nachrichten gefunden!</p>';
}
}
else {
echo '<p>▷ Suchbegriff mit mind. 4 Zeichen!</p>';
}
}
?>
</body>
</html>
Das Script findet nun mit LIKE %Auto%
alle Datensätze die das Wort
"Auto" enthalten, wie zum Bleistift: "auto", "Automobil",
"automatisch" oder "Kaffeeautomat".
Je nach verwendetem Suchbegriff und dessen Zeichenlänge kommen schon mal mehrere hundert Suchergebnisse zustande. Sie können die Suchergebnisse weiter eingrenzen, indem Sie eine der nachfolgenden Optionen hinzufügen:
• Eine Auswahlliste neben dem Suchfeld setzen
Eine Auswahlliste neben dem Suchfeld setzen, in dieser Auswahlliste sollten dann die einzelnen Kategorien der Nachrichten stehen, diese dienen bei der Suche dann als Filter.
<!-- Hier fehlt leider ein Beispiel! -->
• Groß.- und Kleinschreibung beachten
Soll die Groß.- und Kleinschreibung beachtet werden, so muß vor dem Namen der Spalte(n) die Angabe:
BINARY
hinzugefügt werden:
WHERE (BINARY `titel` LIKE :suchbegriff OR …
.
Programmiertechnisch wird das am besten so umgesetzt, das dem Benutzer eine Checkbox zur Verfügung gestellt wird und dieser die Option aktivieren kann.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!-- ... -->
<label>Suche: <input type="text" name="suchbegriff"></label>
<label><input type="checkbox" name="matchCase">
Groß.- und Kleinschreibung beachten</label>
<input type="submit" name="suche" value="los">
<!-- ... -->
<?php
// ...
$matchCase = isset($_GET["matchCase"]) ? "BINARY " : "";
$select = $db->prepare("SELECT *
FROM `nachrichten`
WHERE (" . $matchCase . "`titel` LIKE :suchbegriff OR
" . $matchCase . "`autor` LIKE :suchbegriff OR
" . $matchCase . "`nachricht` LIKE :suchbegriff OR
" . $matchCase . "`kategorie` LIKE :suchbegriff)
AND `anzeige` = '1'
ORDER BY `datum` DESC
LIMIT 0, 25");
// ...
?>
⚑ Volltext - Mehrere Begriffe finden
Für bestimmte Spalten in der Tabelle kann man einen Volltext (engl. fulltext) setzen. Es können dann mehrere Begriffe gefunden werden. Mit dem Programm: "phpMyAdmin" (siehe weiter unten) ist das ganz einfach: Tabelle auswählen > Registerreiter: Struktur > Spalte auswählen (Checkbox) und dann auf "Volltext" klicken.
In unserer Tabelle wäre es zum Beispiel für die Spalte: `nachricht` sinnvoll. Die zusätzliche MySQL-Anweisung könnte dann etwa so aussehen:
OR MATCH (`nachricht`) AGAINST (:suchbegriff IN BOOLEAN MODE) AND `anzeige` = '1'
Mit der optionalen MySQL-Anweisung IN BOOLEAN MODE
, können neben dem zu suchenden Begriff bestimmte
Operatoren gesetzt werden, hier eine kleine Auswahl:
+
Ein führendes Pluszeichen gibt an, dass der betreffende Begriff in jedem zurückgegebenen Datensatz vorhanden sein muss.-
Ein führendes Minuszeichen gibt an, dass dieser Begriff nicht in einem Datensatz vorhanden sein darf, der zurückgegeben wird.*
Das Sternchen dient als Kürzungsoperator, es wird an den betreffenden Begriff angehängt."Ein Satz"
Mit Anführungszeichen, findet Datensätze, die die exakte Phrase "Ein Satz" enthalten.
➤ Der Volltext konnte bis zu MySQL-Version: 5.5 nur für die Storage-Engine: "MyISAM" verwendet werden. Ab MySQL-Version: 5.6 ist dieser auch für: "InnoDB" verfügbar.
✔
Für den zu suchenden Begriff, sollte eine Stoppwortliste verwendet werden.
Mit dieser Stoppwortliste kann man dann bestimmte Wörter (z.B.:
das, ist, etwas, viel
)
aus dem Begriff heraus filtern, da das Ergebnis der Anfrage ansonsten sehr viele Suchergebnisse liefern könnte.
⚑ Datensatz direkt bearbeiten
Um den gefundenen Datensatz direkt bearbeiten zu können, fügen Sie einen Link zur Datei: bearbeiten.php mit der entsprechenden ID des Datensatzes hinzu.
1
2
3
4
<?php
// Datensatz bearbeiten
echo '<a href="bearbeiten.php?id=' . $nachricht['id'] . '">bearbeiten</a>';
?>
Natürlich sollte diese Funktion nicht jedem Benutzer zur Verfügung stehen, sondern nur dem Admin. der sich zuvor über einem Log-in authentifiziert hat.
11. Die Ausführung auf dem Webserver
Die Vorbereitung hat geraume Zeit in Anspruch genommen, aber das anlegen und die ersten Einträge in die Tabelle sind innerhalb von wenigen Minuten erledigt.
Unsere Dateien die wir für das anlegen, zum eintragen, bearbeiten und ausgeben benötigen haben wir nun zusammen; Hier eine Checkliste:
- ✔ anlegen.php - Die Datenbank-Tabelle anlegen.
- ✔ auslesen.php - Die Daten sortiert ausgeben.
- ✔ bearbeiten.php - Die Daten über ein Formular bearbeiten.
- ✔ eintragen.php - Die Daten über ein Formular sicher eintragen.
- ✔ suchen.php - Die Daten schnell durchsuchen.
- ✔ verbinden.php - Verbindung zum Datenbank-Server.
Alles OK, dann führen Sie folgende Anweisungen nacheinander aus:
- Ihre DB-Zugangsdaten tragen Sie in der Datei: verbinden.php ein.
- Laden Sie alle Dateien auf dem Webserver hoch.
- Rufen Sie die Datei: anlegen.php im Browser auf.
- Nach erfolgreichem anlegen tragen Sie Ihren ersten Eintrag mit der Datei: eintragen.php ein.
- Sollten keine Fehlermeldungen erscheinen, haben Sie alles richtig gemacht
Da ich Ihnen die Arbeit mit dem kopieren ersparen möchte, habe ich die Dateien in einem ZIP-Archiv für Sie zusammen gepackt mysql_datenbank.zip
12. Was fehlt hier noch?
Um die Beispiele hier möglichst einfach zu halten und um Ihnen nicht alle Arbeit abzunehmen („Learning by Doing”), wurden einige Funktionen nicht integriert, diese kann jeder selbst programmieren.
- Die Formulareingaben des Benutzers müssen überprüft werden, siehe: PHP mit Sicherheit.
- Einen Passwortschutz beim eintragen bzw. bearbeiten der Nachrichten.
- In der Datei: bearbeiten.php sollten die angezeigten Nachrichten auf mehreren Seiten aufgeteilt werden (so wie dies in der Datei: auslesen.php gemacht wurde).
- Die Ausgabe der Nachrichten in Kategorien auflisten, die der Benutzer individuell auswählen kann.
- Manuelle Sortierung nach Titel, Nachricht, Datum/Uhrzeit (aufsteigend oder absteigend) über einem Link.
- Bilder und Links zu den Nachrichten hinzufügen.
Ein komplettes Nachrichten-System finden Sie im Archiv unter: Nachrichten
⚑ Die Datenbank-Tabelle erweitern
Irgendwann möchte man die Datenbank-Tabelle um neue Spalten erweitern oder die Tabellen sichern, importieren, exportieren oder andere Verwaltungsaufgaben erledigen. Da dies jedoch nicht so einfach möglich ist, gibt es kostenlose Programme die das dann für einem erledigen.
phpMyAdmin
ist bei vielen Webhostern bereits auf dem Server verfügbar. phpMyAdmin ist ein in PHP geschriebenes Werkzeug,
das zur Verwaltung von Datenbanken über das Web gedacht ist.
phpMyAdmin.net
Adminer ist ein Tool zur vollständigen Verwaltung von Datenbanken. Adminer ist komplett in PHP geschrieben und besteht, im Gegensatz zu phpMyAdmin, aus einer einzigen Datei, die auf dem Server abgelegt wird. adminer.org
Zum Erstellen und Verwalten von Backups (DB-Sicherungen) auf Webservern werden häufig die ebenfalls in PHP geschriebenen Open-Source-Anwendungen phpMyBackupPro oder MySQLDumper eingesetzt.
Fazit
Sie sehen an den Beispielen also, das es recht einfach ist Daten in eine DB-Tabelle einzutragen / zu bearbeiten und man
schnell zu einem brauchbaren Ergebnis gelangt, wer möchte da noch mit Text-Dateien arbeiten
Ein späterer Umstieg auf andere Datenbanken (zum Beispiel: SQLite) wird durch
PDO leichter und noch ein wenig bequemer Dank einheitlicher Funktionsaufrufe.
Hoffentlich fanden Sie dieses kurze Tutorial nützlich!
Tipps
SQLite-Datenbank mit PHP und PDO erstellen - So erstellen und verbinden Sie eine Datenbank in SQLite. 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.
Checkbox (Mehrfachauswahl) und DB-Ausgabe - Mit den Checkboxen lassen sich mehrere Einträge von der DB-Tabelle auswählen, auswerten und ausgeben.
MySQL - Einfügen oder aktualisieren mit 'ON DUPLICATE KEY UPDATE'
Authentifizierung eines Benutzers mit PDO und password_verify()
1keydata.com - SQL-Tutorial - Das SQL-Tutorial führt häufig verwendete SQL-Anweisungen auf.