Geschrieben von fuzzykiller am 19.05.2004, 19:56

Zur besseren Verständnis sollte ma rudimentäre Perl-Kenntnisse haben.
Und ja, ich weiß dass der Code besser sein könnte :D
#!/usr/bin/perl

use CGI::Carp "fatalsToBrowser";

###################################
# Formulardaten holen #
###################################

read(STDIN, my $Daten, $ENV{'CONTENT_LENGTH'});

my @Formularfelder = split(/&/, $Daten);
my ($Feld, $Name, $Wert);
my %Formular;
foreach $Feld (@Formularfelder) {
(my $Name, my $Wert) = split(/=/, $Feld);
$Wert =~ tr/+/ /;
$Wert =~ s/%3C/</g;
$Wert =~ s/%3E/>/g;
$Wert =~ s/%0D/ /g;
$Wert =~ s/%0A/<br>\n/g;
$Wert =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$Formular{$Name} = $Wert;
}

###################################
# Datum und Uhrzeit- string #
###################################

# Zeitverschiebung in Stunden vom Nullmeridian aus gerechnet
my $zone = +2;

my $timestamp = gmtime((time()+($zone*3600)));

###################################
# Prüfen ob Fremdaufruf #
###################################

if(not exists $Formular{"user"}){die "\n---Abbruch wegen Fremdaufruf---\n";}
if($Formular{"user"} eq ""){die "\n---Kein Name eingegeben---\n";}

########################################
# wenn zu groß, alte Seite aus- #
# lagern und link in die history-liste #
# einfügen #
########################################

my $Datei = "../htdocs/noticeboard.htm";
my @Info = stat($Datei);
my $altegbseite = time();

# wenn Datei größer als 25kb:

if( $Info[7] > 25000 )
{
# Datei rüberkopieren

open(DATEI, "<$Datei");
open(GB, ">../../www/session_a/gb/gbhistory/$altegbseite.htm");

while(! eof(DATEI)) {
my $Zeichen = getc(DATEI);
print GB "$Zeichen";

}
close(DATEI);
close(GB);

# aktuelle Seite leeren

open(DATEI, ">$Datei");
close(DATEI);

# link hinzufügen

open(DATEI, ">>../../www/session_a/gb/history.htm");

print DATEI '<table width=600 align=center border="0" bgcolor=#F0F0F0 >',"\n";
print DATEI '<tr>',"\n";
print DATEI '<td>',"\n";
print DATEI '<p align="center" ><a href="gbhistory/',$altegbseite,'.htm">Einträge bis ',$timestamp,'</a></p>',"\n";
print DATEI '</td>',"\n";
print DATEI '</tr>',"\n";
print DATEI '</table><br>',"\n";

close(DATEI);

}

###################################
# noticeboard in temp auslagern #
###################################

open(DATEI, "<$Datei");
open(TEMP, ">temp.dat");

while(! eof(DATEI)) {
my $Zeichen = getc(DATEI);
print TEMP "$Zeichen";

}
close(DATEI);
close(TEMP);

###################################
# Neue Seite Erstellen #
###################################

open(DATEI, ">$Datei");

#print DATEI "daten";

print DATEI "\n\n\n <!-- NEUER EINTRAG -->\n\n\n";

print DATEI "<html><head><title>Gästebuch</title><!--nobanner--></head>","\n";
print DATEI "<body>","\n";
print DATEI '<div style="border-width:1;">',"\n";
print DATEI "<font face=Arial>\n";
print DATEI '<table width=600 align=center border="0" bgcolor=#F0F0F0 >',"\n";
print DATEI "<tr>","\n";
print DATEI "<td >","\n";

print DATEI '<p align="left">Von: ',$Formular{user},'</p>',"\n";

print DATEI "</td>","\n";
print DATEI "<td>","\n";

print DATEI '<p align="right">',$timestamp,'</p>',"\n";

print DATEI "</td>","\n";
print DATEI "</tr>","\n";
print DATEI "<tr width=600 >","\n";
print DATEI '<td colspan="2">',"\n";

print DATEI '<p>Email: <a href="mailto:',$Formular{mail},'">',$Formular{mail},'</a></p>',"\n";

print DATEI "</td>","\n";
print DATEI "</tr>","\n";
print DATEI "<tr>","\n";
print DATEI '<td colspan="2">',"\n";

print DATEI '<p>Homepage: <a href="',$Formular{page},'" target="new">',$Formular{page},'</a></p>',"\n";

print DATEI "</td>","\n";
print DATEI "</tr>","\n";
print DATEI '<tr><td colspan="2"><hr color="#E0E0E0" style="height:5px;"></td></tr>',"\n";
print DATEI "<tr>","\n";
print DATEI '<td colspan="2">',"\n";

print DATEI "<p>",$Formular{comment},"</p>","\n\n";

print DATEI "<!--IP: ",$ENV{HTTP_CLIENT_IP},"-->","\n\n";

print DATEI "</td>","\n";
print DATEI "</tr>","\n";

print DATEI "</table>","\n";
print DATEI "</div>","\n";
print DATEI "<br>","\n";
print DATEI '<table width=600 align=center border="0" bgcolor=#F0F0F0 >',"\n";
print DATEI "<tr>","\n";
print DATEI "<td>","\n";
print DATEI '<p align="center" ><a href="sign.htm">Neuen Eintrag verfassen</a></p>',"\n";
print DATEI "</td>","\n";
print DATEI "</tr>","\n";
print DATEI "</table>","\n";
print DATEI "<br>","\n";
print DATEI "</body>","\n";
print DATEI "</html>","\n";

###################################
# Daten von TEMP einfügen #
###################################

open(TEMP, "<temp.dat");

while(! eof(TEMP)) {
my $Zeichen = getc(TEMP);
print DATEI "$Zeichen";

}

close(TEMP);

close(DATEI);

###################################
# Seite mit Link ausgeben #
###################################

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
print "<html><head><title>Relink</title><!--nobanner-->\n";
print '<META HTTP-EQUIV=Refresh CONTENT="0; URL=../noticeboard.htm"></head>',"\n";
print "<body>";
print '<br><br><br><br><br><hr><a href="../noticeboard.htm"><p align="center"><b>Fertig. Hier gehts weiter!</b></p></a>';
print "<hr></body></html>\n";

Soviel zum Perl-Teil, ich denk, des is ausreichend gut kommentiert :D

Die HTML-Seiten kann ma sich selbst nach Bedarf erstellen.
die Felder müssen 'user', 'mail', 'page' und 'comment' heißen.
UNBEDINGT kleinschreiben.

Bewertung Anzahl
6
40,0 %
4 Bewertungen
5
30,0 %
3 Bewertungen
4
10,0 %
1 Bewertungen
1
20,0 %
2 Bewertungen