PHP – V5

Zu PHP konnte ich mir zunächst ehrlich gesagt nicht allzu viel vorstellen. Man hat es schon mal gehört und ich wusste auch, dass es für das Backend benötigt wird, aber Genaueres wusste ich auch nicht. Lustigerweise, brauchten wir PHP gerade für eines unserer Uni Projekte, jedoch kümmerte sich in meiner Gruppe ein anderer in unserem Team darum und ich habe nur Pipelines in Gitlab gebaut und diese mit Kubernetes und Docker verbunden. Ich hatte mich noch gefragt, wie er (also einer meiner Teammitglieder) das alles mit der Datenbank und dem Server integriert hatte. Heute habe ich dann gelernt, dass das alles gar nicht so schwer ist.

Wir hatten letztes Semester ja schon HTML und CSS, jedoch war die Kommunikation hier einseitig , denn wenn man sich etwas in den Webformularen eingeben lässt, dann möchte man sich die Information ja auch liefern lassen und wahrscheinlich auch verarbeiten. Deshalb braucht man PHP, was das genauer ist, darauf werde ich später mehr eingehen. Für den Anfang: Mithilfe von PHP kann der Webserver HTML Seiten dynamisch generieren. Auf dem Server läuft ein PHP Skript, das HTML-Code beliebig ändern oder erzeugen kann. Dem Browser wird weiterhin eine HTML-Website geliefert, aber er merkt nicht, dass das HTML vorher auf dem Server mit PHP bearbeitet wurde. PHP ist die am häufigsten auf Websiten verwendete serverseitige Programmiersprache.

Dann bekamen wir eine Anleitung, um XAMPP herunterzuladen. Ich dachte zunächst ich hätte Glück, denn am Anfang des Semesters hatte ich mir bereits XAMPP heruntergeladen, aber leider die falsche Version. Also hier eine kurze Anleitunf für XAMPP 5.6.4.0:

  1. Auf apachefriends.org gehen

2. im Download Fenster für das entsprechende Betriebssystem auf more Downloads klicken

3. Auf XAMPP Windows klicken

4. auf „5.6.40“ klicken und eine download Version auswählen

5. Installation ausführen

6. Nach Installation: Ordner XAMPP suchenund das control/manager Programm ausführen

7. Im Control Panel Apache-Server und mySQL starten

8. Browser starten und in Adressleiste localhost eingeben. Hier müsste dann die Website vom Server erscheinen. Danach in Adressleiste localhost/phpadmin eingeben, oder im Dashboard auf phpmyadmin klicken, dann sollte die Website des Datenbanksystems erscheinen.

Während bei uns dann XAMPP weiter herunterlud, machten wir weiter mit der Vorlesung.

Wie schon erwähnt, werde ich nun im Folgenden weiter auf PHP eingehen. PHP-Skripte werden auf dem Webserver gespeichert. Dort werden sie verarbeitet und dann als HTML-Seiten an den Browser geliefert. Diese Skripte enthalten HTML-Code und PHP-Skriptcode, der festlegt, wie der HTML-Code manipuliert werden soll. Auch ist die Verbindung zu einer Datenbank möglich. PHP speichert und liest Daten in bzw. aus einer Datenbank und baut diese Daten dann in den HTML-Code ein, den es generiert. In unserem Projekt für Software Lifecycle hatten wir auch unser PHP mit einer MySQL Datenbank verbunden (MariaDB). Dynamische HTML-Websiten ändern sich also dann auf Basis der Programmlogik in den PHP-Skripten. Das verleiht ihnen Flexibilität. Der Browser erhält damit immer noch normale HTML-Websiten, deren Code auf dem Server dynamisch generiert wurde.

Danach kamen wir zu dem Problem Hunde im Weltall. Egon hat seinen Hund Fang verloren. Nur geht er davon aus, dass er nicht normal verschwunden ist, sondern von Aliens entführt worden ist. Egon versucht mit HTML und CSS eine Website zu bauen, um mit anderen Menschen in Kontakt zu treten, die auch Aliens gesichtet haben, um so vielleicht seinen Hund wieder zu finden. Für Benutzereingaben braucht er ein Webformular, damit die Eingaben aufgenommen und an ihn vermittelt werden können.

Das hier ist Fang…Obwohl der Name Egon besser zu ihm gepasst hätte 😀

Die von Egon gebaute Website sieht wie folgt aus:

Nun kommen wir aber auch schon zum Problem: Egons Code besteht nur aus HTML. Es gibt zwei Textfelder, zwei Optionsfelder, über die der Gast angeben kann, ob er Fang gesehen hat und ein mehrzeiliges Textfeld für zusätzliche Bemerkungen. Es ist so eingerichtet, dass die Formulardaten an Egons E-Mail-Adresse gesendet werden.

Wie man sehen kann, enthält der Code ein Protokoll, über das Formulardaten per Mail versendet werden können.

Innerhalb der Vorlesung hatte Herr Noll den Code oben getestet und anschließend die Sachen auf dem Formular ausgefüllt. Nun kommen wir aber zu dem oben genannten Problem, denn wenn man alles ausgefüllt hat, dann muss man die Formulardaten an Egon manuell senden, denn das HTML Formular weiß nicht, wie man E-Mails versendet. Das heißt, mann wird entweder auf das E-Mail Programm weitergeleitet, oder die Daten wurden ignoriert und man hatte eine leere E-Mail vor sich, oder es passiert nichts, außer, dass man eine Benachrichtigung bekommt, dass der Webbrowser kein Standard-E-Mail-Programm habe. Das kommt daher, dass HTML auf dem Client lebt. Es versucht mit der mailto-Formularfunktion die Formulardaten per E-Mail zu übermitteln. Nun ist das Problem, dass mailto dafür nicht gut geeignet ist, denn die E-Mail wird nicht automatisch verschickt, sondern wird im Standard-E-Mail Programm auf dem Benutzerrechner erzeugt. Hierbei muss der Benutzer dann die E-mail selbst versenden, die für ihn komische Sachen enthält, wie z.B. ?Wann=&Wo=. Das sind die Name-Wert-Paare. Deshalb braucht man PHP, um die Auslieferung des Webformulars selbst zu steuern. Es muss die Formulardaten in eine E-Mail packen und sie verschicken. Man muss also das Augenmerk auf den Server und nicht auf den Client legen.

Zur Zeit läuft gerade folgendes bei Egons Formular ab:

Der Server macht hier also nicht viel mehr, als die Website an den Browser zu liefern. Wenn der Benutzer das Formular absendet, muss der Browser schauen, wie er das mit der E-Mail anstellt.

PHP wiederum lebt auf dem Server. Hiermit kann man bestimmen, was mit den Daten passieren soll, die der Benutzer in ein Formular eingibt. Man kann die Daten damit dann auch ohne das Einwirken des Nutzers per E-Mail versenden.

Wie man also sehen kann, kümmert sich der Server nun um das Versenden der Mail und das ausgefüllte Formular wird an ein PHP Skript auf dem Server übergeben. Dieses generiert dann auch die Bestätigungsseite.

An sich läuft wie gesagt PHP auf dem Server und wird on PHP-Skripten gespeichert. Wenn ein Server dieses Skript dann ausführ, ist die Ausgabe in der Regel reines HTML oder CSS.

So funktioniert die Übermittlung von Egons Webformular ein wenig detaillierter:

Wir haben dann das Ganze auch mit PHP ausprobiert. Leider hatte bis dahin mein XAMPP noch nicht heruntergeladen (wie bei vielen anderen auch nicht), weshalb ich zunächst nur zuschauen konnte. XAMPP steht apropos für X= X Platformen/Umgebungen, A für Apache Server, M für MySQL, P für PHP und noch einmal P für Pearl. Um den Code von Egon mit PHP, Apache und der Datenbank laufen zu lassen, muss man die Zip Datei initial.zip, die bei uns auf dem Drive lag auspacken, und in die htdocs Datei von XAMPP legen, damit der Code gefunden werden kann. Um sich das bildlich vorzustellen, wie das bei XAMPP funktioniert:

Wie man sehen kann laufen alle auf unserem Notebook. Als Webserver werden wir im Folgenden Apache benutzen. Die PHP-Skripte werden auf dem Server durch das action Attribut des Formulars verknüpft:

<form action = „meldung.php“ method = „post“>

Das mit der .php Endung ist der Name des PHP-Skripts. Klickt der Benutzer auf den Button Entführung melden, dann wird auf dem Server das Skript meldung.php ausgeführt.

Wie greift man jetzt aber auf die Formulardaten zu?

Zuerst braucht man ein PHP-Skript. In dem Hunde im Weltall Beispiel ist es der folgende Code:

Wie man sehen kann beginnt und endet das Skript mit HTML, nur im Zwischenblock befindet sich PHP. Die Dollar-Zeichen in Verbindung mit den Wörtern sind Arrays. Diese Wertpaare werden von Apache gesendet und der Server holt sie sich aus dem Array. Der obere Block des PHP Codes weisen jeweils einen bestimmten Teil der Formulardaten einer neuen Variable zu. Was der Code genaueres macht in den einzelnen Schritten werde ich später noch genauer erklären. Nachdem wir den Code zum ersten Mal gesehen hatten, probierte Herr Noll diesen aus (er hatte ihn bereits auf dem Laptop). Wichtig ist, dass man diese Textdatei dann meldung.php nennt. Damit auch die Verknüpfung zu meldung.html da ist, ändert man in dieser Datei noch die Formularaktion von mailto in meldung.php:

<form action = „meldung.php“ method = „post“>

Das wars nur leider nicht, denn wenn man das jetzt ausführen und den Button melden klicken würde, dann würde man nur eine Seite mit PHP Quellcode sehen. Das Problem ist, dass man dann meldung.html lokal geöffnet hat und somit dann auch meldung.php von der Festplatte und nicht vom Server gelesen wird. Das heißt, man muss jetzt das PHP-Skript über den Webserver ansprechen, da er sonst das PHP nicht bearbeiten kann. Der Webbrowser hat nämlich keine Ahnung von PHP. Da wir die Zip Datei schon in die htdocs Datei von XAMPP getan hatten, hat sich dieser Schritt schon erledigt, jedoch müssen wir in unserer Adresslesite nun localhost/meldung.php eingeben und zack funktioniert das!

Nun noch mal zurück zum Code, um diesen ein wenig besser erklären zu können:

Hier ist nur normaler HTML Code. Dieser beinhaltet den head mit der Überschrift und dem Titel der Seite, der oben im Tab zu sehen sein wird.

Hier kommt dann der PHP-Code. Dieser wird auf dem Server verarbeitet. Er generiert die Ausgabe mit den in das Formular eingegeben Daten, die in das HTML-Dokument eingesetzt werden. In den oberen Zeilen weist man jeweils einen bestimmten Teil der Formulardaten einer neuen Variable zu. Mit PHP Variablen kann man Werte beliebiger Natur speichern. In dem unteren Teil lässt man die erstellten Variablen arbeiten, indem man sich die gelesenen Werte ausgeben lässt. Die echo-Anwendung schreibt die Argumente in die Ausgabe, die der Server erhält und dann an den Browser liefert. <?php und ?> sind das Start- und End-Tag für den PHP-Code.

Zum Schluss folgt einfach nur das Ende Tag des bodys und des HTMLs.

Nachdem der PHP Code vom Server verarbeitet worden und die Daten in HTML eingesetzt worden sind, wurde der Inhalt dynamsich vom PHP-Skript erstellt. Dynamisch daher, da sich die Seite in Abhängigkeit von den übermittelten Formulardaten verändert. So sieht das dann aus:

Das untere Fenster mit der Ausgabe zeigt, was dynamisch in diesem Zusammenhang bedeutet

Wir sind im Unterricht sehr schnell über die ganzen Folien gegangen, da ich bisher aber noch keine großen Kontaktpunkte mit PHP hatte und ich das so oder so noch detaillierter lernen wollte, dachte ich, dass ich das ein wenig ausführlicher mache.

Die nächsten 20 Folien sind wir aber komplett übersprungen (ungefähr 20), deshalb werde ich diese auch raus lassen.

Zur Erklärung was dieses $_POST ist: dies ist eine superglobale Variable, die an jedem Punkt des Skripts verfügbar ist. Es ist eine vordefinierte Variable, die man nicht selbst deklarieren und füllen muss. Sie enthält alle in das Formular eingegebenen Daten.

$wie_lange = $_POST[‚wielange‘];

Der Name wielange stammt aus dem name-Attribut des <input>-Tags für das Formularfeld.

Im Skript wird die superglobale Variable mit einem Eimer dargestellt:

Wie man sehen kann enthält die $_POST Variable die 11 Stunden und diese werden durch die Verbindung mit dem Namen des input fields dann in das PHP gezogen. Sie ist ebenso mit der Formularübermittlungsmethode verknüpft, die vom HTML-Dokument benutzt wird, denn das method Attribut ist auf post gesetzt und somit stellt PHP dem Skript die Formulardaten in der superglobalen Variablen $_POST zur Verfügung.

<form method = „post“ action =“meldung.php“>

Dazu ist $_POST, wie ich vorhin schon angedeutet hatte, ein Array. Es sammelt also Daten, die unter einem einzigen Namen gespeichert werden. Die vom Server empfangenen Daten werden einem von PHP also im Array $_POST zur Verfügung gestellt. Wie oben auch schon leicht angesprochen, werden die Elemente eines Arrays angesprochen, indem in eckigen Klammern der Index, also der Name oder eine Zahl dieses Elements angegeben wird. Oben hatte ich ja beispielsweise das Element wielange angesprochen, damit man es auslesen kann mit: $_POST[‚wielange‘]. Jedes Element im Array entspricht den Daten eines Formularfeldes

Hier ein Beispiel, wie man sich das bildlich vorstellen kann:

Das was in den Eimer kommt, sind die Daten des Benutzers. So kann man die Daten aus jedem Eingabefeld herauslesen. Ich finde diese Darstellung wirklich sehr hilfreich. Nachdem ich mir das alles in Ruhe noch einmal durchgelesen hatte, da es in der Vorlesung doch sehr schnell ging, habe ich es jetzt wirklich verstanden.

Nach der Erklärung der Variablen $_POST sind wir wieder ein ganz schönes Stück gesprungen und ich muss ehrlich sein, dass es für mich heute sehr schwer war immer genau dabei zu bleiben, oder besser gesagt, auch die Details mitzunehmen.

In PHP werden mithilfe des Punktoperators mehrere Strings zu einem kombiniert. Um es jedoch übersichtlich zu behalten, kann man den Code über mehrere Zeilen hinaus strecken. Man muss jedoch darauf achten, dass man ihn an Stellen unterbricht, an denen Leerraumzeichen, wie Leerzeichen, Tabulatoren und Zeilenumbrüche keine Rolle spielen. So z.B. zwischen einem String und einem String-Verkettungsoperator, nicht innerhalb eines Strings. Des Weiteren muss man darauf schauen, dass man nur am Ende der letzten Zeile, die zu einer PHP-Anwendung gehört, ein Semikolon dran hängt.

Danach sind wir wieder ein ganz schönes Stück auf Seite 90 gesprungen. Hier ging es dann darum, wie man den Betreff, Sender und Empfänger noch speichert. Der Betreff und die Empfängeradresse können einfach als statischer text in neuen Variablen gesetzt werden, Die Senderadresse wurde bereits in der Variable $email gespeichert, was man auch oben im Code sehen kann, denn der Benutzer gibt in dem Formular auch seine E-Mail ein.

So wird dann die E-Mail ungefähr aussehen (kommt natürlich jetzt darauf an, was man eingegeben hat):

Wie man sehen kann wird die E-Mail aus der POST-Variablen über das Element email angesprochen und herausgezogen. Der Betreff und der Empfänger sind statische Variablen, denn sie bleiben ja immer gleich.

Was nur immer noch fehlt ist es, die E-Mail zu versenden. Hierfür benötigt man eine PHP Funktion namens mail(), mit der man auf Basis der Informationen eine E-Mail versenden kann. Sie braucht folgende Informationen:

mail($an, $betreff, $msg);

also der Empfänger, der Betreff und den Inhalt. Die Senderadresse kann zur Sicherheit auch angegeben werden. Wenn man diese hinzufügt, muss man jedoch auch ‚From:‘ vor die Senderadresse schreiben:

mail($an, $ betreff, $msg, ‚From:‘ . $email);

Anschließend sind wir in das nächste Skript gesprungen, in dem noch die Verbindung zu MySQL kommt. Hier fingen wir mit Folie 5 an. Hier fing die Geschichte so an, dass Egon zu viele E-Mails bekommt und somit den Überblick verliert. Deshalb benötigt er eine MySQL Datenbank, damit Nachrichten sicher gespeichert werden können und er sie nach möglichen Sichtungen durchforsten kann. Dadurch, dass die Daten in einer Datenbank geordnet sind, kann Egon genau die Information herausziehen, die er benötigt. Datenbanken werden durch einen Datenbankserver verwaltet, in diesem Beispiel (und auch so häufig), ist es ein MySQL-Datenbankserver. Mit diesem kommuniziert man über SQL Befehle. SQL heißt structured query language. Der Datenbankserver läuft meist auf dem gleichen Rechner, wie der Webserver und beide arbeiten im Einklang zusammen, lesen und schreiben Daten und liefern Websiten aus.

Hier kann man sehen, dass der Datnbankserver die Daten ausliest und dann in die Datenbank pushed. MySQL Datenbanken sind in Tabellen gegliedert, die Infromationen als Zeilen und Spalten zusammengehöriger Daten speichern. Wir hatten im letzten Semester MySQL Datenbanken durch genommen. In diesem Semester ging es viel mehr um NoSQL Datenbanken. Amazon benutzt z.B. eine NoSQL Datenbank, damit sehr viele Bestellungen auf einmal gemacht werden können. Was ich persönlich sehr interessant finde, sind azyklisch gerichtete Datenbanken. diese werden zum Beispiel bei Kryptowährungen eingesetzt.

Wie man hier sehen kann, verschachtelt sich das auch ganz schön.

Da wir bereits XAMPP heruntergeladen hatten, konnten wir direkt damit anfangen die Datenbank zu erstellen, denn darin ist ja bereits der Datenbankenserver enthalten. Wir haben über phpmyadmin auf den Server zugegriffen. Deshalb konnten wir auch darüber die Datenbanken und Tabellen erstellen.

Zunächst muss man eine Datenbank erstellen. Hierfür muss man in der Befehlskonsole auf der graphischen Oberfläche folgendes eingeben:

CREATE DATABASE aliendatenbank;

Hierdurch wird die Datenbank erstellt. Danach kann man eine Tabelle erstellen und diese mit Angaben zur Art der Daten füllen, die in der Tabelle gespeichert werden können.

Durch CREATE TABLE wird eine neue Tabelle erstellt, die mit den Werten in der Klammer gefüllt werden kann. Unten kann man einen Ausschnitt aus der Oberfläche von phpmyadmin sehen.

Danach gab es wieder einen sehr großen Sprung zu Folie 30. PHP kann nämlich auch die Ausführung von SQL-Anweisungen aus Scriptcode heraus ausführen, der auf dem Server läuft. Es wird sich also automatisch darum gekümmert, dass eine INSERT-Anweisung (die Daten in die Datenbank pushed) ausgeführt wird. Das HTML- Formular euft ein PHP-Skript auf, das sich darum kümmert, die Formulardaten der Datenbank hinzuzufügen. Das PHP-Skript wiederum generiert eine INSERT-Anweisung, die die Formulardaten in die Datenbank einfügt.Hier noch einmal bildlich und zu sehen ist hier auch der Code im PHP, der für diese Automatisierung zuständig ist:

das Gelbe ist der Befehl, der die INSERT-Anweisung automatisiert

Auch jetzt springen wir mal wieder auf Seite 37.

Nun bauen wir eine Verbindung zu MySQL auf. Hierfür benötigt man die folgenden ausgefüllten Felder:

das Passwort ist leer, denn wir hatten keines eingestellt

Auf Folie 39 kann man dann sehen, wie das im PHP Code mit der Verbindung und dem INSERT Befehl genauer aussieht:

Die Zeile bei $db baut die Verbindung zur MySQL Datenbank auf. Hier lann man die 4 Daten von der vorherigen Seite sehen. Als erstes wird in den Klammern die IP Adresse oder der Domain Name eingetragen (oder einfach localhost, oder die IP Adresse unseres localhosts, also 127.0.0.1). Danach kommt der Datenbank Benutzername, also in unserem Falle root, gefolgt von dem Passwort, das wir nicht hatten. Ganz am Schluss kommt der Datenbankname. Da wir diese genauso genannt hatten, bleibt das wie im Skript. Falls das fehlschlagen sollte, wird „Fehler beim Verbinden mit MySql-Server“ ausgegeben. Danach folgt der INSERT Befehl und die INSERT Abfrage auf der MySQL Datenbank. Falls das fehlschlägt, wird Fehler bei Datenbankabfrage ausgegeben.

Und wieder kommt ein kleiner Sprung auf Seite 46 (also nicht allzu groß dieses Mal), bei der die Verbindung ein wenig detaillierter erklärt wird. Jedoch habe ich den Großteil dieser Folie gerade aus Versehen erklärt 😀 Noch einmal kurz zur Wiederholung in Stichpunkten, damit es sich wenigstens ein bisschen abhebt.

  • $db: Variable, die die Verbindung festhält
  • mysqli_query(): hiermit kommuniziert PHP mit dem MySQL Server
  • der in $sql gespeicherte Code ist SQL und kein PHP-Code
  • durch mysqli_close($db) wird die Vebindung geschlossen

Jetzt springen wir wieder ein wenig auf Seite 54. Hier kann ich nur folgendes noch hinzufügen, da ich den Rest bereits erklärt hatte:

Weiter geht es auf Folie 60. Die Datenbankverbindung und die SQL-Abfrage müssen noch an die Funktion mysqli_query() übergeben werden:

Der Aufruf mysqli_query() ist nicht einseitig. Auf den Aufruf werden Informationen zurückgeliefert , die in der Variable $ergebnis gespeichert werden. Es wird aber kein richtiges Ergebnis zurückgeliefert, sondern nur, ob die Abfrage erfolgreich war. Dies hatten wir bereits in der Datenbankvorlesung gesehen, deshalb hatte es mich beim Durchlesen nicht verwundert, dennoch war es gut, das noch einmmal durchzulesen, denn ich hätte das bestimmt doch vergessen. Die Funktion mysqli_query() benötigt also eine Datenbankverbindung und einen Abfrage-String, um eine SQL Abfrage durchzuführen.

Nun hüpfen wir noch einmal, aber dafür zum vorletzten Mal 😀 Auf Folie 69 haben wir noch einmal kurz über die Variable $_POST geredet, jedoch werde ich nicht noch einmal darauf eingehen, denn wenn ich jetzt immer noch nicht wüsste, was das ist, würde ich mir um mich ein wenig Gedanken machen 😀

UUUUUnd endlich der letzte Sprung zu Folie 75 😀 Auf den folgenden Folien wurde die Änderung an dem Skriptcode meldung.php vorgenommen, damit die Daten nun in die Datenbank gespeichert werden können. Es wurde also alles eingefügt, über was wir in den letzten Folien geredet hatten:

Es sind also nicht mehr allzu viele Änderungen erforderlich.

So und das wars mit unserer letzt Vorlesung in verteilte Systeme. Es war einmal wieder sehr viel Arbeit die Einträge für das Portfolio zu schreiben und gerade an diesem hier stecken einige Stunden drin. Dennoch ist es eine meiner liebsten Vorlesungen gewesen, denn ich habe immer was gelernt und dadurch, dass ich dieses Semester wesentlich besser mitgemacht hatte, viel mir auch einiges leichter, wie zum Beispiel die Aufgaben. In dieser letzten Vorlesung sind wir leider nur sehr oft gesprungen und deshalb war es ein wenig schwer immer dabei zu bleiben.

Bloggen auf WordPress.com.

Nach oben ↑

Erstelle eine Website wie diese mit WordPress.com
Jetzt starten