Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Выполнение скрипта при нажатии на кнопку (html)


Автор: WindFinder91 28.11.2013, 22:34
Здравствуйте! очень нужна ваша помощь!
мне необходимо чтобы скрипт выполнялся только при нажатии на кнопку
на данный момент запись в текстовый файл идет даже при простом обновлении страницы

Код

#!c:/perl/bin/perl.exe
#/usr/bin/perl
use Fcntl;
use CGI;
$query = CGI->new;
use CGI::Carp qw (fatalsToBrowser);
$CGI::POST_MAX=2000000;
@params=$query->param;
foreach $name (@params)
 {
 $value=$query->param($name);
 $FORM{$name}=$value;
 }
print "Content-type: text/html\n\n";
# вывод заголовков
# плюс общее меню
print <<HTML;
<html><head>

<form action="Vse.pl">
<input type="hidden" name=work value=usp_fam>
<p align="center">Подсчитать успеваемость по тестам</p> 
<p align="center"><INPUT type="submit" value="Подсчитать"></p>
</form>

</body>
HTML

if ($FORM{'work'} eq "usp_fam")
{
open testresults, 'testresults.dat' or die "Невозможно открыть testresults.dat: $!";
open(F1,"> Успеваемость студентов/Успеваемость_по_тесту.txt");
#Ключевые переменные!
@test=('Основы языка Perl','Основы языка HTML','Основы работы в сети Интернет');
#Ключевые переменные!
$i=-1; $n=-1;
while (<testresults>) {
chomp;
$n++;
($date[n],$kod[$n],$name_test[$n],$surname[$n],$name[$n],$father_name[$n],$group[$n],$mark[$n],$mark1[$n],$mark2[$n],$r[$n],$q[$n]) = split(/\|\|/);
}

$c=@surname;
$c=$c-1;
$k=0;
$p=@test;
$p=$p-1;

for ($i=0;$i<=$c;$i++){
if ($mark[$i]>=$mark1[$i] && $mark[$i]>=$mark2[$i]) {($max[$i]=$mark[$i])} elsif ($mark1[$i]>=$mark[$i] && $mark1[$i]>=$mark2[$i]) {($max[$i]=$mark1[$i])} elsif ($mark2[$i]>=$mark1[$i] && $mark2[$i]>=$mark[$i]) {($max[$i]=$mark2[$i])};
}

while ($k<=$p){
for ($i=0;$i<=$c;$i++){
if ($test[$k] eq $name_test[$i]) {($all_mark[$k]++)};
if ($test[$k] eq $name_test[$i] && $max[$i]>=3) {($well_mark[$k]++)};
if ($test[$k] eq $name_test[$i] && $max[$i]>=4) {($good_mark[$k]++)};
}
$k++;
}

for ($k=0;$k<=$p;$k++){
$uspev[$k] = $well_mark[$k] / $all_mark[$k] * 100;
$well_uspev[$k] = $good_mark[$k] / $all_mark[$k] * 100;
}

print (F1 "Название группы     Успеваемость     Качеств. успеваемость");
print (F1 "\n");
print (F1 "\n");
$k=0;
while ($k<=$p){
print (F1 $test[$k],"                    ",int $uspev[$k],"                    ",int $well_uspev[$k]);
print (F1 "\n");
$k++;
}
close testresults;
}
 exit;


Автор: arto 28.11.2013, 23:05
передавайте кнопкой параметр, его и проверяйте в скрипте

Автор: WindFinder91 28.11.2013, 23:19
Код

<input type="hidden" name=work value=usp_fam>


это параметры который запоминаются при нажатии на кнопку

Код

if ($FORM{'work'} eq "usp_fam")


а это условие выполнения скрипта
так по идее должно работать

но по факту, хотя при нажатии на кнопку скрипт выполняется, он выполняется даже если на нее не нажимать(

Автор: Jimy 29.11.2013, 08:29
Цитата

а это условие выполнения скрипта

вы что-то путаете. при вызове скрипта не будет выполнятся ветка алгоритма внутри условия
Код

if ($FORM{'work'} eq "usp_fam")

Она выполнится при нажатии на кнопку.
Но сам скрипт разумеется будет выполняться не зависимо от того, переданы какие-то значения формы или нет (нажата ли кнопка).


Ну и по существу. Поскольку форма отправляется методом GET, то после нажатия кнопки в URL добавится параметр usp_fam и если потом обновлять страницу, то это параметр уже будет присутствовать (а скрипт именно по его значению проверят нажатие кнопки). Обратите внимание на URL до и после нажатия кнопки.

Автор: arto 29.11.2013, 08:31
а где на него ссылка стоит?
или вы его прямо и вызываете?

Автор: Grost 29.11.2013, 10:56
Код

<from method="POST">
...
</form>

Есть метод GET то генерируем форму, если POST то обрабатываем форму. 
Либо один скрипт генерирует форму, а другой скрипт обрабатывает её, тогда
Код

<form action="[% ссылка на обработчик%]">
...
</form>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)