#!/usr/bin/perl #!perl #require "parse.pl"; use lib qw/./; use parse; $data='../dat'; &ReadConfig; #$max_records_display=5; #$pass=''; #$FORM{'pass'}=''; #$FORM{'id'}=0; &parse_form; # if ($FORM{'a'} eq 'view') { &view } if ($FORM{'a'} eq 'add') { &add } elsif ($FORM{'a'} eq 'delete') { &delete } elsif ($FORM{'a'} eq 'login') { &login } elsif ($FORM{'a'} eq 'admin') { &admin } elsif ($FORM{'a'} eq 'change') { &change } else { require "vote.pl"; &view; #print "Error"; } sub BeginHTML { print "Content-type: text/html\n\n"; #print "Guest book"; #print ""; for (my $n=0;$n<$place;$n++) {print $html[$n];} } sub EndHTML { print ""; for (my $n=$place;$n<@html;$n++) { $html[$n] =~ s //$out_htm/; print $html[$n]; } } sub view { &BeginHTML; open GDB, "$data/guest.dat"; $cid=0; while (($time=)&&($cid<$FORM{'id'}+$max_records_display)) { chomp $time; $name=; chomp $name; $email=; chomp $email; $s=; chomp $s; if ($cid>=$FORM{'id'}) { &get_date($time); if ($email) {$sign=qq{$name};} else {$sign=$name;} print qq{
$sign     :     $date
   $s
}; } $cid++; } if ($time ne '') {print "Дальше";} close GDB; print <
ОСТАВИТЬ СООБЩЕНИЕ
Ваше имя
e-mail
Сообщение
EOF &EndHTML; } sub add { #print "Content-type: text/html\n\n"; &post_error("Необходимое поле `Имя` не заполнено.") unless($FORM{'name'}); # &post_error("Необходимое поле `E-Mail` не заполнено.") unless($FORM{'email'}); &post_error("Пустое сообщение.") unless($FORM{'message'}); my $GDB=local *GDB; # get_file_lock("$data/guest.lock"); # rename "$data/guest.dat", "$data/guest.dat.bak"; flop $GDB, "+<$data/guest.dat"; my @bak=<$GDB>; seek $GDB,0,0; # close BAK; # open GDB, ">$data/guest.dat"; $nn=$FORM{'message'}; $nn =~ s/`/\'/g; $nn =~ s/\&/\&/g; $nn =~ s/"/\"/g; #$nn =~ s/ / \ /g; $nn =~ s//>/g; $nn =~ s/\t/ \  \  \ /g; $nn =~ s/\n\n/

/g; $nn =~ s/\n/
/g; $nn =~ s/\{br\}/
/g; $nn =~ s/\cM//g; $FORM{'name'} =~ s//>/g; $FORM{'email'} =~ s/[^a-zA-Z.\@_0-9-]//g; print $GDB time."\n$FORM{'name'}\n$FORM{'email'}\n$nn\n"; print $GDB @bak; truncate $GDB, tell $GDB; flcl $GDB, "$data/guest.dat"; # open BAK, "$data/guest.dat.bak"; # @bak=; # close BAK; # print GDB @bak; # close GDB; # unlink("$data/guest.dat.bak"); # &release_file_lock("$data/guest.lock"); print "Location: /cgi-bin/guest.cgi?a=view\n\n"; } ######################################################## sub change { if ($FORM{'pass'} ne $pass) { &BeginHTML; print "В доступе отказано."; &EndHTML; } else { if ($FORM{'maxrec'}) { $max_records_display=$FORM{'maxrec'}; #get_file_lock("$data/guest.cfg.lock"); my $CFG=local *CFG; flop $CFG, ">$data/guest.cfg"; print $CFG "$max_records_display\n"; flcl $CFG, "$data/guest.cfg"; # close CFG; # &release_file_lock("$data/guest.cfg.lock"); &view; } else { &BeginHTML; print "Данные не введены."; &EndHTML; } } } ######################################################## sub login { if ($FORM{'pass'} ne $pass) { &BeginHTML; print "Доступ запрещен."; &EndHTML; } else { &BeginHTML; print <
Макс. кол-во сообщений на экране

EOF &EndHTML; ##&delete; } } sub admin { &BeginHTML; print <
Пароль

EOF &EndHTML; } sub delete { &BeginHTML; if ($FORM{'pass'} ne $pass) { print "В доступе отказано."; return} #####======================================================= @ks=keys(%FORM); $sk=join (';',@ks); if ($sk=~/(;cb\d+)(;|$)/) { my $GDB=local *GDB; # get_file_lock("$data/guest.lock"); # rename "$data/guest.dat", "$data/guest.dat.bak"; flop $GDB, "+<$data/guest.dat"; my @BAK=<$GDB>; seek $GDB,0,0; $cid=0; $n=0; #open BAK, "$data/guest.dat.bak"; while ($n<@BAK) { $time=$BAK[$n++]; chomp $time; $name=$BAK[$n++]; chomp $name; $email=$BAK[$n++]; chomp $email; $s=$BAK[$n++]; chomp $s; if ($FORM{"cb$cid"} ne "1") { print $GDB "$time\n$name\n$email\n$s\n"; } # $time= # chomp $time; # $name=; chomp $name; # $email=; chomp $email; # $s=; chomp $s; # if ($FORM{"cb$cid"} ne "1") { # print GDB "$time\n$name\n$email\n$s\n"; # } $cid++; } truncate $GDB, tell $GDB; flcl $GDB, "$data/guest.dat"; # close BAK; # close GDB; # unlink("$data/guest.dat.bak"); # &release_file_lock("$data/guest.lock"); } ####====================================================== open GDB, "$data/guest.dat"; $cid=0; print < EOF while (($time=)&&($cid<$FORM{'id'}+$max_records_display)) { chomp $time; $name=; chomp $name; $email=; chomp $email; $s=; chomp $s; if ($cid>=$FORM{'id'}) { &get_date($time); print ""; print "$date
\n"; print "$name
"; print "$s
\n"; } $cid++; } if ($time ne '') {print "Дальше";} close GDB; #------------------------------------------------------- print < Закончить режим администрирования EOF #------------------------------------------------------- &EndHTML; } ############################################# ## ## Config ## sub ReadConfig { open CFG,"$data/guest.cfg"; $max_records_display=; close CFG; open CFG,"$data/pass.cfg"; $s=; $s=; ($pass,$nochop)=split /``/, $s; close CFG; chomp $max_records_display; chomp $pass; open HTML, "../guestbook.htm"; @html=; close HTML; $place=0; for ($n=0;$n<@html;$n++) { $place=$n+1 if ($html[$n]=~//); } } ##################################################################### ### ### GET DATE (date) ### ############### sub get_date { my $tm=@_[0]; @days = ('Воскресение','Понедельник','Вторник','Среда','Четверг','Пятница','Суббота'); @months = ('январь','февраль','март','апрель','май','июнь','июль', 'август','сентябрь','октябрь','ноябрь','декабрь'); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($tm); #if ($hour < 10) { $hour = "0$hour"; } $m=$mon+1; if ($m < 10) { $m = "0$m"; } if ($min < 10) { $min = "0$min"; } if ($sec < 10) { $sec = "0$sec"; } #$date = "$days[$wday], $months[$mon] $mday, ".(1900+$year)." в $hour\:$min\:$sec"; $date = "$mday.$m.".(1900+$year)." в $hour:$min"; } sub post_error { local($e) = @_; &BeginHTML; print "
\n"; print "

Ошибка размещения

\n"; print "
\n"; print "Ошибка размещения вашего сообщения:

\n"; print "$e

\n\n"; print "Вы можете нажать кнопку 'Назад' вашго обозревателя, чтобы исправить ошибку.

\n"; print "

\n"; print "
"; print "
\n"; &EndHTML; exit; }