Staatliche Fachschule für Mechatronik- und Elektrotechnik Entwicklung einer Webseite zur Verwaltung von Prüfungsterminen von Wagemann Andreas 3. Januar 2018 Entwicklungsarbeit Staatliche Fachschule für Mechatronik- und Elektrotechnik Betreuer: Maximilian Friedl
Thema: Betreff: Name: Email: Entwicklung einer Webseite zur Verwaltung von Prüfungsterminen 18 FSMT2 IT Projekt Wagemann Andreas An: Maximilian.Friedl@bszam.de Von: / Firma: BSZAM Telefon: / Datum, Unterschrift: 03.01.2018 Schule: BSZAM, FS, IT, Lehrer FRD
Inhaltsverzeichnis Inhaltsverzeichnis... 1 1 Datenbank... 2 1.1 MySQL... 2 1.1.1 Grundlegendes... 2 1.1.2 Aufruf einer Web- bzw. Online-Datenbank... 2 1.2 Aufbau der Datenbank schule... 3 1.2.1 Relation zeitplan... 3 1.2.2 Relation benutzer... 3 1.2.3 Primärschlüssel... 4 1.2.4 Verwendete Datentypen... 4 2 SQL Abfragen... 5 2.1 Grundlegendes... 5 2.2 SQL Befehle... 5 2.2.1 Select... 5 2.2.2 INSERT... 6 2.2.3 DELETE... 7 2.2.4 UPDATE... 7 3 Das Backend (In Zusammenarbeit mit A.Voit)... 9 Abbildungsverzeichnis... 13 Tabellenverzeichnis... 14 A. Wagemann 1
1 Datenbank 1.1 MySQL 1.1.1 Grundlegendes Bei MySQL handelt es sich um das am meisten verbreitete Open Source Datenbankverwaltungssystem für relationale Datenbanken. Es wird in diesem Fall in Verbindung mit dem Webserver Apache und der Skriptsprache PHP eingesetzt. Sowohl das Verwaltungssystem als auch der Webserver sind in dem kostenlosen Programmpaket XAMPP enthalten. 1.1.2 Aufruf einer Web- bzw. Online-Datenbank Die Anfrage eines Clients geht an den Server, der diese an den Internen Webserver, in unserem Fall dem Apache, weiter leitet. Dieser lässt Sie vom PHP-Interpreter übersetzen. Die enthaltenen PHP-Befehle und damit auch die Datenbankanfrage werden an das MySQL Datenbankverwaltungssystem übergeben. Hier werden die SQL Befehle ausgeführt und das Ergebnis der Anfrage an den PHP-Interpreter zurückgegeben. Die Angeforderten Daten werden dort Verarbeitet und über den Internen Webserver an den Client zurückgesendet. Anfrage Apache Webserver Client Antwort PHP- Interpreter MySQL Datenbank Server Abbildung 1: Ablauf einer Datenbankabfrage A. Wagemann 2
1.2 Aufbau der Datenbank schule 1.2.1 Relation zeitplan Diese Tabelle enthält folgende Attribute: Attribut Datentyp Exta Bedeutung pk_id integer AUTO_INCREMENT Primär Schlüssel datum date Datum der Prüfung klasse mediumtext Betroffene Klasse fach mediumtext Betroffenes Fach pruefung mediumtext Art der Note stunde integer Betroffene Unterrichtsstunde lehrer mediumtext Betroffener Lehrer notiz mediumtext Zusätzliche Informationen user integer Fremdschlüssel (optional) Tabelle 1: Aufbau der Relation zeitplan 1.2.2 Relation benutzer Diese Tabelle enthält folgende Attribute: Attribut Datentyp Exta Bedeutung pk_id integer AUTO_INCREMENT Primärschlüssel klasse mediumtext Klasse des Benutzers name mediumtext Name des Benutzers passwort mediumtext Passwort des Benutzers Tabelle 2: Aufbau der Relation benutzer" A. Wagemann 3
1.2.3 Primärschlüssel Der Primärschlüssel pk_id identifiziert die Datensätze der Relationen eindeutig. Diese Spalte, vom Typ Ganzzahl, verfügt über folgende zusätzliche Eigenschaften: NOT NULL: o Die bedeutet das IMMER etwas in das jeweilige Feld geschrieben wird. Da der Typ eine Ganzzahl ist, wäre das also mindesten eine Null (0). AUTO_INCREMENT o MySQL hält nach dem höchsten bereits existierenden Wert dieser Spalte Ausschau, addiert Eins dazu und schreibt den Wert dann in das entsprechende Feld des neuen Datensatzes, der dadurch eindeutig zu identifizieren ist. 1.2.4 Verwendete Datentypen Datentyp Bedeutung Bereich Speicherbedarf integer Ganzzahl Signed: -2147283648 bis 2147283647 4 Byte (Standard) Unsigned: 0 bis 4294967295 date Datum 1.1.1000 bis 31.12.9999 8 Byte Format: YYYY-MM-DD mediumtext Mittelgroße Zeichenkette max. 16777215 Zeichen 2E24-1 Byte Tabelle 3: Datentypen A. Wagemann 4
2 SQL Abfragen 2.1 Grundlegendes Die Abkürzung SQL steht für Structured Query Language und ist eine Datenbanksprache mit der relationale Datenbanken Strukturiert und Bearbeitet werden können. SQL ist heute der gängige Standard, um Abfragen auf relationalen Datenbanken auszuführen. 2.2 SQL Befehle 2.2.1 Select Der SQL SELECT Befehl ist der Grundstein für zahlreiche SQL-Abfragen, die auf eine Datenbank ausgeführt werden können. Er ermöglicht es Daten aus einer oder mehreren Tabellen abzufragen. Beispiel: Es sollen aus der Relation zeitplan die 30 nächsten Prüfungstermine abgefragt werden. Bereits vergangene Termine sollen nicht mir ausgelesen werden. Auswahl der gewünschten Attribute welche abgefragt werden sollen: o SELECT pk_id, datum, klasse, fach, pruefung, stunde, lehrer, notiz SELECT: SQL Befehl für Datenabfrage Die gewünschten Attribute werden durch Kommas [,] getrennt. Festlegung aus welcher Relation diese Attribute stammen: o FROM zeitplan FROM: verweist auf die Relation/-en in der die Abfrage durchgeführt werden soll Ausschließung bereits vergangener Termine: o WHERE zeitplan.datum>=date(now()) WHERE: Bedingungs Ausdruck; nur die Datensätze welche die folgende Bedingung erfüllen werden ausgegeben zeitplan.datum: die Bedigung bezieht sich auf das Attribut datum in der Relation zeitplan >=: logischer Operator größer gleich date(): legt das Format fest (YYYY-MM-DD) NOW(): gibt das aktuelle Datum und die Uhrzeit im Format YYYY-MM-DD HH-MM-SS aus. Sortierung der Abgefragten Datensätze: o ORDER BY zeitplan.datum, zeitplan.stunde ORDER BY: Befehl für die Sortieren-Funktion A. Wagemann 5
2.2.2 INSERT zeitplan.datum: Sortiert nach der Größe des Attributs datum in der Relation zeitplan zeitplan.stunde: Sortiert die bereits nach Datum sortierten Werte nochmal nach der Größe des Attributs stunde in der Relation zeitplan Begrenzung der ausgegebenen Datensätze o LIMIT 0,30 LIMIT: Befehl für Begrenzung der Anzahl an ausgegebenen Datensätzen 0,30: bestimmt die Anzahl der ausgegebenen Datensätze. In Diesem Fall werden 30 Datensätze, beginnend beim 0ten Datensatz ausgegeben. Zusammengefasst: SELECT pk_id, datum, klasse, fach, pruefung, stunde, lehrer, notiz FROM zeitplan WHERE zeitplan.datum>=date(now()) ORDER BY zeitplan.datum, zeitplan.stunde LIMIT 0,30 Mit dem SQL-Befehl INSERT können Datensätze in die Datenbank hinzugefügt werden. Beispiel: In die Relation Zeitplan soll ein Datensatz eingefügt werden. Auswahl in welche Relation der Datensatz eingefügt werden soll: o INSERT INTO `zeitplan` INSERT INTO: SQL Befehl für das Einfügen von Daten `zeitplan`: Angabe der Relation in die der Datensatz eingefügt werden soll. Festlegung für welche Attribute Werte eingefügt werden sollen o (`pk_id`, `datum`, `klasse`, `fach`, `pruefung`, `stunde`, `lehrer`, `notiz`, `user`) Die Attribute werden durch Kommas [,] getrennt angegeben Angabe welche Werte für die einzelnen Attribute eingetragen werden sollen o VALUES (NULL,?,?,?,?,?,?,?,?) VALUES: gibt an das es sich bei den folgenden Zahlen oder Strings um die einzutragenden Werte handelt NULL: Gibt an das in dieses Attribut kein Wert (auch nicht 0) eingetragen wird. In diesem Fall gilt dies für den Primärschlüssel pk_id. Dieser Wert wird von der Datenbank selbst festgelegt.?,?,?,?,?,?,?,?: Es handelt sich hier um 8 Variablen. Die? nehmen die Werte der einzutragenden Attributwerte an. Die Reihenfolge in der die Variablen angegeben sind muss hier die selbe wie bei der Festlegung der Attribute sein. A. Wagemann 6
Zusammengefasst: INSERT INTO `zeitplan` (`pk_id`, `datum`, `klasse`, `fach`, `pruefung`, `stunde`, `lehrer`, `notiz`, `user`) VALUES (NULL,?,?,?,?,?,?,?,?) 2.2.3 DELETE SQL-DELETE ermöglicht es einen oder mehrere Datensätze aus der Datenbank zu löschen. Beispiel: Es soll ein bestimmter Termin aus der Relation zeitplan gelöscht werden Auswahl in Welcher Relation sich der zu löschende Datensatz befindet o DELETE FROM `zeitplan` DELTE: SQL Befehl zum Löschen von Datensätzen FROM `zeitplan`: definiert die Relation in der sich der Datensatz befindet Auswahl welcher Datensatz der Relation gelöscht werden soll o WHERE zeitplan.pk_id=$frm_id WHERE: Bedingungs Ausdruck zeitplan.pk_id: Bezieht sich auf die Größe von pk_id in der Relation zeitplan =: logischer Operator gleich $frm_id: Wert des Parameters frm_id. Dabei handelt es sich um den Wert des Primärschlüssels des zu löschenden Datensatzes Zusammengefasst: DELETE FROM `zeitplan` WHERE zeitplan.pk_id=$frm_id; 2.2.4 UPDATE Der SQL-UPDATE Befehl erlaub es dem Benutzer bereits vorhandene Datensätze zu ändern. Beispiel: Es soll ermöglicht werden die Werte aller Attribute, zu ändern. Die einzige Ausnahme bildet in diesem Fall der Primärschlüssel pk_id. Festlegung in welcher Relation sich der zu bearbeitende Datensatz befindet: o UPDATE `zeitplan` UPDATE: SQL-Befehl zum Bearbeiten von Datensätzen `zeitplan`: Relation in der sich der Datensatz befindet Ersetzten der Werte in den gewünschten Attributen: o SET `datum` =?, `klasse` =?, `fach` =?, `pruefung` =?, `stunde` =?, `lehrer` =?, `notiz` =? SET: Befehl zum Ändern der folgenden Attribute A. Wagemann 7
`datum` =?: Das Attribut datum erhält den Wert der Variable?. Die Variable enthält die bestehenden Werte, bzw. bei Änderungen den neuen Wert. Auswahl des betroffenen Datensatzes: o WHERE `zeitplan`.`pk_id` =? WHERE: Bedingungs Ausdruck `zeitplan`.`pk_id`: bezieht sich auf das Attribut pk_id in der Relation zeitplan =: logischer Operator gleich?: Variable die den Primärschlüssel des zu ändernden Datensatzes enthält Zusammengefasst: UPDATE `zeitplan` SET `datum` =?, `klasse` =?, `fach` =?, `pruefung` =?, `stunde` =?, `lehrer` =?, `notiz` =? WHERE `zeitplan`.`pk_id` =? A. Wagemann 8
3 Das Backend (In Zusammenarbeit mit A.Voit) Der gesamte Aufbau der PHP Dokumente wurde vorab einheitlich festgelegt (siehe Abbildung 2). Abbildung 2: Aufbau eines PHP Dokumentes Die Übergabe von Daten, welche in der Webseite eingegeben werden, an den Webserver kann mit zwei Varianten ausgeführt werden. GET: Die eingegebenen Parameter werden am Ende der URL angehängt, und somit an den Webserver geschickt. Die maximale Länge ist dabei begrenzt. POST: Die Parameter werden im Head der HTML beziehungsweise PHP Datei an den Webserver übermittelt. Bei dieser Variante gibt es keine Begrenzung der Länge. Zudem kann der Benutzer die Daten nicht ohne Weiteres einsehen oder verfälschen. A. Wagemann 9
Die Eingaben des Benutzers werden mit Hilfe von HTML Formularen entgegengenommen. <form name="frm_eingabe" method="post" action="verwaltung.php"> <input type="date" name="txt_datum"> <input type="text" name="txt_klasse"> <input type="submit" name="b_einfuegen" value="einfügen"> </form> Der Form Container legt fest, welche Eingabeelemente zusammengehören. Der gesamte Container sowie die einzelnen Elemente erhalten einen eindeutigen Namen. Für den gesamten Container wird die Methode POST festgelegt. Unter Action wird der Unterseite festgelegt, mit welcher die Daten übermittelt werden. Der Webserver und der PHP Interpreter können die gewünschten Operationen nur ausführen, wenn die Daten zu der richtigen Seite zugeordnet sind. Für die einzelnen Eingabefelder stehen verschiedene Typen zur Auswahl. Als Beispiel wurden hier Datum, Text und ein Senden Button angeführt. Sobald der Nutzer den Senden Button betätigt, werden alle Eingaben des Containers mittels POST übermittelt. Mit den übermittelten Parametern werden vom PHP Interpreter die Aufgaben ausgeführt. In diesem Fall handelt es sich um das Einlesen von Daten in die Datenbank. Die Eingaben des Benutzers haben immer eine jeweilige SQL Abfrage zur Folge. Die SQL Abfragen werden immer nach dem gleichen Schema bearbeitet. //SQL Query vorbereiten if (!($stmt = $mysqli->prepare("insert INTO `zeitplan` (`datum`) VALUES (?);"))) { echo "Prepare failed: (". $mysqli->errno. ") ". $mysqli->error; } //POST Paramter an Variablen binden (? werden ersetzt) if (!$stmt->bind_param("s", $_POST["txt_datum"])) { echo "Binding parameters failed: (". $stmt->errno. ") ". $stmt->error; } //SQL Query ausführen if (!$stmt->execute()) { echo "Execute failed: (". $stmt->errno. ") ". $stmt->error; } A. Wagemann 10
Die Ausgabe der Daten erfolgt auf ähnliche Weise. // SQL SELECT Query vorbereiten if (!($stmt = $mysqli->prepare("select datum FROM zeitplan"))) { echo "Prepare failed: (". $mysqli->errno. ") ". $mysqli->error; } //SQL Query ausführen if (!$stmt->execute()) { echo "Execute failed: (". $stmt->errno. ") ". $stmt->error; } //SQL Ausgabe an Variablen binden if (!$stmt->bind_result($dbv_datum)) { echo "Binding output parameters failed: (". $stmt->errno. ") ". $stmt- >error; } Die Variablen werden anschließend zeilenweise in einer Tabelle ausgegeben. echo "<table>\n"; while ($stmt->fetch()) { echo "<tr>\n"; echo "<td>". htmlspecialchars($dbv_datum). "</td>\n"; echo "</tr>\n"; echo "</table>\n"; Zusammenfassend sieht der gesamte Ablauf wie folgt aus (siehe Abbildung 3). Der Benutzer ruft die Webseite vom Webserver ab (Schritt 1). Der Webserver erkennt das PHP Quelltext in der Webseite vorhanden ist und übergibt diese an den PHP Interpreter. Da beim ersten Aufruf keine Parameter übermittelt wurden, kann der PHP Interpreter nur die SQL Abfragen für die Anzeige der Daten ausführen. Nach dem Ausführen der Abfrage wird das Ergebnis in HTML Quelltext übersetzt und vom Webserver an den Browser des Benutzers geschickt (Schritt 2). In Schritt 3 gibt der Benutzer Daten auf der Webseite ein. Die Daten werden beim Drücken des Senden Buttons als POST Parameter zusammen mit dem erneuten Aufruf der Webseite übermittelt. Der Webserver übergibt die POST Parameter und die angefragte PHP Grunddatei an den PHP Interpreter (Schritt 4). Dieser führt zuerst die SQL Abfragen zur Eingabe der Daten aus und anschließend die SQL Abfragen zum Auslesen der Daten. Das Ergebnis wird wieder in HTML Quelltext übersetzt und über den Webserver an den Webbrowser des Benutzers geschickt (Schritt 5). Durch den vorher definierten Aufbau der PHP Datei ist gewährleistet, dass zuerst alle Eingaben in die Datenbank und anschließend die Ausgaben der Datenbank abgearbeitet A. Wagemann 11
werden. Somit hat der Benutzer sofort nach Betätigung des Senden Buttons den aktuellen Stand der Daten auf dem Bildschirm. Abbildung 3: Ablauf im Detail A. Wagemann 12
Abbildungsverzeichnis Abbildung 1: Ablauf einer Datenbankabfrage... 2 Abbildung 2: Aufbau eines PHP Dokumentes... 9 Abbildung 3: Ablauf im Detail... 12 A. Wagemann 13
Tabellenverzeichnis Tabelle 1: Aufbau der Relation zeitplan... 3 Tabelle 2: Aufbau der Relation benutzer"... 3 Tabelle 3: Datentypen... 4 A. Wagemann 14