HTMLのcheckboxのデータをCGIファイルで表示できない?Perl初心者の質問

このQ&Aのポイント
  • HTMLの中でcheckboxのデータをCGIファイルで表示できません。Perl初心者の方が質問しています。
  • データの渡し方がわからないため、質問者は助けを求めています。
  • 質問者はすでにいくつかのデータをうまく渡すことができており、それが参考になっているようです。
回答を見る
  • ベストアンサー

htmlのcheckboxのデータをcgiファイルで表示できない?perl初心者の質問。

htmlの中でcheckboxのデータをcgifile で表示できません。構成は 入力用のhtml file、それを受け取るcgi file、表示用のalert.htmlファイルです。 my $kako = $query->param('kako'); #html fileからのデータ受け取り用です #下のスクリプトは表示のためのperlコードとして書いています。 if($e_kako){ $t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"裁断\"> 裁断 "; $t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"中とじ\"> 中とじ "; $t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"無線綴\"> 無線綴 "; $t_kako.="<input type=\"checkbox\" name=\"kako\" value=\"穴開け\"> 穴開け"; }else{ $t_kako = "$kako <input type=\"hidden\" name=\"kako\" value=\"$kako\">\n"; } #alert.htmlには下のようにして渡しています。 sub replaceTags{ foreach (@html){ s/<CGI:error message>/$errMsg/i; s/<CGI:error num>/$errNum/i; s/<CGI:kako>/$t_kako/i; データの渡し方がわからないのでよろしくお願いします。 下の場合はうまくいってます。 # page $t_page="<input type=\"text\" size=\"10\""; $t_page .= "name=\"page\" value=\"$page\">\n";

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

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

  • ベストアンサー
回答No.1

プログラムの書き方は人それぞれなので、このソースだけでは正しい回答ができるかどうか分かりませんが・・・。 checkboxは同じ名前を持つものを複数選択できるので、一つの変数に入れても上書きされてしまいます。ですので、通常、checkboxの値は配列に格納します。 push(@kako,$query->param('kako');); ソース全体が分からないので、詳しい回答ができませんが、'kako'の部分を何かの変数にいれて、nameを判別しているとしたら、 if($name eq 'kako'){ push(@kako,$query->param('kako');); }else{ ... } このように書けます。 もし一つしか選択させないのであれば、radioを使って今まで通りのやり方で通用します。

ctpsys
質問者

お礼

ご返事送れて、すみません。 (遅れすぎ(-_-; ) 今、良く理解できます。

ctpsys
質問者

補足

早速ご回答いただきありがとうございます。 for($kako eq 'kako'){ push(@kako,$query->param('kako')); $t_kako=@kako;     #左の変数か配列をhtml fileに<CGI:$t_kako の様に渡したいのですが? { でいったん読み込みました。 ついでにお教えいただきたいのですが、 @kakoの配列をalert.html(データ表示用でcgi fileから sub replaceTags{ foreach (@html){ s/<CGI:error message>/$errMsg/i; s/<CGI:error num>/$errNum/i; s/<CGI:kako>/$t_kako/i; の用にしてデータを渡したいのですが、渡し方をお教え下さい。

関連するQ&A

  • チェックボックスのCGI渡しの質問

    <INPUT type="checkbox" name="key7" value="1">1 <INPUT type="checkbox" name="key7" value="2">2 <INPUT type="checkbox" name="key7" value="3">3 すべてチェック入れて送信した際に xxx.cgi?key7=123ではなくxxx.cgi?key7=1 2 3(xxx.cgi?key7=1%202%203) みたいに半角スペースが間に入った状態で送る方法などあるのでしょうか?かなり初心者なのでわかりづらいと思いますが、知恵を貸してください。

  • htmlのcheckboxで質問です

    <form action=" " method="post"> <p> <input type="checkbox" name="riyu" value="1"><img src="a.png"> <input type="checkbox" name="riyu" value="2"><img src="b.png"> <input type="checkbox" name="riyu" value="3"><img src="c.png"> </p> <p> <input type="submit" value="送信する"> </p> </form> のようにして、絵の左にくるチェックボックスの位置や大きさを変えたいのですが、cssとかでできるのでしょうか?できれば絵に重なるようにチェックボックスを持ってきたいのですが。 cssじゃない方法などもあるのでしょうか?よろしくお願いいたします。

  • 変数の内容が表示できません。perl初心者です。

    問合せフォームでのことです。 HTML fileからの入力内容をCGI fileで表示させ送信ボタンを押して、 確認のalert.htmlに表示させることにしてます。 CGIfileの変数が一部alert.htmlで表示できません。 スクリプトは以下の通りです。 # imag_o 下の2行はうまくいってます。 $t_imag_o="<input type=\"text\" size=\"10\""; $t_imag_o.= "name=\"imag_o\" value=\"$imag_o\">\n"; #comment 下のスクリプトはうまくいきません。 $commentの内容が渡せなくCGI fileで表示された内容が空白になります。 $t_comment="<textarea cols=\"40\" rows=\"5\""; $t_comment.= "name=\"comment\" value=\"$comment\"></textarea>\n"; このスクリプトでデータを渡しています。 sub replaceTags{ foreach (@html){ s/<CGI:error message>/$errMsg/i; s/<CGI:error num>/$errNum/i;  s/<CGI:imag_o>/$t_imag_o/i; s/<CGI:comment>/$t_comment/i; if ($errNum > 0){ s/<CGI:submit>/<input type="submit" value="送信">/i; }else{ s/<CGI:submit>//i; } } return 1; } 質問内容が不十分の所もあるかもしれませんが、よろしくお願いします。

    • ベストアンサー
    • Perl
  • checkboxの文字連結の方法を教えてください

    <INPUT name="ch" type="checkbox" value="1">1 <INPUT name="ch" type="checkbox" value="2">2 <INPUT name="ch" type="checkbox" value="3">3 <INPUT name="ch" type="checkbox" value="4">4 <INPUT name="ch" type="checkbox" value="5">5 選択してボタンを押すとチェックされた文字だけをカンマで連結して <a href="http://xxx.xx.ne.jp/xx.cgi?1,3,5">リンク</a> と表示したいのですがどのように書けばいいのでしょうか。 よろしくお願いします。

  • CGI.pmのcheckboxの-labelにHTMLタグを含んだ文字

    CGI.pmのcheckboxの-labelにHTMLタグを含んだ文字列を渡すことはできますか 具体的には、CGI.pmのcheckbox関数を使って次のような文字列を生成したいです <label><input type="checkbox" name="abc" value="xyz" accesskey="A" />abc(<span style="text-decoration: underline">A</span>)</label> 次のソースでうまくいくと思ったのですが、 $q->checkbox(-name => 'abc', -value => 'xyz', -accesskey => 'A', -label => 'abc(' . $q->span({-style => 'text-decoration: underline'}, 'A') . ')') 実際に返される文字列は、 <label><input type="checkbox" name="abc" value="xyz" accesskey="A" />abc(&lt;span style=&quot;text-decoration: underline&quot;&gt;A&lt;/span&gt;)</label> のように-labelに指定したHTMLタグが&○○;のようにエスケープされてしまいました・・・(T_T)

    • ベストアンサー
    • Perl
  • perlでcheckboxがうまく整理できない

    perl5.8でFormから送られてきたデータを取得し、整理しています。 FormはPOSTでperlに送り、データを整理したのですが、checkboxで複数のデータを送ったとき、うまく処理されていません。 Formのあるページも同じperlでcgiページを作り、エラーがあった場合、エラーメッセージ付きで再度そのcgiページを表示するようにしています。 次の内容で、@noにcheckboxで選択した番号が入るようにしています。 valueには - が余分にありますが、これは試しにcheckboxで複数選択してデータをsubmitしてみたところ、受け取り先の$in{no}で番号が連続して1つのスカラーで連なるので、番号を後に分割するために-を入れ、受け取り後、@no = split(/-/, $in{no});でばらして@noに番号を格納してあります $r_noは別のデータから受け取った比較先の番号です Formのcheckboxの部分は(実際はこれを複数回ループして$r_noが変化します) my $checkbox; foreach my $l (@no){ my $i = 0; if($l == $r_no){ $i = 1; } if($l == $r_no){ $checkbox = "<input type=\"checkbox\" name=\"no\" value=\"$r_no-\" checked>"; last; }else{ $checkbox = "<input type=\"checkbox\" name=\"no\" value=\"$r_no-\">"; } } print "$checkbox"; 2つ以上checkboxを選択して、わざとエラーが出るように他の部分を間違った選択をするようにして試してみたところ、@noには選択した分だけの番号が格納されているにもかかわらず、 if($l == $r_no){ の部分が真になるのは1つ目の@noとの真偽だけで、2つ目以降は本来真になるべき比較でも偽になってしまいます。 改行コードなどが入っているのかと思い、chompで後ろを削ったり、$l =~ s/\r?\n/K/g; $l =~ s/\r/K/g;で改行コードを可視化して確認してみましたが、それらしきものも入っていませんでした @noには選択した番号全てが収納されていますし、後ろに改行コードなど不要なものも入ってないのに真偽の分岐がうまくいかない原因は何にあるのでしょうか? 思い当たるものは一通り試したのですが、どうしてもわかりません。 「これが原因かも?」みたいな可能性だけでも結構ですので教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • チェックボックスのチェックについて

    submit時に一つでもチェックがなければアラートを表示 チェックがあれば進む・・・としたいです。 <form action=next.html name=form1> <input type=checkbox name=checkbox1 value=1> <input type=checkbox name=checkbox2 value=2> <input type=checkbox name=checkbox3 value=3> <input type=checkbox name=checkbox4 value=4> <input type=checkbox name=checkbox5 value=5> ~以下50まで続きます <input type=submit value=submit> </form> function countChecked(form1) { var total = 0; var max = 50; for (var index = 0; index < form1.checkbox.length; index++) { total += form1.checkbox[index].checked ? 1 : 0; } if(countChecked(document.form1)) > 0) { return true; } else { alert("no"); return false; } return(total); } 過去に似たような質問を参考に作ってみましたがダメでした。 チェックボックスの名前の付け方が悪いのでしょうか。

  • 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初心者です

    sub html でフォームに入力してもらい、 sub kekka で入力情報を確認し、 sub shori でテキストファイルに登録。 というプログラムを考えているのですが、 フォームから入力されたデータが入った変数$in{'name'} が、sub shori に移ると消えてしまいます。 いろいろ試行錯誤したのですが分かりませんでしたので 教えていただけたらと思います。 以下がサンプルのソースです。 #!/perl/bin/perl require './jcode.pl'; require './cgi-lib.pl'; &ReadParse; if($in{'action'} eq "set"){&kekka;} elsif($in{'action'} eq "sss"){&shori;} else{&html;} sub html{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト1</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n <INPUT type=hidden name=action value="set">\n 名前<br><input type=text name="name" size="30" MAXLENGTH="30"><br>\n <input TYPE="submit" value="確認"><INPUT type="reset" value="リセット">\n </form>\n </body>\n </html>\n EOM } sub kekka{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト2</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n <INPUT type=hidden name=action value="sss">\n name = $in{'name'} <input TYPE="submit" value="登録">\n </form>\n </body>\n </html>\n EOM } sub shori{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト3</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n name = $in{'name'} </form>\n </body>\n </html>\n EOM }

    • ベストアンサー
    • Perl
  • &ReadParseについて

    perlで&ReadParse(*Param);とした場合にこのParamには何が入ってくるのでしょうか? フォームには checkboxとアップロードファイルのデータが入っています。 アップロードするファイル名が入っていて チェックボックスには1と3にチェックが付いています。 <form action=sample.cgi method=POST ENCTYPE=multipart/form-data> <input type="file" name="file" id="file"> <input type="checkbox" name="chk" value="1"> <input type="checkbox" name="chk" value="2"> <input type="checkbox" name="chk" value="3"> </form>

    • ベストアンサー
    • CGI

専門家に質問してみよう