チェックボックスで複数回答があった場合のデータの受け取りをどうしても分からないので教えてください。
別の人が作った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で質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
16進の10進変換について
-
シェルスクリプトで、空白(ス...
-
全然分からず困っています。習...
-
pythonで演算子を変数に代入す...
-
swift 文字コードから文字に変...
-
switch文のエラーについて
-
PythonでUTF8の文字列をリスト...
-
PerlCGIでクエリの検索結果が途...
-
awkの正規表現での最左最短マッ...
-
<python> 文字列か数字かの判別
-
c言語 16進数の2進数への変換
-
qq!!の意味を教えてください。
-
【至急!!!】python言語で本を見...
-
パイソン文法で(インデント)
-
パイソンのクラスについて
-
ヒアドキュメントで表示した、...
-
文字列をスカラー変数として認...
-
少数点以下の桁数について
-
MAXnum = input('最大数は?') f...
-
変数まとめて0に初期化する方...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
16進の10進変換について
-
Pythonでターミナルに文字を出...
-
シェルスクリプトで、空白(ス...
-
【至急!!!】python言語で本を見...
-
pythonで演算子を変数に代入す...
-
c言語 16進数の2進数への変換
-
パイソンのクラスについて
-
I2C接続のLCDディスプレイを使う
-
関数「exists」と「defined」の...
-
pythonの*
-
変数の中は文字列か数値か調べ...
-
数値かどうかの判定方法
-
python print文のエラー
-
int(input("○○"))の使い方
-
Perlの例文でif($a==1&&$b==5&&...
-
Use of uninitialized value ---
-
awkの正規表現での最左最短マッ...
-
swift 文字コードから文字に変...
-
CGIでimgタグでalignを使うとエ...
-
javaのパッケージ構成で各パッ...
おすすめ情報