PHP-Referenzen
HTML-Dateien bestehen aus Text. Zur Textauszeichnung
gibt es bestimmte Zeichen aus dem normalen Zeichenvorrat.
Es gibt 4 Möglichkeiten PHP in HTML einzubinden:
Beispiel:
1. <? ...
?>
2. <?php ... ?>
3. <script language="php"> ... </script>
4. <% ... %> |
"..." steht für beliebige PHP-Befehle.
Das klasische Beispiel mit dem jeder Programmiersparchenurs
beginnt, gibt die Worte 'Hello World' auf dem Bildschirm
aus.
Beispiel:
<?
echo "Hello World";
?> |
Merke: Alle
PHP-Befehle werden mit ";" abgeschlossen.
Um sinnvolle Anwendungen erstellen zu
können, benötigen wir Variablen.
Merke: Alle
Variablennamen beginnen mit $.
Beispiel:
$text = "Ich bin ein
String !";
echo $text;
$i = 10;
$j = 5;
echo $i,"+"$j,"=",$i+$j; |
Der Typ der Variablen (ganze Zahl, Gleitpunktzahl,
String) wird je nach Verwendung von PHP automatisch bestimmt.
Der Benutzer braucht sich darum nur in Spezialfällen
kümmern.
Folgende Rechenoperationen stehen in PHP
zur Verfügung:
Beispiel:
"+": Addition,
$i+$j,
"-": Subtraktion, $i-$j
"*": Multiplikation, $i*$j
"/": Division, $i/$j
"%": Reste-Bildung, $i%$j: z.B. 23%17 ergibt 6, da 23 geteilt durch 17 gleich
1 Rest 6 ist.
".": Verknüpfung von Strings |
Dazu kommen noch ein paar Abkürzungen,
um dem Programmierer das Leben zu erleichtern:
$i++ erhöht $i um 1.
$i-- erniedrigt $i um 1
Folgende Operationen dienen dazu Variablen
zu vergleichen
Beispiel:
$i<10: Ist i
kleiner als 10?
$i>10: Ist i größer als 10
$i==10: Ist $i gleich 10?
$i!=10: Ist $i ungleich 10?
$i>=10: Ist $i größer oder gleich 10?
$i<=10: Ist $i kleiner oder gleich 10?
Man kann auch kombinieren:
($i==10) && ($j>0): Ist $i gleich 10 und $j
größer als 0?
($i==10) || ($j==0): Ist $i gleich 10 oder $j gleich
0? |
Die if Abfrage ist mit die wichtigste
Operation zur Ablaufsteuerung und wird so auch in diversen
anderen Programiersprachen eingesetzt.
Beispiel:
if ($i<0) {
echo "$i ist kleiner als Null";
} else {
echo "$i ist nicht kleiner als Null";
}
Man kann diesen Befehl auch schachteln:
if ($i<0) {
echo "$i ist kleiner als Null";
} else if ($i>0) {
echo "$i ist groesser als Null";
} else {
echo "$i ist Null";
} |
Hat man mehrere Tests der gleichen Variable,
so kann man mit dem switch-Befehl im vergleich zur if Abfrage
evtl. Arbeit einsparen:
Beispiel:
switch ($name)
{
case "Juergen":
echo "Ich bin der kluge Juergen";
break;
case "Hans":
echo "Ich bin der dumme Hans";
break;
default:
echo "Wir sind der Rest";
} |
Nachdem die Befehle (in unserem Fall echo "")
abgearbeitet sind, springt man mit break aus dem switch-Befehl
heraus.
Die for Schleife wird dazu benutzt, wenn
eine Anweisung eine bestimmte Anzahl wiederholt werden
soll. Der for-Befehl besteht aus drei Ausdrücken:
for (ausdruck1;ausdruck2;ausdruck3)
{ ... }·
Mit ausdruck1 wird
die Schleife initialisiert, d.h. normalerweise wird die
Variable, die die Schleifendurchläufe zählt,
auf den Anfangswert gesetzt. ausdruck2 gibt
die Abbruchbedingung an. In ausdruck3 wird
die Variable, die die Schleifendurchläufe zählt,
erhöht bzw. erniedrigt.
Beispiel:
$t = "Ich soll
meine Uebungsaufgaben selbst erstellen!";
for ($i=0;$i<10;$i++) {
echo $t;
}
|
Die for Schleife wird dazu benutzt, wenn
eine Anweisung eine unbestimmte Anzahl wiederholt werden
soll.
Beispiel:
$t = "Ich soll
meine Uebungsaufgaben selbst erstellen!";
$i = 0;
while ($i<10) {
echo $t;
$i++;
}
|
Der Befehl include() liest
den Inhalt der Datei dateiname so, als ob er an dieser
Stelle stehen würde. Damit kann z.B. einheitliches
Layout bei einer größeren Anzahl von Dateien
erreicht werden.
Beispiel:
3.2
Dateien lesen/schreiben |
|
Wir wollen nun von Dateien, die auf dem
Server liegen, lesen, bzw. in diese Dateien etwas hineinschreiben.
Dies ist nützlich, um z.B. Zähler oder Gästebücher
ohne Anbindung einer Datenbank zu erzeugen.
Dazu muss als erstes mittels eines FTP
Programms eine Datei erstellt werden, anschließend
setzt man durch den FTP Befehl site
chmod xyz DATEINAME die Rechte für die Datei.
x, y, z sind 3 Ziffern, die die Rechte
für den Datei-Eigentümer, die Benutzergruppe
des Datei-Eigentümers (das sind üblicherweise
alle anderen Benutzer auf dem Computer) und den Rest der
Welt bestimmen.
Jede der 3 Ziffern liegt zwischen 0 und
7.
0 bedeutet: keinerlei Zugriffsrecht.
1 bedeutet: Ausführrecht
(wichtig bei Programmen und Verzeichnissen).
2 bedeutet: Schreibrecht
(was gleichzeitig auch "Löschrecht" ist).
4 bedeutet: Leserecht.
Die Zahlen können beliebig addiert
werden.
Zum Beispiel: site
chmod 777 DATEINAME gibt jedem das Recht, alles
mit der Datei DATEINAME anzustellen.
Nachdem die Datei jetzt erstellt wurde, kommen wir nun
zum auslesen dieser Datei:
Beispiel:
-
Zuerst müssen wir die
Datei öffnen, dabei muß angegeben
werden, was mit der Datei geschehen soll: Wollen
wir lesen, schreiben, anhängen,...
-
Der Befehl lautet: $datei
= fopen("xxx","r"); Das heißt,
wir öffnen die Datei mit dem Namen xxx
und wollen darin lesen ("r"). Die technischen
Details lassen wir dabei von der Variablen
$datei regeln, d.h. wenn wir später
aus der Datei lesen wollen, so benützen
wir die Variable $datei.
-
Nun lesen wir zeilenweise
den Inhalt der Datei, und zwar so lange, bis
wir ans Ende der Datei gelangt sind:
while (!feof($datei)) {
$zeile = fgets($datei,1000);
echo $zeile;
}
-
Schließlich muß die
Datei noch geschlossen werden: fclose($datei);
|
feof($datei) ist wahr, sobald wir an das
Datei-Ende gelangt sind. $zeile
= fgets($datei,1000); liest maximal die nächsten
1000 Zeichen, hört aber auf, sobald eine neue Zeile
beginnt, oder das Ende der Datei erreicht ist.echo $zeile;
gibt einfach das Gelesene wieder aus.
Folgende Möglichkeiten
gibt es, eine Datei zu öffnen:
"r": nur
lesen, begonnen wird am Dateianfang.
"r+": lesen und schreiben, begonnen wird am Dateianfang.
"w": nur schreiben. Existiert die Datei bereits,
wird der bisherige Inhalt gelöscht. Existiert sie nicht, wird versucht.
sie zu erzeugen.
"w+": lesen und schreiben. Ansonsten wie "w".
"a": nur schreiben. Begonnen wird am Ende der Datei
(a wie append, anhängen). Existiert sie nicht, wird versucht. sie zu erzeugen.
"a+": lesen und schreiben. Ansonsten wie "a". Achtung:
Es wird beim Lesen natürlich auch am Ende der Datei begonnen (dort steht
natürlich nichts mehr...)
Mit dem Befehl:
fwrite($datei, "Ein
Text"); |
kann der String Ein Text in die Datei
geschrieben werden.
Mit PHP können wir nicht nur HTML-Text
erzeugen, wir können sogar Bilder dynamisch erzeugen.
Zum Beispiel können wir eine Datei "bild.php3" erstellen,
die ein Bild zurückliefern wird. In diese Datei schreiben
wir keine HTML-Befehle, sondern ausschließlich PHP-Befehle.
Ausschließlich heißt auch, daß vor dem
ersten Befehl nichts, auch kein Leerzeichen oder Leerzeile,
stehen darf. Ansonsten ist der Browser sofort der Überzeugung,
daß ein Textdokument ankommt.
Beispiel:
Header( "Content-type:
image/gif");
$im = imagecreate(200,100);
$blue = ImageColorAllocate($im, 0x2c,0x6D,0xAF);
ImageFilledRectangle($im,0,0,200,100,$blue);
ImageGif($im);
ImageDestroy($im);
?>
|
Ruft man diese Datei auf, so erscheint
ein blaues Rechteck. Natürlich kann diese Datei auch
mit in eine HTML-Seite eingebunden werden.
Der Befehl bewirkt im einzelnen:
Header( "Content-type:
image/gif"); teilt dem Browser mit, daß nun
ein GIF-Bild kommen wird.
$im = imagecreate(200,100);erzeugt
ein Bild, das 200 Pixel breit und 100 Pixel hoch ist.
$blue = ImageColorAllocate($im,
0x2c,0x6D,0xAF);berechnet die Farbe
ImageFilledRectangle($im,0,0,200,100,$blue);zeichnen
wir ein ausgefülltes Rechteck, das bei 0,0 (links
oben) beginnt und 200 Pixel nach rechts und 100 Pixel nach
unten endet, und in der eben erzeugten Farbe $blue gefüllt
ist.
ImageGif($im);erzeugen
zuerst ein GIF-Bild
ImageDestroy($im); gibt
den internen Speicherplatz für das Bild frei.
Eines der Haupteinsatzgebiete von PHP
ist der Online-Zugriff auf Datenbanken.
Was ist eine Datenbank?
Vereinfacht gesagt: Eine Datenbank enthält
Datensätze, die mit einer speziellen Sprache bearbeitet
werden können. Zum Beispiel können bestimmte
Datensätze ausgelesen werden, neue Datensätze
hinzugefügt werden, Datensätze können aktualisiert
oder gelöscht werden. All diese Vorgänge nennt
man Abfragen.
Weit verbreitet sind sogenannte SQl-Datenbanken,
d.h. Datenbanken, die mit der Sprache SQL (Abkürzung
für Structured Query Language) bearbeitet werden können.
PHP kann mit Datenbanken verschiedener Hersteller umgehen,
besonders beliebt ist die Datenbank MySQL.
Vorteile von MySQL: relativ
schnell und kostenlos.
Um eine SQL-Abfrage mit PHP auszuführen,
muß zuerst die Datenbank geöffnet werden, dann
wird die SQL-Befehlszeile an die Datenbank geschickt, die
Antwort der Datenbank wird aufgenommen und schließlich
wird die Datenbank-Verbindung wieder geschlossen.
Zuerst müssen wir uns etwas Hintergrundwissen über
die SQL-Befehlszeile verschaffen:
4.2
Verbindung zur Datenbank |
|
Zuerst muß eine Verbindung von
PHP zum Datenbank-Server (d.h. dem Computer, auf dem die
Datenbank liegt) hergestellt werden:
<?
$verbindung = @mysql_connect("localhost","$benutzer","$passwort");
?> |
localhost bedeutet, wir verbinden uns
zum gleichen Computer, auf dem sich auch der Webserver
befindet. Dies funktioniert, da in unserem Fall Webserver
und Datenbank auf einem Rechner liegen. Wie man vielleicht
erahnt, kann also auch auf eine Datenbank auf einem beliebigen
anderen Rechner im Internet zugegriffen werden - vorausgesetzt
man besitzt die entsprechende Berechtigung. $benutzer ist
ein gültiger Benutzername für diese Datenbank
(dies wurde vom Datenbank-Verwalter so festgelegt). $passwort
entspricht dem Passwort des Benutzers.
Beispiel:
if (!$verbindung)
{
echo "Keine Verbindung möglich!";
exit;
} |
Hiermit können wir überprüfen,
ob die Verbindung geklappt hat.
Steht die Verbindung, so können
wir die Abfrage starten. Zur besseren Übersicht schreiben
wir die SQL-Abfrage in eine Variable ($abfrage). Diese
Abfrage wird an den Datenbank-Server geschickt. Das Resultat
fangen wir in der Variablen $erg auf. Die erste Variable
gibt die Datenbank an, die wir abfragen wollen. Die zweite
Variable enthält den SQL-Befehl, die dritte Variable
enthält die Verbindung, die mit mysql_connect geschaffen
wurde.
Beispiel:
$verbindung = @mysql_connect("localhost","$benutzer","$passwort");
$abfrage = "SELECT name from kunde"; $erg = mysql_db_query("datenbankname",$abfrage,$verbindung); |
Die erste Variable gibt die Datenbank
an, die wir abfragen wollen. Die zweite Variable enthält
den SQL-Befehl, die dritte Variable enthält die Verbindung,
die mit mysql_connect geschaffen wurde.
Nun kommt eine etwas kniffliger Arbeit:
Wir müssen aus $erg die
zurückgelieferten Datensätze auslesen.
Hätten wir einen INSERT, UPDATE oder DELETE Befehl
verschickt, bräuchten wir nur testen, ob $erg wahr
oder falsch ist, d.h. ob die Abfrage geklappt hat oder nicht.
Da wir aber den SELECT-Befehl
an die Datenbank geschickt haben, wollen wir die von der
Datenbank zurückgelieferten Datensätze auslesen.
Wir haben pro Datensatz die Spalte Name angefordert. Diese
lesen wir nun zeilenweise aus:
list($Name) = mysql_fetch_row($erg); |
Die Variable $erg enthält nach der
Abfrage Zeilen mit jeweils einer Spalte (Name). mysql_fetch_row($erg)
gibt genau eine Zeile aus. Zu Beginn steht eine Art Zeiger
auf der ersten Zeile, führt man den Befehl mysql_fetch_row($erg)
aus, rutscht der Zeiger zur nächsten Zeile usw. Will
man alle Zeilen ausgeben, empfiehlt sich eine Schleife:
while (list($Name,$Art)
= mysql_fetch_row($erg)) {
echo "$Name ist ein(e) $Art";
}
|
Die Ergebnisse verarbeiten wir also zeilenweise
zu HTML-Text. · Am Ende empfiehlt es sich, die Verbindung
zur Datenbank zu kappen:
mysql_close($verbindung); |
Ein wichtiger Bestandteil einer jeden
Programmiersprache ist die Fähigkeit, mehrere Befehle
zu einem einzigen Befehl zusammenzufassen, d.h. neue Funktionen
zu definieren und diese dann beliebig oft auszuführen.
PHP hat diese Fähigkeit selbstverständlich auch.
Wir wollen für eine Anzahl von Tagen
berechnen, wieviele Sekunden diese Tage zusammen haben:
Beispiel:
function tag ($anzahl)
{
$sekunden = 3600 * 24 * $anzahl;
return $sekunden;
}
$x = tag(7);
echo "7 Tage bestehen aus $x Sekunden !"; |
$anzahl nennt man auch Argument der Funktion.
Eine Funktion kann mehrere Argumente, oder auch kein Argument
besitzen:
Ein weiteres wichtiges Betätigungsfeld
von PHP ist die Bearbeitung von Zeichenketten. Es gibt
eine ganze Reihe von Befehlen um Zeichenketten zu manipulieren,
wir stellen hier nur die wichtigsten vor, der Rest kann
im Handbuch nachgeschlagen werden. trim entfernt
Leerzeichen, Tabulatorzeichen etc. (sogannten "whitespace")
vor dem ersten und nach dem letzten "echten" Zeichen in
der Zeichenkette.
Beispiel:
$x = " Ich bin
eine Zeichenkette! ";
$y = trim($x); |
Die Befehle ltrim() und chop() entfernen
whitespace vor, bzw. nach der Zeichenkette
Der Befehl ucfirst() wandelt
das erste Zeichen eines Strings in Großbuchstaben
um (wenn möglich).
Der Befehl ucwords() hingegen
wandelt in jedem Wort eines Strings das erste Zeichen in
Großbuchstaben um (wenn möglich).
Der folgende Befehl ist besonders wichtig,
wenn man vorhandenen Text für das WWW aufbereiten
will:
ersetzt alle Zeilenumbruch-Zeichen ("\n")
des Strings $y in die Zeichenfolge <br>\n.
Als Cookies werden kurze Informationen
bezeichnet, die der WWW-Server beim Client (Betrachter)
hinterlassen kann. Se sind vor allem beim elektronischen
Einkaufen im WWW von Bedeutung, genauer gesagt sind sie
immer dann von Bedeutung, wenn der Server weitergehende
Information vom Betrachter haben muß, als nur die
Internet-Adresse, die eine Seite anfordert.
Cookies bestehen aus folgender
Information:
name: Name
value: Wert
expires: Verfallsdatum
domain: Adressraum der Server,
die das Cookie wieder lesen dürfen.
path: Nur über
Seiten, die in diesem Verzeichnis, oder
Unterverzeichnissen davon liegen, darf
das Cookie angefordert werden.
secure: Wenn
gesetzt, darf das Cookie nur über
verschlüsselte Informationskanäle übertragen
werden.
Wir wollen feststellen, ob ein Betrachter
eine Seite schon einmal aufgerufen hat. Dazu setzen wir
beim ersten Aufruf der Seite ein Cookie. Dies muß allerdings
vor dem HTML-Head geschehen, d.h. am Anfang der Datei.
(Unbedingt auch die Ausgabe von Leerzeilen, -Zeichen vor
diesem PHP-Teil vermeiden!)
Beispiel:
<?
$t = time()+3600*24*10;
SetCookie("mycookie","Schon besucht",$t,"/test",".de");
?>
|
Dieser Befehl setzt ein Cookie mit dem
Namen mycookie auf den Wert "schon besucht" mit einem Verfallsdatum
von 10 Tagen. Lesen darf dieses Cookie jeder Server mit
der Endung .de, allerdings nur aus Dateien, die in einem
Verzeichnis /test, oder Unterverzeichnissen davon liegen.
Das Verfallsdatum des Cookie muß in
Sekunden seit dem 1. Januar 1970 angegeben werden. Die
Funktion time() gibt die Sekunden seit dem 1. Januar 1970
der momentanen Zeit an. Weitere Datums- und Zeitfunktionen
sind im Handbuch nachzulesen. Da die Berechnung der Sekunden
nicht immer ganz übersichtlich ist, empfiehlt sich
die Verwendung einer Funktion:
Beispiel:
function tage ($anzahl)
{
$sekunden = time()+ 3600 * 24 * $anzahl;
return $sekunden;
}
SetCookie("mycookie","Schon besucht",tage(10),"/test",".de"); |
Cookies lesen ist mit PHP wieder sehr
einfach realisiert: Der Inhalt des Cookies ist in einer
Variablen mit dem Namen des Cookies enthalten:
Beispiel:
gibt also den Wert des Cookies aus, in
unserem Fall den Text "Schon besucht".
Ein Server kann mit PHP ein Cookie wieder
entfernen, indem lediglich der Befehl setcookie mit dem
Namen des Cookies als Argument angegeben wird:
|