Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Perl CGI脚本中遍历复选框组的所有选中值?_Perl_Command Line_Checkbox_Cgi - Fatal编程技术网

如何在Perl CGI脚本中遍历复选框组的所有选中值?

如何在Perl CGI脚本中遍历复选框组的所有选中值?,perl,command-line,checkbox,cgi,Perl,Command Line,Checkbox,Cgi,我有一个在Windows机器上运行的测试系统设置 我有一个小的命令行应用程序,我想使用 Perl CGI脚本 我有一个使用Perl创建的表单。用户可以在许多复选框和输入框中键入消息 这是我目前掌握的代码。我无论如何都不是perl方面的专家,所以 这里可能有一些没有意义的东西,或者是为了测试的目的 #!"C:\xampp\perl\bin\perl.exe" #print a standard 200 -level HTTP header print "Content-Type:text/htm

我有一个在Windows机器上运行的测试系统设置

我有一个小的命令行应用程序,我想使用 Perl CGI脚本

我有一个使用Perl创建的表单。用户可以在许多复选框和输入框中键入消息

这是我目前掌握的代码。我无论如何都不是perl方面的专家,所以 这里可能有一些没有意义的东西,或者是为了测试的目的

#!"C:\xampp\perl\bin\perl.exe"

#print a standard 200 -level HTTP header
print "Content-Type:text/html\n\n";

print "<html><head><title>Broadcast Message</title></head>\n";
print "<body>\n";

#display form data
#&displayInfo();

print "</body></html>\n";

if ($ENV{REQUEST_METHOD} eq "GET") 
  {
    &formDisplay();
    exit;
  }
#Else process and display back to screen
else
  {
    #&switches();
    &parseform();
    &displayInfo();

    exit;
  }  

#This subroutine will display information without using the HTML document

sub formDisplay
  {
    print qq~

    <FORM METHOD="POST" ACTION="/cgi-bin/broadcast.cgi">
      <h3>Broadcast Message to Domain</h3>
      ***PLEASE NOTE*** This will broadcast a message to ALL machines in the Domain</br></br>
      <TABLE cellpadding=0 cellspacing=1 border=0>
      <TR>
        <TD>Select your target by switch:&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp   </br></TD>
        <TD></TD>
        <TD>Select your target by department:                       </br></TD>
      </TR>
      <TR>
        <TD><input type=CHECKBOX name=517 value="517">   - 517      </br></TD>

        <TD></TD>
        <TD><input type=CHECKBOX name=ACC value="ACC">   - ACC      </br></TD>
      </TR>
      <TR>
        <TD><input type=CHECKBOX name=testfiletxt value="testfiletxt"> - testefiletxt </br></TD>
      </TR>
      </TABLE>
      </br></br>
      Please type the message you wish to broadcast to the Domain: </br>
      <input name="message"></br>

      <input type=SUBMIT name=Send value="Send">
      <input type=RESET name=Reset value="Reset">
    </form>
    ~;
  }

#This subroutine will display information received from a form 
sub displayInfo {
  print "<b>Your Message:</b> </br>  ",         $form{"message"}, "</br>";
  $system_message=$form{"message"};
  #system "sent.exe /u:testmachine \"$system_message\"" ;
  print qq~
  <form>
  <input type="button" value="Back" onclick="history.go(-1);return true;">
  </form>
  ~;
  # Working loop for form hash
  delete $form{'Send'};

  foreach(keys %form) {
  print "$form{$_} </br>";
  }
 ##############################
  $textme=$form{"testfiletxt"}; 
    open( FILE, "< $textme" ) or die "Can't open $filename : $!";

    while( <FILE> ) {
        chomp;
        print "sent.exe $_ ", $form{"message"} , "</BR>";
    }

    close FILE; 

}


sub parseform
  {
    #get data from environment variable
    read STDIN,$qstring,$ENV{"CONTENT_LENGTH"};
    #$qstring = $ENV{'QUERY_STRING'};

    #break data up on ampersands, and store in array
    @pairs = split(/&/, $qstring);

    #start a loop to process form data
    foreach (@pairs) {
    #split field name and value on "=", store in two scalar variables
    ($key, $value) = split(/=/);
    #translate '+' signs back to spaces
    $value =~ tr/+/ /;
    #translate special characters
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    #store data in hash
    $form{$key} = $value;
    }
  }
因此,如果用户选择了3个开关,则该命令应运行3次

     sent.exe /t:15 /f:swtich1
     sent.exe /t:15 /f:switch2
     sent.exe /t:15 /f:switch3
我应该指出,
/f
“选项告诉
sent.exe
命令使用需要以特定方式格式化的文件

我在一次处理一个选项方面取得了一些成功

但是,当用户选择多个复选框时,会发生什么情况,这让我感到困惑

如何使用循环轻松处理所选复选框

我可以从
&parseform
子例程中提取这个吗?或者有更简单的方法吗?

使用:

将给您所有名为“department”的复选框。为此,您需要清理HTML:

<input type="checkbox" name="department" value="517" 
 id="department_517"><label for="department_517">517</label>

<input type="checkbox" name="department" value="ACC" 
 id="department_ACC"><label for="department_ACC">ACC</label>

<input type="checkbox" name="department" value="testfiletxt" 
 id="department_testfiletxt"><label 
 for="department_testfiletxt">testfile.txt</label>
517
行政协调会
testfile.txt
使用:

将给您所有名为“department”的复选框。为此,您需要清理HTML:

<input type="checkbox" name="department" value="517" 
 id="department_517"><label for="department_517">517</label>

<input type="checkbox" name="department" value="ACC" 
 id="department_ACC"><label for="department_ACC">ACC</label>

<input type="checkbox" name="department" value="testfiletxt" 
 id="department_testfiletxt"><label 
 for="department_testfiletxt">testfile.txt</label>
517
行政协调会
testfile.txt

你是在问如果用户选择了多个部门如何处理数据吗?首先,不要像那样手工解析表单数据。使用
CGI.pm
CGI::Simple
。其次,将HTML与代码分开。第三,最重要的是,你将允许任何可以查看网页的人在你的机器上调用另一个程序ine。首先阅读CGI安全常见问题解答:是的,Andrey,我需要根据用户选择来处理数据。Sinan,我以前没有听说过CGI.pm。谢谢你的建议!我必须尝试找到一些将HTML与代码分开的示例。当我第一次学习perl时,我被展示了如何将两者混合在一起。我将不得不放弃学习坏习惯!至于安全性,这是我一直关心的问题。我想让页面启动并运行。一旦我知道我可以让它工作,我将保护该网站。它将只用于我们的本地网络,需要身份验证和任何其他安全措施来帮助安全。谢谢你的帮助!你问我怎么做如果用户选择多个部门处理数据?首先,不要像那样手工解析表单数据。使用
CGI.pm
CGI::Simple
。第二,将HTML与代码分开。第三,也是最重要的一点,您将允许任何可以查看网页的人在您的机器上调用另一个程序。阅读CGI security FAQ first:是的,Andrey,我需要根据用户选择来处理数据。Sinan,我以前没听说过cgi.pm。谢谢你的建议!我必须尝试找到一些将HTML与代码分开的例子。当我第一次学习perl时,我被展示了如何将两者混合在一起。我将不得不改掉坏习惯!至于security,这是我一直关注的问题。我想让页面启动并运行。一旦我知道我可以让它工作,我将保护网站。它将只在我们的本地网络上使用,需要身份验证和任何其他安全措施来帮助安全。谢谢你的帮助!谢谢,这很有效!我在usin中举了一个例子g使用param选项,它似乎工作得很好。完成脚本还有很长的路要走,但我认为它是可行的。感谢您的帮助!看看
HTML::Template
CGI::Application
。感谢您接受我的答案。谢谢,这很有效!我举了一个使用param选项的例子,它似乎工作得很好。完成脚本还有很长的路要走,但我认为它是可行的。谢谢你的帮助!看看
HTML::Template
CGI::Application
。谢谢你接受我的回答。
<input type="checkbox" name="department" value="517" 
 id="department_517"><label for="department_517">517</label>

<input type="checkbox" name="department" value="ACC" 
 id="department_ACC"><label for="department_ACC">ACC</label>

<input type="checkbox" name="department" value="testfiletxt" 
 id="department_testfiletxt"><label 
 for="department_testfiletxt">testfile.txt</label>