Надеюсь сильно пинать не будете? :) Вот написал скриптик маленький, хочется исправить пару недочетов, ну и сами посмотрите может чего добавить? :) Это пока токо администрирование, сам скрипт приема голосов выложу чуть позже...:)
Для его успешной работы хватит лишь положить в папку cgi-bin, и добавить папку data. Ну и ессесно прописать ХТМЛ адресс.
1.При авторизации, если оставить поле "пароль" пустым, и отправить запрос, выдает ошибку. В чем дело?
2.Проблема с куками, в начале каждой функции приходится вставлять "print header(-charset=>\'windows-1251\')". Можно ли как-нибудь это дело исправить?
3.Можно даже ко 2-му отнести, опять куки и хидер, если куки уже установлены, и заходить с начала скрипта(авторизация). Происходит редирект на главный раздел, но там уже стоит хидер, и перед самой таблицей выходит надпись print header(-charset=>\'windows-1251\')...
4.Может у кого-нибудь есть какие-нибудь предложения о безопасности скрипта, а то вставлять проверку на куки в каждой функции - изврат :)
----
#!/usr/bin/perl -w
####################################
#by Frodo[mW] | frodo@hotbox.ru    #
####################################
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI qw(:all);
my $pass="68qsa";                            # Пароль для доступа к Администрированию.
my $url="
http://mindworx.com/cgi-bin/v";     # Адресс сайта и путь к скрипту, НЕ ставте в конце слэш!
my($data,$ras,$full,$cook) =("./data",".dat","full.cat");
if (!param)                                         {&ident;}
elsif (param(\'passw\'))                              {&checkpass;}
elsif (param(\'action\') eq "new")                    {&new;}
elsif (param(\'id\'))                                 {&createfile;}
elsif (param(\'action\') eq "red")                    {&read;}
elsif (param(\'file\'))                               {&readfile;}
elsif (param(\'add\'))                                {&add;}
elsif (param(\'kod\'))                                {&kod;}
elsif (param(\'dlinagrafa\') && param(\'sirinagrafa\') && param(\'knopka\')) {&save;}
sub ident {
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){&work;}
else{
print header(-charset=>\'windows-1251\');
print <
| Vote by [mW] | 
| Пожалуйста пройдите авторизацию, для администрированияголосованием.
 (Обязательно должны быть включены cookie).
 | 
|  | 
EOF
}}
sub checkpass {
if ($pass ne param(\'passw\')){&ident;}
else {
$cook=cookie(-name => "mwvote",
             -value => "$pass",
             -expires => "+1h");
print header(-cookie => $cook,
             -charset=>\'windows-1251\');
&work;
}}
sub work{
print header(-charset=>\'windows-1251\');
print <
| Создание, Редактирование и Удаление Голосований.
 
 | 
|  | 
|  | 
|  | 
|  | 
EOF
}
sub new{
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){
print header(-charset=>\'windows-1251\');
print <
EOF
}
else{&off;}
}
sub createfile{
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){
print header(-charset=>\'windows-1251\');
my $file=param(\'id\');
if(-e "$data/$file$ras"){err(1);}
elsif(!($file=~ /^[a-z0-9_]+$/)){err(2);}
elsif(length($file)>20){err(3);}
else{
my @add2file;
open (FILE, ">>$data/$full") || die "Ошибка при записи файла: $!";
print FILE "$file\\n";
close FILE;
$add2file[0]="100\\n";
$add2file[1]="8\\n";
$add2file[2]="Ответить\\n";
$add2file[3]="yes\\n";
$add2file[4]="yes\\n";
$add2file[5]="Что вы думаете об этом скрипте ?\\n";
$add2file[6]="Хорош=0\\n";
$add2file[7]="Можно и лучше..=0\\n";
open (FILE, ">$data/$file$ras") || die "Ошибка при записи файла: $!";
print FILE @add2file;
close FILE;
print <
EOF
}}
else{
print header(-charset=>\'windows-1251\');
print "Пройдите авторизацию!\\n";
}}
sub read{
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){
print header(-charset=>\'windows-1251\');
my (@file,$file);
open FILE,"$data/$full";
@file=
;
close FILE;
print <
| Выберите голосование для его последующего редактирования | 
EOF
foreach $file(@file) {
print <| Файл:  | 
 | 
EOF
}
print <
HTML
}
else{&off;}
}
sub readfile {
if(cookie(\'mwvote\') and $pass eq cookie(\'mwvote\')){
print header(-charset=>\'windows-1251\');
my ($file,@file,$i,$long,$tfile,$check,$check2);
$file=param(\'file\');
if(!($file=~ /^[a-z0-9_]+$/)){err(2);}
else{
$tfile="$file$ras";
open (FILE, "$data/$tfile") || die "Ошибка при открытии файла: $!";
@file=; chomp @file;
close FILE;
$long=$#file;
if ($file[3] eq "yes"){$check="checked";}
if ($file[4] eq "yes"){$check2="checked";}
print <
EOF
}}
else{&off;}
}