Надеюсь сильно пинать не будете? :) Вот написал скриптик маленький, хочется исправить пару недочетов, ну и сами посмотрите может чего добавить? :) Это пока токо администрирование, сам скрипт приема голосов выложу чуть позже...:)
Для его успешной работы хватит лишь положить в папку 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;}
}