• ベストアンサー

チェックボックスの値だけが受信できません

フォームメールのチェックボックスで、ユーザーの選択した値が受信メールに反映されず、困っています。 アドバイスを宜しくお願い致します。 ■HTML(抜粋) <input type=checkbox name=color value="赤">赤 <input type=checkbox name=color value="青">青 <input type=checkbox name=color value="白">白 ■CGI(抜粋) # 連想配列に格納 &ReadParse(*data); $color = $data{'color'}; # sendmail open(MAIL, "| $sendmail -t"); $mail .= "好きな色=$color\n"; # まとめて日本語変換 &jcode'convert(*mail,'jis'); # メール送信 print MAIL $mail; 上記のように記述してメールを受信すると、  好きな色= と、肝心の値の部分が空欄になってしまいます。 チェックボックス以外のテキスト入力やラジオボタンの値はメールにもちゃんと反映されています。 同じ内容のフォームメールをFLASHでも作りましたが、FLASHの方ではチェックボックスの値も全て表示できました。  好きな色=赤,白 なぜHTMLの方だけ値を拾えないのでしょうか? HTMLのnameをcolorという同じグループ(?)でくくっているからでしょうか? 送信後の処理以外はFLASHのCGIスクリプトと同じものなのですが・・・。 希望としては、チェックボックスで複数選択した値をカンマでつなげたまま受信したいと思っています。 CGIの勉強は始めたばかりなので、もしかしたらとても初歩的なところでつまづいているのかもしれませんが、アドバイスをどうぞ宜しくお願いいたします。

  • Perl
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • plantarum
  • ベストアンサー率53% (42/79)
回答No.2

複数チェックを付けている場合、更に結果をデコードする必要があるみたいです。

参考URL:
http://www.tohoho-web.com/lng/199810/98100078.htm
CoralPink1026
質問者

お礼

plantarumさま ご回答どうもありがとうございまいした。 ご紹介いただいたサイトも拝見してきました。 cgi-lib.plの\0をカンマに置き換えることができるみたいなので、そちらも試してみます。 どうもありがとうございました。

CoralPink1026
質問者

補足

ご回答くださった皆様、どうもありがとうございました。 &ReadParse(*data); $color = $data{'color'}; $color =~ s/\0/,/g; 上記のように、半角スペースをカンマに置換するだけで希望のかたちになりました。 依然としてFLASHの方の結果には疑問が残りますが、そちらも勉強してみます。 どうもありがとうございました。

その他の回答 (2)

  • noocyte
  • ベストアンサー率58% (171/291)
回答No.3

以前私が実験したブラウザ (どれだったか忘れた) では, 送信される HTTP リクエストパラメータは次のようになりました. ・ON のチェックボックスの name の値だけが送信される.  OFF のものは送信されない. ・value の値は送信されない. 例えば, <input type=checkbox name=check1 value="First">First <input type=checkbox name=check2 value="Second">Second で,First=OFF,Second=ON だと,送信されるのは check2= だけでした.ご質問のケースでも,そうなっている可能性があります. ReadParse する前の $data を表示させてみて確認してください. もしそうであれば,対策は次のとおり. ・チェックボックスごとに異なる名前を付ける. ・CGI 側でチェックボックスの name を value に変換する.

CoralPink1026
質問者

お礼

noocyteさま ご回答どうもありがとうございました。 ブラウザによっても結果が異なるんですね。 チェックボックスごとに異なる名前を付ける方法も試しましたが、メールの受信結果を 好きな色=赤,白 としたかったので諦めていました。 カンマで値をつなぎたかったのですが、ヌル文字でのつなぎ表示はできるようになりました。 別途補足の方に書かせてもらいますね。 どうもありがとうございました。

CoralPink1026
質問者

補足

ご回答下さった先輩方、どうもありがとうございました。 ご紹介いただい方法を試してみたかったのですが、難しかったので勉強してから、と思い下記の方法を先に試してみました。 &ReadParse(*data); my $color = $data{'color'}; my @color = &SplitParam($color); メールの受信結果は、   好きな色=赤 白 と、各要素を取り出せるようになりました。 できれば値をカンマでつないだものを表示したかったのですが・・・。 引き続き、カンマで値をつなぐ方法を教えていただけませんでしょうか。 どうぞ宜しくお願いいたします。

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.1

ReadParseの中が間違っているのでは? sub ReadParse{ my($data)=@_; my($query_string, $x, $name, $value); if ($ENV{'REQUEST_METHOD'} ne "POST") { $query_string=$ENV{'QUERY_STRING'}; }else{ read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); } foreach $x (split(/&/, $query_string)) { ($name, $value) = split(/=/, $x); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; $$data{$name} .= "," if($$data{$name} ne ""); $$data{$name} .= $value; } } これでどうでしょう?

CoralPink1026
質問者

お礼

pipipi523さま ご回答どうもありがとうございました。 ご教示いただいた方法は難しそうだったので、勉強してみます! CGIっていろいろな方法があるんですね。 入門書は買ったのですが、ほんとに簡単なものだったので、明日にでも本屋さんに行ってきます。 どうもありがとうございました。

関連するQ&A

  • 特定のチェックボックスをチェックするには

    特定のチェックボックス「白」を CHECKEDにする方法を教えて下さい。 #数と位置が変動するので配列は取得できません。 #「もしもcolorの値が白なら CHECKED」のような関数にしたい。 <INPUT TYPE="CHECKBOX" NAME="color" VALUE="おまかせ"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="白"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="ピンク"> <INPUT TYPE="CHECKBOX" NAME="color" VALUE="緑">

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

    以下のようなチェックボックスを作ったとき、 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
  • チェックボックスのperlでの値の渡し方

    perlに限らず、CGIもJavascriptも初心者なのにHPでアンケートを作ろうとしている者です。機能はアンケートの末尾の「確認」を押すとCGIの“確認画面”が表示され、その後「送信」で記述内容がメール送信されるというものです。複数回答があるチェックボックスのperlでの値の渡し方を教えてください。症状として以下の様に記述した場合、AとCにチェックをすると「C」しか受け取れません。ちなみにチェックボックスに規定以上の数(例えば「最大2つまで回答可」みたいな)がチェックされたら瞬時にアラートが出るようにするJavascriptを使っていますので“name”は同一にしたいのですが。 ★CGIの記述 → $FORM{'test'} ★HTMLの記述↓ <INPUT type="checkbox" name="test" value="A">A <INPUT type="checkbox" name="test" value="B">B<INPUT type="checkbox" name="test" value="C">C 「配列変数」とやらが必要らしいのですが、どんな記述にすれば良いのかサッパリです。

    • ベストアンサー
    • Perl
  • チェックボックスのCGIへの値の受け渡し方

    チェックボックスで複数回答があった場合のデータの受け取りをどうしても分からないので教えてください。 別の人が作った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>&nbsp;</td>\n"; このPerlは@check1にq1のチェックが付いたものが格納されていると認識しています。では、どうしたらそれをとりだせるのでしょうか?初心者で申し訳ありません。やり方にこだわらず、今回の目標は (1)チェックボックスに規定(2つ)以上のチェックが入るとアラートでチェックしすぎた瞬間に知らせてくれる (2)2つチェックされた場合の値の取出しを可能にする。

    • ベストアンサー
    • Perl
  • チェックボックスの戻り

    チェックボックスのvalue値に数字を入れてPOSTしています。 DB登録の前にその値を足し算してDBに登録しています。 <input type="checkbox" name="cb[0]" value="1"> <input type="checkbox" name="cb[1]" value="2"> <input type="checkbox" name="cb[2]" value="4"> <input type="checkbox" name="cb[3]" value="8"> <input type="checkbox" name="cb[4]" value="16"> ・・・のようにしています。DBの値を読み取ってcheckedを付ける際はどのようにしたら効率よく処理できるでしょうか?switchを使うとすごくチェックボックスの数が増えると厄介です。困っています。教えてください。

    • ベストアンサー
    • PHP
  • チェックボックスの複数選択の値を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で区切られていると思っているのですが、間違いでしょうか?

  • CGIでチェックボックスを使う方法

    チェックボックスをCGI(C言語)で使用する方法を教えて下さい。 例えば、HTMLで <input type="checkbox" name="Check1" value="Sel11" /> チェック1 選択1<br /> <input type="checkbox" name="Check1" value="Sel12" /> チェック1 選択2<br /> <input type="checkbox" name="Check1" value="Sel13" /> チェック1 選択3 <hr /> <input type="checkbox" name="Check2" value="Sel21" checked /> チェック2 選択1<br /> <input type="checkbox" name="Check2" value="Sel22" /> チェック2 選択2<br /> <input type="checkbox" name="Check2" value="Sel23" checked /> チェック2 選択3 というプログラムはCGI(C言語)ではどの様に記述すれば良いでしょうか?

    • ベストアンサー
    • CGI
  • チェックボックスの値を(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
  • HTML内外におけるチェックボックスの扱い

    ASPにおけるチェックボックスに関するご質問させていただきます。 現在、ASPファイルにおいて、チェックボックスを使用したプログラムを組んでいます。 作成しようとしているプログラムは、 「該当チェックボックスをチェックしたか否かで、確定ボタンを押したあとの移動先URLを変更する」ものです。 プログラムは以下のようになっています。 [abc.asp] <%@script language = vbscript %> Function SelectURL()  チェックされたチェックボックスの値を知りたい・・・☆ End Function <HTML> <HEAD> </HEAD> <BODY> <FORM NAME=frmCheck>    <INPUT TYPE=checkbox NAME=c1 VALUE="001">チェックボックス1    <INPUT TYPE=checkbox NAME=c2 VALUE="002">チェックボックス2    <INPUT TYPE=checkbox NAME=c3 VALUE="003">チェックボックス3 </FORM> </BODY> </HTML> このような状態です。 チェックボックスのうち、チェックされているもののVALUE値を知りたいのです。 値を知りたい場所は、☆印のある場所でです。 HTML内においては、document.frmCheck.c1.checked、.value等でチェックの有無は確認できるのですが、☆印はHTMLの外にあります。 何かアドバイスをいただければと思います。よろしくお願いします。

  • phpでチェックボックスでの値の表示について

    HTMLで作成したテキスト、セレクト、チェックボックスなどに、選択されたもの全てをPOST送信で受け取って PHPにてパラメータをチェックしてから 確認画面(HTML)に表示してPHPにてDB登録するというプログラムを作ってます。 HTML側で <input type="checkbox" name="genre[0]" value="1" >国語 <input type="checkbox" name="genre[1]" value="2" >算数 <input type="checkbox" name="genre[2]" value="3" >理科  <input type="checkbox" name="genre[3]" value="4" >社会 として例えば、 <?php $genre = $_POST["genre"]; foreach ($genre as $key => $value){ print($value); } ?> で表示するとチェックした数字が表示されます。 (国語をチェックした場合 1) これを 国語 と表示させるにはどうすればいいんでしょうか? DBに登録する際は数字でいいんですが。

    • ベストアンサー
    • PHP