ビルダーで作成したhtmlを、perlの中へ入れたいのですが、書籍を見てますと、print "<~~~>"\n;
と、いう具合にしなさいとの指示があります。
しかし、一律にprintを各行に付けてもエラーが出ます。なぜでしょう?
諸先輩方のperlを見ると、printなんて、あんまり使用してないようにおもえるのですが、もっと手っ取り早く組み入れる方法があるのでしたら教えてください。
htmlでは各dataを、*****.cgiへ引き渡してるのですが、
<form method="POST" action="*****.cgi">
の文は、cgiの中へ入れても問題ないでしょうか?
初心者なので、でたらめな質問かもしれませんがよろしくお願いいたします。
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を作る事が出来る。
この回答への補足
早速の回答ありがとうございます。
上記の通り、print<<"EOF";~EOFで囲ってみたのですが、下記のエラーがでました。なぜでしょう・・・(涙)
Can't find string terminator "EOF" anywhere before EOF at C:\www\test2.cgi line 15.
ちなみに15行目は、
print<<"EOF";
です。
No.5
- 回答日時:
print<<"EOF";でエラーがでましたか。
。これだけだと何とも言えないんですが、
HTMLの後のEOFはラベルなので、スペースは空けないで下さい。
良くあるのは、プログラムを見やすくするために、階段式に記述していたりすると、ラベルも同じようにスペースを空けてしまったりします。
print<<"EOF";自体には、特に問題はないと思うので
考えられるのはその辺かな。
あと、気を付けなければならないのは、
Content-type: text/htmlの記述は必須ですが、
必ず<HTML>とは一行空行が必要になります。
この時、print<<"EOF";の中に入れてしまっても良いですが、間違えやすい場合は、この箇所だけ
print "Content-type: text/html\n\n";
を使って、あとはprint<<"EOF";を使うと良いでしょう。
今出ているエラーは構文エラーなので、一行ずつ丹念にチェックすると、必ず解決します。
多分、printにからむ部分は、上記の2点位だと思うんですが・・・・
ソースコードが見れれば直ぐに判るんですけどね。
もし良かったら、print文のあたりのソースコード記載してくれませんか。
この回答への補足
どうしてもうまくいきません。ソースは以下の通りです。
#!/user/bin/perl
open(IN,"data.csv");
#flock IN,2;
@line = <IN>;
#flock IN,8;
close(IN);
$cnt = 0;
foreach(@line){
($sina[$cnt],$jpg[$cnt],$pr[$cnt],$kakaku[$cnt]) = split(/\,/,$_);
$cnt++;
}
#以上の変数を以下のhtmlに埋め込む予定
print "Content-type: text/html\n\n";
print<<"EOF";
<HTML>
<HEAD>
<meta http-equiv="Content-type" content="text/html; charset=shift_jis">
<META name="GENERATOR" content="IBM HomePage Builder 2001 V5.0.0 for Windows">
<TITLE>あいむ</TITLE>
<STYLE type=text/css>
<!--
input ,textarea ,select {color:#333333; background-color: #ffffff; border-top: #888888 1px solid; border-right: #888888 1px solid; border-left: #888888 1px solid; border-bottom: #888888 1px solid;}
a{text-decoration:none;color:#004488;}
a:hover{text-decoration:underline; color:#004488;}
body ,tr ,td {font-size:10 pt;}
big {font-size:12 pt;}
small {font-size:8 pt;}
//-->
</style>
</HEAD>
<BODY BACKGROUND="" BGCOLOR="#ffffff" TEXT="#333333" LINK="#004488" VLINK="#888888">
<center>
<form method="POST" action="r_formmail.cgi">
<TABLE width="651">
<TBODY>
<TR>
<TD width="172" height="148">
<TABLE width="161">
<TBODY>
<TR>
<TD align="center" height="22" bgcolor="#00ff00">■てれび■</TD>
</TR>
<TR>
<TD align="center" height="106" bgcolor="#00ff00"><IMG src="fukui/am/sumpl.jpg" width="126" height="84" border="0" align="middle"></TD>
</TR>
</TBODY>
</TABLE>
</TD>
<TD width="296" colspan="2" height="148">
<TABLE width="423">
<TBODY>
<TR>
<TD colspan="2" bgcolor="#00ff00" valign="top" width="500" align="left" height="88"><BR>
・そば、天ぷら、<BR>
小鉢(日替わり)、ビール<BR>
</TD>
</TR>
<TR>
<TD height="40" bgcolor="#00ff00" colspan="2" width="500" valign="middle" align="center">¥1200 ご注文 <SELECT name="data4">
<OPTION value="0"> 0</OPTION>
<OPTION value="テレビ×1"> 1</OPTION>
<OPTION value="テレビ×2"> 2</OPTION>
<OPTION value="テレビ×3"> 3</OPTION>
<OPTION value="テレビ×4"> 4</OPTION>
<OPTION value="テレビ×5"> 5</OPTION>
<OPTION value="テレビ×6"> 6</OPTION>
<OPTION value="テレビ×7"> 7</OPTION>
<OPTION value="テレビ×8"> 8</OPTION>
<OPTION value="テレビ×9"> 9</OPTION>
<OPTION value="テレビ×10">10</OPTION>
<OPTION value="テレビ×11" selected>11</OPTION>
<OPTION value="テレビ×12">12</OPTION>
</SELECT></TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
</TBODY>
</TABLE>
<BR>
<table><tr><th bgcolor="#888888">
<b><font color="#eeeeee"><big>■ お届け先 ■</big></font></b>
</tr>
<tr><td>
<br>
<ul>
<li>以下の項目に記入してください。(必須)と書かれた項目には必ずご記入願います。
<li>「送信」ボタンを押すと内容確認画面に移ります。
</ul>
<FONT color=#404080><B>【お名前】</B></FONT>まとめてのご注文は代表者のお名前をどうぞ。<br>
<INPUT type="text" name="data1" size="32" value="" onblur="this.style.backgroundColor='';" onfocus="this.style.backgroundColor='#f7f7f7'; "> <br>
<FONT color=#ff4422><B>※</B></FONT><SMALL>必須項目です。必ず記入してください</SMALL><BR>
<BR>
<FONT color="#404080"><B>【電話番号】</B></FONT>ハイホン(-)は記入しないでください。<BR>
<INPUT type="text" name="tel" size="24" onblur="this.style.backgroundColor='';" onfocus="this.style.backgroundColor='#f7f7f7'; "><BR>
<FONT color="#ff4422"><B>※</B></FONT><SMALL>必須項目です。必ず記入してください<BR>
</SMALL><br>
<FONT color=#404080><B>【住所】</B></FONT>市町村から番地までご記入ください。<br>
<INPUT type="text" name="data2" size="44" value="" onblur="this.style.backgroundColor='';" onfocus="this.style.backgroundColor='#f7f7f7'; "> <br>
<FONT color=#ff4422><B>※</B></FONT><SMALL>必須項目です。必ず記入してください</SMALL><BR>
<br>
<FONT color=#404080><B>【住所2】</B></FONT><FONT color="#000000">会社・施設・部署・ビル名・階数等</FONT><br>
<INPUT type="text" name="data3" size="77" value="" onblur="this.style.backgroundColor='';" onfocus="this.style.backgroundColor='#f7f7f7'; "> <br>
<FONT color=#ff4422><B>※</B></FONT><SMALL>配達先が住宅以外の場合、なるべく詳しく記入してください。 【例】○○株式会社 1F事務所</SMALL><BR>
<HR align=center color=#444444 width="100%">
<center>
<input type="submit" value="送信する" name="submit">
<input type="reset" value="リセット" name="reset">
</CENTER>
</td></tr></table>
</FORM></center>
</body>
</html>
EOF
No.2
- 回答日時:
print を各行の頭につけるだけでは駄目です(笑) HTMLを Perl に埋め込むのは、Perl の使い方としては中級レベルの作業なので、まずは「文字列を記述する際のルール」を復習した方がいいでしょう。
文字は必ずダブルクォート(”)で囲まれていなければならないので、その作業もしなければいけません。また、文字列内にダブルクォートがくると、その前には¥をつけなければならないという決まりもあります。
そんなこと考えててると面倒なので、もっと簡単な方法があります。
print <<EOM;
Content-type: text/html
<html>
以下略
EOM
このように、「<<EOM」という文字列を使うと、その次の行から EOM までをすべてまとめて出力してくれます。
このとき、「Content-type: text/html」とその次の行の空きは省略してはいけません。これはMIMEヘッダーというもので、Perl からHTMLを出力するときには必ず必要な物です。
それから、Perl はあくまで「HTMLテキストを出力しているだけ」であり、フォームの処理は閲覧者側のパソコンがやることなので、出力してはいけない文字は存在しません。
この回答への補足
早速の回答ありがとうございます。
上記の通り、print<<EOM;~EOMで囲ってみたのですが、下記のエラーがでました。なぜでしょう・・・(涙)
Can't find string terminator "EOM" anywhere before EOF at C:\www\test2.cgi line 15.
ちなみに15行目は、
print<<EOM;
です。
No.1
- 回答日時:
私もそれほど詳しくないので間違えてるかもしれないですが、ビルダーで作ったhtmlをperlに入れるとは???
ハイパーテキストをプログラムに埋め込んで何をするのですか?CGIにhtmlの要素を付け加えるならそれなりのプログラムを書き足すのが筋で楽じゃないかな?と思うのですが
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Perl perlでリテラル値はメモリにどのように格納されているか? 1 2023/01/15 20:45
- CGI サイト訪問者の情報を取得したい 1 2023/02/21 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CGI
-
htmlからパラメータで、cgiに渡...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
SUN BBSの改造方法
-
pythonのnumpyでの列(縦)ベク...
-
vsftpd+sslでアップロードできない
-
HTML プルダウンメニューの選択...
-
Javascriptの変数をCGIに送る方法
-
perlで書いたcgiでsqliteの使い...
-
Webアプリケーションを作りたい!
-
WEBページを強制的に横画面で見...
-
『数字の3桁毎にカンマを付け...
-
HTMLからCGIへデータを引き継ぎ
-
チェックボックスで選択した内...
-
標準入力からデータが読込めない
-
VBで表示したホームページの...
-
open.window(javascript) を使...
-
CGI実行できない。ソースが表示...
-
↓の質問:テキストではなく、セ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perl/cgi リダイレクトができない
-
htmlからパラメータで、cgiに渡...
-
フォントサイズを変えるには?
-
CGI経由でのPDFファイルをダウ...
-
CGI
-
プログラム実行中の待機ページ...
-
メイルフォームの本文が文字化け
-
Yomi-Searchのカテゴリを縦並び...
-
cgi(perl) sendmailの使い方
-
sendmail 送信先を複数設定す...
-
iis+cgiでmultipart/form-data...
-
<FORM TYPE="subumit">でデータ...
-
サーバー上のPDFにCGIでパスワ...
-
指定のフォルダに指定のファイ...
-
wordの数式について 定積分を書...
-
ラジオボタンが両方とも選択で...
-
select値をhiddenのvalueに渡し...
-
「value」に2つの値をセットす...
-
チェックボックスの返す値
-
INPUT TYPE
おすすめ情報