• ベストアンサー

@×× = $q->param('**'); の書き出しについて

このようなチェックボックスを作って <INPUT type="checkbox" name="q1" value="A">A<br> <INPUT type="checkbox" name="q1" value="B">B<br> <INPUT type="checkbox" name="q1" value="C">C<br> このようなPerlの記述をして use CGI; $q = new CGI; @q1 = $q->param('q1'); このようなCGIの値の書き出し部分はどうしたらいいですか? print "<td width=300><font size=2>●●{'q2'}</font>&nbsp;</td>\n"; 上記の @q1 = $q->param('q1'); に、チェックされた値が格納されているんですよね。 その値を表示させたいと思っています。 いろいろ教えてもらって、ここまでたどり着きました。

  • kajita
  • お礼率75% (130/172)
  • Perl
  • 回答数4
  • ありがとう数4

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

  • ベストアンサー
  • hikomin
  • ベストアンサー率63% (40/63)
回答No.4

#3さんの『お礼』にあるコードですが、間違っているところだけ書いておきます。 原因はCGI.pmと独自の入力処理が、それぞれデータをとり合っていることです。このコード上では、独自の入力処理の部分がSTDINを読み込んでしまうので、CGI.pmからは何も読む事は出来ません。 入力処理には、CGI.pmか独自入力処理の『いずれか』を用いてください。全て書いても使えるのは一つだけです。質問内容から考えられるお勧めは、CGI.pmを利用する事です。(オーバースペックですが、ひとまずそう言うことは考えない方針で。) コードを見る限り、恐らく『データでコード処理』の部分を全て削除すれば大丈夫だと思います。

kajita
質問者

お礼

hikominさんのおっしゃる通りにしましたら、上手くいきました!!今、ものすごく興奮しています。この作業を始めてから2週間、毎日本を探しに行ったり、人に聞いたり、こちらでお世話になったりと・・・。PerlもCGIも初心者の私には荷が重い作業でしたが、こうやって達成できるとなんとも言えない充実感があります。お陰で期日までに間に合いそうです。それもこれも、今までアドバイスをしてくださった皆さんのお陰で、この場をかりて感謝の気持ちを述べさせていただきます。本当にありがとうございました。

その他の回答 (3)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.3

配列になっているので、他の方の回答のように一般的にはループさせて内容を書き出します。 まぁ、一箇所に繋げてABCとかそのまんま書き出すだけでいいなら print "<td width=300><font size=2>@q1</font>&nbsp;</td>\n"; でも書き出してくれるけど。 せめて(A,B,C みたいに)カンマで区切るとかしたほうが見易いかも。 $q1_str = join ',',@q1; print "<td width=300><font size=2>$q1_str</font>&nbsp;</td>\n";

kajita
質問者

お礼

本にもそういう風に書いてありましたが上手くいきません。以下は他人の見本を私が改造して作りましたが何かおかしいですか?余計な記述、意味不明記述もなあるかもしれません #!/usr/local/bin/perl # 日本語コード require 'jcode.pl'; # データデコード処理 if ($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});   @pairs = split(/&/, $buffer); } foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/<!--(.|\n)*-->//g; } # 配列 use CGI qw(:standard); @q1=param("q1"); $q1_str = join ',',@q1; # 確認の画面 print "Content-type: text/html\n\n"; print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">\n\n"; print "<html>\n <head>\n"; print " <title>テスト</title>\n"; print " </head>\n <body>\n"; print " <form method=post action=\"aaa.cgi\">\n"; print " <table border=1 cellspacing=2>\n"; print " <tr>\n"; print " <td width=100><font size=2>質問1</font></td>\n"; print "   <td width=300><font size=2>$q1_str</font>&nbsp;</td>\n"; print " </tr>\n"; print " </table>\n"; print " </center>\n"; print "<input type=\"submit\" value=\"送信\"><input type=\"button\" value=\"戻る\" onClick=\"history.back()\"><br><br>"; print " </body>\n"; print " </form>\n"; # エラー処理 sub error { ($error,@error_fields) = @_; if ($error eq 'missing_fields') { } exit; }

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

foreach my $value (@q1){ print "<td width=\"300\"><font size=\"2\">$value</font>&nbsp;</td>\n"; } 省略できるところを省略すると、 foreach (@q1){ print qq|<td width="300"><font size="2">$_</font>&nbsp;</td>\n|; } forを使った書き方をしてみると、 for($i=0; $#q1>=$i; $i++){ print qq|<td width="300"><font size="2">$q1[$i]</font>&nbsp;</td>\n|; }

kajita
質問者

お礼

print "<td width=300><font size=2>●●</font>&nbsp;</td>\n"; とあって「●●」に foreach (@q1){ print qq|<td width="300"><font size="2">$_</font>&nbsp;</td>\n|; } と入れるのですか? そうじゃないことは分かっています・・・。 @q1 = $q->param('q1'); で取った値を取り出したいのですが、 foreach my $value (@q1){ print $value; } で取り出せるけど、「確認画面」というものに自分がチェックしたものを表示させてあげるのは無理なのでしょうか? そういうことで print "~\n"; を使っています。

  • hikomin
  • ベストアンサー率63% (40/63)
回答No.1

おっしゃる通り、@q1にチェックされた値が格納されています。 全部出すなら foreach my $value (@q1){ # @q1から一つずつ取り出して$valueに入れるループ print $value; } とかとかです。(整形はご自分で。) いろいろ省略する事も出来ますが、うっかり省略しすぎると最初は分けが分からなくなりますので、ひとまず上の形で使ってみてください。

kajita
質問者

お礼

すいません間違えてました。「●●{'q2'}」を「●●」にしてください。 ところで「●●」には foreach my $value (@q1){ # @q1から一つずつ取り出して$valueに入れるループprint $value;} と全て入れるのですか?

関連するQ&A

  • チェックボックスの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
  • JavaScriptでcheckboxの入力個数制限

    以下のようなチェックボックスがあります。 3つ以上チェックできないようにしたいのですが、JavaScriptで可能でしょうか? <FORM method=POST action="aaa.cgi" name="FORM1"> <input type="checkbox" name="Q1" value="1">1<br> <input type="checkbox" name="Q2" value="1">2<br> <input type="checkbox" name="Q3" value="1">3<br> <input type="checkbox" name="Q4" value="1">4<br> <input type="checkbox" name="Q5" value="1">5<br> </form>

  • 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
  • メールフォームで送信

    ラジオボタンとチェックボックスを選択しその結果をメールフォームにて送信出来るようにしたいのですが、可能でしょうか? ラジオボタンとチェックボックスの選択はこちらで http://okwave.jp/qa/q8072037.html これをメールフォームで送信するのですが、 最後にメールフォームを付け加えました。 これで、ラジオボタンとチェックボックスの選択されたものと合計も一緒に送信は可能でしょうか? 皆様ご教授の程お願いします。 <br> 下記の項目もどうぞ <br> <font color="#ff0000" size="1"><b> ※ </b></font>のついている項目は<font color="#ff0000"><b>必須</b></font>です。 <form method="post" action="CGIのURI"><br> <p> <br> <font color="#ff0000" size="1"><b> ※ </b></font>氏名:<input name="氏名" type="text"> <br> <font color="#ff0000" size="1"><b> ※ </b></font>年齢:<input name="年齢" type="text"> <br> <font color="#ff0000" size="1"><b> ※ </b></font>メールアドレス <input name="mail" class="form-textline01" maxlength="100" value="" type="text"><br> <font color="#ff0000" size="1"><b> ※ </b></font>住 所 <input name="address" class="form-textline03" maxlength="1000" value="" type="text"> <br> <font color="#ff0000" size="1"><b> ※ </b></font>電話番号 <input name="tel" class="form-textline01" maxlength="20" value="" type="text">例) 123-456- 7890 <br> <font color="#ff0000" size="1"><b> ※ </b></font><br> <input name="性別" value="男" checked="checked" type="radio"> 男  <input name="性別" value="女" type="radio"> 女<br> <br> メダルの項目:<br> <input name="properties" value="CellPhone" type="checkbox"> マラソン <input name="properties" value="Car" type="checkbox"> 体操 <input name="properties" value="Car" type="checkbox"> 水泳 <input name="properties" value="Car" type="checkbox"> サッカー <input name="properties" value="Car" type="checkbox"> フットサル<br> <input name="properties" value="Car" type="checkbox"> バスケット <input name="properties" value="Car" type="checkbox"> バレー <input name="properties" value="Car" type="checkbox"> 野球 <input name="properties" value="Car" type="checkbox"> 相撲 <input name="properties" value="Car" type="checkbox"> スケート<br> <input name="properties" value="Car" type="checkbox"> スノボ <input name="properties" value="Cottage" type="checkbox"> セクシーコマンド<input name="properties" value="Car" type="checkbox">その他 <br> <br> 認定資格:<input name="資格" type="text"> <br> 好きな果物:<br> <select name="好きな果物"> <option>りんご</option> <option>みかん</option> <option>バナナ</option> <option>パイナップル</option> </select> <br> <textarea name="freeans" rows="4" cols="40">自由に意見を記述してください</textarea><br> <input value="送信" type="submit">  <input value="取り消し" type="reset"> </p> </form> <br> <br> ご協力ありがとうございました・・・<br> <br> </body> </html>

  • 複数の送信先を作るには・・・・・?

    以下のロジックを作ったのですが、 送信先を複数にするタグがわかりません。 どうか教えてください。 <FORM action=http://mdec.nifty.com/cgi-bin/*******.cgi method=post><INPUT type=hidden value= http://*******************com/******.html name=ok_page> <INPUT type=hidden value=**********@*****.com name=to_mail> <INPUT type=hidden value="*********" name=sub> <font color=#ff0033>メールアドレス</FONT>を入力後、ご希望の処理をチェックして下さい。<BR> E-mailアドレス : <INPUT size=30 name=from><BR><BR> ◎当店・企業からの<FONT COLOR=#FF0033>"お得な"</FONT>無料メルマガ<BR> <INPUT type=checkbox name="○店舗登録" value="【登録】"> 【登録】 <INPUT type=checkbox name="×店舗解除" value="【解除】">【解除】<BR><BR> <TR class=bgplain><TD COLSPAN="2"><INPUT type=submit value=送信> <INPUT type=reset value=クリア> </TR><BR>

    • ベストアンサー
    • HTML
  • 複数のチェックボックスの値を、ひとつの変数に入れて表示したい。

    Perlで質問です。 下記のようなフォームで、A~Fまでのチェックボックスを選んで「test.cgi」にデータを送ります。 <HTML> <BODY> <FORM action="test.cgi"> <input name="q6_1" type="checkbox" value="A">A<br> <input name="q6_2" type="checkbox" value="B">B<br> <input name="q6_3" type="checkbox" value="C">C<br> <input name="q6_4" type="checkbox" value="D">D<br> <input name="q6_5" type="checkbox" value="E">E<br> <input name="q6_6" type="checkbox" value="F">F<br> <input name="q6_7" type="checkbox" value="G">G<br> <INPUT type="submit"> </FORM> </BODY> </HTML> 次の画面で、選ばれた物の確認画面を変数「$work6」を呼び出して表示したいと思っています。 <HTML> <BODY> A / B / C / D / E / F </BODY> </HTML> この処理をperlを使ってやりたいのですが、どうやったらいいのかわかりません。 for を使って「q6_1~7」を呼び出し、それぞれの最後に「 / 」を追加したあとファイルハンドルを使って、変数「$work6」に追加上書きして表示、と言うことをすれば良いのだろうと、下記のソースを書いて見ましたが、うまくいきませんでした。 (たぶん間違いだらけだと思いますが…。) open(IN, ">>$work6"); for ($q6 = 1; $q6 < 7; $q6++){ if ($FORM{'q6_$q6'} ne '') { print IN "$FORM{'q6_$q6'}." / ""; } } close(IN); つたない質問だと思いますが、 よろしくお願いします。

    • ベストアンサー
    • Perl
  • VB6でWEBのラジオボタンの操作方法がわかりません

    始めまして、VB初心者です。 VB6でWEBのラジオボタンの操作方法が解りません。 以下のようなHTMLのWEBページがあります。 ラジオボタンをVB6にて操作(チェック)したいのですがどうしても出来ません。 テキスト入力の項目には入力できました。 IE.Document.All("test").Value = "テスト" 上記にてテストと入力できました。 HTMLソース <table> <tr> <td>選択してください </td> <td colSpan="2"><!-- <select name="j_type"> <option value="10">A</option> <option value="11">B</option> <option value="20">C</option> <option value="30">D</option> <option value="40">E</option> <option value="50">F</option> <option value="99">G</option> </select> <label><input type="checkbox" value="10" name="jArr[]">A</label>&nbsp; <label><input type="checkbox" value="11" name="jArr[]">B</label>&nbsp; <label><input type="checkbox" value="20" name="jArr[]">C</label>&nbsp; <label><input type="checkbox" value="30" name="jArr[]">D</label>&nbsp; <label><input type="checkbox" value="40" name="jArr[]">E</label>&nbsp; <label><input type="checkbox" value="50" name="jArr[]">F</label>&nbsp; <label><input type="checkbox" value="99" name="jArr[]">G</label>&nbsp;<br> </td> </table> </table> <p> </p> <table> <tr> <td>選択しましたか?</td> <td><label><input type="radio" CHECKED value="0" name="c_exp">はい</label> <label><input type="radio" value="1" name="c_exp">いいえ</label></td> </table> 自分で作った(ホームページ作成ソフト)WEBにVBから操作したいと思ったのですが、単純にvalueにて数値を入れてもだめなのでしょうか? 宜しくお願いいたします。

  • FORMの値を返す方法です。

    こんにちは。質問させてください。 フォームを作成したのですが思うような値を得られませんでした。チェックボックスA~Eの中で、たとえばAとCにチェックをいれて送信すると受信側に返される値は 「selection=A&selection=C&submit=~」となるのですが、これを 「selection=A,C&submit=~」というようにselection=を一つにまとめてカンマで区切って表示できたらと思っています。 どうかご存知の方がいらっしゃいましたら、教えてください。よろしくお願いします。 ------以下のように作成しました---------- <form method="post" action="mailto:@.ne.jp"> <br>選択<br> <input type="checkbox" name="selection" value="A">A<br> <input type="checkbox" name="selection" value="B">B<br> <input type="checkbox" name="selection" value="C">C<br> <input type="checkbox" name="selection" value="D">D<br> <input type="checkbox" name="selection" value="E">E<br> <input type="submit" name="Submit" value="送信"> <input type="reset" name="Submit2" value="リセット"> </form>

  • フォームでの質問

    前にも似たような感じで質問しましたがわかる方ご協力をお願いします。 フォームの機能を使ってURLにページを表示したいのですが アクションが自動で入ったり/スラッシュなどがエンコードされてしまって思うように結果が導き出せません。 フォームを使ってうまくURLに結果を表示させるにはどうしたらよいでしょうか? 私が作ったフォームの内容を記述します。 <form name="form" method="get" action="http://www.abcdffg.co.jp/"> <p>行の項目はひとづつ選んでね!<br /> 例・Aさんをチェック→検索【Aさんのプロフィールを表示】します<br />   Bさんをチェック→イラストをチェック【Bさんのイラストを表示】します</p> <table width="500" border="1"> <tr> <td>プロフィール</td> <td>Aさん<input name="a/" type="checkbox" /></td> <td>Bさん<input name="b/" type="checkbox" /></td> <td>Cさん<input name="c/" type="checkbox" /></td> </tr> <tr> <td>項目</td> <td>イラスト<input name="illust" type="checkbox" /></td> <td>日記<input name="nikki" type="checkbox" /></td> <td>ペット<input name="pet" type="checkbox" /></td> </tr> </table> <p><input type="submit" value="検索"></p> </form> 以上 Bさんをチェック→イラストをチェック【Bさんのイラストを表示】 URL的には【http://www.abcdffg.co.jp/b/illust】となるようにしたい。 もしHTMLのフォームだけではこの結果がえられないとするならばCGIなどなにが必要なのかわかる方いたら教えてください。

    • ベストアンサー
    • HTML
  • 複数のチェックボックスをチェックしたい

    質問させてください。 複数のチェックボックスを項目別に全てチェックするようなjqueryの書き方をご教授いただきたいです。 <table> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />a</li> <li><input type="checkbox" name="" value="" />b</li> <li><input type="checkbox" name="" value="" />c</li> <li><input type="checkbox" name="" value="" />d</li> </td> </tr> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />e</li> <li><input type="checkbox" name="" value="" />f</li> <li><input type="checkbox" name="" value="" />g</li> <li><input type="checkbox" name="" value="" />h</li> </td> </tr> <tr> <td> <input type="checkbox" name="" />まとめてチェック </td> </tr> <tr> <td> <li><input type="checkbox" name="" value="" />i</li> <li><input type="checkbox" name="" value="" />j</li> <li><input type="checkbox" name="" value="" />k</li> <li><input type="checkbox" name="" value="" />l</li> </td> </tr> </table> 上記のようにそれぞれの項目に「まとめてチェック」のチェックボックスがあり、 そこに該当するチェック項目は全てチェックorチェックを外す っという挙動の実装を考えています。 jqueryでやりたいのですが、javascript、jqueryがかなり苦手でいまいちいきません。 ググって $(function(){ $('#all').click(function(){ if(this.checked){ $('#check input').attr('checked','checked'); }else{ $('#check input').removeAttr('checked'); } }); }); このソースを見つけたのですが、これだと一つの項目でしか実装できず 項目分このjqueryを書くのも余り良い書き方だと思えません。 どなたか、ご教授お願いいたします。

専門家に質問してみよう