cgicorner.ch

Informationen rund um Perl/CGI

Sie sind hier: Home > CGI Hilfe > Tutorial > Kapitel 9a - Schwarzes Brett

Tutorial - Kapitel 9a: Beispiel: virtuelles schwarzes Brett

Voraussetzungen für dieses Kapitel

  • Webserver mit Perl/CGI-Unterstützung

Source-Code inkl. Erklärungen

Die Erklärungen zu diesem Script sind direkt im Sourcecode. Es empfiehlt sich, dieses Script einmal auf dem Webserver laufen zu lassen, um seine genaue Funktion zu erkennen. Bei allfälligen Fragen können Sie in den entsprechenden Kapiteln des Tutorials sicher eine Antwort finden.

brett.cgi

#!/usr/bin/perl
# Beispiel-Script: virtuelles schwarzes Brett
# Kommentare befinden sich direkt im Source-Code
# Autor: Jürg Sommer / Letzte Änderung: 16. August 2003

# Dateiname der Datendatei (hierhin werden die Einträge gespeichert) festlegen.
my $dataFile="data.dat";

# HTML-Grundgerüst für Seite
print "Content-type: text/html\n\n";
print "<html><head><title>virtuelles schwarzes Brett</title>\n";
print "<style type=\"text/css\">body {font-family:Verdana,sans-serif;}</style>\n";
print "</head><body>\n";
print "<h1>virtuelles schwarzes Brett</h1>\n";

# Formulardaten einlesen
my %FORM;
&readForm;

# Kommentar übergeben? Wenn ja: abspeichern
if ($FORM{"texteingabe"} ne "") {

  # Datei zum schreiben öffnen (anhängen)
  open(FILE,">>".$dataFile);

  # Zeilenumbrüche löschen.
  # Regular Expression. Wird zu einem späteren Zeitpunkt erläutert
  # Syntax in Kürze: Variable =~ s/suchen/ersetzen/parameter;
  $FORM{"texteingabe"} =~ s/\r//g;
  $FORM{"texteingabe"} =~ s/\n//g;

  # $FORM{"texteingabe"} in Datei schreiben
  print FILE "$FORM{texteingabe}\n";

  # Datei schliessen
  close(FILE);
}


# überprüfen, ob Datei schon existiert
if (-e $dataFile) { # Datei existiert

  # Datei zum lesen öffnen. Dateihandler: FILE
  open(FILE,$dataFile);

  # Datei zeilenweise verarbeiten:
  while (<FILE>) {
    # Trennlinie <hr> und dann die aktuelle Zeile ausgeben
    print "<hr>$_\n";
  }

  # Trennlnie <hr> am Schluss
  print "<hr>\n";
} else { # Datei existiert nicht

  # Text ausgeben
  print "<hr>Es sind noch keine Einträge vorhanden...<hr>";
}

# HTML-Text für neuen Eintrag
print "<br/><br/>Verfassen Sie einen neuen Eintrag! HTML-Code erlaubt.";

# Formular für neue Eingabe erstellen.
$ENV{SCRIPT_NAME} enthält Pfad und Name zum CGI-Script
print "<form action=\"$ENV{SCRIPT_NAME}\" method=post>";
print "<textarea name=\"texteingabe\" cols=50 rows=5></textarea><br>";
print "<input type=submit value=\"Text abschicken\" />";

# HTML-Seite abschliessen
print "</body></html>";


###########################################################################
sub readForm {					# Parameter in %FORM einlesen
  my ($buffer,@pairs,@pair,$i);
  if ($ENV{'REQUEST_METHOD'} eq "GET") {
    $buffer = $ENV{'QUERY_STRING'};
  } else {
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  }
  @pairs = split(/&/, $buffer);
  foreach (@pairs) {
    @pair = split(/=/, $_, 2);
    for ($i=0;$i<2;$i++) {
      $pair[$i] =~ tr/+/ /;
      $pair[$i] =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    }
    $FORM{$pair[0]} = $pair[1];
  }
}

Wie geht's weiter?

Nachdem Sie dieses Beispiel genauer betrachtet haben, können Sie wieder zurück zum Kapitel 9 des Tutorials.