PROJEKTARBEIT WS 2000/2001 Über Erstellung von einem schwarzen Brett Gerd Kuchelmeister INHALT 1. ZIEL DES PROJEKTES 2. APACHE 2.1 2.2 2.3 2.4 Was ist der Apache Befehle und Konfiguration in Zusammenspiel mit PHP3 Apache und seine wichtigen Verzeichnisse Einrichten eines geschützten Bereiches S. 4 S. 5 S. 7 S. 8 Was ist PHP Konfiguration im Zusammenspiel mit Apache und MySQL Grundlagen Die wichtigsten Funktionen zu MySql Variablen Ausdrücke Funktionen Fallunterscheidungen S. 10 S. 11 S. 12 S. 12 S. 15 S. 16 S. 17 S. 18 Was ist MySQL Was ist alles möglich mit MySQL Erstellen und verwalten von Datenbanken mir ihren Rechten S. 20 S. 21 S. 22 3. PHP 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 4. MYSQL 4.1 4.2 4.3 5. BEISPIEL SCHWARZES BRETT 5.1 5.2 5.3 5.4 Planung Erstellung und Einstellung einer Datenbank mit MySQL Programmierung der Seiten für Professoren Programmierung der Seiten für Studenten S. 28 S. 29 S. 33 S. 45 6. Informationen und Tutorials im Internet Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 2 1. ZIEL DES PROJEKTES Ziel: ist es, eine Art Schwarzes Brett für die FH-Weingarten zu erstellen. Dieses wird mit Hilfe von Apache, PHP und MySql verwaltet und eventuell irgendwann im Internet auf den Seiten der FH-Weingarten zu finden sein. Funktionalität: Ein Professor möchte eine wichtige Information für Studenten zugänglich machen. Solche Informationen könnten z.B. sein: - Raumverlegung - Vorlesungsverlegung - Krankheit - Ausfall von Veranstaltungen .... Möglichkeiten: Nun soll es ihm möglich sein, egal von wo über seinen Internetbrowser eine Nachricht an das schwarze Brett zu hängen. Diese Nachrichten können dann von Studenten ebenfalls im Internet gelesen werden. Die Information wird durch den Professor zeitlich begrenz, d.h. der kann eine Nachricht z.B. am Samstag von zuhause aus eingeben, sie wird dann aber erst am Dienstag veröffentlicht und ist dann bis Donnerstag am Brett. Diese Nachricht ist dann nur in diesem Zeitraum für den Studenten sichtbar. Realisierung: Installation von Suse Linux 7.0 mit Hilfe von YAST2. Dies ist kein Problem, da YAST2 den Webserver, PHP und MySQL automatisch installiert. Der Webserver wird automatisch beim Booten mitgestartet. Um MySQL auch beim Booten zu starten muss folgender Eintrag in die Datei /etc/rc.config mit Start_Mysql =“YES“ geschreiben werden. Das Projekt wird mit Hilfe von Apache Webserver, PHP3 und MySql unter Suse Linux 7.0 erstellt. Der Apache Webserver stellt die notwendigen Dateien xxx.html und xxx.php3 unter seiner IP-Adresse oder seinem Namen zu Verfügung. Hier in diesem fall unter http://141.69.209.13/php/ oder unter http://www.withestar4/php/ Die Scripsprache PHP3 sorgt für die nötigen Funktionen. Mehr unter Kapitel 3. MySQL stell eine Datenbank zur Verfügung Mehr unter Kapitel 4. Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 3 2. APACHE 2.1 Was ist der Apache Der Apache ist ein Webserver. Ein Webserver ist eine Software, die angeforderte Dokumente über das Internet versendet. Dokumentenanforderungen stammen meistenteils von Browsern wie Lynx, Netscape usw. Neben reinen Textdokumenten kann ein Webserver jedoch auch Programme wie Zugriffszähler und Datenbankzugriffe ausführen, deren Ergebnisse in Form von Texten oder Bildern auf unserem Browser erscheinen. Außerdem können Bilder, Musik und Videos sowie Formulare und interaktive VR-Sequenzen übertragen werden. Der Apache Webserver hatte im September 1999 einen Marktanteil von ca. 55%, dahinter folgte auf Platz 2 ein nicht freier Server, Netscape ca. 8% ; alle weiteren Server haben jeweils einen Marktanteil von weniger als 5%. Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 4 2.2 Befehle und Konfiguration in Zusammenspiel mit PHP3 Konfiguration: Durch die gesamte Dokumentation gilt !! bash-2.04#Ihre Eingabe Konsoleeingabe von Linux. Wenn so eine Konsolenangabe auftaucht, ist der fettgedruckte Teil die Benutzereingabe. Wie muss die Datei httpd.conf aussehen, damit Apache mit PHP3 zusammenarbeitet. Diese Datei wird bei der Installation vom Apache automatisch richtig erstellt. Dennoch kann es nicht schaden mal reinzuschauen. Durch die gesamte Dokumentation gilt Die Datei ist zu finden unter: bash-2.04# cd etc/httpd/ bash-2.04# ls access.conf httpd.conf~ php3.ini ssl.crl ssl.key access.conf~ magic php3.ini~ ssl.crt ssl.prm httpd.conf mime.types srm.conf ssl.csr susehelp.conf bash-2.04# Hier sind einige wichtige Ausschnitte aus der httpd.conf Modul für PHP3 laden <IfDefine PHP> LoadModule php3_module /usr/lib/apache/libphp3.so </IfDefine> Modul addieren <IfDefine PHP> AddModule mod_php3.c </IfDefine> Endungen für Dateien hinzufügen, damit man auch z.B http://www.server.de/dateiname.php ausführen kann. <IfDefine PHP> AddType application/x-httpd-php3 .php3 AddType application/x-httpd-php3-source .phps AddType application/x-httpd-php3 .phtml </IfDefine> Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 5 Befehle: Starten und Stoppen des Apache. Dies notwendig, wenn Veränderungen vorgenommen wurden. Wie schon erwähnt der Apache beim Booten mitgestartet. bash-2.04# cd sbin/init.d/ bash-2.04# ./apache Usage: ./apache {start|stop|status|full-status|restart|reload} bash-2.04# ./apache start Starting service httpd done bash-2.04# Das Programm httpd Hier kann man z.B. die Module ansehen, mit der, der Apache konfiguriert ist. Es ist auch hier möglich den Server anzuhalten oder zu starten. bash-2.04# cd usr/sbin/ bash-2.04# ./httpd -help Usage: ./httpd [-D name] [-d directory] [-f file] [-C "directive"] [-c "directive"] [-v] [-V] [-h] [-l] [-L] [-S] [-t] [-T] Options: -D name : define a name for use in <IfDefine name> directives -d directory : specify an alternate initial ServerRoot -f file : specify an alternate ServerConfigFile -C "directive" : process directive before reading config files -c "directive" : process directive after reading config files -v : show version number -V : show compile settings -h : list available command line options (this page) -l : list compiled-in modules -L : list available configuration directives -S : show parsed settings (currently only vhost settings) -t : run syntax check for config files (with docroot check) -T : run syntax check for config files (without docroot check) bash-2.04# Hinweis!! Sollte der Server mal aus einem Grund nicht starten, ist es sinnvoll ihn von hier aus zu starten, weil httpd dann die Zeile in der ein Fehler in der httpd.conf anzeigt. Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 6 2.3 Apache und seine wichtigen Verzeichnisse bash-2.04# cd usr/local/httpd/ bash-2.04# ls cgi-bin htdocs icons bash-2.04# Das htdocs Verzeichnis liegen die Dateien, die dann vom Server gesendet werden. Httpd.conf ist so konfiguriert, daß es genügt wenn man eine Datei im Verzeichnis htdocs abruft, nur die Adresse des Servers und den Namen eingibt. Es können auch Unterverzeichnisse erstellt werden. In meinem Beispiel ist es das Unterverzeichnis PHP. Eine Datei kann dann wie folgt über den Browser abgerufen werden. http://www.servername/php/datei im cgi-bin Verzeichnis werden CGI-Programme ausgeführt. Mehr Info bei Herr Prof. Usadel in der Vorlesung Internet II Mehr Information zur Dokumentation von Apache http://www.apache.org Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 7 2.4 Einrichten eines geschützten Bereiches Hier wird jetzt ein geschützter Bereich im Verzeichnis htdocs eingerichtet. Diese Möglichkeiten der Erstellung gibt es. bash-2.04# cd usr/sbin/ bash-2.04# htpasswd Usage: htpasswd [-cmdps] passwordfile username htpasswd -b[cmdps] passwordfile username password -c Create a new file. -m Force MD5 encryption of the password. -d Force CRYPT encryption of the password (default). -p Do not encrypt the password (plaintext). -s Force SHA encryption of the password. -b Use the password from the command line rather than prompting for it. On Windows and TPF systems the '-m' flag is used by default. On all other systems, the '-p' flag will probably not work. bash-2.04# Hier wird eine Paßwortdatei mit dem Namen Schutz für den User gerd angelegt, der dann im Projekt benötigt wird. bash-2.04# htpasswd -c schutz gerd New password:***** Re-type new password:***** Adding password for user gerd bash-2.04# Das User ist nun mit seinem Paßwort in der Datei schutz eingetragen. Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 8 Die Kodierung ist Force CRYPT bash-2.04# cat schutz gerd:BPeY7yfrlJRlA bash-2.04# Nun muss noch die Datei httpd.conf geändert wie folgt geändert werden. Damit der Schutz wirksam wird, ist es notwendig den Server neu zu starten. <Directory /usr/local/httpd/htdocs/php> Options -FollowSymLinks AllowOverride None allow from all AuthType Basic AuthName "geschützer bereich" AuthUserFile /usr/bin/schutz require valid-user </Directory> Wenn jetzt ein Benutzer mit seinem Browser z.B auf die Datei http://www.servername.de/php/datei zugreift, wird er ein passwort eingeben müssen. Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 9 3. PHP 3.1 Was ist PHP PHP (offiziell: "PHP: Hypertext Preprocessor") ist eine server-seitige, in HTML eingebettete Skriptsprache. PHP ist in Version 3 eine reine Interpretersprache, in Version 4 ein BytecodeCompiler, der das Script beim Aufruf compiliert. PHP kann als CGI-Program oder als Bestandteil des Webservers (mod_php) ausgeführt werden. Als CGI-Programm ist es beliebig portabel, als Modul ist es für eine Reihe von populären APIs verfügbar (Apache, Netscape,Microsoft und fhttpd). PHP unterstützt Datenbankzugriffe nicht nur über ODBC (oftmals Treiber von schlechter Performance und mit unvollständigen APIImplementierungen), sondern auch über die Native API einer ganzen Reihe von Datenbanken. Dazu LDAP, IMAP und eine Reihe anderer Datenbanken, außerdem HTTP, FTP-Protokolle (IntelligentAgent-Programmierung) und Direktzugriff auf Dbase und DB/DBM-Dateiformate. Dynamische Generierung vonPNG-Bildern mit der libgd und der freetype library. Volltextindices und Suchmaschinen über externe Open Source Programme (htdig und andere). Zahlreiche Spracherweiterungen vorhanden, der Quelltext des Interpreters liegt vor und ist Open Source. Die Syntax folgt der C, Java, Javascript, Perl-Familie von Sprachen. Ausgezeichnete Dokumentation undglänzender Support, wie bei Open Source üblich (Mailinglisten in Deutscher und Englischer Sprache). Sessionmanagement ab Version 4 eingebaut, davor Bestandteil von PHPLIB. Beispiel: <html> <head> <title>Beispiel</title> </head> <body> <?php echo "Hallo, ich bin ein PHP-Skript!"; ?> </body> </html> Dieser Skript unterscheidet sich von einem CGI-Skript, der in einer Sprache wie Perl oder C geschrieben wurde -- anstatt ein Programm mit vielen Anweisungen zur Ausgabe von HTML zu schreiben, schreibt man einen HTML-Code mit einigen eingebetteten Anweisungen, um etwas auszuführen (z.B. um - wie oben - Text auszugeben). Der PHP-Code steht zwischen speziellen Anfangs und Schlußtag, mit denen man in den PHP-Modus und zurück wechseln kann. Was PHP von client-seitigen Sprachen wie Javaskript unterscheidet, ist dass der Code vom Server ausgeführt wird. Sollten sie einen Skript wie den obigen auf ihrem Server ausführen, würde der Besucher nur das Ergebnis empfangen, ohne die Möglichkeit zu haben, herauszufinden, wie der zugrundeliegende Code aussieht. Sie können ihren Webserver auch anweisen, alle ihre HTML-Dateien mit PHP zu parsen, denn dann gibt es wirklich nichts, das dem Benutzer sagt, was sie in petto haben. 3.2 Konfiguration im Zusammenspiel mit Apache und MySQL Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 10 Es gibt 2 Möglichkeiten, sich die Konfiguration von PHP anzusehen. 1. Über den Aufruf von der Funktion int phpinfo(void) <html> <head> <title>Beispiel</title> </head> <body> <? phpinfo(); ?> </body> </html> Beim Aufruf der Datei wird im Browser folgendes ausgegeben. 2. Direkt über die Konfigurationsdatei php3.ini Die Konfigurationsdatei php3.ini wird geladen, wenn PHP gestartet wird. Wurde PHP als Modul in den Webserver einkompiliert, dann geschieht dies nur, wenn der Server gestartet wird. Ist PHP als CGI-Version konfiguriert worden, geschieht es bei jedem Aufruf. Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 11 Die Datei ist zu finden unter: bash-2.04# cd etc/httpd/ bash-2.04# ls php3.ini php3.ini bash-2.04# Nun einige Konfigurationseinstellungen in der php3.ini, die MySql wichtig sind. MySQL-Konfigurationsdirektiven (Beispiele: so sollte php bei uns kongiguriert sein) mysql.allow_persistent = boolean Erlaubt persistente Verbindungen. Beispiel: mysql.allow_persistent mysql.default_host = On string Hier wird der Host (Computername) des Computers eingetragen, auf dem MySQL installiert ist (wird benutzt, falls kein anderer Name angegeben wird). mysql.default_user string Hier wird der Name des Standardbenutzers eingegeben (wird benutzt, falls kein = anderer Name angegeben wird). . Beispiel: mysql.default_user mysql.default_password string Hier wird das Standardpasswort eingegeben (wird benutzt, falls kein anderes Passwort angegeben wurde). . Beispiel: mysql.default_password = mysql.max_persistent integer Hier geben Sie die maximal erlaubte Anzahl persistenter MySQL-Verbindungen pro = -1 Prozess an. . Beispiel: mysql.max_persistent mysql.max_links integer Hier geben Sie die maximale Anzahl der Verbindungen pro Prozeß. Beispiel: msql.max_links = -1 3.3 Grundlagen Möglichkeiten, den HTML-Bereich zu verlassen 1. <? echo ("Das ist die einfachste Moeglichkeit:eine SGML´proccessing instruction´\n"); ?> 2. <script language="php"> echo ("Manche Editoren (z. B. Frontpage) moegen keine ´processing instructions´\n"); </script> 3. <% echo ("Optional können auch Tags im ASP-Stil verwendet werden"); %> <%= $variable; # Das ist ein Abkuerzung fuer "<%echo .." %> Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 12 Bei Möglichkeit 3 müssen in der php3.ini die ASP Tags aktiviert sein !! 3.4 Die wichtigsten Funktionen zu MySql Will man eine Datenbank ansprechen, so muss zuerst eine Verbindung zum mySQL-Server aufgebaut werden. Dazu dient der Befehl: mysql_connect(hostname, username, password) Solange die Datenbank auf dem gleichen Rechner liegt wie der Webserver, kann man hier einfach „localhost" angeben. Also mysql_connect("localhost"); Da kein Benutzername angegeben wurde, wird der aufrufende Benutzer genommen, hier „wwwrun", die Benutzerkennung des Apache. Ein Passwort hatten wir nicht gesetzt. Nach Abschluss der Datenbankbenutzung sollte das Programm die Verbindung auch wieder korrekt beenden. mysql_close(hostname) Gibt man hier keinen Hostnamen an, so werden alle Verbindungen beendet: mysql_close() Datenbankbefehle mittels PHP PHP stellt eine Funktion zur Verfügung, mit deren Hilfe clauses direkt an mySQL weitergegeben werden können. Dazu dient: ergebnisvariable=mysql(Datenbankname, Abfrage) Konkret könnte das folgendermaßen aussehen: $result=mysql("kurs","SELECT * FROM telefonliste"); Die Ergebnisvariable hat den Wert -1, wenn ein Fehler auftrat. Der Fehler kann dann mittels $phperrormsg abgefragt werden. Falls die Datenbankabfrage erfolgreich war und Ergebnisse zurückliefert, ist die Ergebnisvariable ein wichtiger Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 13 Schlüssel zu Abfrage der Ergebnisse. Die Zahl der gefundenen Datensätze kann ermittlt werden mit zahl=mysql_NumRows(ergebnisvariable) 3.5 Variablen Variablen werden in PHP dargestellt durch ein Dollar-Zeichen ($) gefolgt vom Namen der Variablen. Bei Variablen-Namen wird zwischen Groß- und Kleinschreibung unterschieden (case-sensitive). Variablen-Namen werden in PHP nach den gleichen Regeln wie die andere Bezeichner erstellt. Ein gültiger Variablen-Name beginnt mit einem Buchstaben oder einem Unterstrich ("_"), gefolgt von einer beliebigen Anzahl von Buchstaben, Zahlen oder Unterstrichen. Als regulärer Ausdruck (regular expression) würde das wie folgt ausgedrückt: '[a-zA-Z_\x7f\xff][a-zA-Z0-9_\xzf-\xff]*'. Anmerkung: Unserem Zweck entspricht also ein Buchstabe von a bis z bzw. A bis Z oder einem ASCII-Zeichen von 127 bis 255 (0x7f bis 0xff). $var $vaR $Var $vAr = = = = "Du"; "und"; "ich"; "wir lernen PHP" Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 14 echo "$var $vaR $Var, $vAr"; // gibt "Du und ich, wir lernen PHP" aus $4site = 'nicht jetzt'; $_4site = 'nicht jetzt'; $täbyte = 'irgendwas'; entspricht // ungültig, da Anfang eine Zahl // gültig, da Unterstrich am Anfang // gültig, da 'ä' dem ASCII-Wert 228 Variablen werden in PHP3 durch ihren Wert bestimmt. Das heisst, wenn sie einer Variablen einen Ausdruck zuweisen, wird der gesamte Inhalt des Originalausdrucks in die Zielvariable kopiert. Die Folge ist, dass eine Variable, die ihren Inhalt von einer anderen Variablen erhalten hat, ihren Inhalt behält, auch wenn sie danach den Inhalt der anderen (Quell- / Ursprungs-)Variablen ändern. Die Inhalte der Ziel- und Quellvariablen sind also insoweit unabhängig voneinander 3.6 Ausdrücke Ausdrücke (Expressions) sind die wichtigsten Bausteine von PHP. In PHP ist fast alles, was geschrieben wird, ein Ausdruck. Die einfachste, aber auch zutreffenste Definition für einen Ausdruck ist "alles, was einen Wert hat". Die grundlegendste Formen von Ausdrücken sind Konstanten und Variablen. Wenn man "$a = 5" schreibt, weist man $a den Ausdruck ´5´ zu. ´5´ hat offensichtlich den Wert 5. Anders ausgedrückt: ´5´ ist ein Ausdruck mit dem Wert 5 (in diesem Fall ist ´5´ eine IntegerKonstante). Nach dieser Zuweisung würde man erwarten, dass der Wert von $a nun ebenfalls 5 ist, wenn man also $b = $a schreibt, sollte dasselbe dabei herauskommen, als hätte man $b = 5 geschrieben. Anders ausgedrückt: $a wäre ebenfalls ein Ausdruck mit dem Wert 5. Wenn alles richtig funktioniert, wird genau das passieren. Etwas kompliziertere Beispiele für Ausdrücke sind Funktionen: function foo () { return 5; } Angenommen, Sie sind mit dem Konzept von Funktionen vertraut (wenn Sie es nicht sind, lesen Sie das Kapitel über Funktionen), dann würden Sie annehmen, dass die Eingabe von $c 15 Projektarbeit WS 2000/2001 von Kuchelmeister Gerd grundsätzlich daselbe bedeutet, als würde man schreiben $c = 5,und genau das trifft zu. Funktionen sind Ausdrücke mit dem Wert ihres Rückgabewertes. Da foo() den Wert 5 zurückgibt, ist der Wert des Ausdruckes ´foo()´ 5. Normalerweise geben Funktionen nicht einfach einen statischen Wert zurück, sondern berechnen irgendetwas. = foo() Natürlich müssen Werte in PHP keine Integer-Zahlen sein, und oft sind sie es auch nicht. PHP unterstützt drei skalare Datentypen: integer values (Integer-Zahlen),floating point values (Fließkommazahlen) und string values (Zeichenketten). (Skalare sind Datentypen, die man nicht in kleinere Stücke ´brechen´ kann, im Gegensatz zu Arrays). PHP unsterstützt auch zwei zusammengesetzte (nicht-skalare) Datentypen: Arrays und Objekte. Jeder dieser Datentypen kann Variablen zugewiesen und von Funktionen zurückgegeben werden. Bis hierhin sollten Benutzer von PHP/FI 2 keine Veränderung bemerkt haben. PHP fasst den Begriff ´Ausdruck´ aber noch viel weiter, wie es auch andere Programmiersprachen tun. PHP ist in dem Sinne eine ausdrucksoriente Sprache, dass fast alles ein Ausdruck ist. Zurück zu dem Beispiel, mit dem wir uns schon beschäftigt haben: ´$a = 5´. Es ist einfach zu erkennen, dass hier zwei Werte enthalten sind: Der Wert der Integer-Konstanten ´5´ und der Wert von $a, der auf 5 geändert wird. In Wirklichkeit ist aber noch ein zusätzlicher Wert enthalten, nämlich der Wert der Zuweisung selbst. Die Zuweisung selbst enthält den zugewiesenen Wert, in diesem Fall 5. In der Praxis bedeutet dies, dass ´$a = 5´, egal was es tut, immer einen Ausdruck mit dem Wert 5 darstellt. Folglich ist ´$b = ($a = 5)´ gleichbedeutend mit ´$a = 5; $b = 5;´ (ein Semikolon markiert das Ende einer Anweisung). Da Wertzuweisungen von rechts nach links geparst werden, kann man auch ´$b = $a = 5´ schreiben. 3.7 Funktionen Vom Nutzer definierte Funktionen Eine Funktion kann wie folgt definiert werden: function foo ($arg_1, $arg_2, ..., $arg_n) { echo "Beispielfunktion.\n"; return $retval; } Jeder beliebige korrekte PHP-Code kann in einer Funktion vorkommen, sogar andere Funktionen und Klassen-Definitionen. In PHP3 müssen Funktionen definiert sein, bevor man auf sie verweist. In PHP4 ist das nicht mehr erforderlich. Funktionsparameter Mit einer Parameterliste kann man Informationen an eine Funktion übergeben. Die Parameterliste ist eine kommagetrennte Liste von Variablen und/oder Konstanten. PHP unterstützt die Weitergabe von Parametern als Werte (das ist der Standard), als Verweise, und als Vorgabewerte. Die Übergabe einer beliebigen Parameterzahl ist nicht möglich, einen ähnlichen Effekt kann man aber durch die Übergabe von Arrays erreichen. function rechne_array($eingabe) { echo "$eingabe[0] + $eingabe[1] = ", $eingabe[0]+$eingabe[1]; } Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 16 Verweise als Parameter übergeben Normalerweise werden den Funktionen Werte als Parameter übermittelt. Wenn man den Wert dieses Parameters innerhalb der Funktion ändert, bleibt der Parameter ausserhalb der Funktion unverändert. Wollen Sie aber genau das erreichen, dann müssen Sie die Parameter als Verweise übergeben. Wenn eine Funktion einen Parameter generell als Verweis behandeln soll, setzt man ein kaufmännisches Und (&) in der Funktionsdefinition vor den Parameternamen: function fuege_etwas_anderes_an (&$string) { $string .= 'und nun zu etwas völlig anderem.'; } $str = 'Dies ist ein String, '; fuege_etwas_anderes_an ($str); echo $str; // Ausgabe 'Dies ist ein String, und nun zu etwas völlig anderem.' Rückgabewerte Sie können Werte mit dem optionalen Befehl "return" zurückgeben. Es können Variablen jedes Typs zurückgegeben werden, auch Listen oder Objekte. function quadrat ($zahl) { return $zahl * $zahl; } echo quadrat (4); // gibt '16' aus. Es ist leider nicht möglich, mehrere Werte von einer Funktion zurückgeben zu lassen. Ein ähnliches Resultat kann man aber durch die Rückgabe von Listen bekommen. function kleine_zahlen() { return array (0, 1, 2); } list ($null, $eins, $zwei) = small_numbers(); 3.8 Fallunterscheidungen Zur Fallunterscheidung gibt es den obligatorischen if-Befehl: if ($i<0) { echo "$i ist kleiner als Null\n"; } oder auch if ($i<0) { echo "$i ist kleiner als Null\n"; Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 17 } else { echo "$i ist nicht kleiner als Null\n"; } Es ist bei allen Programmierarbeiten immer sinnvoll, daß Sie das ELSE immer mit hineinschreiben. Das erhöht zum Einen die Lesbarkeit für andere und und ermöglicht es Ihnen, Fehler schneller auffinden zu können, falls einmal eine Variable vom Wert her aus dem Ruder läuft ..... Man kann diesen Befehl auch schachteln: if ($i<0) { echo "$i ist kleiner als Null\n"; } else if ($i>0) { echo "$i ist groesser als Null\n"; } else { echo "$i ist Null\n"; } Hat man mehrere Tests der gleichen Variable, so kann man mit dem switch Befehl evtl. Arbeit einsparen: switch ($name) { case "hallo": echo "Hallo Tutorial !"; break; case "tag": echo "Guten Tag !"; break; case "abend": echo "Guten Abend !"; break; default: echo "Oder wir sind am Nordpol !"; } Falls die Variable $name den Wert "hallo" hat, wird als nächster Befehl: echo "Hallo !"; ausgeführt. Normalerweise werden alle nachfolgenden Befehle auch ausgeführt, z.B. auch : echo "Oder wir sind am Nordpol ! "; Da dies meist nicht erwünscht ist, springt man mit break aus dem switch-Befehl heraus. Gewöhnen Sie sich diese Strukturen so an, daß Sie automatisch in Fleisch Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 18 und Blut übergehen. Sie werden sich ansonsten wundern, wie schnell Sie Ihren eigenen Code nicht mehr lesen können..... Mehr Information zu PHP http://www.php.net 4. MYSQL 4.1 Was ist MySQL MySQL ist eine echte Multi-User, Multi-Treaded SQL Datenbank und wird von allen großen Providern oder auch Suchmaschinenbetreibern eingesetzt. MySQL ist eine CLient/Server Implentierung, die aus einem Server-Dämon mysqld und vielen Client Programmen, sowie Bibliotheken für PERL, PHP/3, PHP/4 sowie ASP besteht. SQL ist eine standardisierte Datenbanksprache, die das Speichern, Updaten und den Zugriff auf Informationen erleichtert. Beispielsweise kann man Produktinformationen eines Kunden auf einem WWW-Server speichern und abrufen. MySQL ist äußerst schnell und flexibel genug, um sogar Bilder und Log-Dateien darin abzulegen. In der Praxis ist MySQL sehr viel schneller, als z.B. ORACLE oder INFORMIX. Die wichtigsten Eigenschaften von MySQL sind Geschwindigkeit, Stabilität und einfache Bedienbarkeit. MySQL wurde ursprünglich entwickelt, weil auf TCX (dem Server der Entwickler) ein SQL Server benötigt wurde, der sehr große Datenbanken handeln konnte, und zwar um eine Größenordnung schneller, als die Datenbankhersteller damals liefern konnten. MySQL ist nun nun seit 1996 auf vielen Tausend Sites im Internet und Intranet im Einsatz und erfreut sich hier wachsender Beliebtkeit. MySQL ist bei vielen tausend Unternehmen im täglichen Einsatz, von denen über 500 mehr als 7 Millionen Einträge bzw mehr als 100 Gigabyte an Daten mangagen. Auf der Site http://www.rent-a-database.de ist eine Auszug einer Referenzliste zu finden. MySQL ist geradezu prädestiniert zur Beschleunigung bestehender ACCESS Datenbanken. Diese Kombination ermöglicht es, mit nur kleinen Änderungen in ACCESS die Datenbankabfragen um Faktor 3-100 zu beschleunigen. Der Grundstock, um den MySQL herum gebaut worden ist, ist eine Liste von Routinen, die sich im täglichen Einsatz seit Jahren bewährt haben. Obwohl MySQL dauernd weiter entwickelt wird, hat es zu jedem Zeitpunkt der Entwicklung stets zuverlässig Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 19 und stabil gearbeitet. 4.2 Was ist alles möglich mit MySQL CREATE TABLE OPTIMIZE TABLE SYNTAX ALTER Table DROP Table Typenveränderungen durch den MySQL Optimizer Reihen - Formate (row format) DELETE SELECT JOIN INSERT REPLACE LOAD DATA INFILE UPDATE USE FLUSH KILL SHOW EXPLAIN (Tuning der Geschwindigkeit) DESCRIBE LOCK/UNLOCK von TABELLEN SET OPTION GRANT und REVOKE CREATE INDEX DROP INDEX Comment CREATE FUNCTION/DROP FUNCTION Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 20 Informationen zu den Befehlen unter http://www.php-welt.de 4.3 Erstellen und verwalten von Datenbanken mir ihren Rechten Interaktive Nutzung von mySQL Alle mySQL-Funktionen lassen sich von der Linux-Konsole aus ansprechen. Benutzt haben wir bisher /usr/bin/mysql datenbankname Das Frontend mysql Der Befehl kennt noch den Parameter -u, über den ein Benutzername übermittelt werden kann. Nach der Installation ist nur der Benutzer root eingetragen. Ist man unter Linux auch als root angemeldet, so wird der Benutzername automatisch übernommen, ansonsten muss man das Programm folgendermaßen aufrufen: /usr/bin/mysql datenbankname -u root Nach der Installation ist für den Benutzer root kein Passwort gesetzt, sollte man danach gefragt werden, so langt eine leere Eingabe. Mit diesem Programm kann man alle Funktionen der Datenbank nutzen, die im Abschnitt 3. beschrieben sind. Das Administrationsprogramm mysqladmin Dieses Programm dient dazu die Datenbanken zu steuern. Die meistgenutzten Funktionen hierbei sind die zum Anlegen und Löschen von Datenbanken. Eine neue Datenbank wird angelegt mittels: /usr/bin/mysqladmin create datenbankname Als normaler Benutzer hat man auf diesen Befehl keinen Zugriff, insofern wird man anfangs den Benutzernamen root mit angeben müssen: Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 21 /usr/bin/mysqladmin create datenbankname -u root Löschen kann man eine Datenbank mit: /usr/bin/mysqladmin drop datenbankname bzw. der vollständigeren Version /usr/bin/mysqladmin create datenbankname -u root Nach einer Sicherheitsabfrage wird dann die komplette Datenbank mit allen enthaltenen Tabellen gelöscht. In einem der nächsten Abschnitte wollen wir die Zugriffs-Rechte bearbeiten. Nach einer Änderung an den entsprechenden Tabellen (grant tables) muss man die Datenbank entwerder neu starten mit: /sbin/init.d/mysql restart oder über das Administrationsprogramm mit /usr/bin/mysqladmin relaod -u root die entsprechenden Tabellen neu laden. 4.3 Ausgaben mit mysqlshow Dieses Programm verhält sich je nach Aufruf recht unterschiedlich. Ruft man es ohne weitere Parameter auf: /usr/bin/mysqlshow so zeigt es eine Liste aller angelegten Datenbanken. +-----------+ | Databases | +-----------+ | mysql | | test | +-----------+ Gibt man beim Aufruf einen Datenbanknamen mit an, so erhält man eine Liste aller Tabellen dieser Datenbank. Database: mysql +--------------+ | Tables | +--------------+ | columns_priv | | db | Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 22 | func | | host | | tables_priv | | user | +--------------+ Sollte der Zugriff abgelehnt werden, nach der Installation darf diese Abfrage nur root stellen, so muss wieder der Parameter -u angegeben werden /usr/bin/mysqlshow mysql -u root Gibt man zusätzlich zum Datenbanknamen auch eine Tabelle mit an /usr/bin/mysqlshow mysql db -u root so erhält man die Definition dieser Tabelle als Ausgabe. Database: mysql Table: db Rows: 7 +-----------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+---------------+------+-----+---------+-------+ | Host | char(60) | | PRI | | | | Db | char(32) | | PRI | | | | User | char(16) | | PRI | | | | Select_priv | enum('N','Y') | | | N | | | Insert_priv | enum('N','Y') | | | N | | | Update_priv | enum('N','Y') | | | N | | | Delete_priv | enum('N','Y') | | | N | | | Create_priv | enum('N','Y') | | | N | | | Drop_priv | enum('N','Y') | | | N | | | Grant_priv | enum('N','Y') | | | N | | | References_priv | enum('N','Y') | | | N | | | Index_priv | enum('N','Y') | | | N | | | Alter_priv | enum('N','Y') | | | N | | +-----------------+---------------+------+-----+---------+-------+ Ausgabe von Tabelleninhalten mit mysqldump Mit dem zuletzt angesprochenen Befehl kann man abfragen, welche Tabellen in einer Datenbank vorhanden sind und wie sie definiert sind. Will man auch die Inhalte der Tabellen sehen, so greift man zu /usr/bin/mysqldump mysql db -u root und erhält als Ausgabe die Definition der Tabelle und die Inhalte. Gibt man keine Tabelle an, so erhält man die Ausgabe für alle Tabellen. Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 23 # MySQL dump 5.13 # # Host: localhost Database: mysql #-------------------------------------------------------# Server version 3.22.21 # # Table structure for table 'db' # CREATE TABLE db ( Host char(60) DEFAULT '' NOT NULL, Db char(32) DEFAULT '' NOT NULL, User char(16) DEFAULT '' NOT NULL, Select_priv enum('N','Y') DEFAULT 'N' NOT NULL, Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL, Update_priv enum('N','Y') DEFAULT 'N' NOT NULL, Delete_priv enum('N','Y') DEFAULT 'N' NOT NULL, Create_priv enum('N','Y') DEFAULT 'N' NOT NULL, Drop_priv enum('N','Y') DEFAULT 'N' NOT NULL, Grant_priv enum('N','Y') DEFAULT 'N' NOT NULL, References_priv enum('N','Y') DEFAULT 'N' NOT NULL, Index_priv enum('N','Y') DEFAULT 'N' NOT NULL, Alter_priv enum('N','Y') DEFAULT 'N' NOT NULL, PRIMARY KEY (Host,Db,User), KEY User (User) ); # # Dumping data for table 'db' # INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); INSERT INTO db VALUES ('%','test\\_%','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'); Leitet man die Ausgabe in eine Datei um, so kann man diese als Sicherungskopie verwenden oder damit die Datenbank auf einen anderen Rechner kopieren, da alle Zeilen wie bei der Eingabe aufgebaut sind. Die Rechteverwaltung in mySQL Die Datenbank mySQL verfügt über ein recht ausgefeiltes Berechtigungssystem, das am Anfang oft Probleme bereitet. Seine Benutzerverwaltung ist nahezu unabhängig von der des Linux-Systems. Nach der Installation hat nur der Benutzer „root" Zugriff auf die Datenbank, ein Passwort ist nicht gesetzt. Diese Rechteverwaltung arbeitet mit der Datenbank mysql, die bei der Installation angelegt wird. Innerhalb dieser Datenbank sind vor allem die Tabellen wichtig: Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 24 - db die Datenbanken im System - host die Rechner mit Rechten - user die Benutzer Für eine genaue Beschreibung dieser Tabellen sollte man in die mitgelieferte Dokumentation schauen. Für den normalen Betrieb dürfte es langen die Rechte mit dem Tool mysql_setpermissions einzurichten. /usr/bin/mysql_setpermission -u root Zunächst fragt das Programm nach dem Passwort, danach erscheint ein kleines Textmenü: Password for user root to connect to MySQL: ##################################################################### ## Welcome to the permission setter 1.2 for MySQL. ## made by Luuk de Boer ##################################################################### What would you like to do: 1. Set password for a user. 2. Add a database + user privilege for that database. - user can do all except all admin functions 3. Add user privilege for an existing database. - user can do all except all admin functions 4. Add user privilege for an existing database. - user can do all except all admin functions + no create/drop 5. Add user privilege for an existing database. - user can do only selects (no update/delete/insert etc.) 0. exit this program Make your choice [1,2,3,4,5,0]: Für das Anlegen einer neuen Datenbank mit entsprechenden Privilegien bietet sich der Menüpunkt 2 an. In dem Dialog sind Benutzereingaben fett hervorgehoben. Which database would you like to add: datenbankname The new database kurs will be created What username is to be created: wwwrun Username = wwwrun Would you like to set a password for wwwrun [y/n]: n We won't set a password so the user doesn't have to use it We now need to know from what host(s) the user will connect. Keep in mind that % means 'from any host' ... The host please: localhost Would you like to add another host [yes/no]: yes Okay, give us the host please: % Would you like to add another host [yes/no]: no Okay we keep it with this ... The following host(s) will be used: localhost,%. Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 25 ##################################################################### That was it ... here is an overview of what you gave to me: The database name : kurs The username : wwwrun The host(s) : localhost,% ##################################################################### Are you pretty sure you would like to implement this [yes/no]: yes Okay ... let's go then .. WARNING WARNING SKIPPING CREATE FOR USER 'wwwrun' AND HOST localhost Reason: entry already exists in the user table. WARNING WARNING SKIPPING CREATE FOR USER 'wwwrun' AND HOST % Reason: entry already exists in the user table. Everything is inserted and mysql privileges have been reloaded. Falls eine Fehlermeldungen wie im unteren Teil auftaucht, kann man sie getrost ignorieren. Sie tauchen nur dann auch, wenn der Benutzer schon mit Rechten für eine andere Datenbank eingetragen ist. Als erlaubter Host sollte immer localhost angegeben werden, sonst kann man nicht über den Webserver zugreifen. Soll auch ein Zugriff über einzelne Klienten möglich sein, eventuell über einen ODBC-Treiber und Access, so müssen alle Rechner angegeben werden, im einfachsten Fall über das Jokerzeichen %. Falls der Rechner eine ständige Internetverbindung besitzt, ist das Jokerzeichen riskant, dann sollte man die Rechner konkret angeben. Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 26 5. BEISPIEL SCHWARZES BRETT 5.1 Planung - die Datenbank soll folgende Felder beinhalten Name vom Professor Nachricht vom Professor Von wann bis wann soll die Nachricht publiziert werden Es wird nur eine Tabelle in der Datenbank erstellt, in der werden zwar Namen von Professoren redundant gespeichert, dies spielt aber bei der kleinen Datenbank keine Rolle und ist hier auch nicht Bestandteil des Projektes. - es muss zwei Bereiche im Apache Verzeichnis geben einen geschützten für Professoren und einen freien für Stud. - Design der Pages wird nicht berücksichtigt. Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 27 5.2 Erstellung und Einstellung einer Datenbank mit MySQL Datenbank s_brett wird erstellt bash-2.04# cd /usr/bin/ bash-2.04# mysqladmin -u root create a_brett Database "s_brett" created. bash-2.04# mysqlshow +--------------+ | Databases | +--------------+ | datum | | mysql | | prjojekt2000 | | s_brett | | test | +--------------+ bash-2.04# MySQL wird gestartet und die Datenbank connected bash-2.04# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 to server version: 3.22.32 Type 'help' for help. mysql> connect s_brett Connection id: 4 Current database: s_brett mysql> \s -------------mysql Ver 9.38 Distrib 3.22.32, for suse-linux (i686) Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 28 Connection id: 4 Current database: s_brett Current user: root@localhost Server version 3.22.32 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /tmp/mysql.sock Uptime: 3 min 41 sec Threads: 1 Questions: 7 Slow queries: 0 Opens: 6 Flush tables: 1 Open tables: 2 mysql> Tabelle Nachricht erzeugt und angezeigt mysql> create table nachricht( -> id int not null auto_increment primary key, -> name char(20), -> nachricht text, -> vondatum date, -> bisdatum date); Query OK, 0 rows affected (0.00 sec) mysql> desc nachricht; +-----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+-------------+------+-----+---------+----------------+ | id | int(11) | | PRI | 0 | auto_increment | | name | varchar(20) | YES | | NULL | | | nachricht | text | YES | | NULL | | | vondatum | date | YES | | NULL | | | bisdatum | date | YES | | NULL | | +-----------+-------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec) mysql> quit Bye bash-2.04# Rechte werden für Datenbank s_brett gesetzt bash-2.04# mysql_setpermission Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 29 Password for user to connect to MySQL: ###################################################################### ## Welcome to the permission setter 1.2 for MySQL. ## made by Luuk de Boer ###################################################################### What would you like to do: 1. Set password for a user. 2. Add a database + user privilege for that database. - user can do all except all admin functions 3. Add user privilege for an existing database. - user can do all except all admin functions 4. Add user privilege for an existing database. - user can do all except all admin functions + no create/drop 5. Add user privilege for an existing database. - user can do only selects (no update/delete/insert etc.) 0. exit this program Make your choice [1,2,3,4,5,0]: 3 Which database would you like to select: You can choose from: - s_brett - datum - gerd - mysql - test Which database will it be (case sensitive): s_brett The database a_brett will be used. What username is to be created: wwwrun Username = wwwrun Would you like to set a password for [y/n]: no We won't set a password so the user doesn't have to use it We now need to know from what host(s) the user will connect. Keep in mind that % means 'from any host' ... The host please: localhost Would you like to add another host [yes/no]: yes Okay, give us the host please: % Would you like to add another host [yes/no]: no Okay we keep it with this ... The following host(s) will be used: localhost,%. ###################################################################### That was it ... here is an overview of what you gave to me: The database name : a_brett Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 30 The username : wwwrun The host(s) : localhost,% ###################################################################### Are you pretty sure you would like to implement this [yes/no]: yes Okay ... let's go then ... WARNING WARNING SKIPPING CREATE FOR USER 'wwwrun' AND HOST localhost Reason: entry already exists in the user table. WARNING WARNING SKIPPING CREATE FOR USER 'wwwrun' AND HOST % Reason: entry already exists in the user table. Everything is inserted and mysql privileges have been reloaded. ###################################################################### ## Welcome to the permission setter 1.2 for MySQL. ## made by Luuk de Boer ###################################################################### What would you like to do: 1. Set password for a user. 2. Add a database + user privilege for that database. - user can do all except all admin functions 3. Add user privilege for an existing database. - user can do all except all admin functions 4. Add user privilege for an existing database. - user can do all except all admin functions + no create/drop 5. Add user privilege for an existing database. - user can do only selects (no update/delete/insert etc.) 0. exit this program Make your choice [1,2,3,4,5,0]: 0 Sorry, hope we can help you next time bash-2.04# Nun kann man über das Internet mittels PHP auf die Datenbankzugreifen Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 31 5.3 Programmierung der Seiten für Professoren Die Startseite für den Professor startseite.html Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 32 Quellcode von Startseite vom Professor Aus Übersichtlichkeit werden Format Tags weggelassen Die gilt für alle Quellcodes Grundlegende HTML Kenntnisse werden vorausgesetzt. Alle Dateien liegen im Verzeichnis /htdocs/php/ Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 33 <html> <body > Schwarzes Brett</b></u></font> <FORM ACTION="http://141.69.209.13/php/db_in.php3" METHOD="post"> <select name="name" size=1> <option value="Prof. Usadel">Prof. Usadel <option value="Prof. Hulin">Prof. Hulin <option value="Prof. Keller">Prof. Keller <option value="Prof. Schilling">Prof. Schilling <option value="Prof. Ertel">Prof. Ertel <option value="Prof. Koch">Prof. Koch <option value="Prof. Gamp">Prof. Gampp <option value="Assi">Assi <option value="Sonst">Sonst </select>; <INPUT TYPE="submit" VALUE="Neue Nachricht" style="font-size: 10pt; font-weight: </FORM> <FORM ACTION="http://141.69.209.13/php/antwort.php3" METHOD="post"> <select name="name" size=1> <option value="Prof. Usadel">Prof. Usadel <option value="Prof. Hulin">Prof. Hulin <option value="Prof. Keller">Prof. Keller <option value="Prof. Schilling">Prof. Schilling <option value="Prof. Ertel">Prof. Ertel <option value="Prof. Koch">Prof. Koch <option value="Prof. Gamp">Prof. Gampp <option value="Assi">Assi <option value="Sonst">Sonst </select> <INPUT TYPE="submit" VALUE="Nachricht löschen" style="font-size: 10pt; font-weight: bold; text-decoration: blink"> </FORM> </body> </html> Die Eingabeseite db_in.php3 Hier kann der Professor seine Nachricht verfassen und senden. Alle Aufrufe werden mit der Methode „post“ verschickt. Die Datei bekommt die Variable name übergeben. Man kann im PHP nun auf diese Variable zugreifen Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 34 Quellcode von db_in.php3 <HTML> <BODY> Eintrag in das Schwarzes Brett <FORM ACTION="http://141.69.209.13/php/weg.php3" METHOD="post"> Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 35 <select name="name" size=1> <option value="<? echo "$name"; ?> "><? echo "$name"; ?> </select> </font></b><select name="vonjahr" size=1> <option value="<?echo date ("Y", mktime());?>"><?echo date ("Y", mktime());?> <option value="2001">2001 <option value="2002">2002 <option value="2003">2003 <option value="2004">2004 <option value="2005">2005 <option value="2006">2006 </select> <select name="vonmonat" size=1> <option value="<?echo date ("m", mktime());?>"><?echo date ("m", mktime());?> <option value="1">01 <option value="2">02 <option value="3">03 <option value="4">04 <option value="5">05 <option value="6">06 <option value="7">07 <option value="8">08 <option value="9">09 <option value="10">10 <option value="11">11 <option value="12">12 </select> <select name="vontag" size=1> <option value="<?echo date ("d", mktime());?>"><?echo date ("d", mktime());?> <option value="1">01 <option value="2">02 <option value="3">03 <option value="4">04 <option value="5">05 <option value="6">06 <option value="7">07 <option value="8">08 <option value="9">09 <option value="10">10 <option value="11">11 <option value="12">12 <option value="13">13 <option value="14">14 Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 36 <option value="15">15 <option value="16">16 <option value="17">17 <option value="18">18 <option value="19">19 <option value="20">20 <option value="21">21 <option value="22">22 <option value="23">23 <option value="24">24 <option value="25">25 <option value="26">26 <option value="27">27 <option value="28">28 <option value="29">29 <option value="30">30 <option value="31">31 </select> <select name="bisjahr" size=1> <option value="<?echo date ("Y", mktime());?>"><?echo date ("Y", mktime());?> <option value="2000">2000 <option value="2001">2001 <option value="2002">2002 <option value="2003">2003 <option value="2004">2004 <option value="2005">2005 <option value="2006">2006 </select> <select name="bismonat" size=1> <option value="<?echo date ("m", mktime());?>"><?echo date ("m", mktime());?> <option value="1">01 <option value="2">02 <option value="3">03 <option value="4">04 <option value="5">05 <option value="6">06 <option value="7">07 <option value="8">08 <option value="9">09 <option value="10">10 <option value="11">11 <option value="12">12 </select> <select name="bistag" size=1> <option value="<?echo date ("d", mktime());?>"><?echo date Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 37 ("d", mktime());?> <option value="1">01 <option value="2">02 <option value="3">03 <option value="4">04 <option value="5">05 <option value="6">06 <option value="7">07 <option value="8">08 <option value="9">09 <option value="10">10 <option value="11">11 <option value="12">12 <option value="13">13 <option value="14">14 <option value="15">15 <option value="16">16 <option value="17">17 <option value="18">18 <option value="19">19 <option value="20">20 <option value="21">21 <option value="22">22 <option value="23">23 <option value="24">24 <option value="25">25 <option value="26">26 <option value="27">27 <option value="28">28 <option value="29">29 <option value="30">30 <option value="31">31 </select></p> Nachricht: <TEXTAREA NAME="daten" ROWS=3 COLS=79> </TEXTAREA> <p>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; <INPUT TYPE="submit" VALUE="Senden" style="font-size: 10pt; font-weight: bold; text-decoration: blink"> <INPUT TYPE="reset" VALUE="Verwerfen" style="font-size: 10pt; font-weight: bold"> </FORM> </BODY></HTML> Die Seite weg.php3 Hier wird eine Bestätigung ausgegeben. Es wird in die Datenbank geschrieben, fall nicht erfolgreich Wird ein Fehler ausgegeben. Die Übergabevariablen vonjahr ... bistag werden mit hilfe zu einem String zusammengefügt. Der Name und der Text und die zusammengefügten Strings werden in die Datenbank mit insert into geschrieben Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 38 Die erfolgt in PHP mit dem Punkt. Quellcode von weg.php3 <html> <body > <p><b><font size="5">Danke für Ihren Eintrag <? $vondatum="$vonjahr-"."$vonmonat-"."$vontag"; $bisdatum="$bisjahr-"."$bismonat-"."$bistag"; mysql_connect("localhost"); $activ="1"; Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 39 $result=mysql_db_query("s_brett","insert into nachricht values(NULL,'$name','$daten','$vondatum','$bisdatum')"); if(mysql_errno() ==0): echo "Folgende Daten wurden erfolgreich erfasst"; else: echo "Fehler ".mysql_error(); endif; mysql_close(); ?> </font></b></p> <br><br><br> <p><b><font size="5">Name: <? echo "$name"?></font></b></p> <p><b><font size="5">Nachricht: <? echo "$daten"?></font></b></p> </font></b></p> </body> </html> Die Seite antwort.php3 Dies Seite wird aufgerufen, wenn der Professor auf seiner Startseite auf löschen drückt. Als Übergabe bekommt die Seite seinen Namen, mit dem dann eine Datenbankabfrage gestartet wird, bei dem nur seine Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 40 Nachrichten mit den Datums ausgegeben werden. Jetzt kann er mit Hilfe der ID die Nachricht löschen. Quellcode von antwort.php3 <html> <body > Hallo <? Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 41 echo "$name" ?> , Sie haben folgende Nachrichten am Schwarzen Brett! </font></b></p> <p><b><font size="5"> . <form> <textarea rows=9 cols=80> <? mysql_connect("localhost"); $activ="1"; $result=mysql_db_query("s_brett","select *from nachricht where name='$name'"); $anzahl=mysql_numrows($result); for($i=0;$i<$anzahl;$i++){ $id=mysql_result($result, $i,"id"); $name=mysql_result($result, $i,"name"); $nachricht =mysql_result($result, $i,"nachricht"); $vondatum =mysql_result($result, $i,"vondatum"); $bisdatum =mysql_result($result, $i,"bisdatum"); echo "Nr: $id vom $vondatum bis $bisdatum\n"; echo "$nachricht\n\n\n"; } mysql_close(); ?> </textarea> </form> Bitte die zu löschende ID eingeben <FORM ACTION="http://141.69.209.13/php/del_antwort.php3" METHOD="post"> <Input Name="pid" Type=Text Size=6 maxlenght=6> <input type=hidden name="name" value="<? echo $name?>"> <input type=Submit value="Löschen"> </form> </body> </html> Die Seite del_antwort.php3 Auf dieser Seite wird die Nachricht gelöscht. Es wird eine Sicherheitsabfrage gemacht, ob die ID überhautpt Vorhanden ist und von dem Professor ist der sie löschen will. Wenn eine Nachricht gefunden wird, wird sie gelöscht, Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 42 sonst eine Fehlermeldung ausgegeben. Quellcode von del_antwort.php3 <html> <body > <p><b><font size="5">Der Eintrag mit der PID: <? echo "$pid "; Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 43 mysql_connect("localhost"); $activ="1"; $result=mysql_db_query("s_brett","select *from nachricht where name='$name' and id=$pid"); $anzahl=mysql_numrows($result); if($anzahl ==0): echo "ist entweder nicht vorhanden, oder nicht von Ihnen"; mysql_close(); else: mysql_connect("localhost"); $activ="1"; $result=mysql_db_query("s_brett","delete from nachricht where id=$pid and name='$name'"); if($mysql_errno ==0): echo "wurde erfolreich gelöscht"; else echo "wurde nicht gelöscht"; endif; mysql_close(); endif; ?> </body </html> 5.3 Programmierung der Seiten für Studenten Die Startseite von den Studenten startseite_stud.html Hier können Studenten auswählen, von wem sei eine Nachricht lesen wollen. Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 44 Quellcode von startseite_stud.html <html> <body > <b><font size="6">Schwarzes Brett</font></b><p>&nbsp; <FORM ACTION="http://141.69.209.13/php/antwort_stud.php3" METHOD="post"> Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 45 <select name="name" size=1> <option value="alle">alle <option value="Prof. Usadel">Prof. Usadel <option value="Prof. Hulin">Prof. Hulin <option value="Prof. Keller">Prof. Keller <option value="Prof. Schilling">Prof. Schilling <option value="Prof. Ertel">Prof. Ertel <option value="Prof. Koch">Prof. Koch <option value="Prof. Gamp">Prof. Gamp <option value="Assi">Assi <option value="Sonst">Sonst </select> <INPUT TYPE="submit" VALUE="Lesen" style="font-size: 10pt; font-weight: bold; text-decoration: </FORM> </body> </html> Die Antwortseite für den Studenten antwort_stud.php3 Hier werden die Nachrichten ausgegeben. Als Übergabewert erhält man den Namen Professor oder alle. Somit wird nur die gewünschte Person dargestellt. Mit Hilfe der Variablen „heute“ die mit PHP zusammengesetz Wurde und in der das aktuelle Datum steht, werden dann mit der Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 46 SQL Abfrage nur die Datensätze ausgegeben, die zwischen dem Heutigen Datum liegen. Quellcode von antwort_stud.html <html> <body > <form> <textarea rows=15 cols=80> <? Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 47 $heute=date ("Y-m-d", mktime()); mysql_connect("localhost"); $activ="1"; if($name==alle): $result=mysql_db_query("s_brett","select *from nachricht where vondatum<='$heute' and bisdatum >='$heute'"); $anzahl=mysql_numrows($result); else: $result=mysql_db_query("s_brett","select *from nachricht where name='$name' and vondatum<='$heute' and bisdatum >='$heute'"); $anzahl=mysql_numrows($result); endif; for($i=0;$i<$anzahl;$i++){ $name=mysql_result($result, $i,"name"); $nachricht =mysql_result($result, $i,"nachricht"); $vondatum =mysql_result($result, $i,"vondatum"); echo "$name: Nachricht vom: $vondatum\n"; echo"$nachricht\n\n\n"; } mysql_close(); ?> </textarea> </form> </body> </html> 6. Informationen und Tutorials im Internet Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 48 Hier findet man alles zu apache, PHP und MySQL http://www.php-welt.de http://www.apache.de http://www.php.net Weitere Informationen und Tutorials findet man in der Suchmaschine http://www.google.com oder Mail an [email protected] Projektarbeit WS 2000/2001 von Kuchelmeister Gerd 49