cgi.pmを使ったcgiに変更したのですが・・

このQ&Aのポイント
  • 前回の質問でいただいた回答を参考に、cgi.pmを使ってcgiを作成しましたが、うまくいきません。ボタンが表示されなくなってしまいました。perlのcgiは作り方が複数あるため、選択が難しいです。
  • cgi.pmを使用してcgiスクリプトを作成しましたが、ボタンが表示されずに困っています。perlのcgiは作り方がいくつかあるため、どの方法が適切か迷っています。
  • cgi.pmを使ってcgiスクリプトを作成しましたが、うまくいきません。ボタンの表示がされなくなってしまったため、解決方法を教えてください。perlのcgiの作り方について、複数の選択肢があるため戸惑っています。
回答を見る
  • ベストアンサー

cgi.pmを使ったcgiに変更したのですが・・

http://okwave.jp/qa/q7449935.html すみません、間違えて解決を押してしまいました・・・解決していないです。 前回返信いただいた内容を参考に、cgi.pmを使ってみることにしたのですが、 上手くいきません。 ボタンが表示されなくなってしまいました。 perlのcgiは作り方が色々あって選択が大変です・・・・・ #!/usr/bin/perl # wT付けるとエラー # 2012/05/01 cgi.pm使用開始 require 'cgi-lib.pl';# cgi-lib.plを呼び出す require "jcode.pl";# jcode.plライブラリを組み込む ########################################################################### use strict; use CGI; my $q = new CGI; print $q->header(-charset=>"Shift_JIS"); print $q->start_html(-title=>"てすと", -BGCOLOR=>'#ffffff'), $q->li, # 空白? $q->center($q->h1('CGI.PM')), # 文字を大きく書く $q->br, $q->br, $q->li('<FONT color="brack">テスト?</FONT><BR>'), $q->li('<form action = \"***.cgi\" method=\"post\">');# ***.cgiにpostで送信 $q->li('<BUTTON type="submit"> テストボタン </BUTTON>'), $q->li('</form>'), $q->br, $q->strong("強調文字"), $q->br, $q->end_html; $q->hr, # 線を引く print "以下のパラメータを受け取りました。<BR>"; my ( $name, $value ); foreach $name ($q->param ) { print "$name:\n"; foreach $value ( $q->param( $name ) ) { print " $value\n"; } } exit;

  • CGI
  • 回答数2
  • ありがとう数3

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

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

> # wT付けるとエラー これは、すでに指摘があったように、文法ミスがあったので、perl -w (=use warnings)でエラーを検出して停止したんでしょう > require 'cgi-lib.pl';# cgi-lib.plを呼び出す > require "jcode.pl";# jcode.plライブラリを組み込む cgi-lib.plもjcode.plも使わないほうがいいです。古すぎます。どうしても使わなければならないという理由があれば別ですが。 CGI.pmを使えばcgi-libは不要になるはずです。日本語の文字列を処理したいときは、use Encodeしましょう。Encodeの使い方は http://blog.livedoor.jp/dankogai/archives/51031595.html などが参考になるでしょう。 > $q->li('<FONT color="brack">テスト?</FONT><BR>'), li はhtmlで言うところの List Itemタグ(<li>)です。CGI.pmのタグ出力は必ずしも必須でないです。つまり、HTMLの出力を全部CGI.pmでやらなくてもいいです。 以下、空白2文字を全角空白していることに注意。use utf8しているので、CGIスクリプト中(perlスクリプト中)に日本語を埋め込むときはutf8で保存のこと。 binmode STDIN, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; しているので、入出力はCP932(=Windows Shift jis)になる。 use strict; use warnings; use utf8; use CGI; use CGI::Carp qw(fatalsToBrowser); use CGI::Pretty; # Windows Shift JIS binmode STDIN, ":encoding(cp932)"; binmode STDOUT, ":encoding(cp932)"; my $q = CGI->new(); print $q->header( -charset => 'Shift_JIS', -type => 'text/html' ),   $q->start_html( -title => 'TEST' ); my $name = $q->param('username'); if ( !defined($name) or $name eq '' ) {   $name = 'Anonymous'; } print $q->h1("Hello $name"); print << "END_BODY"; <form method="POST" action="foo.cgi" enctype="multipart/form-data">  user name: <input type="text" name="username" value="$name" />  <br />  <input type="radio" name="look_behind" value="A" />Value A  <input type="radio" name="look_behind" value="B" checked="checked" />Value B  <input type="radio" name="look_behind" value="C" />Value C  <br />  <input type="checkbox" name="checkbox" value="ON" lablel="checkbox_label" />checkbox  <input type="hidden" name="sample" value="red" />  <input type="hidden" name="sample" value="blue" />  <br />  <input type="submit" name="Send" value="Send" /><div><input type="hidden" name=".cgifields" value="checkbox" />  <br />  <input type="hidden" name=".cgifields" value="look_behind" /> </form> END_BODY print $q->hr, "<pre>\n"; my @params = $q->param; for my $param (@params) {   print "$param:\n";   my @values = $q->param($param);   for my $value (@values) {     print " $value\n";   } } print "</pre>\n"; print $q->end_html;

kmwrod
質問者

お礼

回答ありがとうございます。 wTがエラーではなく、エラーがあるからwTの箇所でエラーになるのですね。 wTが使えないのかと思ってしまいました。 エラー箇所もコンパイラが教えてくれたら良いのですが・・・ cやvbaコンパイラのようにはいかないのですね。 文字コードのプログラムもやってみます。 頑張ります。

kmwrod
質問者

補足

すみません、上記コードを試してperl -cにてコンパイルしてみたところ、エラーになってしまいました。 やはりwTのところでエラーがでてしまいます。 "-T" is on the #! line, it must also be used on the command line at enncoding.cg i line 1.

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> $q->li('<form action = \"***.cgi\" method=\"post\">');# ***.cgiにpostで送信 「;」じゃなくて「,」では。

kmwrod
質問者

お礼

ああああ、気が付きませんでした! ありがとうございます!

関連するQ&A

  • cgiのopenについて

    cgiのopenを使って下記のソースを作りました。 が、読み込んだテキストの一行目しか読み込みませんToT require 'cgi-lib.pl'; &ReadParse(*answer); $data = "$answer{'text'}"; require 'jcode.pl'; &jcode'convert(*data,'sjis'); open(dataright,"<data.txt"); $data= <dataright>; close(dataright); print "Content-type:text/html\n\n"; print <<EOF; <html> <head> <title>メール送信フォーム</title> </head> <body> ------------------<br> お知らせ<br> $data ------------------<br> </body> </html> EOF exit; ちなみにテキストは改行に<br>を入力してあります。 ぜひアドバイスをお願いいたします。

    • ベストアンサー
    • CGI
  • Perl/CGIについて

    #!/usr/bin/perl use CGI; $cgi = new CGI(); $from = $cgi->param('from'); $namae = $cgi->param('namae'); $naiyou = $cgi->param('naiyou'); print "Content-type: text/html\n\n"; # 設定 $sendmail = '/usr/lib/sendmail'; $jcode = './jcode.pl'; $to = 'ha***@***.ne.jp'; #$from = ''; $subject ='名鉄と地下鉄の直通運転'; # 文字コードライブラリの読み込み require $jcode; # メール送信 &jcode'convert(*subject,'jis'); open(MAIL,"| $sendmail -t"); # ヘッダ情報出力 print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n"; # 本文出力 print MAIL " $namae\n\n"; print MAIL " $naiyou\n"; close(MAIL); #確認表示 print " $namae\n"; print " $naiyou\n"; print "メールを送信しました\n"; end #確認表示の所で表示が改行されない。

    • ベストアンサー
    • Perl
  • perlの質問

    #!/usr/local/bin/perl require 'jcode.pl'; # 漢字コード変換ライブラリ #********** データを受け取る $query = $ENV{ 'QUERY_STRING' }; &parse_param( $query ); $name = $param{ 'name' }; # 投稿者 $email = $param{ 'email' }; # メールアドレス #********** 結果の出力 print "Content-type: text/html\n\n"; print "投稿者:".$name."<BR>"; print "メールアドレス:".$email; exit; #********** 入力したデータの分解 ********** sub parse_param {  local( $name, $value );  local( $parse_data ) = @_;  @in_params = split( /&/, $parse_data );  foreach $in_param ( @in_params ) {   ( $name, $value ) = split( /=/, $in_param );   $value =~ tr/+/ /;   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('C', hex($1) )/ge;   &jcode'convert( *value, 'sjis' );   $param{ $name } = $value;  } } の $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack の部分だけ、何の処理をしているかがいまいちわかりません。 わかる方お願いします。

    • ベストアンサー
    • Perl
  • cgiがうまく動作しません。

    はじめまして。 現在独学でlinuxの勉強をしている者です。検索をしたり本を読んだりして対策を試みたのですがどうしても解決できないため、質問させていただきます。 環境は redhatlinux9 Apache2.0.40 です。 cgiを置いたディレクトリにブラウザでアクセスすると、 Internal Server Error と出てしまいます。 ログを見ると、 [error] 6099: ModPerl::Registry: Can't locate ./jcode .pl in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/li b/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/pe rl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i3 86-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_per l /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 .) at /var/w ww/cgi-bin/bbs/wforum.cgi line 11.! と表示されています。試しにwforum.cgiの11行目以下の require './jcode.pl'; require './fold.pl'; require './wf_init.cgi'; を require 'jcode.pl'; require 'fold.pl'; require 'wf_init.cgi'; と変更してみたところ、今度は (略)Can't locate fold.pl(略) at /var/www/cgi-bin/bbs/wforum.cgi line 12.! というエラーログが表示されました。 perlプログラムの文法、パーミッション、改行コード、FTP転送の際の転送モードは確認済みのため、問題ないと思われます。また、ここの過去ログを参考にして作成した #!/usr/bin/perl print<<EOF Content-type: text/html <HTML><BODY>CGI works Good.</BODY></HTML> EOF というtest.cgiは動作可能でした。 こういった場合、どのような原因が考えられるでしょうか。どうかご教授ください。よろしくお願いします。

  • cgi.pmとcgi-lib.pl

    こんばんは。 cgi-lib.plを引用したCGIが動かないので、cgi.pmでためしにやろうと思っています。 そこでひとつ調べてもわからないのですが、cgi-lib.plのReadParseでは%inにフォームで送信したデータが全て入るのに対し、cgi.pmではいったいどこに全てのデータが格納されているのでしょうか?要素ごとに取り出す方法は調べることができましたが、配列ごとまとまって入っているところがわかりません。 ご存知のかた教えてください。よろしくお願いします。

  • CGI.pmとcgi-lib.plの差異について・・・

    formで送信したデータをCGI.pmで受け取った場合と、 cgi-lib.plで受け取った場合に差異があるのでしょうか? cgi-lib.pl内で「\0」を組み込む処理があるのが気になります。

    • ベストアンサー
    • CGI
  • CGI.pmでラジオボタンを思い通り表示できない

    <INPUT TYPE="radio" NAME="bread" VALUE="wheat" CHECKED> 小麦パン<BR> <INPUT TYPE="radio" NAME="bread" VALUE="white"> 白パン<BR> <INPUT TYPE="radio" NAME="bread" VALUE="rye"> ライ麦パン<BR> CGI.pmでこれと同じ出力をするにはどうすればよいのですか。 解説サイトなどを見よう見まねで作った私のソースは次のとおりです。 #!/usr/bin/perl use CGI(-no_xhtml); my($q) = CGI->new; print( $q->header(-charset => "EUC-JP"), $q->radio_group(-name => "bread", -value => "wheat", -checked), " 小麦パン", $q->br, "\n", $q->radio_group(-name => "bread", -value => "white"), " 白パン", $q->br, "\n", $q->radio_group(-name => "bread", -value => "rye"), " ライ麦パン", $q->br ) これの出力結果は次のとおりです(´д`) <input type="radio" name="bread" value="wheat" checked="checked" checked>wheat 小麦パン<br> <input type="radio" name="bread" value="white" checked="checked">white 白パン<br> <input type="radio" name="bread" value="rye" checked="checked">rye ライ麦パン<br> 近づいてきてはいるのですが、全部のラジオボタンにchecked="checked"が付いてしまっています(´д`) あと、valueで指定した文字列がタグの外に出てきてしまっています(´д`)

    • ベストアンサー
    • Perl
  • 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
  • cgi-lib.plのReadParse関数

    あるパールからcgi-libを呼び出して、ReadParse関数を使おうとするとInternal Server Errorがでてしまいます。 パールの中身は #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse(*in); です。 そこで3行目と5行目の行頭に#をつけて飛ばすとパールは正常に動きます。 これってcgi-lib.plのReadParse関数がいけないんでしょうか? ダウンロードしたまま何も変更していないのに..... ちなみにサーバーのパールのバージョンは5.004のようです。

    • ベストアンサー
    • CGI
  • cgi出力での文字コードについて

    下記のソースをsjisで作っていて、出力するdata.txtをuft-8で保存したいです。 どのようにすればよいでしょうか? 下記ソースでは、data.txtはsjisになっています。 尚、htmlはsjisなのでそのまま使用したいです。 どなたか教えてください。 宜しくお願いします。 ############################# #!/usr/local/bin/perl require 'jcode.pl'; require 'cgi-lib.pl'; &ReadParse; $datafile='data.txt'; ←これの保存のみutf-8にしたい open(FH,">$datafile"); print FH "$in{'name'}"; close(FH); rint "Content-type:text/html\n\n"; print "<meta http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>"; print "<html><head></head><title>テスト</title><body>\n"; print "<center>入力完了しました。</center><hr /><br>\n"; print "<b>名前:</b>$in{'name'}<br>\n"; print "<hr />\n"; print "</body></html>";

    • 締切済み
    • CGI

専門家に質問してみよう