Im Folgenden programmieren wir uns einen Veranstaltungskalender für die eigene Website. Die Termine werden in einer MySQL-Datenbank abgelegt. Der Kalender soll untereinander alle Termine für den aktuellen Monat anzeigen und einen Link zu dem kommenden Monat und zum Vormonat bieten.
Eintragen, Löschen und Ändern der Termine soll möglich sein.
Wir benötigen in der Datenbank folgende Felder:
id: eine eindeutige Nummer, um die Einträge verwalten zu können
datum: an welchem Datum ist der Termin
titel: Für die Kurzanzeige der Titel
beschreibung: großes Textfeld, das alle Informationen zum Termin enthält
Wie legen also als erstes in phpMyAdmin unsere Datenbank Terminkalender an:
CREATE DATABASE `terminkalender` ;
Und dann legen wir unsere MySQL-Tabelle mit dem Namen "termine" an:
CREATE TABLE `termine` ( `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `datum` DATE NOT NULL , `titel` VARCHAR( 256 ) NOT NULL , `beschreibung` BLOB NOT NULL ) ENGINE = MYISAM ;
Zum Testen tragen wir von Hand ein paar Termine ein. Später werden neue Termine über ein Formular eingetragen.
INSERT INTO `termine` ( `id` , `datum` , `titel` , `beschreibung` ) VALUES ( NULL , '2007-08-10', 'PHP-Kurs.com besuchen ab 9:00', '' ), ( NULL , '2007-08-16', 'Geburtstag Elke', '' );
Um jetzt unsere erste Anzeige zu erhalten (wenn es keine Angabe gibt, alle Termine des aktuellen Monats), müssen wir als erstes eine Verbindung zu unserer Datenbank herstellen. Diese Datei nennen wir "termin-konfiguration.php".
Es werden alle benötigten Daten hinterlegt (die MySQL-Zugangsdaten bekommen Sie normalerweise von Ihrem Provider beim Anlegen der Datenbank).
Nun bauen wir die Verbindung zu Datenbank auf – dazu wird mysql_connect die bereits definierten Konstanten übergeben.
Das @ vor mysql_connect unterbindet eventuelle Fehlermeldungen, die den Nutzer nur verunsichern – sollte der Verbindungsaufbau nicht klappen, überprüfen wir es anhand der anschließenden if-Abfrage.
Beide obigen PHP-Code-Teile in der Datei "termin-konfiguration.php" abspeichern. Beide am Stück:
Es werden nun alle Termine für einen Monat angezeigt. Sollte kein Monat angegeben sein, wird der aktuelle Monat verwendet. Unsere neue Datei nennen wir terminanzeige.php
Dasgleiche für das Jahr
Und für den Besucher (und für den Programmierer zu Kontrolle) die Ausgabe von Monat und Jahr.
Über die MySQL-Befehl findet die Eingrenzung der Termine auf den gewünschten Monat und das gewünschte Jahr statt.
Die SQL-Anweisung wird über mysql_query ausgeführt – gefolgt von einer Sicherheitsabfrage, ob die Ausführung funktioniert hat.
Es erfolgt die Ausgabe der Ausgabe der Anzahl der Termine – die Ermittlung funktioniert über mysql_num_rows, wobei bereits die mysql_query-Abfrage im Vorfeld erfolgt sein muss.
Wenn es nun mindestens einen Termin gibt, erfolgt die Ausgabe in einer Tabelle (hier kann man bestimmt sich noch am Design austoben – hier zählt erstmal die Funktion :) )
Die von der Datenbank gelieferten Ergebnisse werden über mysql_fetch_array in einer Array übertragen und per while-Schleife solange durchlaufen, bis alle Einträge ausgegeben worden sind.
Jetzt wird der Speicher geleert und die Verbindung zum MySQL beendet mit:
Im letzten Schritt möchten wir noch 3 Links haben – einen zum Anzeigen des Folgemonats, einen zum Sprung zum aktuellen Monat, einen Link zum vergangenen Monat. Interessant wird es bei den Jahresübergängen.
Im nächsten Schritt sollen Termine erfasst werden. Dazu benötigen wir ein Formular mit den entsprechenden Feldern – hierbei wird nun nicht auf Sicherheit geachtet, da die Annahme zugrunde liegt, dass nur berechtigte Personen Termine erfassen, ändern und löschen dürfen. Soll dies auch für unbekannte Benutzer möglich sein (Websitebenutzer), muss unbedingt auf Sicherheit geachtet werden!
Wir geben unser Formular unter der Auflistung aus. Es werden 3 Felder benötigt – das Datumsfeld, ein Feld für die Terminbeschreibung und ein Textbereich für die ausführliche Fassung.
Dabei sollte bei der Übertragungsmethode method="POST" unbedingt POST gewählt werden, da sonst die Datenmenge (Textbereich für Beschreibung) für GET zu viel werden könnte.
Im Formular gibt es ein verstecktes Feld mit dem Name "vorgang" – über dieses kann nach Absenden des Formulars angefragt werden, was mit den Daten geschehen soll.
Nun folgt vor der Ausgabe der Tabelle eine Abfrage, ob neue Daten vorhanden sind, und wenn ja, werden diese gespeichert.
Das Speichern erfolgt über den Funktionsaufruf speichere_daten ( $_POST['termin'] ); - durch die Übergabe der Arrays $_POST kann in der Funktion direkt auf die Daten zugegriffen werden. Die praktische Übergabe durch $_POST['termin'] ist auch der Grund für die Schreibweise vorher im Formular mit <input type="text" name="termin[datum]" value="" size="10" maxlength="10" />.
Die Funktion nimmt die Daten und speichert diese über die SQL-Anweisung "INSERT ...". Sie sollten noch ein wenig Zeit in die Validierung der Daten stecken – hier zum Lernen soll es ohne Validierung ausreichen.
Im nächsten Schritt wollen wir auch das Löschen von Daten ermöglich. Dazu ergänzen wir die Tabelle noch um eine weitere Spalte, die mit Links versehen wird. In den Links wird über die ID ein eindeutiger Zugriff möglich. Auch hier findet über die Variable "vorgang" eine Steuerung statt.
Am Anfang vom Programm erfolgt wieder eine Abfrage, ob die Variable "vorgang" den Inhalt "loeschen" hat. Wenn ja, erfolgt der Aufruf des Löschvorgangs über eine Funktion, der die ID übergeben wird. Da der Aufruf über einen Link stattfindet, muss die Variablenabfrage mit $_GET stattfinden!
Die entsprechende Funktion beinhaltet die SQL-Anweisung "DELETE FORM ... WHERE ... LIMIT 1"
Der Zusatz "LIMIT 1" begrenzt den Schaden :) – es wird maximal ein Datensatz gelöscht.
Hier können Sie den Vorgang erweitern, dass vor dem Löschen erst eine Sicherheitsabfrage stattfindet!
Um nun Daten ändern zu können, fügen wir in der Tabelle einen weiteren Link hinzu.
Am Anfang der Datei erfolgt wieder eine Abfrage und der Funktionsaufruf
In der Funktion wird für diesen einen Datensatz über die entsprechende SQL-Anweisung der Inhalt geholt und in einem Formular zum Ändern angezeigt
Die Steuerung erfolgt über die beiden versteckten Formularfelder "vorgang" und "id", die am Beginn unseres Scripts abgefragt werden.
Und die Funktion zum Speichern der aktualisierten Daten:
Damit nach dem Speichern nicht nochmals das Formular angezeigt wird, muss die if-Anweisung für den Vorgang "aendern" ergänzt werden mit:
Dies als "kleines" Tutorial, wie man mit Datenbanken umgehen kann. Das Beispiel in fast 300 Code-Zeilen zeigt eine prinzipielle Vorgehensweise – es fehlen noch Validierungen (damit keine falsche Daten eingegeben werden können), und die Eintrag-, Lösch- und Änderungsfunktionen sollten auf keinen Fall für fremde Websitebesucher zugänglich gemacht werden. Die Anzeige der Termine kann sehr wohl genutzt werden, da dort nur 2 Daten verwendet werden (Monat und Jahr), die validiert werden.
Hier bekommen Sie das Terminkalender-Script an einem Stück, damit die obigen Sprünge nachvollzogen werden können.
Zur Verdeutlichung ein Ablaufdiagramm: