• ベストアンサー

ホームページビルダーで作ったhtmlを、perlの中に入れたい。

burnの回答

  • ベストアンサー
  • burn
  • ベストアンサー率65% (25/38)
回答No.3

分かっている事だと思いますが、CGIの構成から説明しますね。 CGIでは、各処理系→HTML書き出しの順に処理されます。 当然、HTMLを書き出している最中に、変数処理をさせても問題ありません。 というより、こうする事でインタラクティブなページ表示を可能にするわけです。 さて本題です。 ビルダーで作ったHTMLを埋め込む・・・これが一番効率的には良いですね。 様々な文献には、print"~"の中にHTMLを埋め込む書式が基本的になっています。 ところが、このやり方だと少し面倒な事があります。 例えば、HTMLにある"(ダブルコーテーション)は、print"~"と同じ扱いになり、そのまま記述すると、当然エラーを起こします。 これを回避する為に「 \" 」と記述します。 これを延々やらなくてはなりません。 また、print"~"の構文は、HTML一行ずつ書き出していくと言う事なので、大変面倒ですね。 そこで、良い構文がありますので、使ってください。 (<>はタグの変換処理をされるといけないので全角にしてます) print <<"EOF"; <HTML> <HEAD> </HEAD> <BODY> </BODY> </HTML> EOF print<<"EOF"; ~ EOF の間にHTMLを埋め込めば良いわけです。 これはどう言うことかというと、print<<"EOF";~EOFを 単なるテキスト文として扱われます。 EOFはラベルなので、分かり易いものにすればいいです。 例えばEOFの代わりに、END_HTML等・・・ しかも、この中に変数を埋め込んで扱う事も可能です。 例えば、 PRINT<<"EOF"; <TABLE> <TR> <TD colspan="2" align="center">$bbs_title</TD> </TR> EOF こうする事で、$bbs_titleの変数の内容が表示されます。 あと、<form method="POST" action="*****.cgi"> の文は、cgiの中へ入れても問題ないでしょうか? の答えですが、当然HTMLなので、CGIの中に埋め込む事は 可能です。 こう考えると簡単ですよ。 CGIで様々に加工して、最終的にHTMLが吐き出され、ブラウザで表示される。と言う事は、HTMLを埋め込んで、必要な箇所にPerlで処理をした変数を埋め込む事で、インタラクティブなHPを作る事が出来る。

Iam2888
質問者

補足

早速の回答ありがとうございます。 上記の通り、print<<"EOF";~EOFで囲ってみたのですが、下記のエラーがでました。なぜでしょう・・・(涙) Can't find string terminator "EOF" anywhere before EOF at C:\www\test2.cgi line 15. ちなみに15行目は、 print<<"EOF"; です。

関連するQ&A

  • パールが実行されない!!

    パールを実行させようとしたのですが、以下のような結果がブラウザで返されてしまいます。 Method Not Allowed The requested method POST is not allowed for the URL /aaa/bbb/ccc/ddd.pl. そこで、元々のHTML内のPOSTをGETに変えてみたところ、今度はddd.plを上記から実行するか、保存するかのダイアログが出てきてしまいます。 <FORM method=POST onsubmit="return check()" action="../../cgi-bin/ddd.pl">               ↓ <FORM method=GET onsubmit="return check()" action="../../cgi-bin/ddd.pl"> サーバー側のパールの設定(パールが動作しない等)なのでしょうか?

  • perlでpostが受け取れない

    perlでCGI を作ってみましたが、POSTでデータが受け取れません。GETは問題ないのですが。read stdin が NULL になります。 ローカルのapache2でテストしています。$ENV{'CONTENT_LENGTH'}がゼロのためだと 思いますが対応が分かりません。 OS:CENTOS6 (VirtualBox) APACHE2.2 Perl 5.10 /var/www/cgi-bin で実行。 呼び出しは <form action='localhost/cgi-bin/uptag.cgi' method='post'"> です。

    • 締切済み
    • CGI
  • perlがうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n"; print "まずい$in{'form2'}\n"; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。 perlの場所も正確です。

    • ベストアンサー
    • Perl
  • CGI間のデータ送信について(perl)

    perlのcgiで詰まってしまったので質問します。 現在困っていることは、cgiからcgiへの変数の値の受け渡しについてです。 色々調べてやってみたのですが、うまくいきません。 送信側で print "<form action = \"sendmail.cgi\" method=\"post\">"; print "<A href =\"sendmail.cgi?$array1[0]&$array1[1]&$array1[2]&$array1[3]\">sendmail.cgi</A>"; print "<input type=\"submit\" value=\" ボタンです。 \">"; print "</form>"; として 受信側で # postでもgetでも受信できるようにする if ($ENV{'REQUEST_METHOD'} eq "GET") { $data = '1'; $testmsg = "GETで受信"; $formdata = $ENV{'QUERY_STRING'}; print("$formdata<BR>"); } elsif ($ENV{'REQUEST_METHOD'} eq "POST"){ # こちらを使用している $data = '2'; $testmsg = "POSTで受信"; $length = $ENV{'CONTENT_LENGTH'}; read(STDIN,$formdata,$ENV{'CONTENT_LENGTH'});# $dataに受信する print("$formdata<BR>"); } else { $data = '3'; $testmsg = "受信することができませんでした。<BR>"; } としてpostにて受信しようとしています。 postのif文には入ったようなのですが、データが空っぽで何も入っていないようなのです。 何が原因なのでしょうか?助けてほしいです。

    • 締切済み
    • CGI
  • name属性をperlに引き継ぎたい

    FORMタグを使って以下のようにCGIに処理を引き継ぎます。 <FORM METHOD="post" ACTION="./xxxx.cgi"> <INPUT name="フリガナ" size="30" type="text"> その場合、入力された値ではなく、name="フリガナ"の 「フリガナ」をperlで受け取りたいのですが、方法がわかりません。 ご存知の方ご教示の程よろしくお願いします。

  • perlがうごきません

    <html> <head> <title>form3</title> </head> <body> <form action="form3.cgi" method="post" name="form3"> <input type="text"name="form3"> <input type="submit"value="送信"> </form> </body> </html> ::::::::::::::::::::::::::::::: #! /usr/bin/perl if($ENV{"REQUEST_METHOD"} eq "GET"){ $str=$ENV{QUERY_STRING"}; }else{ read(STDIN, $str, $ENV{"CONTENT_LENGTH"}); } $str=~ tr/+/ /; $str=~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("c", hex($1))/eg; foreach(split(/&/, $str)){ my ($key, $value)=split(/=/, $_); $data{$key}=$value; } print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head><title>form3</title></head>\n"; print "<body>$data{'form3'}</body>\n"; print "</html>\n"; exit; :::::::::::::::::::::::::::::::: どうしてもうごきません。 どこかスクリプトがまちがっているのでしょうか。 パールのパスはあっています。

    • ベストアンサー
    • Perl
  • Perlがサーバー上でうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n; print "まずい$in{'form2'}\n; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。

    • ベストアンサー
    • Perl
  • perl 変数 代入

    恐れ入ります。 Perlで、フォームから送信して、変数に代入したいのですがうまくいきません。 print qq!<form action="./xxx.cgi" method="get">!; opendir(DIRHANDLE, "./xxx"); foreach(readdir(DIRHANDLE)){ next if /^\.{1,2}$/; print qq! <input type="checkbox" name="$_" value="$_"> <input type="submit" value="送信"></form> とし、ディレクトリ内のフォルダ名をnameに格納してxxx.cgiへ送信します。 xxx.cgi側では、 #!/usr/bin/perl use cgi; $form = CGI->new; として、送信されたデータを次々と代入したいのですが、どのようにしたらよいでしょうか。

    • ベストアンサー
    • Perl
  • (Perl)ReadParseによるハッシュへの格納について

    PerlのReadPerseについて質問させてください。 以下少々長いですが、過程を書きます。 <form>タグにより、入力フォームのページをHTMLで作成したとします(form.html)。 その際、<form method="post" action="form.cgi"> と入力しておいて、別途form.cgiを作成するとします。 form.htmlには、<form>タグ内のname属性で、それぞれ'weight' 'height' 'age'という三種類のデータを入力してもらって、取得するようにしています。 そして<input type="submit" value="登録">による、 登録ボタンを押すことで、 form.cgiに処理をさせるようにしています。 form.cgiの中身ですが、まず、最初の三行を書きます。 #!/usr/local/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); となるのですが、わからないのが、 三行目の &ReadParse(*form); です。 サブルーチンReadParseを引数*formで、 cgi-lib.plから呼び出しているということはわかるのですが、いきなり*formという形で、ハッシュを登場させているあたりがわかりません。(この際、ハッシュ名の前の%を*に変えなければならないことは、一応知っております。理由はわかりませんが。) そこで質問なのですが、 いきなり、ハッシュであるformを登場させていいものなのでしょうか?? 以下、form.cgiの内容です。 #!/usr/local/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); $name=$form{'weight'}; $sex=$form{'height'}; $megane=$form{'age'}; print "Content-type: text/html\n\n"; print "<html>\n"; print "<body>\n"; print "体重:${weight}<br>\n"; print "身長:${height}<br>\n"; print "年齢:${age}<br>\n"; print "</body>"; print "</html>"; _END_

    • ベストアンサー
    • CGI
  • アクセス元URLによって振り分ける方法

    アクセス元がアドレス1だった場合は<FORM name="form" action="1.cgi" method="POST">を表示 アクセス元がアドレス2だった場合は<FORM name="form" action="2.cgi" method="POST">を表示 アクセス元がアドレス3だった場合は<FORM name="form" action="3.cgi" method="POST">を表示 アクセス元がアドレス4だった場合は<FORM name="form" action="4.cgi" method="POST">を表示 アクセス元がアドレス5だった場合は<FORM name="form" action="5.cgi" method="POST">を表示 というように、50以上のアクセス元によって別々のCGIに送信するよう全振り分けたいのですが、方法がわかりません。 どなたかご教授宜しくお願いいたします。

    • ベストアンサー
    • Perl