PHP

Willemers Informatik-Ecke

PHP ist eine Programmiersprache, um Webseiten interaktiv zu machen. Wie bei Javascript findet man den Source im HTML, im Unterschied zu diesem wird PHP allerdings auf dem Webserver ausgeführt.

Installation und Konfiguration

PHP wird unter Linux installiert, indem das Paket mod_php für apache installiert wird. In der httpd.conf wird festgelegt, ob und wie PHP ausgeführt wird. Unter S.u.S.E. werden entsprechende Einträge in der httpd.conf bereits gemacht, die unter der Voraussetzung des Defines von PHP ausgeführt werden. Dieser Define wird bei Start des http-Dämons als -D PHP ausgeführt.

Dabei ist noch wichtig, mit welcher Dateiendung Seiten ausgestattet sein müssen, damit auf ihnen PHP-Skripte laufen. Typisch ist .php3 oder auch php.

Erste Schritte

Die folgenden vier Arten gibt das Manual von PHP an, um PHP in HTML-Seiten zu integrieren:

<? echo ("this is the simplest, an SGML processing instruction\n"); ?>

<?php echo("if you want to serve XML documents, do like this\n"); ?>
<script language="php"> echo ("some editors (like FrontPage) don't like processing instructions"); </script>
<% echo ("You may optionally use ASP-style tags"); %> <%= $variable; # This is a shortcut for "<%echo .." %>

PHP ähnelt C. Befehle werden durch Semikolen getrennt und die Kommentare /* */ und // sind ebenfalls bekannt. Hinzu kommt der # aus den Shellsprachen. Variablen werden durch ein vorangestelltes $-Zeichen gekennzeichnet und erhalten ihren Typ durch Zuweisung eines Wertes.

Auswertung eines Formulars

Besonders einfach ist die Auswertung von Formularen in PHP. Zunächst muss ein Formular erstellt werden. Als Aktion des Formulars wird eine weitere PHP-Webseite angegeben. Jedes der Eingabeelemente erhält dabei einen Namen. Diese Namen können auf der aufgerufenen PHP-Webseite direkt als PHP-Variablen ausgelesen werden.

<FORM ACTION=verarbeite.php METHOD=POST>
<INPUT TYPE="TEXT" NAME="name" SIZE=30>
<BR>Per Mail versenden
<INPUT TYPE="checkbox" NAME="versenden">
<BR>
<INPUT TYPE="SUBMIT" VALUE="Abschicken">
</FORM>

Bei Betätigung des Submit-Buttons wird die Seite verarbeite.php aufgerufen. Hier stehen die Variablen name und versenden zur Verfügung.

<?php
  echo ("Name: $name <BR>");
  echo ("Versenden: $versenden <BR>");
  if ($versenden=="on") {
    echo ("mach mail auf");
    mail("arnold@localhost", "Betreff: PHP-Test",$name);
  }
?>

PHP 5.0 liest die übergebenen Variablen nicht direkt, sondern verwendet ein assoziatives Array namens $_POST, bei dem der Variablenname als Index verwendet wird. Das obige Beispiel muss dann so aussehen:

<?php
  echo ("Name: $_POST['name'] <BR>");
  echo ("Versenden: $_POST['versenden'] <BR>");
  if ($_POST['versenden']=="on") {
    echo ("mach mail auf");
    mail("arnold@localhost", "Betreff: PHP-Test",$_POST['name']);
  }
?>

Die Funktion mail sendet Nachrichten per E-Mail. Der erste Parameter ist die E-Mailadresse, der zweite der Betreff (subject) und der dritte Parameter enthält den Inhalt der Mail.

Anstatt das Formular und die Bearbeitung in zwei Dateien aufzuteilen, kann dies auch in einer Seite erledigt werden. Dazu kann gleichzeitig die Fehlerbehandlung durchgeführt werden. Die Grundidee besteht darin, dass das Formular in einer Textvariablen abgelegt wird. In einer Variablen, die wir hier firsttime nennen, wird festgehalten, ob die Seite das erste Mal aufgerufen wird und entsprechend angezeigt werden muss. Die action im Formular zeigt auf die eigene Datei namens checkform.php.

<html>
<head> <title>checkform.php</title> </head>
<body>
<?PHP
// Das Formular wird in der Variablen $form abgelegt
$form="
<form action=\"checkform.php\" method=\"post\">
<input type=\"hidden\" name=\"firsttime\" value=\"y\">
<input type=\"text\" name=\"name\" size=\"20\" maxlength=\"20\" value=\"\"><br>
<input type=\"submit\" value=\"Ok\">
</form>
";

// Erst wenn das Formular erstmals angezeigt wurde, wird firsttime definiert
// PHP 4.0
// if ($firsttime!="y"):
// PHP 5.0
if ($_POST['firsttime']!="y"):
    print "$form";
else:
    $error="n";
    if ($_POST['name']=="") :
        print "<font color=\"red\">Name fehlt</font><br>";
        $error="y";
    endif;
    if ($error=="y") :
       print "$form";
    else :
       print "Alles prima!";
    endif;
endif;

?>
</body>
</html>

An der Stelle, wo "Alles prima!" angezeigt wird, ist die Bearbeitung korrekt. Es kann hier beispielsweise eine Mail mit dem Inhalt abgesetzt werden oder zur nächsten Seite weitergeleitet werden.

Datenbankanschluss an MySQL

Im Beispiel soll auf eine MySQL-Datenbank zugegriffen werden. Die Aufrufe erinnern ein wenig an die C-API.

int mysql_connect(string [hostname][:port], 
                  string [username], string [password]);
int mysql_close(int [link_identifier] );

Mit mysql_connect wird die Verbindung zur Datenbank aufgebaut. Die Verbindung wird mit mysql_close wieder beendet.

int mysql_db_query(string database, string query, int [link_identifier] );

Mit mysql_db_query kann ein SQL-Kommando an die Datenbank übermittelt werden. Der Rückgabewert ist das Handle auf eine Ergebnismenge, das mit entsprechenden Routinen ausgelesen wird.

array mysql_fetch_row(int result);

Mit mysql_fetch_row wird Zeile für Zeile das Ergebnis in ein Array gelesen, das die Spalten einer Zeile darstellt.

Das folgende Beispiel nimmt eine Verbindung zur lokal eingerichteten Datenbank auf und liest aus der Tabelle customer alle Zeilen und stellt sie im Browser in einer Tabelle dar.

<script language="php">
// Versuche auf die DB zuzugreifen
$dbhandle = mysql_connect("localhost", "arnold", "geheimespasswort");
$dbresult = mysql_db_query("test_arnold", "select * from customer", $dbhandle);
echo "Das ist das Ergebnis:<table border> ";
while ($row = mysql_fetch_row($dbresult)) {
  echo "<tr><td>",$row[0],"</td><td>", $row[1], "</td></tr>";
}
echo "</table>";
mysql_close($dbhandle);
</script>

Literaturhinweise

Thomas Theis: PHP 4 Webserver-Programmierung für Einsteiger
W.J. Gilmore: PHP 4 professionell

Homepage (C) Copyright 2001, 2008 Arnold Willemer