
チェックボックスで複数回答があった場合のデータの受け取りをどうしても分からないので教えてください。
別の人が作ったCGIを改造(今回の複数回答可の部分を)しています。以下のような記述だとvalue値が取れず、空白になっています。
【HTML】(チェックを2つ以上出来ないようにするためにJavascriptで制限をかけています。nameを同じにするやり方にしています。)
<INPUT type="checkbox" name="q1" value="赤" onclick="return limitation(this,2)">赤<br>
<INPUT type="checkbox" name="q1" value="黄" onclick="return limitation(this,2)">黄<br>
<INPUT type="checkbox" name="q1" value="青" onclick="return limitation(this,2)">青<br>
【CGI】
use CGI qw(:standard);
@check1=param("q1");
$result1=join(',',@check1);
print "<td width=300><font size=2>$result1</font></td>\n";
このPerlは@check1にq1のチェックが付いたものが格納されていると認識しています。では、どうしたらそれをとりだせるのでしょうか?初心者で申し訳ありません。やり方にこだわらず、今回の目標は
(1)チェックボックスに規定(2つ)以上のチェックが入るとアラートでチェックしすぎた瞬間に知らせてくれる
(2)2つチェックされた場合の値の取出しを可能にする。
No.2ベストアンサー
- 回答日時:
説明が悪かったかな。
先ほど表記したのは同じcheckboxの場合の受け取り方のテストスクリプトです。
受け取った配列をHIDDENで渡せば問題ありません。
ただ、私のほうでCGI.pmを使用したものをテストしたところ同じnameを使った場合は渡された文字列が連結されてしまうみたいです。
以下テスト用
#!/usr/local/bin/perl
use CGI;
$query = CGI->new;
$on = $query->param('on');
@params = $query->param();
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>test</TITLE></HEAD>\n";
print <<HTML;
<form action="chk.cgi" method="POST">
<input type="checkbox" name="q1" value="RED">RED<br>
<input type="checkbox" name="q1" value="BLUE">BLUE<br>
<input type="checkbox" name="q1" value="YELLOW">YELLOW<br>
<input type="submit" name="on" value="TEST">
</form>
HTML
if ($on) {
print "<p>変数result1: $result1</p>\n";
print "<p>配列q1<br>\n";
foreach $q1 (@check1) {
print "$q1<br>\n";
}
foreach $param (@params) {
print $param, ":\t", $query->param($param), "<br>\n";
}
}
print "</BODY>\n";
print "</HTML>\n";
exit;
以上でテストした結果:
q1: REDBLUEYELLOW
on: TEST
No.3
- 回答日時:
※ 二つ以上チェックを入れてはいけないのでしたら、checkboxを使わずに、radioボタンにするのが普通だと思うです。
値の取り出し方というか、取り出して確認画面のフォーム(checkbox)にチェックを入れたいということでしょうか?
べたべたに判定、設定するぐらいしか思いつきません。
↓多少省いていますが。
my @check1=param("q1");
my ($c,$checked_red,$checked_yellow,$checked_blue);
for $c (@check1) {
$checked_red = 'checked' if($c eq '赤');
$checked_yellow = 'checked' if($c eq '黄');
$checked_blue = 'checked' if($c eq '青');
}
print <<__FORM__;
<input type="checkbox" name="q1" value="赤" $checked_red>
<input type="checkbox" name="q1" value="黄" $checked_yellow>
<input type="checkbox" name="q1" value="青" $checked_blue>
__FORM__
No.1
- 回答日時:
(1)はJavascriptでやってください。
(2)はuse CGI qw(:standard);を使ったことがないので違う方法で。。。
#!/usr/local/bin/perl
# データデコード処理
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\n//g;
if ($name eq "q1") {
push (@check1,$value);
}
#フォーム変数へ
$F{$name} = $value;
}
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>test</TITLE></HEAD>\n";
print <<HTML;
<form action="chk2.cgi" method="POST">
<input type="checkbox" name="q1" value="RED">RED<br>
<input type="checkbox" name="q1" value="BLUE">BLUE<br>
<input type="checkbox" name="q1" value="YELLOW">YELLOW<br>
<input type="submit" name="on" value="TEST">
</form>
HTML
if ($F{'on'}) {
print "<p>変数q1: $F{'q1'}</p>\n";
print "<p>配列q1<br>\n";
foreach $q1 (@check1) {
print "$q1<br>\n";
}
}
print "</BODY>\n";
print "</HTML>\n";
exit;
すいません。やってみましたが #!/usr/local/bin/perl~exit;
まで、CGIに丸ごと入れたら、チェックボックスが表示されたCGIが出たんですが・・・。
私の説明が悪く申し訳ありません。
流れは、HTMLで作ったチェックボックスにチェックを入れて「確認」を押すと、入力した内容の「確認画面」が表示され、その「確認画面」にある「送信」ボタンを押して送信実行となるようにしようと思います。
困っているのはHTMLでチェックした複数のvalue値を、CGIの「確認画面」でどのよにして受け取ればいいのでしょうか?Javascriptは解決できました。ただJavascriptの記述上やはりnameは同じで出来る方法を希望します。今一度、よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
16進の10進変換について
-
シェルスクリプトで、空白(ス...
-
c言語 16進数の2進数への変換
-
pythonで演算子を変数に代入す...
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
セレクトメニューで2つの項目...
-
複数列を持ったリストボックス...
-
formで特定のinputを送信しない...
-
テーブル内でドロップダウンメ...
-
メモリをアドレスを直接指定し...
-
VB6で、長い時間かかる処理...
-
vbaでxmlからNodeListでデータ...
-
セレクトボックスの「選択して...
-
どうしてもCookieとCGI・perlの...
-
セレクトボックスから別窓にジ...
-
iteratorの再利用について
-
C言語のflagの使い方が分かりま...
-
実行時エラー 3020の対策
-
文字の横にプルダウンを表示さ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
シェルスクリプトで、空白(ス...
-
16進の10進変換について
-
I2C接続のLCDディスプレイを使う
-
Pythonでコンソールをクリアす...
-
pythonの*
-
c言語 16進数の2進数への変換
-
条件文の扱い方について
-
関数「exists」と「defined」の...
-
【至急!!!】python言語で本を見...
-
ファイルに書き込む
-
EUCで保存されたスクリプトにて...
-
Perl・正規表現が分かりません
-
改行
-
perlの型と8進数、10進数
-
ソートを利用して文字を昇順で...
-
配列 各項目を$n倍するプログ...
-
表という文字の扱いについて
-
シェルスクリプト+perl
-
ポーリングとHTMLデータのリロ...
-
awkの正規表現での最左最短マッ...
おすすめ情報