|
Da ihr mich immer wieder fragt, ob ich euch nicht PHP beibringen könnte, habe ich jetzt einfach mal beschlossen, hier einen kleinen PHP-Kurs zu veröffentlichen, in dem ihr das wichtigste selbst nachlesen könnt. Vorab seinen allerdings zwei Dinge gesagt:
Ihr solltet euch halbwegs mit HTML auskennen, sonst müsst ihr mit PHP gar nicht erst anfangen. Wer also von HTML keine oder nur sehr wenig Ahnung hat, der macht diese Seite am besten wieder zu und besucht stattdessen www.planethtml.de, wo man gut HTML im Selbst-Studium lernen kann. Danach könnt ihr dann wieder kommen und euch hier euer PHP-Wissen anlesen.
Dieser PHP-Kurs kratzt nur an der Oberfläche. Es gibt noch sehr, sehr viel mehr über PHP zu sagen, aber das kann ich hier beim besten Willen nicht alles erwähnen. Ihr werdet hier also nur die Grundzüge erlernen, die reichen sollten, um z.B. ein einfaches Gästebuch zu programmieren. Wenn ihr aber tiefer ins Detail gehen wollt, dann sucht lieber nach grossen Seiten, die sich komplett PHP verschrieben haben.
So, und für alle, die jetzt immer noch von mir PHP lernen wollen, legen wir dann mal los, oder? 
Inhaltsverzeichnis
Was ist PHP?
PHP ist eine Ergänzung zu HTML, durch die Webseiten dynamisch werden. Das Gegenteil von dynamisch ist statisch, was auf Seiten zutrifft, die ausschliesslich aus HTML bestehen. Dort könnt ihr euch den Inhalt durchlesen und mit Hilfe von Links zwischen den verschiedenen Seiten hin und her springen, aber das war es dann auch schon. Bei dynamischen Webseiten hingegen könnt ihr selbst interaktiv werden, indem ihr z.B. die Tabellen nach euren Wünschen sortiert, mit Suchformularen die Seite durchsuchen könnt, vielleicht gibt es auch ein paar kleine Spiele ... die Möglichkeiten sind kaum begrenzt!
Die Abkürzung "PHP" steht für "PHP Hypertext Preprocessor", also ein rekursives Backronym, eine Abkürzung, die in sich selbst vorkommt. Davon abgesehen ist ein Preprocessor (auf deutsch: Präprozessor) ein Programm, das Quelltext ausführt - und unter Hypertext versteht man unter anderem HTML, also ist PHP vom Namen her quasi etwas, das HTML ausführt.
Klingt jetzt vielleicht ein bisschen kompliziert, aber die Bedeutung des Namens ist ja auch egal. ^^
Wichtig ist die Kernaussage: PHP erweitert HTML, so dass der User auf der Seite mehr selbst machen kann!
PHP in HTML einfügen
HTML-Dateien haben bekanntlich die Endung .html, PHP-Dateien hingegen haben die Endung .php - klingt logisch, oder? ^^
Wenn ihr also eine bestehende Homepage, die nur aus HTML-Dateien besteht, auf PHP umstellen wollt, dann solltet ihr zunächst einmal alle betroffenen Seiten von .html in .php umbenennen. Wobei ihr wissen solltet, dass es überhaupt kein Problem ist, wenn eine .php-Datei trotzdem nur aus HTML besteht, wohingegen PHP-Code, der in einer .html-Datei steht, nicht ausgeführt werden kann. Das heisst im Klartext: Lieber eine Seite vorsorglich .php nennen und dann doch keinen PHP-Code brauchen, als mit .html anfangen und dann irgendwann alles nochmal umkrempeln, weil euch nachträglich einfällt, dass ihr doch PHP braucht.
Wenn man einmal vom PHP-Code absieht, sieht eine PHP-Datei eigentlich aus wie eine HTML-Datei: Es gibt <head></head> und <body></body>, ihr formatiert euren Text mit <b></b>, <i></i> und <u></u>, ein <br> sorgt für einen Zeilenumbruch usw.
Aber dann kommt eben doch irgendwann noch der PHP-Code ins Spiel. Und um der Seite klar zu machen, wo der PHP-Code beginnt und endet, gibt es die folgenden Tags:
Das hier ist HTML-Code.
<?PHP
echo "Das hier ist PHP-Code.";
?>
Das hier ist jetzt wieder HTML-Code.
|
Der PHP-Code beginnt also dort, wo <?PHP steht und endet dort, wo ?> steht. Wobei es natürlich durchaus möglich ist, innerhalb einer Seite mehrmals PHP-Code einzubinden, genauso wie es z.B. auch mehrmals möglich ist, <i>kursiven Text</i> zu verwenden.
Wichtig ist, dass PHP grundsätzlich alles als Code ansieht und versucht, auszuführen. Aber es kann natürlich sein, dass ihr zwischen dem vielen Code auch mal ein paar Zeilen Text habt, der nur einfach so als Text da stehen soll. Natürlich könntet ihr jetzt für jeden Abschnitt Text den PHP-Code kurz unterbrechen ...
<?PHP
// Hier steht Code, Code und noch mehr Code ...
?>
Ein bisschen Text zwischendurch.
<?PHP
// Hier geht es mit dem Code dann auch schon weiter ...
?>
|
... aber auf Dauer sieht das doch ein bisschen zu umständlich aus, oder?
Und deshalb gibt es den echo-Befehl: Er gibt innerhalb des PHP-Codes einfach das, was hinter echo in Anführungszeichen steht, aus. Wobei es auch möglich ist, innerhalb des echo-Befehls dann wiederum HTML-Code zu verwenden, was ungefähr so aussehen könnte:
<?PHP
// Hier steht Code, Code und noch mehr Code ...
echo "Ein bisschen Text zwischendurch.<br>";
echo "Und jetzt gibt es auch noch was in fett: <b>Voll fett, oder?</b>";
// Hier geht es mit dem Code dann auch schon weiter ...
?>
|
Ihr habt inzwischen sicher auch schon das Semikolon ; bemerkt, das am Ende jeder Befehlszeile steht. Seine Existenz ist schnell erklärt: In PHP muss jeder Befehl mit einem Semikolon enden. Das ist so, da gibt es nichts dran zu rütteln. Wir müssen hinter jeden Befehl ein Semikolon setzen, ob wir wollen oder nicht. 
"Aber halt," sagt ihr jetzt vielleicht, "hinter diesen komischen Zeilen, die mit zwei Schrägstrichen // beginnen, hast du doch gar kein Semikolon gesetzt!"
Richtig, das sind nämlich Kommentarzeilen. Die enthalten keine Befehle, sondern - wie der Name schon sagt - Kommentare. Der User kriegt davon in der Regel nichts mit, die Kommentare dienen hauptsächlich für den Programmierer, damit er sich noch zurecht findet, wenn ein Quellcode mal ein bisschen umfangreicher wird. Unter Profis sind nämlich Quellcodes mit mehreren tausend Zeilen alles andere als eine Seltenheit.
PHP ignoriert alles, was zwischen // und dem Zeilenende steht, so dass der Programmierer dort rein schreiben kann, was er will. Ein Beispiel gefällig? Kein Problem!
<?PHP
// Zahlen definieren
$a = 5;
$b = 7;
// Addieren
$ergebnis = $a + $b;
// Ergebnis ausgeben
echo "Das Ergebnis lautet: $ergebnis";
?>
|
Bei so einem kleinen Quellcode wie diesem sind die Kommentare zugegeben eher störend als hilfreich, aber stellt euch statt der einfachen Addition einmal eine 100-zeilige komplizierte Formel vor, dann versteht ihr sicher, wozu die Kommentare gut sind ...
Variable
In dem Beispiel gerade eben war ich so fies, schon wieder etwas zu verwenden, das ihr noch gar nicht kennt, und zwar diese komischen Dollar-Zeichen. Nein, ihr seid hier nicht auf der offiziellen Seite der Bank von Amerika gelandet, sondern das sind schlicht und einfach Variablen. Wie eine Variable aussieht, ist in jeder Programmiersprache anders, und in PHP ist eine Variable eben dadurch gekennzeichnet, dass sie mit einem Doller-Zeichen beginnt.
Aber was ist eigentlich eine Variable? Nun, das ist das, was PHP überhaupt erst richtig interessant macht! Variablen können verschiedene Werte annehmen, das sind meistens Zahlen, aber manchmal auch Buchstaben, Worte oder ganze Sätze. Eine Variable zu definieren ist sehr einfach, dazu schreibt ihr einfach:
Voila, schon hat die Variable $var den Wert 10 angenommen! 
Es ist auch möglich, den User selbst die Werte mancher Variablen bestimmen zu lassen, aber dazu kommen wir später noch. Das ist es dann aber, was PHP wirklich interaktiv macht. Der User könnte zum Beispiel zwei Zahlen und ein Rechenzeichen wählen und euer PHP-Code kümmert sich um das Ausrechnen, schon hättet ihr einen kleinen Taschenrechner programmiert. Oder der User gibt seinen Namen ein und wird daraufhin von der Seite persönlich angesprochen, so etwas sieht man in Foren oft: "Hallo Stephan, auch wieder hier? Seit deinem letzten Besuch gibt es 357 neue Beiträge."
Wie die Variablen heissen, ist im Prinzip egal. Der User kriegt davon auch nichts mit. Für ihn funktioniert einfach die Seite, ganz gleich ob ihr die Variable, in der sein Name steht, jetzt $xyz, $kaffeemaschine oder $username genannt habt. Empfehlen würde ich in diesem Fall allerdings die letztgenannte Möglichkeit, denn schliesslich seid ihr diejenigen, die sich hinterher im Quellcode wieder zurecht finden müssen, also solltet ihr die Variablen möglichst so benennen, dass ihr hinterher wieder wisst, was nun was ist.
Mathematik
Nichts geht heute mehr ohne Mathe, auch nicht bei PHP. Man mag es kaum glauben, wie oft kleinere oder grössere Berechnungen auf einer Seite vorkommen, die auf den ersten Blick eigentlich überhaupt nichts mit Mathematik zu tun hat. Nehmen wir zum Beispiel einfach mal einen Pokédex, bei dem man immer zum vorherigen bzw. nächsten Pokémon blättern kann:
$nr = 25;
// Hier die Pokédex-Daten für das Pokémon mit der Nummer 25 ausgeben
$prev = $nr - 1;
$next = $nr + 1;
echo "<a href=\"pokedex.php?nummer=$prev\">Zurück</a> / <a href=\"pokedex.php?nummer=$next\">Weiter</a>";
|
So kümmert sich PHP ganz automatisch darum, dass ihr immer zum richtigen Pokémon kommt. Wenn ihr die Weiter- und Zurück-Links hingegen allesamt von Hand setzen würdet, wäre die Wahrscheinlichkeit sehr hoch, dass ihr euch irgendwo mal vertippt und schon würde der User bei einem völlig anderen Pokémon landen, das er eigentlich gar nicht haben wollte.
Wie nun die Berechnungen an sich durchgeführt werden, habt ihr sicherlich schon verstanden, nämlich:
$ergebnis = $zahl1 + $zahl2;
Natürlich sind alle vier Grundrechenarten erlaubt:
$a = 10;
$b = 5;
$c = $a + $b;
echo "Summe: $c<br>";
$d = $a - $b;
echo "Differenz: $d<br>";
$e = $a * $b;
echo "Produkt: $e<br>";
$f = $a / $b;
echo "Quotient: $f";
|
Zusätzlich gibt es noch etwas, das sich Modulo nennt. Das Modulo wird durch ein Prozent-Zeichen % dargestellt und liefert euch bei einer Division den Rest. Das eignet sich gut, um beispielsweise zu überprüfen, ob eine gültige Zahl eingegeben wurde.
Wenn ein User beispielsweise eine ganze Zahl eingeben soll, dann könnte er natürlich genauso gut z.B. 14.3 eingeben. Multipliziert seine Eingabe einfach mit 10 (Ergebnis: 143) und berechnet dann den Modulo beim Teilen durch 10. Wenn etwas anderes als 0 raus kommt (in diesem Fall 3, denn 143 / 10 = 14, Rest: 3) dann haut dem User seine Eingabe um die Ohren, schimpft mit ihm und erklärt ihm noch einmal ganz deutlich, was er einzugeben hat.
$a = 143;
$b = 10;
$quotient = $a / $b;
$rest = $a % $b;
echo "$a / $b = $quotient, Rest: $rest";
|
Um die Funktion von Modulo noch einmal etwas zu verdeutlichen, folgt nun ein kleines Programm, das alle Primzahlen zwischen 1 und 1000 auflistet. Dabei muss ich leider etwas vorweg greifen, was Schleifen und Bedingungen betrifft. Keine Sorge, dazu kommen wir später noch! Probiert jetzt einfach mal den folgenden Quelltext aus und schaut euch das Ergebnis an:
for ($zahl = 1; $zahl <= 1000; $zahl++) {
$falsch = 0;
for ($test = 2; $test <= $zahl - 1; $test++) {
if ($zahl % $test == 0) {
$falsch = 1;
}
}
if ($falsch == 0) {
echo "$zahl<br>";
}
}
|
Ebenfalls nicht uninteressant sind Zufallszahlen. Um die kümmert sich ein Befehl, der rand (wie "random", englisch für "Zufall") heisst. Er braucht eine Obergrenze und eine Untergrenze und liefert euch dann nach dem Zufallsprinzip eine Zahl, die dazwischen liegt:
$untergrenze = 1;
$obergrenze = 100;
$zufallszahl = rand($untergrenze, $obergrenze);
echo "Es wurde zufällig die $zufallszahl ausgewählt.";
|
Hier müsst ihr übrigens nicht zwingend mit Variablen arbeiten, ihr könnt auch einfach
$zufallszahl = rand(1, 100);
schreiben. Wichtig ist nur, dass ihr dem Befehl überhaupt irgendwie die beiden Werte liefert, egal ob in Form von Variablen oder als konkrete Zahlen.
Ein sinnvolles Anwendungsbeispiel in der Praxis ist beispielsweise so etwas wie mein Online-Quizspiel Punkten oder Packen (Vorsicht, Schleichwerbung!). Dort sind die Fragen fein durch nummeriert in einer Datenbank abgespeichert. Das PHP-Script ermittelt zunächst einmal die Anzahl der Fragen, die in der Datenbank stehen, und erstellt dann eine Zufallszahl zwischen 1 und der Anzahl der Fragen. Die Frage mit der entsprechenden Nummer wird dann aus der Datenbank gelesen und dem Spieler vorgesetzt.
Und in der Schule immer wieder ein verhasstes Thema: Wurzeln!
Auch die sind mit PHP eine Leichtigkeit, wenn man den Befehl sqrt (wie "square root", englisch für "Quadratwurzel") kennt:
$zahl = rand(1, 100);
$wurzel = sqrt($zahl);
echo "Die Wurzel von $zahl ist $wurzel.";
|
Ach ja, nebenbei bemerkt: Sowohl bei rand als auch bei sqrt ist euch möglicherweise aufgefallen, dass die Werte in Klammern stehen. Das ist bei PHP immer so: Zuerst folgt der Befehl und anschliessend in Klammern die Werte (auch Argumente genannt), mit denen der Befehl rechnen soll. Und dann natürlich auch am Ende der Zeile, nachdem die Klammer geschlossen wurde, das Semikolon nicht zu vergessen.
Kleine Anekdote am Rande: Ich programmiere zu viel mit PHP, so dass ich teilweise schon ganz automatisch ein Semikolon setze, wenn am Ende einer Zeile eine Klammer zu geht. 
Als ich meinen Pokémon-Fanfilm Hero Kids verfasst habe, kamen natürlich sehr oft Pokémon-Stimmen vor, deren Übersetzung dann in Form von Untertiteln eingeblendet wurde. Im Drehbuch kann man sich das ungefähr so vorstellen:
Pikachu: Pika-Pi! Pikachu, Pika-Pika! ("Geht klar! Ich zeig's dem Biest mit einem Donnerblitz!")
Ihr wollt nicht wissen, wie oft ich ganz in Gedanken dann noch ein Semikolon ans Zeilenende gesetzt habe! ^^
Bedingungen
Die schönsten Variablen und Rechenergebnisse nützen natürlich nicht viel, wenn man sie einfach nur hat, aber nichts damit anzufangen weiss. Deshalb sind Bedingungen unumgänglich. Am bekanntesten ist die if-Bedingung, die auch mit Abstand am häufigsten verwendet wird. Es gibt noch weitere Bedingungen (z.B. Switch), darauf gehe ich hier allerdings nicht ein.
Eine if-Bedingung könnt ihr euch eigentlich logisch wie den folgenden Satz vorstellen: "If the sky is blue, I will go walking, else I will stay at home."
Oder auf deutsch: "Wenn der Himmel blau ist, werde ich spazieren gehen, andernfalls bleibe ich zu Hause."
Genau so und nicht anderes funktioniert das eigentlich auch in PHP. Um bei unserem Blauer-Himmel-Beispiel zu bleiben:
if ($himmel == "blau") {
$spazieren = 1;
}
else {
$spazieren = 0;
}
|
Natürlich werdet ihr mit PHP selten überprüfen, ob ihr spazieren gehen werdet oder nicht, aber das Prinzip ist das gleiche: Zuerst folgt ein if, anschliessend in Klammern die Bedingung, die überprüft wird. Danach folgt in geschweiften Klammern ein Anweisungsblock, der ausgeführt wird, wenn die Bedingung erfüllt ist. Als nächstes dann schliesslich ein else und dann wieder in geschweiften Klammern ein zweiter Anweisungsblock in dem das steht, was passiert, wenn die Bedingung eben nicht erfüllt ist.
Wobei ihr die Bedingungen auch verschachteln könnt:
$zahl = rand(1, 999);
if ($zahl >= 100) {
echo "$zahl ist dreistellig.";
}
else {
if ($zahl >= 10) {
echo "$zahl ist zweistellig.";
}
else {
echo "$zahl ist einstellig.";
}
}
|
Im Klartext steht da oben nichts anderes als der folgende Satz: "Wenn die Zahl grösser oder gleich 100 ist, dann ist sie dreistellig, andernfalls wird neu geprüft: Wenn die Zahl grösser oder gleich 10 ist, dann ist sie zweistellig, andernfalls ist sie einstellig."
Um die Bedingungen zu überprüfen, gibt es mehrere Möglichkeiten, die im folgenden aufgelistet werden:
| Zeichen |
Bedeutung |
Erklärung |
| == |
ist gleich |
Prüft, ob beide Werte gleich sind. |
| > |
grösser als |
Prüft, ob der erste Wert grösser als der zweite Wert ist. |
| >= |
grösser gleich |
Prüft, ob der erste Wert grösser als oder genauso gross wie der zweite Wert ist. |
| < |
kleiner als |
Prüft, ob der erste Wert kleiner als der zweite Wert ist. |
| <= |
kleiner gleich |
Prüft, ob der erste Wert kleiner als oder genauso gross wie der zweite Wert ist. |
| != |
ungleich |
Prüft, ob beide Werte verschieden sind. |
Das waren jetzt noch nicht alle Vergleichs-Operationen, die erkannt werden, aber auf jeden Fall die wichtigsten und die am häufigsten gebrauchten.
Eine Erklärung ist auf jeden Fall das doppelte Gleichzeitszeichen == bei "ist gleich" wert. Um das zu verstehen, muss man wissen, dass man auch ganz ohne Vergleichs-Operationen arbeiten kann:
if ($var) {
echo "Die Variable ist belegt.";
}
Diese Abfrage überprüft ganz einfach nur, ob die Variable $var überhaupt mit einem Wert belegt ist, ansonsten noch nichts. Das kann nützlich sein, wenn ihr überprüfen wollt, ob ein User in ein lebensnotwendiges Formularfeld etwas rein geschrieben hat. Falls nicht, brecht das Script ab und setzt ihm das Formular erneut vor, so lange, bis eine gültige Eingabe kommt.
Wenn ihr jetzt aber schreibt:
if ($zahl = 10) {
echo "Die Zahl ist 10.";
}
... dann wird nicht überprüft, ob die Zahl 10 ist. Stattdessen wird zunächst einmal der Variablen $zahl der Wert 10 zugewiesen (siehe das Kapitel Variable), anschliessend wird überprüft, ob die Variable $zahl belegt ist, was sie nun ja in jedem Fall ist. Was hingegen vorher in $zahl drin stand bzw. ob überhaupt etwas, das gerät in Vergessenheit.
Richtig würde der Code daher so aussehen:
if ($zahl == 10) {
echo "Die Zahl ist 10.";
}
|
Wenn also irgendwelche Bedingungen nicht richtig arbeiten, dann überprüft zuerst, ob ihr die richtige Anzahl Gleichheitszeichen verwendet habt, denn das ist vor allem für Anfänger eine sehr beliebte Fehlerfalle. 
Gut zu wissen ist schliesslich noch, dass man verschiedene Vergleichs-Operationen auch verknüpfen kann, nämlich mit "und" bzw. mit "oder". Das "und" wird durch ein doppeltes Und-Zeichen && dargestellt, das "oder" durch einen doppelten senkrechten Strich ||, den ihr bekommt, wenn ihr "Alt Gr" und die Taste mit den spitzen Klammern < > gleichzeitig drückt.
So etwas kann nützlich sein, wenn ihr z.B. wissen wollt, ob eine Zahl zwischen 10 und 20 liegt:
if ($zahl >= 10 && $zahl <= 20) {
echo "Die Zahl liegt zwischen 10 und 20.";
}
|
Hier wird überprüft, ob die Zahl grösser oder gleich 10 ist und && ob die Zahl kleiner oder gleich 20 ist. Oder eben mit anderen Worten: Ob die Zahl zwischen 10 und 20 liegt.
Schleifen
Schleifen sorgen dafür, das bestimmte Programmteile mehrfach durchlaufen werden. Das kann dann sinnvoll sein, wenn ihr z.B. eine Liste automatisch aufbauen wollt oder wenn ihr mehrere Berechnungen schnell hintereinander ausführen wollt. Schaut euch jetzt am besten noch einmal mein Primzahl-Beispiel aus dem Kapitel Mathematik an: Hätte ich dort nicht mit einer for-Schleife gearbeitet, sondern den ganzen Zirkus 1000 Mal untereinander geschrieben, dann hätte ich ganz schön was zu tun gehabt! ^^
Es gibt drei wichtige Sorten von Schleifen: Die for-Schleife, die while-Schleife und die do-while-Schleife.
Die for-Schleife wird am häufigsten verwendet. Sie sieht im Grundgerüst wie folgt aus:
for ($i = 1; $i <= 100; $i++) {
echo "$i<br>";
}
|
Dieses Beispiel würde, wenn ihr es laufen lasst, alle Zahlen von 1 bis 100 untereinander aufschreiben. 100 Zeilen Ausgabe, das ist ganz schön viel für drei Zeilen Programmcode, oder? Natürlich könnten wir auch alle Zahlen von 1 bis eine Million aufschreiben, dazu müsstet ihr einfach im obigen Beispiel die 100 zu 1000000 machen. Aber lassen wir das. 
Eine for-Schleife besteht aus der Bedingung (wie gewohnt in runden Klammern) und anschliessend einem Anweisungsblock in geschweiften Klammern. Der Bedingungsblock wiederum besteht aus drei Teilen, die durch ein Semikolon voneinander getrennt sind. Der erste Teil ist der Startwert. Der zweite Teil ist die sogenannte Abbruchbedingung: Wenn sie nicht mehr erfüllt ist, wird die Schleife abgebrochen. Der dritte Teil schliesslich ist die Rechen-Operation, die immer ausgeführt wird, wenn eure Schleife einmal durchgelaufen ist.
In unserem Beispiel bedeutet das, dass die Variable $i mit dem Startwert 1 beginnt. Die Schleife soll ausgeführt werden, so lange $i kleiner oder gleich 100 ist. Und nach jedem Durchlauf wird $i um 1 erhöht, dafür sorgt das $i++. (Wobei übrigens $i-- den Wert um 1 senken würde, aber das nur am Rande.)
Im Klartext könnte man also einfach sagen, dass unsere Schleife genau 100 Mal durch läuft. ^^
Passt bitte auf, dass ihr keine wirklich endlosen Endlosschleifen programmiert wie z.B.
for ($i = 1; $i >= 0; $i++) {
// Blablabla
}
Diese Schleife wird ausgeführt, so lange $i grösser als 0 ist. Da $i aber immer weiter erhöht wird, wird der Wert nie unter 0 fallen und die Schleife wird bis in alle Ewigkeiten weiter laufen, was dazu führt, dass sich irgendwann der Browser aufhängt, wenn er merkt, dass es nicht mehr weiter geht.
Natürlich kann so etwas auch gewollt sein, wenn ihr beispielsweise eine Zahl sucht, die durch eine bestimmte andere Zahl teilbar ist:
$zahl = rand(1, 1000000);
for ($i = 2; $i > 0; $i++) {
if ($zahl % $i == 0) {
echo "$zahl ist durch $i teilbar.";
$i = 0;
}
}
|
Dieses Script generiert zunächst eine zufällige Zahl $zahl zwischen 1 und eine Million. Anschliessend werden bei 2 beginnend alle Zahlen überprüft, bis eine gefunden wird, durch die $zahl ohne Rest geteilt werden kann. Diese Schleife läuft im Prinzip endlos weiter, aber: Sobald die entsprechende Zahl gefunden wurde, wird $i manuell auf 0 gesetzt, womit die Schleife ausser der Reihe verlassen werden kann.
Es gibt PHP-Programmierer, die so einen Eingriff als schlechten Stil ansehen, ich persönlich vertrete aber die Meinung: Wenn man mal in die Situation kommt, dass man es braucht, warum dann nicht? Funktionieren tut es jedenfalls! ^^
Als nächstes beschäftigen wir uns mit der while-Schleife. Sie sieht vom Grundgerüst her so aus:
$zahl = rand(1, 100);
while ($zahl != 50) {
echo "Die 50 wurde nicht getroffen, nächster Versuch ...<br>";
$zahl = rand(1, 100);
}
|
Hier wird zunächst eine Zahl zwischen 1 und 100 zufällig generiert. Danach folgt eine while-Schleife, die so lange ausgeführt wird, bis die 50 getroffen wird. Das lässt sich auch in Textform ausdrücken: "While Zahl is not 50 ..." bzw. "Während die Zahl nicht 50 ist ..."
Die while-Schleife überprüft also, ob $zahl nun 50 ist. Falls nicht, wird der Anweisungsblock innerhalb der Schleife ausgeführt, sprich: Es wird zunächst der Text ausgegeben und anschliessend eine neue Zufallszahl ermittelt. Danach wird erneut überprüft, ob $zahl jetzt vielleicht 50 ist.
Sollte mit einer Wahrscheinlichkeit von 1 % hingegen gleich beim ersten Mal die 50 getroffen werden, wird die Schleife überhaupt nicht ausgeführt.
Dazu im Gegensatz steht die do-while-Schleife, die eigentlich fast genauso aussieht:
$zahl = rand(1, 100);
do {
echo "Die 50 wurde nicht getroffen, nächster Versuch ...<br>";
$zahl = rand(1, 100);
}
while ($zahl != 50);
|
Bedeutender Unterschied ist nur einer: Hier wird zuerst der Anweisungsblock ausgeführt und erst danach die Abbruchbedingung überprüft. Das heisst, die Schleife wird in jedem Fall mindestens einmal ausgeführt, egal was die Abbruchbedingung sagt. Das Ausmass des Unterschiedes wird dann klar, wenn tatsächlich schon beim ersten Mal die 50 getroffen wird: Die Schleife wird nämlich trotzdem betreten - und dann kann es ewig und drei Tage dauern, bis die 50 zum zweiten Mal getroffen wird.
Ihr könnt ja zum Spass mal dieses Beispiel laufen lassen:
$zahl = 50;
while ($zahl != 50) {
echo "while-Schleife<br>";
$zahl = rand(1, 100);
}
$zahl = 50;
do {
echo "do-while-Schleife<br>";
$zahl = rand(1, 100);
}
while ($zahl != 50);
|
Ihr werdet das Wort "while-Schleife" anschliessend überhaupt nicht auf dem Bildschirm haben, das Wort "do-while-Schleife" hingegen möglicherweise sehr oft und garantiert mindestens einmal.
Formulare verarbeiten
Bestimmt habt ihr schon oft im Internet ein Formular gesehen, in das ihr bestimmte Sachen eingebt, und dann passiert etwas. Auch das ist PHP. 
Um ein Formular verarbeiten zu können, brauchen wir aber zuerst einmal - richtig geraten - ein Formular! 
Das entsteht mit reinem HTML, daher verliere ich hier nicht viele Worte darüber ...
<form action="formular.php">
Bitte geben Sie hier Ihren Namen ein: <input type="Text" name="deinname"><br>
<br>
<input type="Submit" value="Abschicken">
</form>
|
Wichtig ist vor allem, dass ihr im form-Tag unter action den Namen der PHP-Datei eingebt, die anschliessend die Formular-Daten verarbeiten soll. Und besagte PHP-Datei sieht dann folgendermassen aus:
$deinname = $_REQUEST['deinname'];
echo "Hallo $deinname!";
|
Die Sache ist tatsächlich genauso leicht, wie sie aussieht! Ihr weist der Variablen einfach den Inhalt des Formularfeldes als Wert zu, indem ihr den speziellen Befehl $_REQUEST verwendet, dem ihr in eckigen Klammern und einfachen Anführungszeichen, also ['genau so und nicht anders'], mitteilt, um welches Formularfeld es geht - in diesem Fall eben um das Textfeld "deinname" aus dem obigen HTML-Formular.
Ein kleines bisschen komplizierter, aber wirklich nur ein kleines bisschen, wird die Sache bei so genannten Radio Buttons, also diese kleinen, runden Dinger, wo man nicht frei seinen Text rein hämmern kann, sondern an eine von mehreren Auswahl-Möglichkeiten gebunden ist. In HTML sieht das so aus:
<form action="pokemon.php">
Welches Start-Pokémon würden Sie wählen?<br><br>
<input type="Radio" name="pokemon" value="Bisasam"> Bisasam<br>
<input type="Radio" name="pokemon" value="Glumanda"> Glumanda<br>
<input type="Radio" name="pokemon" value="Schiggy"> Schiggy<br>
<br>
<input type="Submit" value="Abschicken">
</form>
|
Und dieses PHP-Script würde sich um die Auswertung kümmern:
$pokemon = $_REQUEST['pokemon'];
echo "So, so, du würdest also $pokemon wählen, interessant ...";
|
Wenn ihr genau hin schaut, werdet ihr merken, dass sich das PHP-Script bis auf den Text bei echo überhaupt nicht verändert hat. Die Änderungen haben ausschliesslich in der HTML-Datei statt gefunden. Und auch dort ist die Geschichte eigentlich einfach: Innerhalb des input-Tags schreibt ihr bei value das hin, was hinterher vom PHP-Script gelesen wird, der User kriegt an dieser Stelle allerdings noch nichts davon mit, er sieht nur den Radio Button und eben den Text, den ihr dahinter schreibt.
In diesem Beispiel habe ich jetzt an beiden Stellen das gleiche geschrieben, was auch Sinn macht. Natürlich wären auch Beispiele denkbar, in denen ihr dem User viel Text vorsetzt, intern aber nur mit einer einzigen Ziffer weiter arbeitet. Eine Altersabfrage könnte beispielsweise so aussehen:
<form action="alter.php">
Wie alt sind Sie?<br><br>
<input type="Radio" name="alter" value="0"> bis 6 Jahre<br>
<input type="Radio" name="alter" value="6"> 6 bis 11 Jahre<br>
<input type="Radio" name="alter" value="12"> 12 bis 15 Jahre<br>
<input type="Radio" name="alter" value="16"> 16 bis 17 Jahre<br>
<input type="Radio" name="alter" value="18"> ab 18 Jahre<br>
<br>
<input type="Submit" value="Abschicken">
</form>
Dieses Formular könnte für eine Online-Videothek nützlich sein. Gut, es fehlt natürlich eine Überprüfung, ob das angeklickte Alter wirklich stimmt, aber es geht hier ja auch nur ums Prinzip. Die vorhandenen Filme wären wahrscheinlich in einer Datenbank gespeichert, mitsamt ihren FSK-Beschränkungen, also ab 0, 6, 12, 16 oder 18. Und je nach Alter bekommt der User dann nur die Filme aufgelistet, die für ihn geeignet sind. Ein 14-jähriger würde also die Möglichkeit "12 bis 15 Jahre" anklicken und bekäme dann nur die Streifen zu Gesicht, die ab 0, 6 oder 12 sind, nicht jedoch die ab 16 oder 18.
$alter = $_REQUEST['alter'];
$fsk = 16;
// In Wirklichkeit würden wir die Filmdaten aus einer Datenbank lesen.
if ($alter >= $fsk) {
echo "Viel Spass mit dem Film!";
}
else {
echo "Sie sind noch nicht alt genug, um diesen Film zu sehen.";
}
Es kann natürlich sein, dass ihr die Formulardaten nicht nur auf den Bildschirm schreiben oder für Entscheidungen verwenden wollt. Vor allem bei Kontakt-Formularen ist damit zu rechnen, dass die Daten anschliessend in eurem Postfach landen sollen. Dafür sorgt die mail-Funktion:
$empfaenger = "hans@peter.de";
$betreff = "E-Mail von PHP";
$text = "Hallo!\nDiese E-Mail wurde dir von einem PHP-Formular geschickt.";
mail($empfaenger, $betreff, $text);
|
Die mail-Funktion braucht drei Werte: Den Empfänger, den Betreff und den Text. Das alles könnt ihr entweder direkt im Klartext in die Klammer schreiben, z.B.
mail("hans@peter.de", "E-Mail von PHP", "Guten Tag!\nHier ist noch eine E-Mail von PHP!");
... oder aber wie im obigen Beispiel Variablen verwenden.
Das seltsame \n im Mailtext ist übrigens ein Zeilenumbruch. Hier funktioniert weder ein simples Drücken auf die Enter-Taste noch ein <br>, sondern ihr müsst überall, wo ihr eine neue Zeile haben wollt, eben \n einfügen. Ist am Anfang sicher etwas ungewohnt, aber ihr gewöhnt euch sicher daran.
Um es sich besser merken zu können, denkt einfach an "n" wie "neue Zeile". 
Datenbanken
Datenbanken sind deshalb wichtig, weil darin Daten leicht, unkompliziert und - das ist am wichtigsten - sortierbar abgelegt werden können. Alle Mario-Fans unter euch können ja mal einen kleinen Blick auf meine Blitzmax-Seite werfen: Ohne Datenbank könntet ihr die Level nicht nach Einsender oder Schwierigkeitsgrad ordnen und bräuchtet um einiges länger, um euch beispielsweise alle Level von Superkirby heraus zu picken, weil ihr die am liebsten spielt.
Es gibt diverse verschiedene Datenbank-Systeme, von denen ich an dieser Stelle lediglich auf mySQL eingehe. Wenn ihr euch bei einem halbwegs brauchbaren Webspace-Anbieter ein wenig Speicherplatz mietet, dann ist dort mit hoher Wahrscheinlichkeit auch eine mySQL-Datenbank dabei. Wie ihr darauf dann zugreifen und verschiedene Tabellen anlegen könnt, das ist natürlich bei jedem Webspace-Anbieter anders, das müsst ihr dort in der Hilfe nachlesen.
Wenn ihr dann aber eine Datenbank stehen habt, dann geht es los!
$db_server = "data.server.de";
$db_user = "hans-peter";
$db_passwd = "hansi123";
$db_database = "data01";
|
Sehr viel ist bis hierher noch nicht passiert, das waren lediglich die Zugangsdaten für die Datenbank, von oben nach unten der Server, der Username, das Passwort und der Name der Datenbank. Da müsstet ihr dann eben eure richtigen Daten rein schreiben - die könnt ihr bei eurem Webspace-Anbieter nachschauen und evtl. auch ändern, zumindest das Passwort.
Die Zugangsdaten werden, wie ihr seht, in Variablen fest gehalten. Denn diese Variablen brauchen wir gleich, damit PHP die Verbindung zur Datenbank herstellen kann:
$conn = mysql_connect($db_server, $db_user, $db_passwd);
$db = mysql_select_db($db_database);
|
Diese beiden Zeilen stellen die Verbindung zur Datenbank her - und brauchen dazu eben die Zugangsdaten. Wenn keine Verbindung zur Datenbank hergestellt werden kann, sei es wegen mangelhaften Zugangsdaten oder aus sonst einem Grund, dann kann der PHP-Code ansonsten noch so perfekt sein, er wird nicht funktionieren.
So, und jetzt können wir uns endlich auf die Daten selbst stürzen!
$name = $_REQUEST['name'];
$alter = $_REQUEST['alter'];
$ort = $_REQUEST['ort'];
$query = "INSERT INTO `user` (`name`, `alter`, `ort`) VALUES ('$name', '$alter', '$ort')";
$res = mysql_query($query);
|
Damit dieses Script laufen kann, muss auf eurem Server zunächst einmal eine Datenbank-Tabelle mit dem Namen "user" existieren, die müsst ihr eben vorher im Admin-Menü eurer Datenbank anlegen. Diese Tabelle muss dann drei Spalten haben: "name", "alter" und "ort".
Dem obigen PHP-Script ist ein HTML-Formular vorgeschaltet, in dem der User seinen Namen, sein Alter und seinen Wohnort eingeben kann. Und diese Daten werden dann eben in der Datenbank abgespeichert. Der Webmaster kann dann problemlos statistische Auswertungen vornehmen, z.B. wieviel Prozent seiner Besucher wie alt sind und woher kommen.
Das, was in der Variablen $query steht, ist hierbei ein mySQL-Befehl. mySQL ist nochmal etwas ganz anderes als PHP, nämlich eine Abfrage-Sprache für Datenbanken. Ihr könnt z.B. auch in der bekannten Datenbank-Software Microsoft Access mit mySQL-Befehlen arbeiten und seid, wenn ihr die Befehle beherrscht, in der Lage, mit ein oder zwei Zeilen Programmiererei ganze Datenbanken auf den Kopf zu stellen.
Wenn ihr aber tiefer in die Datenbank-Materie einsteigen wollt, dann besorgt euch lieber weiter führende Literatur speziell über mySQL. Hier bringe ich euch nämlich nur die zwei wichtigsten Befehle bei, nämlich den zum Einfügen von Daten und den zum Lesen eben dieser.
Wobei ihr den Befehl zum Einfügen ja jetzt sogar schon kennt:
INSERT INTO `user` (`name`, `alter`, `ort`) VALUES ('$name', '$alter', '$ort')
INSERT INTO ist soweit klar, das bedeutet EINFÜGEN IN, also soll der Befehl die Daten einfügen. Und zwar in die Tabelle user. Bearbeitet werden sollen dabei die Spalten name, alter und ort, also genau die drei, die nach dem Tabellennamen durch Kommas getrennt in Klammern folgen. Anschliessen folgen noch die VALUES, also die WERTE, die eingefügt werden sollen. Auch sie folgen anschliessend in Klammern und durch Kommas getrennt. Die Reihenfolge muss übereinstimmen, ausser natürlich, ihr wollt den Namen in der Ort-Spalte speichern, was ja auch mal ganz lustig sein kann. 
Als VALUES könnt ihr sowohl Variablen aus PHP als auch unveränderlichen Text nehmen. Würdet ihr in diesem Beispiel jetzt das Dollar-Zeichen von $name wegnehmen, hätte das den amüsanten Effekt, dass jeder User, der sich einträgt, grundsätzlich "name" heisst.
Jeder INSERT INTO Befehl kann nur genau eine einzige Zeile einfügen. Wenn ihr mehrere Datensätze hintereinander einfügen wollt, dann müsst ihr eben mehrere INSERT INTO Befehle hintereinander verwenden.
Um schnell weiter arbeiten zu können, hier ein fertiges Beispiel-Script, das ein paar Leute (rein zufällig Forum-User von hier) in die Datenbank schreibt. Lasst es einfach kurz laufen, dann habt ihr eine gefüllte Datenbank, mit der wir weiter machen können!
$query = "INSERT INTO `user` (`name`, `alter`, `ort`) VALUES ('HarryPotter', '15', 'Bergheim')";
$res = mysql_query($query);
$query = "INSERT INTO `user` (`name`, `alter`, `ort`) VALUES ('Seth', '15', 'Gemünd')";
$res = mysql_query($query);
$query = "INSERT INTO `user` (`name`, `alter`, `ort`) VALUES ('Yosh', '9', 'Gemünd')";
$res = mysql_query($query);
$query = "INSERT INTO `user` (`name`, `alter`, `ort`) VALUES ('Darth Luigi', '15', 'Wien')";
$res = mysql_query($query);
$query = "INSERT INTO `user` (`name`, `alter`, `ort`) VALUES ('Son-Gohan', '19', 'München')";
$res = mysql_query($query);
$query = "INSERT INTO `user` (`name`, `alter`, `ort`) VALUES ('Yoshi-Fan', '16', 'Berndorf')";
$res = mysql_query($query);
$query = "INSERT INTO `user` (`name`, `alter`, `ort`) VALUES ('Neptun', '13', 'Dissen')";
$res = mysql_query($query);
$query = "INSERT INTO `user` (`name`, `alter`, `ort`) VALUES ('Superkirby', '13', 'Helmbrechts')";
$res = mysql_query($query);
|
So, und jetzt bauen wir uns eine schöne, kleine Userliste:
$query = "SELECT * FROM `user` WHERE `alter` >= 10 ORDER BY `name`";
if ($res = mysql_query($query)) {
while ($user = mysql_fetch_assoc($res)) {
$name = $user['name'];
$alter = $user['alter'];
$ort = $user['ort'];
echo "<b>$name</b> ($alter) aus $ort<br>";
}
}
|
Dieses Script listet nach Namen sortiert alle User auf, die älter als 10 sind (der 9-jährige Yosh fällt also raus). Zunächst schauen wir uns einmal den SELECT Befehl näher an:
SELECT * FROM `user` WHERE `alter` >= 10 ORDER BY `name`
SELECT ist so weit noch klar, das heisst SELEKTIERE, also WÄHLE AUS.
Das Sternchen * bedeutet, dass alle Felder aus der Datenbank gelesen werden sollen. Ein Sternchen ist an vielen Stellen in der Informatik ein Joker, der "alles" bedeutet, so auch hier. Statt "SELECT *" könntet ihr natürlich auch "SELECT name" schreiben, dann würde eben nur die Spalte "name" gelesen werden.
FROM `user` bedeutet schliesslich, AUS welcher Tabelle gelesen werden soll, nämlich aus der Tabelle "user". Das ist bisher nicht gross verwunderlich, da ihr ja nur diese eine habt - aber meine Datenbank hat inzwischen an die 70 Tabellen erreicht, und da würden meine Scripte nicht mehr glücklich werden, wenn sie immer auf gut Glück raten müssten, welche davon ich nun meine.
Der Abschnitt WHERE ist optional, damit können wir filtern. Hier werden wie gesagt alle User, die mindestens 10 Jahre alt sind, ausgewählt - wer jünger ist, muss draussen bleiben. Man könnte den WHERE-Abschnitt auch weg lassen, dann würde eben die komplette Tabelle von vorne bis hinten ausgewählt werden.
ORDER BY sortiert die Daten, hier nach dem Namen. Würdet ihr stattdessen `alter` schreiben, dann würden die User nicht alphabetisch geordnet, sondern von jung nach alt. Auch das ORDER BY könnt ihr weglassen, dann bekommt ihr die Daten eben in der Reihenfolge, in der sie in der Datenbank stehen - und das ist in der Regel die Reihenfolge, in der die Daten auch eingegeben wurden.
Was den Rest des Scriptes betrifft, müsst ihr euch einfach den Aufbau - sprich: while-Schleife in if-Bedingung - merken. Innerhalb der while-Schleife könnt ihr dann endlich die eigentlichen Daten lesen. Das funktioniert, wie ihr an den eckigen Klammern und einfachen Anführungszeichen vielleicht schon seht, sehr ähnlich wie bei Formularfeldern. Und wenn ihr die Daten dann in den Variablen drin habt, dann könnt ihr damit machen, was ihr wollt, z.B. sie auf den Bildschirm schreiben.
Es gibt noch weitere nützliche mySQL-Befehle, mit denen ihr beispielsweise die Datensätze zählen, die Tabellen sortieren oder auch Datensätze löschen könnt. Ein paar davon folgen nun noch im Schnell-Durchlauf, aber wer mehr darüber wissen möchte, für den ist es geeigneter, eine Seite zu suchen, auf der es komplett um mySQL geht.
$res = mysql_query("SELECT * FROM user");
$anzahl = mysql_num_rows($res);
|
Diese beiden Zeilen schreiben die Anzahl der Datensätze in die Variable $anzahl. So einfach ist das!
$query = "ALTER TABLE `user` ORDER BY `name`";
$res = mysql_query($query);
|
Dieses kleine Script ordnet eure Userliste nach dem Namen. Bei ORDER BY könnt ihr natürlich jede beliebige Spalte hin schreiben, die in eurer Tabelle existiert.
Weitere kleine mySQL-Beispiele werden evtl. im Lauf der Zeit noch hinzu gefügt ...
Strings
Ihr wisst jetzt eigentlich schon fast alles, was ihr wissen müsst, wenn ihr beispielsweise ein Gästebuch programmieren wollt, nur ein Thema fehlt noch: Strings!
Strings sind Zeichenketten. Und das war auch gerade schon ein String: "Strings sind Zeichenketten."
$text = "Strings sind Zeichenketten.";
echo $text;
|
Mit Strings arbeitet ihr ganz automatisch immer dann, wenn ihr in einer Variablen etwas anderes als eine Zahl speichert, also habt ihr möglicherweise schon Strings verwendet, ohne es überhaupt zu merken oder zu wissen. Wichtig ist vor allem, dass ein String im Gegensatz zu einer Zahl immer in Anführungszeichen stehen muss. Würdet ihr hingegen nur ...
$text = Strings sind Zeichenketten.;
... schreiben, dann würde das nicht funktionieren. PHP braucht die Anführungszeichen, um zu wissen, wo der String anfängt und endet.
"Ja," sagt ihr jetzt, "aber was ist jetzt, wenn innerhalb eines Strings auch ein Anführungszeichen vorkommt? Denkt PHP dann nicht, dass der String schon zu Ende ist?"
Das ist der springende Punkte, genau das würde PHP denken! Daher würde auch ...
$text = "Ich sage "Hallo"";
... zu einer Fehlermeldung führen: PHP sieht "Ich sage " als String an und kann dann mit dem angrenzenden Hallo nichts mehr anfangen. Aus diesem Grund gibt es das so genannte Escape-Zeichen, das eigentlich nichts weiter als ein Backslash \ ist. Ihr müsst den Backslash innerhalb von Strings vor jedes Anführungszeichen setzen, um so zu markieren, dass das Anführungszeichen zum String gehört und nicht denselben beendet:
$text = "Ich sage \"Hallo\"";
|
Und wenn jetzt ein Backslash in einem String vorkommt? Tja, dann müsst ihr einen zweiten Backslash davor setzen, um PHP so zu erklären, dass der folgende Backslash ein Backslash und kein Escape-Zeichen ist. In Verzeichnis-Angaben kann das schon mal ganz lustig aussehen:
$verzeichnis = "c:\\Dokumente und Einstellungen\\Hans-Peter\\Eigene Dateien\\Geheimer Liebesbrief an \"Schatzi\".doc";
Aber es gibt nicht nur Regeln, die beachtet werden müssen, damit Strings richtig verarbeitet werden können, es gibt auch unzählige Möglichkeiten, Strings zu manipulieren. Zum Beispiel könnt ihr Strings aneinander reihen, das geht, indem ihr sie einfach mit einem Punkt getrennt hintereinander schreibt:
$string1 = "Hallo";
$string2 = "heute";
$komplett = $string1.", wie geht es dir ".$string2."?";
echo $komplett;
|
Nicht ganz so einfach ist das Trennen von Strings. Das geht mit Hilfe des explode-Befehls:
$digimon = "Agumon,Patamon,Gomamon,Gabumon"
$einzelteile = explode(",", $digimon);
echo $einzelteile[0]."<br>";
echo $einzelteile[1]."<br>";
echo $einzelteile[2]."<br>";
echo $einzelteile[3];
|
Der explode-Befehl reisst einen String auseinander wie eine Explosion und braucht dazu zwei Angaben: Den so genannten Delimiter (in diesem Fall das Komma) und den String, der bearbeitet werden soll, in diesem Fall $digimon. explode hackt $digimon überall, wo ein Komma vorkommt, auseinander, und diese Einzelteile könnt ihr dann einzeln weiter verwenden, wie es euch passt.
Ihr merkt also schon, dass sich explode nur dann sinnvoll einsetzen lässt, wenn der String auch vorher schon eine halbwegs passende Form hatte. Ansonsten hilft euch vielleicht ein substr weiter:
$digimon = "Agumon,Patamon,Gomamon,Gabumon"
$agu = substr($digimon, 0, 5);
echo $agu;
|
substr braucht einen String, einen Anfang und ein Ende. Achtung: Die Zählung beginnt bei 0, nicht bei 1! Würdet ihr in diesem Beispiel also nicht die Zeichen von 0 bis 5 sondern von 1 bis 6 verlangen, dann würdet ihr nicht "Agumon" sondern "gumon," als Ergebnis bekommen.
Diese Funktion kann auch sinnvoll sein, wenn man sehr lange Texte hat. Sicher habt ihr schon oft erlebt, dass dann nur die ersten 100 Buchstaben angezeigt werden und danach muss man auf "Weiter" klicken, wenn man den Text komplett lesen möchte. Dazu müsste natürlich zuerst einmal die Länge des Textes ermittelt werden, wo sich strlen drum kümmert:
$inhalt = "Agumon ist ein Digimon. Es ist der Partner von Tai und beherrscht als Attacke die Kleine Flamme.";
$laenge = strlen($inhalt);
if ($laenge > 50) {
$inhaltkurz = substr($inhalt, 0, 49);
echo $inhaltkurz." ...";
}
else {
echo $inhalt;
}
|
Der Befehl strlen braucht einen String und liefert euch dann die Länge dieses Strings in Zeichen, wobei - da müsst ihr drauf achten - nicht nur Buchstaben und Zahlen, sondern auch Satzzeichen und sogar Leerzeichen mit gezählt werden.
Wenn ihr nur die reine Buchstaben-Anzahl wissen wollt, dann müsst ihr etwas tricksen, z.B. könntet ihr den explode-Befehl auf verschiedene Satzzeichen anwenden und anschliessend die Einzelteile wieder zu einem kompletten String zusammen fügen, der jetzt keine Satzzeichen mehr enthält.
Und jetzt mal wieder weg von Digimon, stellen wir uns lieber einmal vor, dass wir ein Forum programmieren. Da hätten wir dann natürlich gern, dass ein schöner Smily erscheint, wenn der User :) schreibt. Für so etwas gibt es str_replace:
$beitragalt = "Ich kann PHP :)";
$beitragneu = str_replace(":)", "<img src=\"http://img.homepagemodules.de/smile.gif\">", $beitragalt);
echo $beitragneu;
|
str_replace ersetzt ("replace" = englisch für "ersetzen") Teile eines Strings. Dazu werden drei Werte benötigt: Was wird im String gesucht, durch was soll es ersetzt werden und welcher String soll bearbeitet werden? In diesem Beispiel wird jedes Vorkommen von :) durch den HTML-Code für das Bild eines kleinen Smilys ersetzt. Nicht anders arbeiten auch viele Foren!
Natürlich gibt es noch sehr viel mehr, das mit PHP möglich ist, für diesen kleinen Einführungskurs soll es an dieser Stelle allerdings genug sein. Glaubt es oder nicht: Mit allem, was ihr bis jetzt gelernt habt, ist es schon möglich, ein funktionsfähiges, wenn auch recht einfaches Gästebuch zu programmieren!
Das beweise ich euch jetzt, indem ich euch hier das Script für ein Gästebuch zeige, ohne noch weitere neue Funktionen zu verwenden. Mein Vorschlag ist allerdings: Versucht erst einmal selbst, ein Gästebuch zu programmieren, um in Übung zu kommen! Wenn ihr überhaupt nicht weiter kommt, dann schaut hier nach, was ihr anders macht als ich.
Datenbank
CREATE DATABASE `gbuch` ;
CREATE TABLE `eintrag` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 225 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL ,
`text` TEXT NOT NULL ,
`zeit` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
)
eintrag.html
<html>
<head>
<title>Gästebuch</title>
</head>
<body>
Hinweis: Bitte füllen Sie alle Felder aus!
<form action="eintrag.php">
Name: <input type="Text" name="name"><br>
<br>
E-Mail: <input type="Text" name="email"><br>
<br>
Text:<br>
<br>
<textarea name="text" cols="25" rows="6"></textarea><br>
<br>
<input type="Submit" value="Abschicken">
</form>
</body>
</html>
eintrag.php
<html>
<head>
<title>Gästebuch</title>
</head>
<body>
<?php
// Zuerst lesen wir die Daten aus dem Formular
$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$text = $_REQUEST['text'];
// Dann müssen wir überprüfen, ob auch alle Felder ausgefüllt wurden
if ($name && $email && $text) {
// Offenbar sind alle Felder ausgefüllt, also ab damit in die Datenbank
$db_server = "localhost";
$db_user = "root";
$db_passwd = "";
$db_database = "gbuch";
$conn = mysql_connect($db_server, $db_user, $db_passwd);
$db = mysql_select_db($db_database);
// Vor dem Eintragen können wir den Text natürlich noch ein bisschen verschönern
$text = str_replace(":)", "<img src=\"http://img.homepagemodules.de/smile.gif\">", $text);
$text = str_replace(":(", "<img src=\"http://img.homepagemodules.de/frown.gif\">", $text);
$text = str_replace(":D", "<img src=\"http://img.homepagemodules.de/grin.gif\">", $text);
$text = str_replace(";)", "<img src=\"http://img.homepagemodules.de/wink.gif\">", $text);
$text = str_replace("\n", "<br>", $text);
// Jetzt haben wir Smilys und Zeilenumbrüche im Text
$query = "INSERT INTO `eintrag` (`name`, `email`, `text`) VALUES ('$name', '$email', '$text')";
$res = mysql_query($query);
echo "Dein Beitrag wurde erfolgreich eingetragen!";
}
else {
// Hier wurden hingegen nicht alle Felder ausgefüllt
echo "Du hast nicht alle Felder ausgefüllt!<br><br>";
echo "<a href=\"eintrag.html\">Zurück</a>";
}
?>
</body>
</html>
lesen.php
<html>
<head>
<title>Gästebuch</title>
</head>
<body>
<?php
// Auch hier muss freilich zuerst die Datenbank-Verbindung aufgebaut werden
$db_server = "localhost";
$db_user = "root";
$db_passwd = "";
$db_database = "gbuch";
$conn = mysql_connect($db_server, $db_user, $db_passwd);
$db = mysql_select_db($db_database);
// Jetzt lesen wir
$query = "SELECT * FROM `eintrag`";
if ($res = mysql_query($query)) {
while ($user = mysql_fetch_assoc($res)) {
$id = $user['id'];
$name = $user['name'];
$email = $user['email'];
$text = $user['text'];
$zeit = $user['zeit'];
// Und natürlich müssen die gelesenen Daten auch angezeigt werden
echo "<p align=\"Justify\">";
echo "$id - <b><a href=\"mailto:$email\">$name</a></b> <i>am $zeit</i><br><br>";
echo "$text";
echo "</p>";
}
}
// Ein guter Service ist es noch, auch die Gesamtzahl der Beiträge anzuzeigen
$res = mysql_query("SELECT * FROM eintrag");
$anzahl = mysql_num_rows($res);
echo "<hr><br>";
echo "$anzahl Einträge gefunden";
?>
</body>
</html>
Das war's! Ende! ^^
Falls ihr irgendwelche Anregungen bzw. Verbesserungsvorschläge habt oder irgendeinen Abschnitt nicht ganz versteht, meldet euch bitte bei mir per E-Mail: stephan@st-gerner.de
Für weitere PHP-Literatur, falls ihr tiefer einsteigen wollt, einfach googlen! Oder schaut euch das offizielle PHP-Handbuch an, das natürlich auch selbst in PHP geschrieben wurde. 
Viel Spass und Erfolg beim PHP-Programmieren! 
|
|