Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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将获取复选框的值_Perl_Mason - Fatal编程技术网

Perl将获取复选框的值

Perl将获取复选框的值,perl,mason,Perl,Mason,如何获取复选框的值并将其放入变量中以插入DB $request->param(cb)未获取值 复选框位于mason2组件(.mc)中,复选框的值将传递给另一个组件。因此,我必须找到一种在提交时获取值的方法 这是你的电话号码 对于这样的任务,WWW::Mechanize和HTML::TokeParser的组合是您的朋友。前者通过单击按钮、链接等来帮助您导航,而后者则对HTML进行切分 在这种情况下,您只需导航到页面,扫描数据中的“输入”标记(即“复选框”是“输入”的一种类型),然后测试每个输入,查

如何获取复选框的值并将其放入变量中以插入DB

$request->param(cb)
未获取值

复选框位于mason2组件(.mc)中,复选框的值将传递给另一个组件。因此,我必须找到一种在提交时获取值的方法
这是你的电话号码


对于这样的任务,WWW::Mechanize和HTML::TokeParser的组合是您的朋友。前者通过单击按钮、链接等来帮助您导航,而后者则对HTML进行切分

在这种情况下,您只需导航到页面,扫描数据中的“输入”标记(即“复选框”是“输入”的一种类型),然后测试每个输入,查看“名称”属性是否与您要查找的属性匹配。找到正确的“input”标记后,您只需获取“checked”属性的值,然后可以使用您喜欢的

例如:

use WWW::Mechanize;
use HTML::TokeParser;

my $checkbox_name = "cb";
my $url = 'http://some_url/';

my $page = WWW::Mechanize->new(autocheck =>1);
$page->get($url);
my $pagedata = HTML::TokeParser->new(\$page->{content});

while (my $token = $pagedata->get_tag("input")) {
    my @tokenarray = @$token;
    my $attr_ref = $tokenarray[1];
    my %attr = %$attr_ref;

    # dump the contents of the hash
    foreach my $k (keys %attr) {
        print "$k: $attr{$k}\n";
    }
    print "\n";

    if ($attr{name} eq $checkbox_name) {
        print "found it!\n";
        print "status = ", $attr{checked}, "\n";
        last;
    }
}
在本例中,“导航”部分很简单,您可能不用WWW::Mechanize就可以过得去。但是,在某些情况下,您需要提交输入、单击按钮、使用链接等,因此它通常很方便。

简化代码:

<input type="checkbox" name="cb" value="1">  
因此,当复选框被单击时,将得到1,否则为0

添加完整示例: Mason2组件:
cbf.mc
#复选框表单

<form action="cbs">
    <input type="checkbox" name="cb" value="1">
    <input type="submit">
</form>
制作上述两个组件,并将浏览器指向:

 http://url/path/to/cbf
你会得到一个简单的表格。现在不选中或选中复选框(如您所愿),然后按submit。组件
cbs.mc
将显示该值。选中时,您将得到“1”,而不是“0”

真的很简单

或者,您可以尝试以下
cbs.mc

<%class>
has 'cb' => (default => 0);
</%class>

The chebox value is: <% $.cb %>

具有“cb”=>(默认值=>0);
复选框值为:

更清晰,并使用默认值。这两个例子都是有效的解决方案。

我有一个类似的问题,在尝试解决这个问题时偶然发现了这个线程。在我的场景中,我有几个具有相同值的复选框(在数据库中,每行都考虑“是/否”)。我提出了一个简单易懂的解决方案

假设我们的值为“Y”(选中)或“N”(未选中)

为每个行项目添加一个“N”隐藏字段。这可以确保您收到每一行的值。然后,同名的复选框字段将告诉我们事情是否为“Y”。假设第二个也是最后一个被选中的4个元素是一个qw(ny)数组,那么您将得到什么呢。只需转换为字符串,将“NY”值替换为“Y”,然后再转换回。你会得到正确的qw(ny)

#HTML
%foreach。。。{
%}
#加工
$list=join(“”,@shouldwe);
$list=~s/NY/Y/g;
@shouldwe=拆分(/,$list);

这与Perl有什么关系?看起来您的
onclick
函数是用jQuery编写的。复选框位于mason2组件(.mc)中,复选框的值将传递给另一个组件。因此,我必须找到一种在提交时获取值的方法。这需要更多的具体细节,以使回答成为可能。我非常确定DVK意味着看到两行代码是不够的,因此您必须提供更多的代码,例如关于该组件的更多信息(例如,至少一个指向该组件的链接或其他内容),以及php代码。也许是一些截图。否则就很难理解:)@Andrius Naruševičius:Mason2与php毫无关系。一段简单的perl/Mason代码需要什么屏幕截图?谢谢你的回答。由于某种原因,当我转储$pagedata时,cb没有列出。我更新了示例,每次找到“input”标记时,都转储哈希的内容。如果有一个name属性为'cb'的输入,那么应该打印它。另外,别忘了更新代码中的$url以指向正确的页面。公认的解决方案对这个问题有什么影响?这是一个解析从给定URL获取的html源代码的解决方案,而不是在Mason组件内部。所以,@mamesaye如果你接受这个答案,你应该重新表达你的问题。有没有办法使用jquery(onclick=“$(this).attr('value',this.checked?1:0)”)并从中获取值?为什么你想要一个非常简单的问题的复杂解?请参阅完整的工作示例-我在答案中添加的内容。
 http://url/path/to/cbf
<%class>
has 'cb' => (default => 0);
</%class>

The chebox value is: <% $.cb %>
#HTML
%foreach ... {
<input type=hidden name=shouldwe value='N'><input type=checkbox name=shouldwe value='Y'>
%}

#Processing
$list = join('', @shouldwe);
$list =~ s/NY/Y/g;
@shouldwe = split(//, $list);