-2

チェックボックスの値を取得して変数に入れ、DB に挿入するにはどうすればよいですか?

$request->param(cb)チェックボックスがmason2コンポーネント(.mc)にある値を取得しておらず
、チェックボックスの値が別のコンポーネントに渡されます。したがって、送信されたときに値を取得する方法を見つける必要があります。
ここにコードがあります

<input type="checkbox" name="cb" value="" onclick="$(this).attr('value', this.checked ? 1 : 0)">  
4

3 に答える 3

3

コードを単純化します。

<input type="checkbox" name="cb" value="1">  

定義により、チェックボックスがチェックされている場合、ブラウザは値を送信し、チェックボックスがチェックされていない場合は何も送信しません。「何も」を「0 」に変換したいので、Mason2コンポーネントで次のようにします。

has 'cb';

#... and where you need the 0/1 checkbox value simply use the $.cb
my $cb01 = $.cb ? 1 : 0;

したがって、チェックボックスがクリックされると 1 になり、それ以外の場合は 0 になります。

完全な例を追加します。

Mason2 コンポーネント: cbf.mc #checkbox フォーム

<form action="cbs">
    <input type="checkbox" name="cb" value="1">
    <input type="submit">
</form>

Mason2 コンポーネント: cbs.mc #checkbox 表示

 <%class>
 has 'cb';
 </%class>

 The checkbox value is: <% $.cb ? 1 : 0 %>

上記の 2 つのコンポーネントを作成し、ブラウザで次の場所を指定します。

 http://url/path/to/cbf

シンプルな形になります。ここで、チェックを外したままにするか、チェックボックスをオンにして (必要に応じて)、送信を押します。コンポーネントcbs.mcは値を表示します。チェックすると、「0」でない場合に「1」が返されます。

本当に簡単です。

または、次のことを試してくださいcbs.mc

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

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

より明確にデフォルト値を採用。どちらの例も実用的なソリューションです。

于 2012-05-28T09:35:15.837 に答える
0

同様の問題があり、ハッシュしようとしているときにこのスレッドに出くわしました。私のシナリオでは、同じ値のチェックボックスがいくつかあります (データベースの行ごとに「はい/いいえ」と考えてください)。シンプルで理解しやすいソリューションであると思われるものを思いつきました。

値が 'Y' (チェックされている) または 'N' (チェックされていない) であると仮定しましょう。

すべての項目に「N」非表示フィールドを追加します。これにより、すべての行の値を確実に受け取ることができます。同じ名前のチェックボックスフィールドは、物事が「Y」かどうかを教えてくれます。2番目と最後にチェックされた4つの要素がqw(NNYNNY)の配列であると仮定すると、最終的にはどうなるでしょう。文字列に変換し、「NY」の値を「Y」に置き換えて元に戻すだけです。適切な qw(NYNY) が得られます。

#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);
于 2013-11-26T19:49:25.660 に答える
-1

このようなタスクでは、WWW::Mechanize と HTML::TokeParser の組み合わせが役に立ちます。前者はボタンやリンクなどをクリックしてナビゲートするのに役立ち、後者は HTML を切り刻みます。

この場合、単にページに移動し、「input」タグのデータをスキャンし (つまり、「checkbox」は「input」のタイプです)、各入力をテストして、「name」属性が指定したものと一致するかどうかを確認します。後です。正しい '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 がなくてもうまくいくでしょう。ただし、場合によっては、入力を送信したり、ボタンをクリックしたり、リンクを使用したりする必要があるため、便利なことがよくあります。

于 2012-05-25T18:53:08.083 に答える