<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>psoper.php<?php echo $parsed ?></TITLE>
<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=ISO-8859-1">
</HEAD>
<BODY BGCOLOR="#EEEEF5">

<?php 
/******************* File psoper.php ******************* 30.11.2000/vo *****
 * 
 * Dieses File besteht aus HTML-Code und PHP-Sprachelementen:
 *
 *      1. HTML-Code mit Document Type Definition und HEAD-Tag
 *      2. Definition einiger Subroutinen in PHP:
 *         printheader(), printfooter(), error()
 *      3. eigentlicher Kernel des PHP-Programms
 *         fuer die Datenverarbeitung d.h. Datenabfrage, 
 *         einschliesslich Plausibilitaet mittels ereg() 
 *      4. HTML-Code mit dem interaktiven Formular (FORM-Tag)
 *
 * Das Demo-Programm psoper.php sucht nach einem PS-Operator 
 * in einer kleinen "Datenbank" und gibt die Kurzbeschreibung zurueck.
 *
 *
 * Dynamische Seiten mit php:
 * Das Programm soll zeigen, wie die Namen der Formularfelder 
 * der Folgeseite als entsprechende PHP-Variablen zur Verfuegung stehen,
 * z.B. $oper
 *       Konfiguration register_globals=on vorausgesetzt.
 */

// "Datenbank" d.h. einfaches File enthaelt 228 Eintraege von Operatoren
// Dateiname ist eine globale Variable
   
$dboper "/usr/local/info-sys/www/id/publications/ps/operatoren"

// Achtung
// PHP im Safe Mode, d.h. obige Datei muss dem Owner des Skripts
//              gehoeren.

/************************************** Subroutinen *********************
 * 
 * Kopf bzw. Fuss  
 */

function printheader() {

// Kopfzeile
// File mit Firmenlogo einlesen

   
$curDir dirnamegetenv"SCRIPT_FILENAME" ) ); 
      
virtual("/includes/header2.html");
   
chdir$curDir );

}

function 
printfooter() {

// HTML-Fuss
// mit aktuellem Datum und Link fuer allfaellige Rueckfragen  
// mit Funktion date()

   
virtual("/includes/foot_nav_php.html");

   
$date date("d.m.Y"getlastmod());

   print 
"<I>Last update: $date/<A HREF=\"http://www.id.unizh.ch/home/rzuvo/\">vo</A></I>\n";
   print 
"</BODY>\n";
   print 
"</HTML>\n";
}

// Aufruf, let's go
printheader();
?>

<DIV ALIGN="CENTER">
<H3>Die wichtigsten PostScript-Operatoren
    <BR>&nbsp;<?php echo $parsed ?></H3>

<?php 

/************************************** Subroutine *********************
 * Fehlermeldung    */

function error() {
   print 
"<H3>Formular nicht korrekt ausgef&uuml;llt</H3>";
   print 
"<P>Bitte vollst&auml;ndig ausf&uuml;llen.</P>";
   
$error=0;   
}
    

/*************************************** Kernel *************************
 *
 * die eigentliche Verarbeitung: die eingegebenen Daten werden
 *     verarbeitet, nachdem das Formular ausgefuellt worden ist: 
 *     Datenabfrage d.h. Query
 */
 
// Plausibilitaet testet die eingegebenen Daten

if ($parsed != "") { 
/**************************************** Plausibilitaet ****************
 */

   
$oper $_GET['oper'];

   
// regulaere Ausdruecke, regular expressions
   // mit Funktion ereg()

   
if (! ereg("^[A-Za-z0-9=%_]+$"$oper)) {
    
$error=1;
    }    
   
// die eingegebene Zeichenkette muss im wesentlichen alfanumerisch sein.

   
if ($error)  
      { 
   
// Fehlermeldung
      
error(); 
   }
   else
      {
   
// Formular vollstaendig ausgefuellt; also Resultat anzeigen ...
      
print "<P>\n";
      print 
"</DIV>\n";
      
/************************************* Datenabfrage d.h. Query ***********
 *                      
 * "Datenbank" einlesen, PS-Operator suchen und
 *  Beschreibung des PostScript-Operators anzeigen
 *                      
 */

      
$zaehler 0
      
$fp=fopen("$dboper","r");

      while (
$val=fgets($fp,160)) {
   
// Daten
   //       zeilenweise einlesen

     
if ($zaehler == 1) {
   
// Ende der Definition List
         
print $val
         print 
"</DL>\n"
         
$zaehler=2
         }

     if (
ereg($oper$val)) {
   
// Operator gefunden, Beginn der Definition List 
   // Operator steht rechts der Operatoren
         
print "<DL>\n"
         print 
$val;
         
$zaehler=1
         }
         }
      
fclose($fp); 
 
      if (
$zaehler == 0) {
     print 
"Operator $oper nicht vorhanden<P ALIGN=\"RIGHT\">\n"
     print 
"Siehe <A HREF=\"http://www.id.unizh.ch/publications/ps/PSeinfach.php\">Einfache PostScript-Beispiele</A>\n"
      } 

      print 
"<P>\n";

      
printfooter();
   
// Ende der Verarbeitung
      
exit;
   }
/********************************** Ende Kernel *************************
 parsed ok

 */
}

/********************************** interaktives Formular ***************
 *
 * unten folgt das interaktive HTML-Formular ... 
 * Dabei werden die Variablen als "oper" etc.
 * angesprochen.
 * Schliesslich kann der Klient den Submit-Button druecken (Abschicken).
 * Die Namen der Formularfelder stehen der Folgeseite als entsprechende
 * PHP-Variablen (mit Dollarzeichen) zur Verfuegung (siehe Verarbeitung).  
 *
 * Vorteile von PHP gegenueber Perl:
 *   
 * - Austausch von Informationen ueber mehrere Webseiten hinweg:
 *   im Gegensatz zur Perl-Programmierung muessen die Uebergabewerte
 *   in PHP nicht erst umstaendlich entschuesselt und in Variablen
 *   abgelegt werden. Sie stehen als PHP-Variablen sofort z. Verfuegung.   
 * - Es ist einfacher, Skript und Formular in einer einzigen Datei
 *   zu haben; und der Code ist meiner Meinung nach uebersichtlicher.
 * - Sie brauchen keine Server-Berechtigungen, um das Skript abzulegen.
 * - Datenbankanbindung und Erzeugen von Bildern, und weitere 
 *   Funktionen... 
 */  
?>

<FORM method=GET action="psoper.php">

<!--
Nun kommt wieder HTML-Code, d.h. das Formular mit
  diversen Eingabe-Feldern (input)
  sowie einem Select-Menu (select) fuer die Auswahl aus der Farbpalette
-->

<INPUT TYPE="hidden" NAME="parsed" VALUE=" (Resultat)">

Geben Sie den Namen eines PostScript-Operators ein,
z.B. <em>dict</em> oder <em>%%Page</em>. 
<PRE> 
PostScript-Operator: <input name=oper size=15 value="<?php echo $oper ?>">
   <input type=hidden name=action value="Abfrage starten">
   <input type=submit value="Abfrage starten">
   <input type=reset value="Formular zur&uuml;cksetzen">
</PRE> 

</FORM>
</DIV>
Siehe <A HREF="psoper.phps">Quellencode</A>.

<?php 
// Aufruf
printfooter();

/********************************** Ende Formular ************************
 *
 * Beachten Sie, dass beim erstmaligen Aufruf von psoper.php
 * noch keine Daten uebergeben werden; im Gegensatz zu den Daten,
 * die nach dem Ausfuellen des Formulars vom Klienten an den WWW-Server
 * zurueckgehen. Beispiel:
 *   
 *    oper=exch&submit=Abschicken 
 *
 * Die beiden Methoden GET und POST der Datenuebergabe stammen aus 
 * der UNIX-Welt. Die Methode POST liest vom Standard Input.
 * Die Methode GET verwendet fuer die Datenuebernahme jedoch eine
 * ENVIRONMENT-Variable.
 * Bei beiden Methoden besteht der Datenstrom aus einzelnen Datenfeldern,
 * die mittels "&" voneinander getrennt sind, s. Beispiel. 
 *   
 */
?>