Programmieren mit PhP – Kurs 1 Jede Programmiersprache verfügt über eine eigene „Grammatik“ (Syntax), d.h. eine fix vorgegebene Anzahl an verfügbaren Wörtern, die nur in bestimmter Weise verwendet werden dürfen, damit das Programm den Text übersetzen kann. Wie bei jeder Sprache ist es wichtig, möglichst viele von diesen „Vokabeln“ zu kennen. PhP wurde 1995 von Rasmus Lerdorf entwickelt. PhP stand ursprünglich für „Personal Homepage Tools“, mittlerweile für „PhP: Hypertext Preprocessor“. PhP ist sprachlich an C angelehnt und wird vor allem zur Erstellung von dynamischen Webseiten verwendet. Wie funktioniert PhP? 1. Zunächst startet ein Client (Browser) eine Anfrage für eine PHP-Datei. Dies geschieht über die Eingabe einer URL oder durch anklicken eines Links. Die Anfrage wird über das Internet an den entsprechenden Server weitergeleitet. 2. Der Server (Webserver) nimmt die Anfrage entgegen und lädt die PHP-Datei von seiner Festplatte. 3. Anschließend übergibt der Webserver die PHP-Datei an den PHP-Interpreter. 4. Der PHP-Interpreter arbeitet das PHP-Skript ab. 5. Anschließend gibt der Interpreter das Ergebnis seiner Arbeit (meist in Form einer HTML-Datei, aber auch Bilder oder PDF-Dokumente sind möglich) an den Webserver zurück. 6. Der Webserver liefert anschließend die Daten an den Client (Browser) zurück. Quelle (Bild und Text): Wikipedia Nützliche Links Online-Manual: http://de.php.net/ und http://de.php.net/manual/de/ Selfhtml: http://de.selfhtml.org/ Apache Webserver: http://www.apache.de/ XAMPP-Download: http://www.apachefriends.org/de/xampp.html XAMPP Installationsanleitung und PhP-Skriptum: http://www.jakober.ch/php/php_install.php Notepad++: http://notepad-plus.sourceforge.net/de/site.htm Installation Für einfache Beispiele genügt die Installation von PhP und PhP-Designer. Für aufwändigere Beispiele (Datenbank-Anbindung) empfiehlt sich die Installation von XAMPP und PhPDesigner. XAMPP installiert Apache, PhP, MySQL und v.a.m. Statt PhP-Designer kann man auch Notepad++ verwenden. Im PhP-Designer muss der Pfad zur Php.exe eingegeben werden: Options/Editor Preferences/Debug. Das erste Programm – Hallo Welt <? print "Hallo Welt!"; ?> Ein PhP-Skript beginnt mit <? bzw. <?php und endet mit ?>. Dazwischen stehen die PhP-Befehle. Der Ausgabe-Befehl lautet echo bzw. print. Zeilenumbrüche erzeugt man mit <br>. Jeder PhP-Befehl wird mit einem Strichpunkt abgeschlossen. PhPinfo <? phpinfo(); ?> Zeigt eine grosse Anzahl von Informationen über die aktuelle Konfiguration von PHP an Einbinden in HTML PhP-Skripts können in HTML-Seiten an beliebiger Stelle eingebunden werden, auch mehrmals. Kommentare werden mit // begonnen. Mehrzeilige Kommentare stehen zwischen /* und */. <html> <head> <title>PHP - Test</title> </head> <body bgcolor="#FFFFFF"> <p align="center"><b>Peter Pfligl</b></p> <p align="center">Georg von Peuerbach-Gymnasium</p> <?php // Kommentar: php-Scripts können an beliebigen stellen eingefügt werden print "Herzlich willkommen bei <font color='red'><b>PHP</font></b>"; /* das ist ein Kommentar, der über mehrere Zeilen geht */ ?> </body> </html> Übung: Ergänze das Programm so, dass noch einige weitere Zeilen mit Text ausgegeben werden. Variable In PHP werden Variablen durch ein vorangestelltes Dollarzeichen ($) gekennzeichnet und durch die Angabe des Operators (=) mit einem Wert gefüllt. Man muss den Typ der Variablen (Zahl, Zeichen, String,…) nicht deklarieren (wie z.B. in Java). Der Typ ergibt sich aus dem Wert, mit dem die Variable gefüllt wird. Regeln für Variable: Variablen müssen mit einem Dollarzeichen $ beginnen. Sonderzeichen und Umlaute sind nicht erlaubt, wie z.B. %,#,ä,ö,ü. Sie dürfen keine Leerzeichen enthalten. Sie müssen mit einem Buchstaben beginnen. Achtung: Gross-Kleinschreibung beachten! Programmieren mit PhP – Einführung Seite 2 <? $variable1="Ich bin $variable2="123"; $variable3=123; // $variable4=123.45; print print print print eine Zeichenkette"; // Zeichenkette (String) // Zeichenkette (String) ganze Zahl (Integer) // Dezimalzahl (Double); Achtung: Dezimalpunkt! $variable1."<br>"; $variable2."<br>"; $variable3."<br>"; $variable4."<br>"; // Ausgabe; <br> Zeilenumbruch $variable5=$variable2+$variable3; // Addition von String und Integer print $variable5."<br>"; print $variable2."+".$variable3."=".$variable5; // Verknüpfung von Strings ?> $variable1 bis $variable4 sind 4 verschiedene Variablentypen. Es kann aber sogar ein String mit einer Zahl addiert werden. Strings werden mit Hilfe eines Punktes verknüpft. Will man keine automatische Typisierung, so muss man sie erzwingen, z.B.: $var1=(double)123; Grundrechenoperationen Übung: Ein Programm ZweiZahlen soll Summe, Differenz, Produkt und Quotient von zwei eingegebenen Zahlen berechnen und ausgeben. Grundrechenoperationen: +...Addition, -...Subtraktion, *...Multiplikation, /...Division. Welches Problem könnte auftreten? IF – Bedingung / Logische Verknüpfungen Um im Programm ZweiZahlen einen Absturz bei der Eingabe eines Nenners mit dem Wert 0 zu vermeiden, muss das Programm um eine IF-Bedingung erweitern. Syntax 1: if (Bedingung) { Anweisungen; } Wenn Bedingung zutrifft, dann erledige Anweisungen Syntax 2: if (Bedingung) { Anweisungen1; } else { Anweisungen2; } Wenn Bedingung zutrifft, dann erledige Anweisungen1, ansonsten erledige Anweisungen2 Für die Bedingungen benötigt man Vergleichsoperatoren und logische Verknüpfungen: == != && || Gleichheit Ungleichheit Logisches UND Logisches ODER if if if if ($b == 0) ... ($b != 0) ... ( ($x > 1) && ($x <=10) ) ... Beide Bedingungen müssen erfüllt sein ( ($x < 0) || ($x >= 10) ) ... Eine Bedingung muss erfüllt sein Beispiel: if ($zahl2 != 0) { $quotient = $zahl1 / $zahl2; } oder if ($zahl2 == 0) { print "Division durch 0!"; } else { $quotient = $zahl1 / $zahl2; print $zahl1." : ".$zahl2." = ".$quotient;} Programmieren mit PhP – Einführung Seite 3 Ein Programm ZahlPrüfen soll überprüfen, ob eine eingegebene Zahl zwischen 100 und 1000 liegt. Bei der Ausgabe sollen alle drei Fälle (zahl<100, zahl>1000, zahl dazwischen) unterschieden werden. Erweitere das Programm, sodass die Unter- und die Obergrenze am Beginn frei wählbar ist. Ein Programm Vokal soll feststellen, ob ein Zeichen ein Konsonant oder ein Vokal ist: if (($zeichen=='a') || ($zeichen=='A') || ($zeichen=='e') || ... || ($zeichen=='U')) {...} else {...} Eleganter kann man die Funktion eregi verwenden, die nach Zeichen sucht. (eregi ist nicht caseSensitive, ereg schon! if ( eregi($zeichen,'aeiou') ) print $zeichen." ist ein Vokal"; Ein Programm Celsius soll Fahrenheitsgrade in Celsiusgrade umrechnen. Dabei gilt: °C=(°F –32)*5/9. Erweitere das Programm so, dass bei Temperaturen kleiner oder gleich 0 Grad Celsius zusätzlich der Text „Achtung: Glatteisgefahr“ erscheint. Um die Dezimalzahl mit nur 2 Dezimalstellen anzuzeigen, verwendet man: number_format( $celsius , 2 , ',' , '.' ) Parameter: number_format(Fließkommazahl , Anz. Dez.-stellen , Dezimaltrennung , Tausendertrennung) Ein Programm KlFormel soll die Lösungen der quadratischen Gleichung der Form x px q 0 berechnen. Das Programm soll nach der Eingabe von p und q die Lösungen der Gleichung ausgeben. Achte auf die Fallunterscheidungen ( Diskriminante!). 2 1 2 3 if ($d>0) { // 1. Fall: Diskriminante >0 print "Es gibt 2 Lösungen <br>"; $x1=-p/2+sqrt($d); // sqrt = Square-Root = Quadratwurzel $x2=...; print "$x1 = ".number_format($x1,5,',','.'); // Ausgabe der 1. Lösung ... } // Ende IF-Zweig else { // wenn also die Diskriminante nicht >0 ist if ($d==0) { // 2. Fall: Diskriminante =0 print "Es gibt 1 Lösung <br>"; .... } if ($d<0) print "Es gibt keine Lösung!";// 3. Fall: Diskriminante <0 } // Ende ELSE-Zweig Struktogramm für KlFormel Programmieren mit PhP – Einführung Seite 4 Schleifen Die For-Schleife (Zählschleife): Diese Schleife ist günstig, wenn man die Anzahl der Durchläufe kennt. Syntax: for ( Zählvariableninitialisierung; Abbruchbedingung; Hochzählanweisung ) { Anweisungen; } Programm Quadrat: Es werden die Quadratzahlen von 02 bis 1002 berechnet und ausgegeben for ($i=0; $i<=100; $i++) // Initialisierung von i (i ist zu Beginn 0) // Abbruchbedingung (Wiederholung solange i<=100) // Hochzählanweisung (i wird pro Durchlauf um 1 erhöht) { $quadrat=$i*$i; // Berechnung der Quadratzahl print $i." zum Quadrat ist ".$quadrat."<br>"; // Ausgabe } // Ende der For-Schleife Die Hochzählanweisung kann kann auch anders gestaltet werden. Beispiele: $i=$i+1 Erhöhung um 1 $i=$i+2 Erhöhung um 2 $i=$i-1 oder $i-Reduzierung um 1 Achte stets darauf, dass die Abbruchbedingung auch irgendwann erfüllt wird. Folgende Schleife würde nie abgebrochen werden (Endlosschleife): for ($i=100; $i != 1; $i=$i-2) {...} // Der Wert 1 wird nie angenommen Programm Summe: Es soll a) die Summe der Zahlen von 1 bis 100 berechnet werden (Gauß), b) die Summe der geraden Zahlen von 2 bis 100 berechnet werden. Die While-Schleife (Kopfgesteuerte Schleife): Bei dieser Schleife muss die Initialisierung vor dem while erfolgen. Die Hochzählanweisung steht im Anweisungsblock: Syntax: Initialisierung der Zählvariable; while (Abbruchbedingung) { Anweisungen; Hochzählanweisung; } Programm Funktion: Berechnung der Funktionswerte der Fkt. y=x2–3. Intervall [–2;2] in Abständen von 0.1 $x=-2; while ($x<=2) { $y=pow($x,2)-3; print $x."/".$y."<br>"; $x=$x+0.1; } // Initialisierung der Zählvariable // Abbruchbedingung // // // // Berechnung des y-Wertes Ausgabe Hochzählanweisung Ende der while-Schleife Bemerkungen: pow(a,b)...Funktion zur Berechnung von ab Die Do-Schleife (Fußgesteuerte Schleife): Bei dieser Schleife werden die Anweisungen mindestens einmal durchlaufen. Syntax: Initialisierung der Zählvariable; do { Anweisungen; Hochzählanweisung; } while (Bedingung) Programmieren mit PhP – Einführung Seite 5 Übungen zur For- und While-Schleife: Ein Programm Teilbar soll alle Zahlen von 1 bis 100 aufzählen, die durch 7 teilbar sind. Allgemein: ...alle Zahlen von 1 bis zu einer wählbaren Zahl n, die durch eine wählbare Zahl t teilbar sind. Verwende dazu die Modulo-Division: $r = $i % $t; (r ist der Rest, der bei Division von i durch t bleibt) Ein Programm CelsiusTab soll Celsiusgrade in Fahrenheitsgrade umrechnen und umgekehrt. Die Umrechnungsformel lautet °C=(°F–32)*5/9. Es soll jeweils eine Tabelle ausgegeben werden, von der man die entsprechenden Werte ablesen kann. Ein Programm Primzahl soll nach Eingabe einer Zahl überprüfen, ob diese Zahl eine Primzahl ist. Verwende dazu wieder die Modulo-Division. Grundalgorithmus: $zahl=101; // Zu überprüfende Zahl $prim=true; for ($i=2;$i<$zahl;$i++) { $r=$zahl % $i; if ($r==0) {$prim=false;} } // Initialisierung der Variable prim // r ist der Rest bei Division von zahl durch i // wenn r=0, dann teilbar, also keine Primzahl if ($prim) {print $zahl." ist eine Primzahl";} // Ausgabe else {print $zahl." ist keine Primzahl";} Optimierung 1: Gerade Zahlen müssen überhaupt nicht geprüft werden. Die Prüfung soll außerdem abgeschlossen werden, sobald ein Teiler gefunden ist (break). if ($zahl % 2 !=0) // nur ungerade Zahlen werden geprüft { for ($i=3;$i<$zahl;$i=$i+2) {…} // nur ungerade Teiler werden geprüft if ($r==0) {$prim=false; break;} // Unterbrechung, sobald prim=false (Teiler gefunden) } else $prim=false; // gerade Zahl --> nicht prim if ($zahl==2) $prim=true; // 2 ist prim Optimierung2: Es muss nicht bis zahl-1 geprüft werden, sondern es genügt, bis $wurzel=sqrt($zahl); ... for ($i=3;$i<=$wurzel;$i=$i+2) {…} zahl zu rechnen! // Berechnung von Wurzel(zahl) // nur ungerade Teiler; nur bis zur Wurzel Folgende Zeiten wurden bei einem Testlauf (mit einem analogen Java-Programm) gemessen: Zahl Grundalgorithmus Optimierung 1 Optimierung 2 999 999 937 (prim) 40 sec. 20 sec. 0 sec. 999 999 938 (gerade) 40 sec. 0 sec. 0 sec. 999 999 943 (=5 623*177 841) 40 sec. 0 sec. 0 sec. 100 000 980 001 501 46 Tage 1 sec. 0 sec. (=10 000 019*10 000 079) 100 000 000 000 031 (prim) 46 Tage 23 Tage 0 sec. Ein Programm PrimAufzaehlen soll nach Eingabe von Start- und Endzahl alle Primzahlen dazwischen aufzählen. Verwende den Algorithmus von Optimierung 2! Programmieren mit PhP – Einführung Seite 6