#! /perl/5.00502/bin/MSWin32-x86-object/perl -w # /usr/local/bin/perl #use strict; my(%fields); my($sec, $min, $hour, $mday, $mon, $year) = (localtime(time))[0..5]; $year += 1900; my($dataFile) = "/inetpub/wwwroot/eco/cgi-bin/DATA/gestbook.dat"; $mon = zeroFill($mon, 2); $hour = zeroFill($hour, 2); $min = zeroFill($min, 2); $sec = zeroFill($sec, 2); $fields{'timestamp'} = "$mon/$mday/$year, $hour:$min:$sec"; getFormData(\%fields); if ($ENV{'QUERY_STRING'}) { if ($ENV{'QUERY_STRING'} eq 'display') { displayPage(); } elsif ($ENV{'QUERY_STRING'} eq 'add') { print("Location: /eco/addgest.htm\n\n"); } else { displayError("Unknown Command: $ENV{'QUERY_STRING'}"); } } else { if (length($fields{'name'}) == 0) { displayError("Вы незаполнили обязательное поле: ФИО,
\n"); } if (length($fields{'work'}) == 0) { displayError("Вы незаполнили обязательное поле: Должность,
\n"); } if (length($fields{'comments'}) == 0) { displayError("Вы незаполнили обязательное поле: Коментарии,
\n"); } saveFormData(\%fields, $dataFile); displayPage(); } exit(0); sub displayError { print("Content-type: text/html\n\n"); print("\n"); print("Гостевая книга - Ошибка\n"); print("

Гостевая книга

\n"); print("
\n"); print("@_
\n"); print("
\n"); printENV(); print("\n"); print("\n"); exit(0); } sub displayPage { my($hashRef) = shift; my($file) = shift; open(FILE, $dataFile) or die("Cannot open file data: " . $dataFile); @lines=; print("Content-type: text/html\n\n"); print("\n"); print("Гостевая книга\n"); print("
\n"); print("

Гостевая книга


\n"); print("
\n"); print("

Добавить запись

\n"); #print("
  • Обновить #print("\n"); print("

    \n"); #print("
    \n"); for ($i=$#lines; $i>=$[; $i--) #обрабатываем строки файла c конца { # Разделяем строку на части @item=split('~', $lines[$i]); #разделяем на части print("

    $item[0]: $item[1], $item[2], $item[3], $item[4]


    \n"); #ФИО, должность, город print("

    $item[5]

    \n"); print("

    \n"); } print("\n"); print("\n"); close FILE; } sub readFormData { my($file) = shift; my($hashRef) = shift; open(FILE, "<$file") or displayError("Невозможно открыть файл с данными"); while () { my($timestamp, $name, $email, $comments) = split(/~/, $_); $hashRef->{$timestamp} = [ $name, $email, $comments ]; } close(FILE); } sub getFormData { my($hashRef) = shift; my($buffer) = ""; if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; } else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } foreach (split(/&/, $buffer)) { my($key, $value) = split(/=/, $_); $key = decodeURL($key); $value = decodeURL($value); $value =~ s/(

    \s*)+/

    /g; # compress multiple

    tags. $value =~ s//>/g; $value =~ s/<b>//ig; # turn on the bold tag. $value =~ s!</b>!!ig; $value =~ s/<i>//ig; # turn on the italic tag. $value =~ s!</i>!!ig; $value =~ s!\cM!!g; # Remove unneeded carriage returns. $value =~ s!\n\n!

    !g; # Convert 2 newlines into paragraph. $value =~ s!\n! !g; # convert newline into space. %{$hashRef}->{$key} = $value; } } sub decodeURL { $_ = shift; tr/+/ /; s/%(..)/pack('c', hex($1))/eg; return($_); } sub zeroFill { my($temp) = shift; my($len) = shift; my($diff) = $len - length($temp); return($temp) if $diff <= 0; return(('0' x $diff) . $temp); } sub saveFormData { my($hashRef) = shift; my($file) = shift; open(FILE, ">>$file") or die("Невозможно открыть файл с данными."); print FILE ("$hashRef->{'timestamp'}~"); print FILE ("$hashRef->{'name'}~"); print FILE ("$hashRef->{'email'}~"); print FILE ("$hashRef->{'work'}~"); print FILE ("$hashRef->{'town'}~"); print FILE ("$hashRef->{'comments'}~"); #$host = $ENV{REMOTE_HOST}; #print FILE ("$host"); print FILE ("\n"); close(FILE); } sub printENV { print "The Environment report
    \n"; print "----------------------

    \n";
    
        print "REQUEST_METHOD:  *$ENV{'REQUEST_METHOD'}*\n";
    
        print "SCRIPT_NAME:     *$ENV{'SCRIPT_NAME'}*\n";
    
        print "QUERY_STRING:    *$ENV{'QUERY_STRING'}*\n";
    
        print "PATH_INFO:       *$ENV{'PATH_INFO'}*\n";
    
        print "PATH_TRANSLATED: *$ENV{'PATH_TRANSLATED'}*
    \n"; if ($ENV{'REQUEST_METHOD'} eq 'POST') { print "CONTENT_TYPE: $ENV{'CONTENT_TYPE'}
    \n"; print "CONTENT_FILE: $ENV{'CONTENT_FILE'}
    \n"; print "CONTENT_LENGTH: $ENV{'CONTENT_LENGTH'}
    \n"; } print("
    "); foreach (sort(keys(%ENV))) { print("$_: $ENV{$_}
    \n"); } print("
    "); foreach (sort(keys(%fields))) { print("$_: $fields{$_}
    \n"); } print("
    "); }