• ベストアンサー

チェックボックスのvalue値の取得について

過去の質問にいくつか似たようなものはあったのですが、解決出来ませんでしたので質問させて頂きます。cgiでページを作成しています。今回処理したい内容は、一覧表の複数のチェックボックスから、オンになっているvalue値を取得し、その値に一致するナンバーを使って別のファイルのデータを削除するといった処理です。 == html一部内容 == <form action='update.cgi' method='POST'> <input type='checkbox' name='del_0' value='0'> <input type='checkbox' name='del_1' value='1'> <input type='checkbox' name='del_2' value='2'> <input type='submit' name='submit' value='削除'> </form> == update.cgiの一部内容 == for($loop=2,$loop>=0,$loop--) { $del[$loop]=$in{'del_$loop'}; } データ数が多いのでループさせてすべてのチェックボックスのvalue値を取得したいと思っています。チェックボックスがオフの場合の扱いがいまいち分かっていません。一つずつ例えば $del_1=$in{'del_1'}; と代入していくとonのもののみ取得できます。しかしループにするとonの値も変数に入りません。 どんな方法でも良いので、すっきりとチェックボックスのvalue値を変数に取得する方法を教えてください。お願い致します。M(v_v)M

  • Perl
  • 回答数4
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • akarin6_6
  • ベストアンサー率59% (13/22)
回答No.4

>ご指摘の方法ですと、チェックボックスのvalue値ではなくそのまま0,1,2が代入されてという感じになるような気がするのですが・・・ テスト用に代入しているだけです。 説明不足ですいません。 私が言いたかったのは「$in{'del_$loop'}」では「$loop」の変数が展開されずにただの文字列として扱われてしまう点です。 シングルクォーテーションではなくてダブルクォーテーションでないとまずいということです。

simple-t
質問者

お礼

返事が遅くなりましてごめんなさい。私の理解不足で、再度ご回答ありがとうございます。うまく値を取得することができました !(^_^)! シングルコーテーションが原因とは全く気づくことが出来ませんでした。本当にありがとうございます!!

その他の回答 (3)

  • Ethersky
  • ベストアンサー率71% (168/235)
回答No.3

del_nのnの値がvalue(値)と同じなのであれば、 フォームから送られてきたデータをデコードしてハッシュ(%in)に入れる処理の部分を変更することで楽にできます。 1.チェックボックスの名前をdel_nにせず、全て同じ名前(ここではdel)にする。 2.本来のフォームデータを%inに値を代入する処理の前の行を以下のようにする。 $in{$name} = $value; #$nameがフォームの名前、$valueがその値とする ↑の行がその代入する行だとして、 if($name eq "del"){push(@list,$value); next;} $in{$name} = $value; とする。 これで、名前がdelの時に配列listに値だけが入る。 nextすることでフォームからのデータを順にハッシュに代入していく処理を次に行かせる。 3.配列listが削除処理対象のリストになっているのでこれを煮るなり焼くなり好きにする。 という感じです。 CGI.pmでフォームデータをデコードしているのなら、 @list = $query->param('del'); で取れるでしょう。

simple-t
質問者

お礼

ご回答ありがとうございます。お礼が遅くなり申し訳ありません。私の知識ではpushが新しい使い方だったりで少してこずりましたが、何とかこの方法でも確認する事ができました。ほんとうにありがとうございました。

  • akarin6_6
  • ベストアンサー率59% (13/22)
回答No.2

>$in{'del_$loop'} ↑っておかしくないですか? いくらループしても「del_$loop」というキーが指定されてしまいます。 forの書式もちょっとおかしいような・・・。 $in{'del_0'}=0; $in{'del_1'}=1; $in{'del_2'}=2; for($loop=2;$loop>=0;$loop--) { $del[$loop]=$in{"del_$loop"}; print $del[$loop]; } という感じでテストしてみたら上手く行ってるようです。

simple-t
質問者

補足

回答ありがとうございます。ご指摘の方法ですと、チェックボックスのvalue値ではなくそのまま0,1,2が代入されてという感じになるような気がするのですが・・・$in{'del_$loop'}はチェックボックスのnameを指定してそのvalue値を取得する方法として利用しています。説明が理解できてなければすいませんM(v_v)M

  • naoto0314
  • ベストアンサー率34% (25/73)
回答No.1

valueの値は全て1にするとわかりやすいかも… del_nは真かどうかで判断させられますし…

simple-t
質問者

補足

回答ありがとうございます。出来れば、value値は後の処理で利用したいのでそのままにしたいと思っています。del_nが真かどうかの判断をcgiの記述でどのように書けば良いか出来れば教えて頂けますでしょうか??チェックボックスがonで送信されてきたvalue値のみを取得する???

関連するQ&A

  • チェックボックスのチェックについて

    submit時に一つでもチェックがなければアラートを表示 チェックがあれば進む・・・としたいです。 <form action=next.html name=form1> <input type=checkbox name=checkbox1 value=1> <input type=checkbox name=checkbox2 value=2> <input type=checkbox name=checkbox3 value=3> <input type=checkbox name=checkbox4 value=4> <input type=checkbox name=checkbox5 value=5> ~以下50まで続きます <input type=submit value=submit> </form> function countChecked(form1) { var total = 0; var max = 50; for (var index = 0; index < form1.checkbox.length; index++) { total += form1.checkbox[index].checked ? 1 : 0; } if(countChecked(document.form1)) > 0) { return true; } else { alert("no"); return false; } return(total); } 過去に似たような質問を参考に作ってみましたがダメでした。 チェックボックスの名前の付け方が悪いのでしょうか。

  • チェックボックスのデータの受け取り方について

    以下のようなチェックボックスを作ったとき、 test.phpではどうやって受け取ればよいのでしょうか? nameがそれぞれ違う場合は分かるのですが... 教えてください。 <form method="POST" action="test.php"> <input type="checkbox" name="color" value="red">赤</input> <input type="checkbox" name="color" value="blue">青</input> <input type="checkbox" name="color" value="white">白</input> <input type="checkbox" name="color" value="black">黒</input> <input type="submit" value="送信" > </form>

    • ベストアンサー
    • PHP
  • チェックボックスのvalueを連結してURLに追加

    <form method="get" action="<?php = $_SERVER['PHP_SELF']; ?>"> <input type="checkbox" name="c" value="001" /> <input type="checkbox" name="c" value="002" /> <input type="checkbox" name="c" value="003" /> <input type="checkbox" name="c" value="004" /> <input type="checkbox" name="c" value="005" /> <input type="submit" value="送信" /> </form> submitするとURLに ?c=001&c=002&c=003… が追加されます。 その形ではなく、c=001002003… と連結してURLに追加するにはどうしたら良いですか?

    • 締切済み
    • PHP
  • チェックに応じて違うチェックボックスをアクティブにしたい

    次のHTMLのように、大分類、小分類のような構成のチェックボックス グループがあります(初期設定は全部チェック無しです) 普段は[a][b][c][d]をdisableとしておき、(1) にチェックが入った 場合に[d]以外([a][b][c])アクティブ(?とにかくチェックを入れる ことができる)ようにするにはどうしたらいいでしょうか。 よろしくお願い致します。 <form id="Form1"> : <INPUT TYPE="CHECKBOX" NAME="food" value="果物">(1) 果物 <INPUT TYPE="CHECKBOX" NAME="food" value="野菜">(2) 野菜 <INPUT TYPE="CHECKBOX" NAME="food" value="肉魚">(3) 肉魚 <br> <INPUT TYPE="CHECKBOX" NAME="fruit" value="りんご">[a] りんご <INPUT TYPE="CHECKBOX" NAME="fruit" value="みかん">[b] みかん <INPUT TYPE="CHECKBOX" NAME="fruit" value="ぶどう">[c] ぶどう <INPUT TYPE="CHECKBOX" NAME="fruit" value="バナナ">[d] バナナ : </form>

  • チェックボックスの複数選択の値をCGIで取得する方法

    お世話になります。 表記の通りチェックボックスで複数選択するHTMLを次のように作成しました。 ======== 送信元HTML ========= <FORM action='******.cgi' method='POST'> <INPUT type='checkbox' name='Q6_ans' value='1'> <INPUT type='checkbox' name='Q6_ans' value='2'> <INPUT type='checkbox' name='Q6_ans' value='3'> <INPUT type='checkbox' name='Q6_ans' value='4'> <INPUT type='checkbox' name='Q6_ans' value='5'> <input type=submit value='実  行'> </FORM> これを受取るPerl-CGIのコードをこうしました。 ======== 受信するcgi ========= my @files_2 = split(/\0/,$in{'Q6_ans'}); for($i=0;$i<=4;$i++){ if($files_2[$i] ne ""){$d[6].=$files_2[$i]." , ";} } 例えばチェックボックスで2と3を選ぶと$d[6]の値は「2 , 3 ,」となるつもりだったんですが、意に反し「23 ,」となります。 配列の値を調べると$files_2[0]に「23」が代入されて、$files_2[1]から$files_2[4]は空です。つまり「split(/\0/,$in{'Q6_ans'})」での分割がされていないようなのです。 何が原因で、どこが間違いなのでしょう。チェックボックスの値は\0で区切られていると思っているのですが、間違いでしょうか?

  • チェックボックスで指定したものをダウンロード

    JavaScriptの初心者です。 画像一枚毎にチェックボックスを作って、チェックした画像がダウンロードボタンをクリックすると保存されるようなHPを作りたいのですが、いろいろ調べているのですがどのようにすればよいのか見当がつきません。どうかご存じの方よろしくお願いします。 イメージは、フォトギャラリーのサムネイル画像の下にチェックボックスがあってチェックした画像のみダウンロードするという感じです。 CGIを使わずにできるかどうかも合わせてご教示いただけたらと思います。 <FORM NAME="form1"> <INPUT TYPE="checkbox" VALUE="1"> 画像(1) <INPUT TYPE="checkbox" VALUE="2"> 画像(2) <INPUT TYPE="checkbox" VALUE="3"> 画像(3) <INPUT TYPE="checkbox" VALUE="4"> 画像(4) <INPUT TYPE="checkbox" VALUE="5"> 画像(5)<BR> <INPUT TYPE="button" onClick="BoxChecked(true);" VALUE="ダウンロード"> </FORM>

  • チェックボックスが1つ以上チェックされたかチェックしたい

    以下のフォームで、 p_cdのチェックボックスが1つ以上選択されたかチェックしたいのですが、良い方法ございますでしょうか? <form name='test'> <input type="hidden" name="p_name[]" value='xx'> <input type="checkbox" name="p_cd[]" value='1'> <input type="hidden" name="p_name[]" value='yy'> <input type="checkbox" name="p_cd[]" value='1'> </form>

  • チェックボックスの値を(1,0)のようにすべて送信する方法

    formをsubmitすると、チェックボックスの値は、 チェックされた項目のvalue値が配列の形で送信されますよね。 たとえば、 <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="111" CHECKED> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="222" CHECKED> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="333" CHECKED> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="444"> <INPUT TYPE="CHECKBOX" NAME="C_BOX" VALUE="555" CHECKED> だと、 [111,222,333,555] のように。 今回は、表形式でデータを表示し、 チェックされた行の、他の列の値(フィールド)も取得したいのです。 他の列のフィールドは、チェックされていない行でも入力されている可能性があります。 そうすると、そのフィールドの値も配列にして送ってしまうと、 チェックボックスの値と数が合わなくなり、横方向での関連付けが出来なくなってしまいます。 なので、チェックボックスの送信値を、配列の要素数は全件で、 チェックされたかされていないかということが分かるように することは不可能でしょうか? JavaScriptは規約により、使うことが出来ない状況で困っています(><) 何か案があれば教えてください。

    • ベストアンサー
    • HTML
  • チェックボックスの未入力チェック

    ざっとですけれども <form action="**" name="myform" onsubmit="return Check()" method=post> <input type="checkbox" name="Erasedata" id="Erasedata" value="1" > <input type="checkbox" name="Erasedata" id="Erasedata" value="2" > ・・・ <input type="checkbox" name="Erasedata" id="Erasedata" value="5" > <input type="submit" value="選択されたものを削除する"> このようなチェックボックスがあったとして function Check() { for (i=0;i<document.myform.length;i++)  {   if(document.myform.Erasedata[i].checked==true) {return true;}  } alert("どこかにチェックを入れて下さい "); return false; } といった感じで未入力チェックをしています。 チェックボックスが複数の場合はうまく動くのですが、チェックボックスがひとつだとうまくいきません。スクリプトで何か問題があるようでしたらご指摘お願いできませんでしょうか。よろしくお願いいたします。

  • チェックボックスの全選択

    <input type="checkbox" name="chk" value=1> <input type="checkbox" name="chk" value=2> <input type="checkbox" name="chk" value=3> <input type="checkbox" name="chk" value=4> <input type="checkbox" name="chk" value=5> このように同一名称のチェックボックスに対して ボタンを押下された時全てのチェックボックスを チェックするJavaScriptの 書き方を教えて貰えないでしょうか