Banner

Crashkurs PHP


PHP ist eine Skriptsprache, welche relativ einfach komplexe Programmabläufe ermöglicht. Ein Internetauftritt kann mit PHP viel dynamische gestaltet werden. Es ist die Grundlage für Gästebücher, Counter, Foren, etc.

Vergleich PHP/Javascript

Der Unterschied ist so einfach, wie gewichtig:
Javascript wird durch den Browser des Clients ausgeführt.
PHP wird am Server ausgeführt.

Was bedeutet das?
Javascript kann sich der Kontrolle entziehen, indem es z.B. einfach deaktiviert wird. Außerdem ist es nicht barrierefrei. Außerdem kann der Quelltext von jedem eingesehen werden. Es kann dazu genutzt werden, visuelle Extras zu ermöglichen.
PHP wird schon am Server ausgeführt. Der Quelltext wird nicht weitergegeben. Es kann nicht einfach durch den Benutzer umgangen werden. Da es unabhängig vom Browser funktioniert, ist es sehr barrierefrei. Es sollte für die meisten dynamischen Abläufe innerhalb eines Internetauftritts benutzt werden.


Der Apache

Hier ist kein Hubschrauber oder Ureinwohner Amerikas gemeint. Ein Apache-Server wird benötigt um PHP-Code ausführen zu können. Die meisten Webserver unterstützen dies. Eine Alternative stellt z.B. der IIS von Microsoft dar. Hat man keinen eigenen Webserver, der PHP unterstützt, hilft für erste Übungen oft das XAMPP-Projekt.
Läuft nun ein Apache-Server, werden in dessen Verzeichnis entsprechende PHP-Dokumente abgelegt, welche über den Webbrowser dann abgerufen werden können.


Hallo Welt

Die erste Aktion mit einer neuen Programmiersprache ist traditionell das "Hallo Welt"-Programm, welches eine einfache Ausgabe auf dem Bildschirm erzeugt. Das machen wir mal eben.

Wir legen nun ein erstes Dokument an:

hallowelt.php

<?php echo "Hallo Welt!"; ?>

Wir rufen es nun mit unserem Browser auf (z.B. http://servername/hallowelt.php) und es erscheint die Ausgabe.
PHP wird auch umklammert mit dem oben angegebenen Code. Ansonsten wird das Programm nicht ausgeführt, sondern in Textform einfach wiedergegeben.


HTML-Ausgabe

PHP soll in der Ausgabe den Zweck erfüllen, HTML-Code zu generieren. Das obige Beispiel sieht in HTML-Schreibweise also wie folgt aus:

<html> <head> <title>Testseite</title> </head> <body> </body> <?php echo "<div>Hallo Welt!</div>"; ?> </body> </html>


Variablen

An der Stelle wird es nun etwas tiefgehender. Eine Variable kennen wir aus dem Mathematikunterricht. Allerdings versuchen wir hier nicht den Wert von x zu ermitteln, sondern legen ihn fest.

<?php $variable = "Hallo Welt!"; echo $variable; ?>

Eine Variable wird mit dem $-Zeichen und einem direkt nachfolgenden Namen "erstellt".
Variablen können verschiedene Daten enthalten und auch miteinander verarbeitet werden.
Ein Befehl wird mit einem Semikolon beendet.

<?php # mit der Raute kann hier ein einzeiliger Kommentar erstellt werden /* Kommentare sind auch über mehrere Zeilen möglich */ $Zahl1 = 7; # Es wird einer Variable ein Wert zugewiesen $Zahl2 = 3; # Hier auch /* Hier werden beide Zahlen zusammengerechnet und ausgegeben. Das geht natürlich auch mit -, * und / */ echo $Zahl1 + Zahl2; echo "<br />"; #Absatz /* Eine Besonderheit stellt % dar. Hier wird der Rest einer Division berechnet. */ echo 10%3; echo "<br />"; /* Auch Zeichenketten lassen sich miteinander verknüpfen */ $Satz = "Der Jäger war im "; $Wort = "Wald"; echo $Satz.$Wald; echo "<br />"; /* Das geht auch direkt */ echo $Satz."Wohnzimmer"; echo "<br />"; ?>


Error-Reporting mit PHP

Sollte dein Programm nicht funktionieren und keine Fehlermeldungen angezeigt werden, können diese leicht eingeschaltet werden.
Aus Sicherheitsgründen sind diese meist deaktiviert.

/* ERROR REPORTING */ error_reporting(E_ALL); ini_set('display_errors', 1);


Arrays

Es lassen sich auch ganze Listen von Werten speichern. Ähnlich Tabellen. Das nennt sich dann Array.
Damit lassen sich beispielsweise mehrere Variablen mit einer Schleife ansprechen. Das könnte für ein Schachbrett interessant sein.
Ein Array lässt sich so definieren:
$obst = array("Apfel","Orange","Birne","Kirsche");

Die Elemente sind dann durchnummeriert mit Null beginnend:
echo $obst[0];
erzeugt "Apfel" als Ausgabe.

Um von der Liste in die Tabelle zu kommen, gibt man mehrere Dimensionen an, indem die Listen weitere Listen enthalten:

$essen = array( array("Apfel","Orange","Birne","Kirsche"), array("Walnuss","Erdnuss","Haselnuss"), array("Sauerkraut","Rotkraut","Rhabarber","Petersilie") );

echo $essen[0][2]; erzeugt "Birne".
echo $essen[2][1]; erzeugt "Rotkraut".

Statt Nummern können auch Namen verwendet werden. Das nennt man dann assoziatives Array:

$essen = array( "obst" => array("Apfel","Orange","Birne","Kirsche"), "nuss" => array("Walnuss","Erdnuss","Haselnuss"), "kraut" => array("Sauerkraut","Rotkraut","Rhabarber","Petersilie") );

echo $essen["muss"][0]; erzeugt "Walnuss".

Mit print_r($essen); kann auch ein ganzes Array angezeigt werden.


Eingaben und Formulare

Eingaben können auf mehreren Wegen geschehen. Der einfachste Weg ist GET.
Hierbei wird die Variable einfach in der Adresszeile übergeben. Ein möglicher Link sieht dann wie folgt aus:

http://domain.de/?l=begruessung&geschlecht=w

Hier wird nun der Wert "begrüssung" in das assoziative GET-Array mit dem Namen "l" geschrieben. Außerdem wird der Wert "w" in das gleiche Array unter dem Namen "geschlecht" gespeichert. Der Vorgang dahinter sieht so aus:

$_GET["l"] = "begrüssung"; $_GET["geschlecht"] = "w";

Wie man sieht, kann man so auf einfache Art und Weise auch mehrere Variablen per Link mitgeben. So können sie auch gleich angesprochen werden:
echo $_GET["l"];

Nun, wie sieht es aber mit Dateien aus?
Hierfür brauchen wir ein Formular und den POST-Weg. Dabei werden die Variablen im Hintergrund übertragen.
ein entsprechendes Formular kann in HTML geschrieben werden und sieht in etwa so aus:

<form action="get_form.php" method="post" enctype="multipart/form-data"> Wählen Sie eine Text-Datei von Ihrem Rechner aus:<br /> <input name="datei" type="file" maxlength="100000" accept="text/*"><br /> <br /> Neuer Dateiname:<br /> <input name="dateiname"><br /> <input type="submit" value="Datei hochladen"> </form>

Der "enctype" kann in einem Formular auch weggelassen werden, wenn es sich nur um Textfelder handelt.
Entgegengenommen werden die Hochgeladenen Variablen nun von der angegebenen "get_form.php":

<?php move_uploaded_file($_FILES['datei']['tmp_name'], "upload/".$_POST['dateiname']); ?>

Damit wird die Datei dann auf dem Server im Unterverzeichnis "upload" gespeichert.
Wichtig: Dieser muss Schreibrechte besitzen (chmod 777).


Design zentralisieren (Templates)

Jetzt kommt was Nützliches. Sicher fragt sich mancher, wie er es hinbekommt, dass jede Seite gleich aussieht, ohne dass jede einzelne Seite angepasst werden muss. Hier nun die Lösung:

index.php

if($_GET["l"]==""){ $_GET["l"] = "start"; } <!DOCTYPE html> <html> <head> <title>Testseite</title> </head> <body > <?php include("content/".$_GET["l"].".php"); ?> </body> </html>

Mit diesem Code können nun einfach Texte im Unterverzeichnis "content" abgelegt werden und z.B. mit http://www.domain.de/?l=start in das immer gleiche Design geladen werden. Speichert man nun das Menü noch in der index.php, ist dies ebenfalls überall gleich und muss nur noch an einer zentralen Stelle gepflegt werden.
In diesem Fall ist die "content/start.php" der Standardinhalt, wenn nichts angegeben wird. Quasi die Startseite.
Toll, oder? =)


Verzweigungen

Verzweigungen kommen bei Entscheidungsfragen zum Einsatz. Bei der Designzentralisierung war das schon zu sehen. Ein Beispiel:

<?php if( $_GET['geschlecht']=="w" ){ echo "Hallo Frau"; } else{ echo "Hallo Mann"; } ?>

Ist eine bestimmte Bedingung erfüllt, wird eine bestimmte Aktion durchgeführt. Ist das nicht der Fall, wird etwas anderes gemacht. In beiden Fällen können weitere Bedingungen stehen. Der else-Fall kann auch weggelassen werden.


Schleifen

Schleifen können dazu benutzt werden, Mechanismen mehrfach hintereinander auszuführen.
Am einfachsten geht das mit der while-Schleife:

<?php $i = 1; while ($i <= 10) { echo $i; $i++; } ?>

Anmerkung: Mit ++ kann der Wert einer Variable einfach um 1 erhöht werden.
Eigentlich ist diese Art der Schleifen für andere Vorgänge gedacht. Für zählende Vorgänge gibt es die for-Schleife:

<?php for ($i=1; $i <= 10; $i++) { echo $i; } ?>



Funktionen

Wird ein Programm komplexer, sollten einige Teile in Funktionen ausgelagert werden. Auch bei Programmteilen, die man mehrfach benutzt ist das eine gute Idee.

<?php $i = 0; echo addiere_eins($i); function addiere_eins($zahl = 0) { $zahl++; return $zahl; } ?>

Dabei kann eine Funktion auch unter dem restlichen Code stehen.
Eine Funktion hat einen Wert, den es erhalten kann. Der wird jeweils in den Klammern definiert. Möchte man die Funktion mit optionalen Werten nutzen, kann man diese innerhalb der Klammern mit einem "=" vordefinieren.
Eine Funktion kann (muss aber nicht) einen Wert wieder zurückliefern. Das geschieht mit dem return-Befehl.
Variablen innerhalb einer Funktion sind nur in dieser Funktion gültig. Variablen außerhalb einer Funktion können nicht innerhalb einer Funktion genutzt werden, es sei denn, sie werden übergeben oder werden explizit von außerhalb genutzt.


Superglobale Variablen

Einige Variablen können doch innerhalb und außerhalb von Funktionen genutzt werden. Das sind die superglobalen Variablen. Zwei sind bereits bekannt: $_GET und $_POST.
Um sich alle globalen Variablen anzusehen kann man mal <?php print_r($GLOBALS) ?> ausführen.


Sessions

Sollen Variablen von einem Dokument ins nächste übergeben werden, kann die mit GET geschehen. Manchmal jedoch benötigt man Variablen über einen längeren Zeitraum. Dafür kann man sessions nutzen.

<?php session_start(); $_SESSION['user'] = "alex" ?>

Solange die Session läuft (muss in jedem Dokument gestartet werden, die index.php bietet sich daher als zentraler Punkt an) kann der vergebene Wert nun ohne aufwändige Weitergabe genutzt werden. Das können natürlich auch ganze Arrays sein.