2016-02-13 32 views
0

大家。PERL |没有得到第二次提交后的价值

我正在做一个Perl工具,它实际验证数据库中的状态,如果有必要,它会得到正确的查询,并在确认后更新值。

页有三种可能的内容:

如果将要使用的查询已经填满它更新并返回状态。

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

如果这两个变量中没有一个已经被填充,它将转到用户可以提交序列的主窗体。

是我面临的问题是,它产生$final_query,并显示了确认后,当我点击确认按钮,它重新加载页面,而是直接通过if($final_query)而且即使$serial_no一个验证elseif通已经设定好了。

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

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

在此先感谢!

--edit

我砍伤的代码,以显示它定义了$ 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; 
+0

也许你想缩小一下你的问题,准确地描述你的问题涉及哪些代码,以及你期望它做什么。 – TLP

+0

@TLP当然。我现在将编辑以清楚地说明。谢谢! – davis

+1

另外,'Switch'是一个不推荐的模块。不要使用'given/when'的其他版本,这也是不好的。使用'if'代替。 – TLP

回答

0

我想出如何执行此。 根据我的分析,我不能简单地创建一个变量并通过cgi表单传递它。

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

<input type='hidden' name='the_query' value=\"$final_query\"> 
相关问题