PERL |第二次提交后未获得该值

时间:2016-02-13 19:18:58

标签: perl cgi

大家。

我正在使用Perl来实际验证数据库中的状态,如果有必要,它会获得正确的查询,并在确认后更新值。

该页面有三个可能的内容:

如果将使用的查询已经填充,则会更新并返回状态。

如果只填写用户输入的序列,则会生成查询,然后要求确认。

如果这两个变量都没有被填充,则会转到用户可以提交序列的主表单。

我面临的问题是,在它生成$final_query并显示确认后,当我点击确认按钮时,它会重新加载页面,但它会直接通过if($final_query)甚至验证elseif是否已设置的$serial_no

如果我执行第二次提交或者我做错了什么,Perl真的会丢失这些值吗?

我想对此有一些解释,因为这是我第二次用这种语言做某事。

提前致谢!

- 编辑

我剪切了代码以显示它定义$ final_query的位置,但我保留了结构以帮助理解。

完整代码位于http://pastebin.com/6NqhbVau

#headers
if ($final_query) {

        $content = "<h1>first if</h1>";
#updateESNDatabase($database, $final_query);

#it only enters here if the user type the ESN
}elsif ($serial_no) {
        #selects the database
            switch(checkUpdateNeeded($database, $serial_no)) {
                case 0 {
            #Shows that the updates are no needed
                }
                case 1 {
                    $final_query = `cat $query1`;
                    chop($final_query);
                    $final_query =~ s/SERIALNUM/$serial_no/g;
                    $final_query =~ s/LOGINID/$login_id/g;
                    $content = $cgi->start_form .
                    "<center>" .
                        "<h3> Please double check the queries below before you update on database </h3>" .
                    "</center>" . 
                    $cgi->submit("Confirm") . $cgi->end_form;

                    $content .= $final_query;

                }
                case 2 {
                    #Makes almost the same as the first case, it only uses a different file to generate the query.
                }
            }
} else {
    #Generates the first page, where the users inputs information
} 
$page->set_content($content);
$page->process;

1 个答案:

答案 0 :(得分:0)

我想出了如何执行此操作。 根据我的分析,我不能简单地创建一个变量并将其传递给cgi表单。​​

要解决此问题,我所做的就是在HTML中创建隐藏输入,然后通过它发送变量。

<input type='hidden' name='the_query' value=\"$final_query\">