Проверка формы Perl / CGI - PullRequest
       15

Проверка формы Perl / CGI

1 голос
/ 29 ноября 2011

Это моя первая попытка CGI (я знаю немного Perl), но я падаю на лицо.

Я хочу ввести форму и проверить ее, но в разделе проверки вообще не отображаются отправленные значения.

Я запускаю это напрямую как http://example/cgi-bin/formcheck.cgi - нет HTML, вызывающего это.

Я подозреваю, что он работает, опуская дно, а затем работает с нуля при каждом нажатии кнопки. Я не уверен, хотя. Вот мой код:

#!/usr/bin/perl -w
use strict; # let's tighten things up

use CGI ':standard';
use CGI::Carp qw(fatalsToBrowser);

print header;
print start_html("form check");
print "<h1>form check</h1>\n";

print_questions();

print_checks();
print "<hr>\n";

print end_html;

sub print_questions {

  if ( !defined(param('action')) || param('action') eq 'New' ) {

    my $p = int(rand(10));          # fix error under strict
    my $q = int(rand(10));          # fix error under strict
    my $i = 0;                      # fix error under strict

    my @question = '';              # fix error under strict
    my @answer   = '';              # fix error under strict

    $question[$i] = "$p X $q =";
    $answer[$i]   =  $p * $q;

    print start_form;
    print "$question[$i]";
    print textfield(-name=>'response',-default=>'',-size=>3);
    print "<p>";
    print submit('action','New');
    print submit('action','Check');
    print end_form;
    print "<p>";

    param(-name=>'question',-value=>@question);
    param(-name=>'answer',-value=>@answer);
    print "<hr>\n";
  }

}

sub print_checks {

  if ( param('action') eq 'Check' ) {

    my $errors = 0;                    # fix error under strict
    my $i = 0;                         # fix error under strict

    my @question = param('question');  # fix error under strict
    my @answer   = param('answer');    # fix error under strict
    my @response = param('response');  # fix error under strict

    if ( $answer[$i] != $response[$i] ) {

      $errors++;
      print "<font color=#FF0000>";
    } else {
      print "<font color=#00FF00>";

    }

    print "$question[$i] = $answer[$i]";
    print "</font>";

    print "<p>";
    print start_form;
    print submit('action','New');
    print end_form;
    print "<p>";
    print "<hr>\n";

    if ($errors == 0) {

      print "CORRECT!<br>";
    } else {
      print "NOPE!<br>";

    }
  }
}

Любая помощь с благодарностью

Ответы [ 2 ]

1 голос
/ 29 ноября 2011

Хорошо, прочитайте ваш код еще раз:

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

0 голосов
/ 29 ноября 2011
print textfield(-name=>'response',-default=>'',-size=>3);
print hidden(-name=>'question',-value=>@question);         # this fixes my bug
print hidden(-name=>'answer',-value=>@answer);             # this fixes my bug

Я также должен удалить эти строки:

param(-name=>'question',-value=>@question);
param(-name=>'answer',-value=>@answer);

Еще раз спасибо.

...