#!/usr/bin/perl -w
use CGI;
use CGI::Carp qw(fatalsToBrowser);
$q = CGI::new();
$datafile="data.txt";
$smilyDir="../smilys/";
@alteEintraege=();
@neuerEintrag=();
$anzahlEintraege=0;
$time=0;
@smilyCommands=(':\)',':\(',':D',':mad:',';\)',':P',':rolleyes:',':cool:',':confused:',':eek:',':angry:',':smoke:',':beer:',':yeah:');
@smilyGifs=('happy.gif','sad.gif','laughin.gif','mad.gif','blink.gif','haha.gif','rolleyes.gif','cool.gif','confused.gif',
'eek.gif','angry.gif','smoke.gif','beer.gif','yeah.gif');
$name=$q->param("name");
$email=$q->param("email");
$url=$q->param("url");
$beitrag=$param("beitrag");
if($name eq "" || $beitrag eq "")
{
print "Content-type: text/html";
print "
Error";
print "";
print "";
print "Fehler: es wurde kein Name oder kein Betragstext eingegeben!";
print "
";
print "";
print "";
}
else
{
open(FILE,"<".$datafile) || die "Fehler beim Öffnen der Datei data.txt";
flock(FILE,1);
@alteEintraege=;
close(FILE);
$anzahlEintraege=&getNumberOfEntries(@alteEintraege);
&filterHTML($name,$email,$url,$beitrag);
&setSmilyTags($beitrag);
$time=&getTime;
++$anzahlEintraege;
push(@neuerEintrag, "\n");
push(@neuerEintrag, "\n");
push(@neuerEintrag, "$name schrieb am $time: |
\n");
push(@neuerEintrag, "\n");
#wenn Format der E-Mail Adresse korrekt
if(($email =~ /^([a-zA-Z0-9][a-zA-Z_0-9-\.]*)(\@)([a-zA-Z0-9][a-zA-Z_0-9-\.]*[a-zA-Z0-9])(\.)([a-zA-Z0-9]*)$/)){
push(@neuerEintrag, " \n");
}
#wenn Format der URL korrekt
if($url=~/^http:\/\/[a-zA-Z0-9][a-zA-Z_0-9-\.]*(\.)[a-zA-Z0-9][a-zA-Z_0-9-\.]*/)
{
push(@neuerEintrag, " \n");
}
push(@neuerEintrag, " | $beitrag\n");
push(@neuerEintrag, " |
\n");
push(@neuerEintrag, "
\n");
unshift(@alteEintraege, @neuerEintrag);
open(FILE,">".$datafile) || die "Fehler beim Öffnen der Datei data.txt";
flock(FILE,2);
foreach(@alteEintraege)
{
print FILE $_;
}
close(FILE);
}
###Subroutines
sub getNumberOfEntries
{
$number=0;
@zeilen=@_;
foreach(@zeilen)
{
if(/\n/)
{
$number=$1;
last;
}
}
return $number;
}
sub filterHTML
{
foreach(@_)
{
$_ =~ s/<[^>]*?>//g; #HTML filtern
$_ =~ s///g; #SSI und Script Tags filtern
$_ =~ s/"/"/g; #Anführungszeichen " zu "
$_ =~ s/\r//g; #Returns (Wagenrücklauf) entfernen
$_ =~ s/\n/
/g; #Zeilenumbruch zu
umwandeln
}
}
sub setSmilyTags
{
for($zaehler=0;$zaehler<@smilyCommands;$zaehler++)
{
$ersatztext="";
if($beitrag=~/$smilyCommands[$zaehler]/)
{
$ersatztext="
";
$beitrag=~s/$smilyCommands[$zaehler]/$ersatztext/gi;
}
}
}
sub getTime
{
($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
$Monat+=1;
$Monat = $Monat < 10 ? $Monat = "0".$Monat : $Monat;
$Monatstag = $Monatstag < 10 ? $Monatstag = "0".$Monatstag : $Monatstag;
$Stunden = $Stunden < 10 ? $Stunden = "0".$Stunden : $Stunden;
$Minuten = $Minuten < 10 ? $Minuten = "0".$Minuten : $Minuten;
$Jahr+=1900;
return "$Monatstag.$Monat.$Jahr um $Stunden:$Minuten Uhr";
}