• ベストアンサー

PerlでCGIの書き方

今、HTML:Templateを用いてCGIのプログラムを書いています。 基本的にCGI上のボタンをおすとPOSTで情報をわたして、次のCGIにいき、そこからTMPLを読み出して、画面を表示してるのですが、画面場のボタンをおしてもCGIを更新せずに、Perlの実行だけすることは可能ですか?あるいは、POSTでCGIに届いた情報をIF文で中身を確認して、表示するTMPLをかえて、Perlの実行も行うのが普通のやりかたなのでしょうか? あまりよくわからずにネットだけの情報をたよりにプログラミングをしているので設計の仕方など分からないことが多々あります。 どなたかCGIに詳しい方ご返答おねがいします。

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

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

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.2

Ajaxからコールして受信内容を破棄すれば良いです。 こんな感じ function HogeHoge(){ var xmlhttp = createHTTPRequest(); var CGIURL = 'CGIのフルURL「http://」から記述'; var sDT; xmlhttp.open('GET', CGIURL, true); xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) { sVOID = xmlhttp.responseText; } else { // 通信に失敗 } } else { // 通信中… } } xmlhttp.send(null); }

kenpanch7
質問者

お礼

実は、まだ調べてないですが。本当にありがとうございました。

kenpanch7
質問者

補足

解決法をありがとうございます。Ajaxという単語は聞いたことあったのですが、何かは知りませんでした。 こういうときに必要なんですね。実際に必要にせまられないと分からないものですね。 少し調べてみて、挑戦してみますね。それにしても、プログラミングは奥が深すぎるし、肩がこるし、神経質にならないといけないし、将来SE(就職活動中の学生なので)になるかどうか、本当に悩みます。

その他の回答 (1)

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.1

「CGI」とはクライアントからの要求(リクエスト)を受けてサーバーでプログラムを実行し、その結果を返して画面に表示する「仕組み」です。 したがって、プログラムの実行だけをして結果を返さないようにすることはできません。(結果を返さないとエラーになります)

kenpanch7
質問者

お礼

そうですね。そういわれてみればそのように聞いたことがあるようなきもします。ありがとうございました。

関連するQ&A

  • CGI(PERL)でsubmitボタンを押すことが出来ますか?

    畏れ入ります。 perlで 生成したHTML上の submitを実行することは出来ますか? 人間がボタンを押すのではなく、 例えば、5秒たったら、submitをCGIがする、といったようなことです。

    • ベストアンサー
    • CGI
  • cgi(perl)を実行のみしたい

    HTMLよりCGI(PERL)を起動し、ログファイルの読み書きを実行し、そのまま終了させることは出来ないでしょうか? CGIからデータを戻す必要は無く、ブラウザへの表示はHTMLファイルがそのまま表示される形で問題ありません。 宜しくお願いします。

  • Perl(cgi)からPerl(cgi)への引数

    (1)Perl(cgi)から(2)Perl(cgi)へ引数(データ)を渡す方法を教えてください。 プログラムの流れとしましては、 (1):データベースを検索&該当結果の番号をリンクで表示 (2):(1)でクリックしたリンクと対応する結果を表示 となっております。 また、セキュリティの事を考えて「POST」で送りたいと考えています。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • CGI/perlのエラー

    CGIのテストをしています。 サーバーはUbuntu14.04 htmlで <html> <head><title>HTMLサンプル</title></head> <body> ボタンサンプル<br> <form action="cgi-bin/test.cgi" method="post"> <button type="button">ボタン</button><br> <input type="submit" value="送信"> </form> </body> </html> test.cgi #!/usr/bin/perl system = ("date >> webwrite""); 実行すると End of script output befor heads: test.cgi のエラーで止まってしまいます。 ファイル webwriteは作成されています。 何か、終了処理が必要なもでしょうか?

  • cgi(perl)からphp呼出

    どなたかご教授ください。 perlのcgiからsystem関数でphp(コマンドで実行可能なコード)を実行して返値を得たいのですが perlのcgiの実行結果では画面に文字化けを起こしたような結果が帰ってきます。 cgi(perl)からphpを実行するにはどのように すればいいのでしょうか? ご教授ください。

    • 締切済み
    • PHP
  • 携帯用CGIフォームの修正(戻る)ボタンについて

    無料で配布されたCGIで携帯用のメールフォームを作っています。 フォームに入力後〔確認画面へ進む〕ボタンを押してエラーがあればフォームに自動で戻しエラー表示をしています。(入力内容を維持したまま戻されます) ここまではテンプレートでできました。 しかし、送信前の確認画面で、内容を修正するためのボタンがありません。 3つ作ったフォームの内の2つは携帯の戻るボタンで内容を維持したまま戻れたのですが、スクロールをしなければならない程縦長のフォームだけ、どういう訳か携帯の戻るボタンを押しても入力フォームに戻れないです。スクロールの上の方に上がるだけです。 そこで、確認画面に内容を修正するためのボタンを設置しようと考えているのですが、どのような記述をすれば良いのでしょうか? ※内容は維持したまま修正したいです。 確認画面のソースにはこのような記述があったのですがこれが関係していますでしょうか。 <!-- TMPL_LOOP NAME=loop_list --> <input type="hidden" name="<!-- TMPL_VAR NAME=key ESCAPE=HTML -->" value="<!-- TMPL_VAR NAME=value ESCAPE=HTML -->"> <!-- /TMPL_LOOP --> 大変お手数ですが教えていただけると助かります。 宜しくお願い致します。

    • ベストアンサー
    • CGI
  • Perl(cgi)でこれはできますか?

    今まで、デスクトップ上にあるJAVAのプログラムで、 http://***.ne.jp を解析して、その中から、ある値を含む条件のURLのみを抜き出してHTMLリンク集を作っていました。 この作業を、ウェブベース(sakura.ne.jpのライトプランで利用予定。使用可能言語は多分perlのcgiのみ)で行うことはできないものかと思っております。 具体的には、 インプットボックスに、解析したいURLを入れて、検索ボタンを押すと、そのURLの文章の中から必要な文章のみを抜き出してそれと、HTMLリンク集にして返すというプログラムです。 また、perlやcgiは今まで殆ど触ったことが無い言語なので、どんなことでも、参考になりそうなことがありましたら是非是非、ご紹介ください。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • PerlのCGIとPHPを

     特定のディレクトリのCGIの中にPHP(Apacheのモジュール版)を書き、(CGIで<?php~?>とHTMLを出力させる)Perl/CGIを実行したときにその出力の中に含まれるPHPを実行させたくて、.htaccessに AddHandler application/x-httpd-php cgi AddHandler cgi-script .cgi を書いたのですが、どうやらPHPのAddHandlerの後に書かれているCGIの方が優先され、PHPが実行されず、CGIのみが実行されます。  順序を逆に書いても、今度はPHPが優先されてしまい、どちらか片方しか実行されません。  どうすれば、両方同時に実行させられるでしょうか、教えてください。  それが不可能ならば、とりあえずPerl/CGIからPHPを呼び出して先に実行させるようなことができるのならば教えてください。  ちなみに、httpd.confには拡張子cgiをすべてのディレクトリでCGIとして実行、拡張子phpもすべてのディレクトリでPHPとして実行させるようにAddHandlerされています。 Apache/2.0.58(Windows版) PHP/5.1.6 CGI: ActivePerl 5.88 です。

    • ベストアンサー
    • PHP
  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • JavaScriptのアクセス解析が動きません

    当方perlの知識はないので困っております。 あるオープンソースのcgiを使っているのですが cgiファイルが呼び出すhtmlファイルにJavaScriptで記述された アクセス解析の記述をしたのですが、うまくいきません。 アドレスを見ると×××.cgiのままとなっており、表示するhtmlの中に JavaScriptの記述を埋め込んでいるという形になります。 <script type="text/javascript"> document.write("<img src=http://・・・/index.cgi?page=XXXX&r=" + document.referrer + ">"); </script> 最初に表示されるときはlogへの書き込みがなされないのですが 更新ボタンを押すと書き込みがされます。 この記述をヘッダーの中に入れたり、外部で呼び出したりいろいろやりましたがすべて同じような挙動になります。 cgiファイルの中身の最後の方はこうなっております。 my $tmpl = HTML::Template->new( die_on_bad_params => 0, filename => './html/' . $page ); # HTMLテンプレートにデータベースから読み込んだ情報を設定 $tmpl->param( dlid => $dlid, sid => $sid, message => "$message" ); #HTMLの表示 print "Content-Type: text/html\n\n"; print $tmpl->output(); この部分をいじってもダメでしょうか? また、何か対策はないでしょうか。 よろしくお願いいたします。