Einführung in die Erstellung dynamischer
Webseiten mit PHP und MySQL
1. Den Rechner vorbereiten:
Als Server
für die folgenden Übungen diente ein Windows XP Rechner, auf dem ein Apache 2.2.4 Webserver,
ein MySQL
5.0.45 Datenbankserver und ein PHP 5.2.3 installiert wurden.
Eintrag
in der lokale Hosts Datei:
192.168.2.104
www.rose.com
MySQL
Zugang: root / root123
Datenbankname:
rose
2. Die PHP Konfigurieren:
PHP
Konfiguration erfolgt ausschließlich in der:
C:\Program
Files\PHP\php.ini
Folgende
Einstellungen müssen gemacht werden:
Fehlerausgabe von PHP auf den
Browser des Clients aktivieren, d.h
auf die Webseite auf der wir unsere Skripte testen:
In der C:\Program
Files\PHP\php.ini den Wert display_errors = Off auf "On" stellen.
Das Kürzel <? ?>
aktivieren. Sonst funktioniert nur <?php ?>
In der C:\Program
Files\PHP\php.ini den Wert short_open_tag = Off auf "On" stellen.
Das Globale Variablen aktivieren
In der C:\Program
Files\PHP\php.ini den Wert register_globals = Off auf "On" stellen.
Alle
anderen Optionen blieben auf "default".
Um die Änderungen
zu Übernehmen, muß der Apache Service restartet
werden.
3. PHP Testen:
Jetzt soll
getestet werden, die PHP Installation korrekt durchgelaufen ist (was selten der
Fall ist).
Dafür schreiben wir gleich unser erstes PHP-Script.
Tippen Sie folgen den Code in einen Texteditor und speichern die Datei als phpinfo.php unter Webroot ab.
Die
Funktion phpinfo(), wird dem PHP- Programm
mitgeliefert und erzeugt eine hübsch formatierte Systemübersicht. Für uns ist
wichtig, daß es einen Block mit der Bezeichnung "mysql"
gibt.
Wenn
dieser Block nicht vorhanden ist, bekommt das PHP keine Verbindung zum MySQL-Server. PHP- Skripte die auf die noch anzulegende
Datenbank zugreifen müssen bringen in diesem Fall nur einen weißen Monitor.
Bei
mit hat das PHP einigen Dateien nicht gefunden obwohl sie korrekt im Suchpfad
standen.
Lösung
bei mir, für php-5.2.3 und MySQL 5.0.45:
1)
Die Dateien libmysql.dll und php_mysql.dll nach C:\WINDOWS\system32 kopiert.
2)
Apache + MySQL Dienst rebootet.
3)
phpinfo.php aufgerufen und überprüfen ob der MySQL Block da.
4. Ein erstes einfache Skript
schreiben:
Nun können
wir unser erstes Skript schreiben. Traditionell fangen wir mit der Textausgabe
"Hello World" an.
Tippen Sie
folgende Zeilen in den Texteditor und speichern Sie die Datei als hello-world.php unter Webroot ab.
Die
Webseite zeigt "Hello World".
Schauen Sie
sich nun den Html Code dieser Seite um Browser an.
Im Internet
Explorer 7.0 ist das unter View -> Source möglich.
<HTML>
Hello
World
</HTML>
Es wird nur
der HTML-Code angezeigt. Das passiert weil das PHP- Skript, HTML- Code erzeugt
und diesen dann an den Browser weitergibt. Der PHP- Code wird generell nicht im
Browser angezeigt.
Beachten
Sie die <?php und ?> Begrenzungszeichen.
Diese Begrenzer markieren den PHP- Code und sagen dem
PHP, daß alles innerhalb der Begrenzer als PHP- Code
interpretiert werden muß. Alles vor oder hinter den <?php und ?> Zeichen ist HTML Code.
5) Eine MySQL Datenbank unter Windows erstellen:
Den "MySQL Command Line Client" aufrufen unter
Start ->
Programme -> MySQL -> MySQL Server 5.0 -> MySQL Command
Line Client
Zugangsdaten
für die Testumgebung:
User: root
Paßwort:
root123
Datenbankname:
rose
Datenbank
Ort: localhost
- Mit Paßwort einloggen
- Datenbank erstellen:
create databaserose;
- Auf Datenbank verbinden:
connect rose;
- Eine Tabelle erstellen:
CREATE TABLE personnel
(
id int NOT NULL AUTO_INCREMENT,
firstname varchar(25),
lastname varchar(20),
nick varchar(12),
email varchar(35),
salary int,
PRIMARY KEY (id),
UNIQUE id (id)
);
UNIQUE in der Spaltendefinition sorgt dafür, daß ein Wert nur 1x in der Spalte vorkommt.
INSERT INTO personnel
VALUES ('1','John','Lever','John','john@everywhere.net','75000');
INSERT INTO personnel
VALUES ('2','Camilla','Anderson','Rose','rose@flower.com,','66000');
INSERT INTO personnel
VALUES ('3','Karin','Bauer','Mausi','bauer@flower.com,','46000');
INSERT INTO personnel
VALUES ('4','Monika','Schmidt','Moni','moni@schmidt.de,','39000');
INSERT INTO personnel
VALUES ('5','Susanne','Huber','Susi','susi@huber.com,','56000');
- Tabelleninhalt anzeigen:
select * from personnel;
+----+-----------+----------+-------+-------------------------------+-------
+
| id | firstname | lastname | nick | email | salary |
+----+-----------+----------+-------+-------------------------------+---------+
| 1 | John
| Lever | John | john@everywhere.net | 75000 |
| 2 | Camilla
| Anderson | Rose |
rose@flower.com, |
66000 |
| 3 | Karin
| Bauer
| Mausi | bauer@flower.com, | 46000 |
| 4 | Monika
| Schmidt | Moni | moni@schmidt.de, |
39000 |
| 5 | Susanne | Huber | Susi |
susi@huber.com, |
56000 |
+----+-----------+----------+-------+-------------------------------+--------+
6) PHP Befehle:
Variablen in PHP definieren:
In PHP wird
eine Variable definiert, indem man ein "$" davor schreibt. Die
Zeichenfolge nach dem "$" ist der Name der Variablen (z.B.: $db)
Wir weisen der Variablen einen Wert zu, indem wir in den Code schreiben:
$variable_name=somevalue; (example:
$count=4;)
Zeilenende in PHP:
Alle Zeilen
die von PHP ausgeführt werden sollen, müssen mit ";" abgeschlossen werden.
isset
if (isset($submit)) Diese
Funktion liefert TRUE, wenn die Variable oder das
Array-Element $submit existiert, sonst FALSE
MySQL Befehle:
mysql_connect("localhost", "user", "passwort") stellt eine Verbindung zur Datenbank her.
mysql_select_db ("rose",$db); Wählt die Datenbank (=rose) aus. In $db stehen die Zugangsdaten.
mysql_query( ) Liest eine Tabelle aus
mysql_fetch_array( ) liest eine Tabelle, die in einer Variablen hinterlegt ist, zeilenweise aus und weist sie dem Array
$myrow[] zu.
Layout:
Werte untereinander ausgeben:
Das Kommando .$myrow["firstname"] <br>liest aus der Spalte "firstname" den Wert aus und macht einen
Zeilenumbruch. Man beachte den Punkt vor .$myrow
Werte hintereinander ausgeben:
Das Kommando .$myrow["firstname"]..$myrow["lastname"].
liest aus der Spalte "firstname" und "lastname"
die Werte aus und schreibt sie hintereinander. Man beachte den Punkt
vor und nach .$myrow.
Werte hintereinander in eine Tabelle schreiben:
Aus der Variablen $result Werte auslesen und in Tabelle schreiben: echo "<TR><TD>".$myrow["firstname"]." ".$myrow["lastname"]."<TD>".$myrow["nick"]."<TD>".$myrow["email"]."</TD></TR>";
echo "<TR><TD>" Generiert den Anfang einer Reihe und die Erste Zelle. Dann wird die Ausgabe von
.$myrow["firstname"]." ".$myrow["lastname"].
in die erste Zelle geschrieben. Zwischen den " " ist ein Blank, das die beiden
Ausgaben in der Zelle trennt. <TD>
springt in die nächste Zelle und schreibt
die Ausgabe von
.$myrow["nick"].
.Dann
geht es mit dem nächsten "<TD>"
weiter zur nächsten Zelle
und
.$myrow["email"].]
wird geschrieben.
"</TR></TD>" schließt die Reihe ab.
Generell muß alles was mit Layout zu tun hat, im PHP-Code in
Gänsefüßen (" ")stehen. Auch ein Blank das zwischen Gänsefüßen
steht wird als Blank ausgegeben.
7) Eine HTML Tabelle erstellen:
Alle Zellen
werden von links nach rechts belegt. Das Beispiel zeigt nur den einfachsten
HTML-Code. Durch Formatierungen kann der Code fast beliebig größer und
unlesbarer werden.
Schreiben
Sie folgende Zeilen in einem Texteditor und speichern ihn dann als viewdb-first.php
unter Webroot ab:
viewdb-first.php:
<HTML>
<?php
/*Verbindung zur Datenbank
aufbauen und die
Variable $db mit den Zugangsdaten belegen
-Datenbankort-Username-Paßwort */
$db = mysql_connect("localhost",
"root", "root123");
/*
Die Datenbank auswählen und sich mit den Zugangsdaten aus $db darauf verbinden */
mysql_select_db("rose",$db);
/*Der
gesammte Inhalt der Tabelle "personnel" wird ausgelesen und an die Variable "$result" übergeben*/
$result = mysql_query("SELECT * FROM personnel",$db);
/*HTML-
Tabelle erstellen*/
echo "<TABLE>";
/*Spaltenbezeichnungen
der HTML- Tabelle erstellen*/
echo"<TR><TD><B>Full Name</B><TD><B>Nick Name</B><TD><B>Salary</B></TR>";
/*
Die while Schleife liest aus $result
solange die Spalten aus, bis sie leer ist*/
while ($myrow = mysql_fetch_array($result))
{
echo
/* gibt aus der Spalte mit der Bezeichnung "firstname"
die Werte aus*/
/* da "firstname" zuerst ausgelesen wird, wird es
auch in die erste Spalte der HTML Tabelle geschrieben*/ echo $myrow["firstname"];
/*Erzeugt Leerzeichen in der HTML Tabelle zwischen "firstname"
und "lastname"*/
echo " ";
/*
gibt aus der Spalte mit der Bezeichnung "lastname"
die Werte aus und schreibt*/
/*sie
in die erste Spalte der HTML-Tabelle hinter "firstname"*/
echo $myrow["lastname"];
/*Ende
der ersten Spalte der HTML-Tabelle*/
echo "<TD>";
/*
gibt aus der Spalte mit der Bezeichnung "nick" die Werte*//
/*in
die zweite Spalte der HTML-Tabelle aus*/
echo $myrow["nick"];
/*Ende
der zweiten Spalte der HTML-Tabelle*/
echo "<TD>";
/*
gibt aus der Spalte mit der Bezeichnung "salary"
die Werte*/
/*in
die dritte Spalte der HTHL-Tabelle aus*/
echo $myrow["salary"];
/*Ende
der drittenn Spalte der HTML-Tabelle*/
/*Ende
der while-Schleife*/ }
Wenn
beim ausführen des Skriptes nichts angezeigt wird, hat das PHP keinen Zugang
auf die MySQL Datenbank!
Wie funktioniert der Code und was
hat er generiert?
Wir belegen
die Variable $db mit den Zugangsdaten zur Datenbank.
$db = mysql_connect("localhost",
"root", "root123");
In Worten
heißt das: verbinde dich auf den MySQL- Server "localhost"
mit Benutzernamen "root" und Paßwort
"root123"
Als
nächstes verbinden wir uns auf die Datenbank "rose". Mithilfe der
Zugangsdaten die in $db hinterlegt sind: "mysql_select_db("rose",$db);"
Die
Datenbank lesen wir mit folgenden Zeilen aus:
"$result
= mysql_query("SELECT * FROM personnel",$db);"
Die
Anweisung "SELECT * FROM personnel" ist ein
SQL Statement, das alle Informationen aus der Tabelle "personnel"
in die Variable $result schreibt.
Jetzt
können wir über die Variable $result auf alle Spalten
und Zeilen der Tabelle zugreifen
Die
Funktion function mysql_fetch_array()
extrahiert die Spalten aus $result und weist sie der
Variablen $myrow zu.
Die
Anweisung "echo $myrow["firstname"];"
bedeutet: hole den Inhalt der ersten (,2.,3.,. .) Zelle,
der Spalte mit der Bezeichnung "firstname" und
weise sie der Variablen $myrow; zu.
Die while() Schleife wiederholt die Abfrage zwischen den { } so oft, bis $result
leer ist.
9) Daten über
ein HTML Formular hinzufügen
Zuerst
generieren wir das HTML-Formular datain.html
<HTML>
<form method="post" action="datain.php">
First name:<input type="Text"
name="first"><br>
Last name:<input type="Text"
name="last"><br>
Nick Name:<input type="Text"
name="nickname"><br>
E-mail:<input type="Text"
name="email"><br>
Salary:<input type="Text"
name="salary"><br>
<input type="Submit" name="submit" value="Enter information">
</form>
</HTML>
Ausgabe der
datain.html:
First name:
Last name:
Nick Name:
E-mail:
Salary:
method="post" hier wird
eingetragen, ob die Daten über das Formular (=post) oder optional über
einen Link (=get) übergeben werden.
action="datain.php" hier wird das Skript
eingetragen, an das die Variablen übergeben werden. Sollen die Daten an
das eigene Skript zurückgeliefert werden, trägt man den Scriptnamen ein,
under dem man das Skript abspeichet.
Optional kann auch die globale Variable "PHP_SELF"
hierfür verwendet werden. Aus Sicherheitsgründen sind globale Variablen
in der php.ini standardmäßig deaktiviert.
Damit die
Eingaben in dem Formular auch in die Datenbank geschrieben werden, muß das
Formular mit einem entsprechenden Skript hinterlegt werden. Hierfür schreiben
wir das Skript datain.php.
Die ersten
drei Spalten sind die Gleichen wie zuvor in der viewdb-first.php
Um in die
Datenbank zu schreiben, benötigen wir das SQL-Kommando "INSERT INTO":
In Worten
heißt das:
schreibe in
die Tabelle "personnel", in die Spalten mit
der Bezeichnung (firstname, lastname,
nick, email, salary) die
Daten, die in den Variablen '$first','$last','$nickname','$email','$salary')";
hinterlegt sind.
Wo kommen die Variablen her?
PHP hat die
Eigenschaft, Variablen automatisch zu erzeugen, wenn diese mit Daten belegt
werden.
Daher
erzeugt die Textbox mit Namen "first" eine
Variable $first, wenn Daten in die Textbox
geschrieben werden.
Jetzt bauen
wir die beiden Skripte zu einem funktionstüchtigem "Einfügeskript"
zusammen:
Dieses
Script zeigt ein Formular, wenn keine Daten vorhanden sind, andernfalls werden
die Daten an die Datenbank geschrieben.
Woher
weiß das Script was gerade zu tun ist?
Wir haben
gerade gelernt daß PHP automatisch Variablen generiert, sobald Daten an sie
übergeben wurden.
So wird die
Variable $submit generiert sobald das Formular
angezeigt wird. Wenn $submit existiert und einen Wert
enthält werden die Daten in die Datenbank geschrieben, ansonsten ist das
Formular anzuzeigen.
Über das viewdb-first.php
Skript, können wir feststellen ob Daten eingefügt wurden.
10. Datenübergabe mit einem Link (method="get")
Es gibt
zwei Möglichkeiten Daten zu übergeben. Die eine ist läuft wie wir gerade
gesehen haben über Formulare, die andere über Query-Strings (=Links). Hierfür
setzen wir das method- Attribut des Formulars auf GET.
Sollen jetzt Werte an die Datenbank
übergeben werden, geschieht das, indem die Variable und dessen Wert an die URL angehängt
wird.
Ändern Sie
in dem input.php Script den String method="post" zu method="get"
und speichern Sie es als input-get.php
ab.
Jetzt
werden die Informationen über einen String in der URL übergeben und nicht
direkt über das Formular.
Der Teil
nach dem
? ist der "Query-String", und wie Sie sehen enthält er alle Variablennamen und deren Inhalt. Wenn PHP einen Query-String
wie ?first=Gerhard
bekommt, erzeugt es automatisch eine Variable mit Namen $first und weißt Ihm
den entsprechenden Wert (in unseren Fall "Gerhard") zu. Wenn mehr als
eine Variable übergeben wird, der den diese mit einem
&
verbunden.
11) Einzelne Reihen anzeigen
Jetzt
schreiben wir ein Script, das individuelle Reihen anzeigt.
Die Tabelle
wird aufgrund der Variablen $id durchsucht und die
entsprechende Reihe angezeigt.
Speichern
Sie das Script unter dem Namen view-id.php und rufen
es über den Webbrowser auf.
Hier wurde
das SQL Kommando so abgeändert, daß die Datenbank anhand der Variablen $ID
durchsucht wird.
Können mehrere Zeilen die gleiche ID
haben?
Generell
kann eine Zeile jeden beliebigen Wert enthalten, auch gleiche Werte. Aber in
unserer Tabelle, kann die Spalte mit der ID nur unterschiedliche Werte enthalten,
da wir beim Erstellen der Tabelle die Spalte als UNIQUE definiert haben.
12) Zwei Spalten anzeigen und den Rest über
einen Link aufrufen
Wir
schreiben jetzt unser viewdb-id.php Script so um, daß
alle Vor- und Nachname angezeigt werden. Der Rest der Daten
soll durch anklicken eines Links angezeigt werden.
viewdb-all-id.php:
<HTML>
<?php
/*
Zugangsdaten zur Datenbank*/
$db = mysql_connect("localhost", "root",
"root123");
/*Baut
die Verbindung zur Datenbank "rose" mit den Zugangsdaten aus $db auf*/
mysql_select_db("rose",$db);
/*Die
gesamte Tabelle wird ausgelesen und an die Variable
$result übergeben*/
$result = mysql_query("SELECT
* FROM personnel",$db);
/*
html Tabelle wird erzeugt*/
echo
"<TABLE BORDER=2>";
/*die
Spalten werden benannt*/
echo"<TR><TD><B>Full Name</B><TD><B>Nick Name</B><TD><B>Options</B></TR>";
/*
mysql_fetch_array holt die Daten zeilenweise aus $result und übergibt die Zeile an $myrow)
*/
while ($myrow = mysql_fetch_array($result))
{
/* Die Spalte aus der Tabelle "rose"
wir von Links nach Rechts ausgelesen und in dieser Reihenfolge */
/* in die zuvor erzeugte Tabelle geschrieben
*/
echo "<TR><TD>".$myrow["firstname"]."
".$myrow["lastname"]."<TD>".$myrow["nick"];
/*ein Link mit Namen "View" wird aus der "viewdb-id.php?id="
generiert*/
echo "<TD><a href=\"viewdb-id.php?id=".$myrow["id"]."\">View</a>";
Die erste
Spalte zeigt $firstname $lastname,
die zweite Spalte gibt $nick aus. In der dritten Zeile steht ein Hyperlink.
Dieser verweist auf http://www.rose.com/view-all-id.php?id=xx
. Beim anklicken wird die viewdb-id.php mit der
jeweiligen $id aufgerufen
Zwei
Variablen in eine Zelle schreiben?
echo "<TR><TD>".$myrow["firstname"]." ".$myrow["lastname"]."<TD>".$myrow["nick"];
Hier werden
zwei Variabeln, der Vor- und Nachname durch einen Punkt am Ende der Variablen
zu einem Wert zusammengefügt.
Sollen beide Ausgaben in unterschiedliche Zellen geschrieben werden, muß der String so ausschauen:
echo "<TR><TD>".$myrow["firstname"]."<TD>".$myrow["lastname"]."<TD>".$myrow["nick"];
13. Daten löschen
Das Löschen
Skript ist genau so aufgebaut wie das viewdb-id.php
Skript. Statt der " SELECT * FROM
" Anweisung wird einfach eine "DELETE
FROM" Anweisung eingesetzt. Durch Eingabe der Variablen $id wird die zu löschende Zeile ausgewählt.
Das SQL
Kommando zum Auswählen und Löschen von Zeilen ist: DELETE FROM
Tabellenname WHERE Spaltenbezeichnung=Zelleninhalt (somevalue)
delete.php:
<HTML>
<?php
$db = mysql_connect("localhost", "root",
"root123");
mysql_select_db("rose",$db);
mysql_query("DELETE
FROM personnel WHERE id=$id",$db);
echo
"Information Deleted";
?>
</HTML>
Wir bauen
jetzt unsere viewdb-id.php und delete.php
so in einem Script zusammen, daß der Name angezeigt wird. Die kompletten
Informationen werden durch den klick auf einen Link sichtbar. Der gesamte Datensatz
kann ebenfalls durch klick auf einen Link gelöscht werden.
view-delete.php:
<HTML>
<?php
$db = mysql_connect("localhost", "root",
"root123");
mysql_select_db("rose",$db);
$result = mysql_query("SELECT
* FROM personnel",$db);
echo
"<TABLE BORDER=2>";
echo"<TR><TD><B>Full Name</B><TD><B>Nick Name</B><TD><B>Options</B></TR>";
while ($myrow = mysql_fetch_array($result))
{
echo
"<TR><TD>".$myrow["firstname"]." ".$myrow["lastname"]."<TD>".$myrow["nick"];
//*Der
Link zum Löschen wird Mithilfe der view-id.php
erzeugt*//
echo
"<TD><a href=\"viewdb-id.php?id=".$myrow["id"]."\">View</a>
";
//*Der
Link zum Löschen wird Mithilfe der delete-id.php
erzeugt*//
echo
"<a href=\"delete.php?id=".$myrow["id"]."\">Delete</a>";
}
echo
"</TABLE>";
?>
</HTML>
Schaut
kompliziert aus, ist es aber nicht.
Das bereits
erstellte input.php Skript hat 2 Eigenschaften:
Es kann das
Formular anzeigen und in die Datenbank schreiben.
Wir fügen
jetzt noch 2 Features hinzu:
Nämlich das
Formular mit bereits vorhandenen Daten anzeigen und bereits vorhandene Daten zu
editieren.
Das Script sucht nach der
Variablen $submit. Ist diese vorhanden werden
die Daten in die Datenbank geschrieben.
Ist $submit
leer sucht das Skript die $update Variable. Ist diese vorhanden, wird der
entsprechende Eintrag geändert. Wenn nicht, dann wird nach der Variablen $id gesucht.
Ist $id
vorhanden, geht das Update Formular mit den entsprechenden Daten auf.
Ist $id
auch nicht vorhanden, geht das Submit- Formular auf und es können neue
Daten eingetragen werden.
Wird das
Skript ohne Optionen über
http://www.rose.com/addedit.php
aufgerufen,
springt es
in das Eingabeformular. Werte die hier eingegeben werden, werden mit dem "Submit-Knopf" die Daten an die $submit
Variable übergeben und die Datenbank geschrieben.
16) Lesen, Ändern, Löschen von Einträgen.
Wir bauen jetzt die bereits erstellet Scripte viewdb-id.php, delete.php und
addedit.php so zusammen, daß lesen, löschen und ändern in einem Skript möglich
ist.
Zum Schluß schreiben wir jetzt noch ein Skript das die Datenbank durchsucht.
Die Seite wird anfangs ein leeres Formular anzeigen. Nach der Eingabe und
Übernahme der zu suchenden Daten zeigt das Formular die vollständigen Daten an.
search.php:
<HTML> <?php
if (isset($searchstring))
{
$sql="SELECT * FROM personnel WHERE $searchtype LIKE '%$searchstring%'
ORDER BY firstname ASC";
$db = mysql_connect("localhost", "root", "root123");
mysql_select_db("rose",$db);
$result = mysql_query($sql,$db);
echo "<TABLE BORDER=2>";
echo"<TR><TD><B>Full Name</B><TD><B>Nick Name</B><TD><B>eMail</B><TD><B>Options</B></TR>";
Das Skript überprüft ob der Suchstring existiert. Wenn die Variable $searchstring
einen Wert enthält, wird die Suche ausgeführt. Wenn nicht, wird das Suchformular
angezeigt.
Das SQL Kommando für die Suche ist:
"SELECT * FROM personnel WHERE $searchtype LIKE '%$searchstring%' ORDER BY
firstname ASC"
Zwei neue SQL Befehle kamen jetzt hinzu, "LIKE" und "ORDER BY".
LIKE sucht eine beliebige Buchstaben und / oder Zahlenkombination. Das '%'
vor und nach dem String heißt, daß alles was vor und nach dem Suchstring nicht
mehr beachtet wird.
'ORDER BY' ordnet die Ausgabe in aufsteigender oder absteigender Richtung.
ASC (ASCending) aufsteigend und DES (DESCending) absteigend.
Noch ein Tipp:
Wenn das Script im PHP -Teil hängen bleibt
kann man untenstehenden String an mehreren Stellen einfügen.
Wo die Testausgabe nicht mehr
erscheint, "hängt" das Skript.