• ベストアンサー

チェックボックスの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

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

  • ベストアンサー
  • 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