0

私は学校のプロジェクトに取り組んでおり、ソーシャル ネット サイトを作成するための perl cgi スクリプトを書くように依頼されました。

さまざまなページに複数のサブルーチンを作成しましたが、各サブルーチンを個別に実行しようとすると問題なく動作しますが、他のサブルーチンで実行しようとすると、最初のページにリダイレクトされるだけです。

例:これは私の新しいユーザーページのコードです:

    #!/usr/bin/perl -w
    use CGI qw/:all/;
    use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
    my $cgi = new CGI;

    sub main() {
            print page_header();

            warningsToBrowser(1);

            first();

            page_trailer();
        }


    sub page_header {
            return header(-charset => "utf-8"),
                start_html(-title => 'Matelook',-style => "matelook.css"),
                body({-background =>"background.jpg"}),
                div({-class => "matelook_heading"}, "matelook");
        }

    sub page_trailer {
            my $html = "";
            $html .= join("", map("<!-- $_=".param($_)." -->\n", param())) if $debug;
            $html .= end_html;
            return $html;
        }

    sub new_user {
                  $fullname = param("fullname") || '';
                    $newun = param("newun") || '';
                    $newpass = param("newpass") || '';
                    $email = param("email") || '';
                    $program = param("program") || '';

                if(param("Save")){
                    $data = "full_name=$fullname \n 
                         username=$newun \n
                         password=$newpass \n
                         email=$email \n
                         program=$program \n";


                        $location = "dataset-medium/$newun";
                        mkdir $location, 0755;  
                        open($f,'>',"$location/user.txt");
                        print $f $data;
                        print $data,"\n";
                        print "Data Saved !! ";

                }

                else{
                     print start_form,"\n";
                        print "Enter Full Name :\n", textfield("fullname");
                        print "New Username :\n", textfield('newun'),"\n";
                        print "New Password :\n", textfield('newpass'),"\n";
                        print "Email:\n",textfield('email'),"\n";
                        print "Program:\n",textfield('program'),"\n";
                        print submit({-name =>"Save",-class => "matelook_button"});
                        print end_form,"\n";       
                }
            }

    sub first{
            if(param("New User")){
                new_user();
            }
            else{
                print start_form,"\n";
                   print submit({-class => "matelook_button_first ",-name => 'New User'}),"\n";
                print end_form,"\n";
            }
        }
    main();

サブルーチンを「最初に」使用して同じサブルーチンを呼び出そうとし、「保存」ボタンをクリックすると、new_user を呼び出した「最初の」ページにリダイレクトされます。

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

1

プログラムの構造は次のとおりです。

sub new_user {
   if (param("Save")){
      save();
   } else {
      show_input_form();
   }
}

if (param("New User")){
   new_user();
} else {
   show_menu();
}

問題は、入力フォームが設​​定されpararm('New User')ていないため、new_userクリックしても にならないことですSave


解決策 1:

New Usernameと valueを使用して、入力フォームに非表示の入力を追加します1


解決策 2:

変化する

if (param("New User"))

if (param("New User") || param('Save'))

解決策 3:

プログラムの構造を次のように変更します。

if (param("New User")){
   show_input_form();
}
elsif (param("Save")){
   save();
}
else {
   show_menu();
}
于 2016-11-01T04:35:54.190 に答える