Anbindung an eine MySQL

Werbung
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>        <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> 
<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
Herunterladen