CGI(Perl)とHTMLについて

このQ&Aのポイント
  • CGI初心者のためのPerlとHTMLの基礎知識について解説します。
  • CGIのページでHTMLの要素を呼び出す方法やカスタマイズについて説明します。
  • Perlの記述によるテーブルの挿入時に起きる問題とその解決策について考えます。
回答を見る
  • ベストアンサー

CGI(Perl)とHTMLについて

CGI初心者です、Perlの知識は皆無です。 質問は2つあるのですが・・・ 1、CGIのページを例えば画像を呼び出すようにHTMLで指定できるのでしょうか? 画像であれば<img src=".../AAA.gif">ですが、こんな感じでCGIのページ自体をHTMLの指定した枠に呼び出すことはできるのでしょうか。 2、CGIページのカスタマイズ 現在、CGIレスキューさんからダウンロードしたファイルをカスタマイズしています。 条件指定ができる検索データベースです。 設置と動作確認はできたのですが、思うようにレイアウトできないでいます。 Perl記述中にテーブル(HTML)を挿入すると、プルダウンメニューから選択項目が飛び出してしまうのです。 (おおざっぱに記述すると) print <<"---HTML---"; あいうえお<select name="aiueo" size=1> ---HTML--- forseach $i (@AIUEOs) { print "<option value=\$i\"$pref_selected{$i}>$i</option>\n";} print <<"---HTML---"; </select> <p> (略) ---HTML--- こんな感じです、変数の部分は変えてます。 ずっと上の方で、 @AIUEOs = ("あああ", "いいい", "ううう", "えええ", "おおお"); と、変数が定義されてるようです。 名称かきく「プルダウンメニューA」 名称あいうえお「プルダウンメニューB」 要は、「 」の部分を揃えたい(縦に整列)のですが、うまくいきません。プルダウンメニューが飛び出してしまいます。 2段目のHTML記述部分がなぜ閉じタグから始まっているのかもよくわからないです。 端折ってますので、分かりにくいと思いますが、コメントいただける方、よろしくお願いします。

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

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

  • ベストアンサー
  • chupark
  • ベストアンサー率41% (90/218)
回答No.2

再び回答しにきました。 1. iframeについて iframeタグにはそれ自身のサイズを指定するwidth(幅) と height(高さ)の属性があります。 また、スクロールに関しても、scrolling=noとすることでスクロールバーの表示もコントロールできます。 <iframe src="hoge.cgi" width="50%" height="200" scrolling=no></iframe> 2. select周りについて ようやくお悩みの部分がわかってきました。 純粋なHTMLなら理解されているようですね。 ならば、「foreach $i (@PREFs) 以下の部分は selectタグのoption部分にあたる部分である」という風に考えてください。 <<"---HTML---"; 部分をまたがっても構わないのです。</select>の部分も含めてテーブルにしてしまってください。 要は、perlって言語を使ってはいますが、結局はHTMLを書いているのです。 今回のプログラムをブラウザで実行させて、 画面に出した状態でソースを表示してみると分かりますが、 perlはhtmlを動的に書き出しているのであって、 結局はprintなどで書き出されるhtmlがページのレイアウトを決めます。 したがって、<<"---HTML---"; 部分をまたがってても、最終的に出力されるhtmlが正しければよいのです。

kasa2003
質問者

お礼

chupark様 ありがとうございます。1、の属性はあとで気付きました。これは問題なかったのですが、2、にて <<"---HTML---";を気にせずにテーブルで挟んだら、うまくいきました!項目がはみでらずに表示されてます。 これでレイアウトはなんとかなりそうです。どうもご親切にありがとうございました。 なぜこうなるのか仕組みがまだ理解できてませんが、Perlも少しづつ勉強していこうと思います。また機会がありましたらよろしくお願い致します!

その他の回答 (1)

  • chupark
  • ベストアンサー率41% (90/218)
回答No.1

1. カウンタープログラムなどのように、表示結果がGIFで表示されるようなものは<img>タグで埋め込まれていることがありますね。 そうではなく、formなども表示させたいのであれば、フレームか iframe を使うのはどうでしょうか? <iframe srce="hoge.cgi"></iframe> 2. perlで print と書かれいている部分は単純にその内容を出力する部分です。 HTML部分へ細工をしてレイアウトをいじってみてはどうでしょう? 具体的には、tableタグなどで かきく、あいうえお の部分と <select>の部分とを別のセルへ入れるようにします。 ちなみに、例文でお書きになった部分は、 selectの中身になる option の部分をプログラムで制御して @AIUEOs に入っているものを表示させるようにしてあるようです。 プログラムでoptionをすべて書き終わった後、selectの閉じタグを改めてprint で出力させているので閉じタグからはじまったような形になっています。

kasa2003
質問者

補足

早速のご回答、ありがとうございます。 1、については仰せのとおり、<iframe src="~ で表示できました。 ただ、フォームの大きさを、表示させたいサイズに指定するとスクロールバーがでてきてしまいます(また課題が・・・) 2、例えば、 <table> <tr> <td>かきく</td> <td> <select name="kakikku"></select> <option value="かきく"$kakiku_selected{'かきく'}>かきく</option> </td> </tr> <tr> <td>あいうえお</td> <td> <select name="aiueo"></td> </tr> </table> ---HTML--- foreach $i (@PREFs) { print "<option value=\"$i\"$aiueo_selected{$i}>$i</option>\n"; } print <<"---HTML---"; </select> ---HTML--- このように名称と入力フォームをそれぞれテーブルに入れようとすると、“あいうえお”の方がプルダウンメニューからはみ出して表示されてしまうんです。 “かきく”の方は、正しく表示されます。“かきく”の方は<select>タグの直後に<option>でメニュー項目がきてるから正常に表示されるのだと思いますが、 “あいうえお”の方は、閉じタグ</select>だけが、挟んだテーブルタグの外側にきてしまってるからだと思うのですが、いかがでしょうか? >プログラムでoptionをすべて書き終わった後、selectの閉じタグを改めてprint で出力させているので閉じタグからはじまったような形になっています。 たぶんこの辺がよくわかっていないためだと思います。 </select>も含めてテーブルで囲むべきでしょうか。 そうすると、 ---HTML--- <<"---HTML---"; をまたがってテーブルを記述することになるんですが・・・ でも大変参考になりました。ありがとうございました。

関連するQ&A

  • Perlを使ったCGIでHTMLメールの送信

    Perlを使ったCGIからHTMLメールの送信がしたいです。 そして、そのメール本文に、Formタグのボタンを付けて、そこからCGIのページを開きたいです。 メール送信はできていて、受信した時にHTML形式のメールになっているのですが、FormのボタンからさらにCGIを開こうとすると、ページは開いても、Body部分は空の状態のページが開きます。 そのFormの部分は、HTMLのページ上に設置するとそこからは希望通りのページの表示をしてくれます。 メール本文中にFormタグを設置してもうまく動かないのでしょうか。 CGIのメール送信部分は以下です。 my $mailtext =<<"MAILTO_TEXT"; To: aaa@bb.co.jp Cc: From: aaa@bb.co.jp Subject: テストです Content-Transer-Encording: 7bit Content-Type: text/html; charset=ISO-2022-JP テストです。<Br><BR> 下のボタンを押してご確認ください。<br><br> <form name="mst" method="post" action="aaaaaa.cgi" enctype="multipart/form-data"> <input name="submit" type="submit" value="詳細"></form> MAILTO_TEXT open(MAIL,"| $sendmail -f $mailto -t") ; print MAIL $mailtext; close (MAIL); おかしい部分、足りない部分などありましたら教えて下さい。 どうぞよろしくお願いいたします。

  • CGIでJavaScript

    今自作の管理ページを作っているのですが、ある部分で詰まってしまってしまいました(^^; プルダウンメニューを付け加えるコードがありますよね? <SELECT NAME=menu> <OPTION VALUE=$i>$name</OPTION> </SELECT> ↑これです プルダウンメニューから項目を選ぶ時、今どの項目が選択されているかをプログラム側で判断することはできないでしょうか? 今のところVALUE値に0~Nの値を設定して、QUERY_STRINGから値を取り出し、そこから判定させているのですが、これだと一々メッセージとして飛ばしてやらないと判定できませんよね?(できれば更新しないで反映させたいのです) そこで、項目を選択した瞬間に今どの項目が選択されているのか(selectedIndexを使うのでしょうか?)をプログラム側に渡したいのです。(項目番号だけでいいので) JavaScriptの中で$aなど変数を設定してもどうもうまく代入してくれませんでした。 その時のコードは、 function change(){ $a = form.select.selectedIndex; } です。 それともう一つ、CGIの場合、リアルタイムに処理をすることはできるのでしょうか? 掲示板など、投稿ボタンを押すとページが更新されて、メッセージが追加されます。 上記のプルダウンメニューを選択した瞬間にいろんな処理(JavaScriptではなくPerlで)をさせることは可能でしょうか? かなりわかりにくい文章になってしまいましたが、 どなたか、わかる方レスお願いしますm(__)m

    • ベストアンサー
    • Perl
  • Perlの部分的なHTML出力

    調べてみたんですがちょっと探し当てられなかったので教えてください。 HTMLファイルの中である一部分だけPerlによる出力でページを表示させたいのですが、それは可能でしょうか? 自分なりに調べて試してみたのは、HTMLで<IMG>タグをつかってPerlを呼び出し、Perlにprint文で出力を書けばいいのかな? とやってみましたが、できません。 全てPerlで出力するしか方法はないのでしょうか? ご解答お願いします

  • HTMLからCGIの呼び出しができません。

    既に作ってあるHTMLファイルをコピーして、CGIファイルの名前を変えて送信ボタンをクリックしました。CGIファイルはTITLEだけの記述にしましたが、TITLEは表示されず、http://~のようにアドレスが表示されます。HTMLファイルの方は、<form action="./A.cgi" method="post">のように修正し、CGIファイルの方には、以下のように記述してあります。何が原因でTITLEが表示されないのでしょうか? #!/usr/local/bin/perl use CGI qw(:standard); print<<END_OF_HTM; Content-type:text/html <HTML> <HEAD> <TITLE>XXXXXX</TITLE> </HEAD> </HTML> END_OF_HTM

    • ベストアンサー
    • Perl
  • HTMLにCGIカウンターを

    初歩的なCGI(Perl)のアクセスカウンターの作り方を学びました。 今まではHTMLでHPを作成していました。そこでトップページにアクセスカウンターを付けたいのですが、当然のことながら今のトップページは「index.html」ファイルです。このファイルにCGIによるアクセスカウンターをつける場合、「index.html」のファイルを一から「index.cgi」ファイルにPerlで書き換えなければならないのでしょうか。今の「index.html」の一部分を書き換えるだけでCGIのアクセスカウンターが設置できないものでしょうか。

    • ベストアンサー
    • CGI
  • CGI Perl のデバックで

    CGI Perl のデバックで ブラウザーに出力指定しました。 記述したCGIがそのまま表示されますが、どこかおかしいところは 何か印が付くんじゃないんですか? str.fileNotFoundNote が出て困ってます。 サーバーのCGIのディレクトリーなどは確認済みで、その通り指定してますが。 CGIのデバックでは 判らないですかね? 初心者マークで ほんとに すみません。

    • ベストアンサー
    • Perl
  • HTMLのタグをPerlに書き換えるには?

    HTMLのタグをPerlに書き換えたいのですが コピー&ペースト感覚でPerl変換が出来るような エディターかサイトはないでしょうか? 今のHTMLのデザインをそのまま使いたいので、、 HTMLへの書き出し(<Print>)・・・の部分だけで いいのですが。  御指導宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • HTMLからCGIへデータを引き継ぎ

    HTMLでメールフォームを作りCGI(Perl)で次のプログラムを作りました。 #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "$mail\n"; print "$namae\n"; print "$naiyou\n"; 動作確認のためプログラムは少しにしました。何も表示されません。

    • ベストアンサー
    • Perl
  • HTML上でcgiをイメージタグで呼び出すと×が出ます

    お世話になっております。 お分かりになる方いらっしゃいましたら、お手数ですがご教授願えますでしょうか? cgiを勉強しているのですが、以下のような感じで テストページを作ってみたところうまくcgiが呼び出せなくて困っています。 test.htmにてcgiをimgタグで呼び出そうとしています。 しかし、ブラウザで表示すると「×」が表示されてしまいます。 【test.htm】 --------------------------------------------------------------- <html> <head> <title>テスト</title> </head> <body> <IMG src="http://www.xxxxx.xx.xx/test.cgi" width="401" height="31" border="0"> </body> </html> --------------------------------------------------------------- ※「xxxxx.xx.xx」はドメイン名が入ります。 【test.cgi】 --------------------------------------------------------------- #!/usr/local/bin/perl print "Content-type: text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>テスト</title>\n"; print "</head>\n"; print "<body bgcolor=\"#ffcccc\">\n"; print "これはCGIのテストです。\n"; print "</body>\n"; print "</html>\n"; --------------------------------------------------------------- となっています。 ちなみに設置の仕方は以下の通りになります。  html/(レンタルサーバのメインディレクトリ)  │  ├ test.htm ……………………… (755) テストcgi呼出しHTML  │  └ test.cgi …………………… (755) テストcgiファイル 直接test.cgiを指定すると問題なく表示されます。 何か原因が他にあるのでしょうか? お手数ですが宜しくお願いいたします。

    • ベストアンサー
    • HTML
  • HTMLからPerlを呼び出すには?

    今、Perlで他のサイトのtxtファイル(中身はliタグやaタグのHTMLファイルで、そのサイトではSSIで呼び出されています)を、入手して表示させるプログラムを作っています。 これを、呼び出して、あたかも私のサイトのように見せるにはどうすればよいでしょうか? 現在はiframeを使ってそのままtxtファイルのアドレスを指定しているのですが、拡張子がtxtであるため、IEでしか見れないという不具合があります。 これを解決するために、とほほさんのwww入門 http://tohoho.wakusei.ne.jp/wwwperl2.htm#socket で紹介されているPerlを参考にしました。そのPerlのファイルをブラウザから直接URL指定すれば実行できるようにはなり、txtの中身が表示されるようになったのですが、どのようにHTMLから呼び出せばよいのかわかりません。 やはりSSIで実行するしかないのでしょうか。 javascriptの場合、<script>タグでHTMLに直接スクリプトを記述できますが、Perlでもそのようなことは可能ですか?

    • ベストアンサー
    • HTML

専門家に質問してみよう