HTML::FillInForm - HTML フォームにCGIデータをすまわせる
このモジュールは、前のページのHTMLフォームからのデータを HTMLの input や textarea や select タグに自動的に挿入します。 HTML::Parserのサブクラスであり、HTML::ParserでHTMLを解析し、値をフォームタグに挿入します。
有益な適用例の一つは、ユーザーがHTMLフォームを、必要事項を埋めずにサブミットしたら、 HTML::FillInFormは、全てのフォーム要素がサブミットされた内容を含んでいる状態で、 HTMLフォームを再表示するのに使われえます。
この例では、$htmlForm に入っているHTMLフォームに、$qの中に入っているCGIパラメータで埋めます。
たとえば、以下では、どの"name"テキストフィールドの値も"John Smith"になります。
my $q = new CGI;
$q->param("name","John Smith");
my $fif = new HTML::FillInForm; my $output = $fif->fill(scalarref => \$html, fobject => $q);
new() を呼ぶと、新しいFillInForm オブジェクトを生成します:
$fif = new HTML::FillInForm;
$htmlに含まれるHTMLフォームをうめます:
$output = $fif->fill(scalarref => \$html,
fobject => $q);
$qからのデータで、$hrmlに含まれるHTMLフォームが埋められたものが返ります。
$qはCGIモジュールのparamのように働くparam()メソッドを持っている必要があります。
$output = $fif->fill(scalarref => \$html,
fobject => [$q1, $q2]);
配列リファレンスとして複数のオブジェクトを渡すこともできます。
$output = $fif->fill(scalarref => \$html,
fdat => \%fdat);
%fdatからのデータで、$htmlに含まれるHTMLフォームが埋められたものが返ります。
配列リファレンスを使って、%fdatを使う複数の値を渡せます。
代わりに、次のようにもできます。
$output = $fif->fill(arrayref => \@array_of_lines,
fobject => $q);
および、
$output = $fif->fill(file => 'form.tmpl',
fobject => $q);
HTMLに複数のフォームがあり、二つのうち一つのフォームにしか値を入れたくなければ、 ターゲットを特定できます。
$output = $fif->fill(scalarref => \$html,
fobject => $q,
target => 'form1');
次のものを含むフォームしか埋めません。
<FORM name="form1"> ... </FORM>
注意して下さい。このメソッドは、デフォルトでパスワードフィールドを埋めます。 無効にするには、次のものを渡して下さい。
fill_password => 0
いくつかのフィールドを埋めるのを無効にしたいなら、
ignore_fieldsオプションを使って下さい:
$output = $fif->fill(scalarref => \$html,
fobject => $q,
ignore_fields => ['prev','next']);
Apache::PageKitで、HTML::FillInFormを使うのは簡単です。
<form>タグを含むいくつかのページのために、自動的に呼ばれます。
fill_in_form設定オプションを使うことで有効か無効にできます。
HTML::FillInFormは、いまや、Apache::ASPに統合されています。次のようにすれば有効になります。
PerlSetVar FormFill 1
$Response->{FormFill} = 1
このドキュメントは、HTML::FillInFormモジュール versin 1.00 について説明しています。
ページにパスワードフィールドがある場合、キャッシュの問題を思いつくかもしれません。 次のURLにこの問題についての議論があります。
http://www.perlmonks.org/index.pl?node_id=70482
要約すれば、ブラウザにはCGIスクリプトの出力をキャッシュするものがあり、
Expires ヘッダをセットすることでこれをコントロールできます。
たとえば、CGI.pmで -expires を使ったり、
Apache::PageKitの Config.xml ファイルのbrowser_casheを
noにセットすることで、キャッシュをコントロールできます。
どんなバグレポートも、tjmather@tjmather.com.に提出してください。
Perl 5.005 と HTML::Parser version 3.08 を必要とします。
HTMLとPerlコードを結びつけることをせずにCGIデータをHTMLフォームに挿入できたかったので、 このモジュールを書きました。 CGI.pmと Embperlは、CGIデータをフォームに挿入することを可能にしますが、 HTMLとPerlをミックする必要があります。
(原文まま)
(c) 2002 Thomas J. Mather, tjmather@tjmather.com
All rights reserved. This package is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
HTML::Parser, Data::FormValidator, HTML::Template, Apache::PageKit
修正、バグレポート、ドキュメントが、以下の方々により寛大に提供されました:
Tatsuhiko Miyagawa Boris Zentner Patrick Michael Kane Ade Olonoh Tom Lancaster Martin H Sluka Mark Stosberg Trevor Schellhorn Jim Miner Paul Lindner Maurice Aubrey Andrew Creer Joseph Yanni Philip Mak Jost Krieger Gabriel Burka Bill Moseley
Thanks!
翻訳者:加藤敦 (ktat.is@gmail.com)
Perlドキュメント日本語訳 Project にて、 Perlモジュール、ドキュメントの翻訳を行っております。
http://perldocjp.sourceforge.jp/ http://sourceforge.jp/projects/perldocjp/ http://www.freeml.com/ctrl/html/MLInfoForm/perldocjp@freeml.com http://perldoc.jp