CGI-BBS > CGI > Perl > フォームを使ってテンプレートのテキストを変更、html保存したい


カレッヂ
カレッヂ


質問者 とんちん  投稿日 2006/11/1(水) 17:35:34
社内ヘルプページを作成しています。
サイト内検索をかけるため、静的なページとして
所定のフォルダに保存する必要があります。
ページの追加をサポートの方でもできるように
入力フォームとして開放して、新しいページをどんどん追加
できるようにしたいと考えています。

入力フォームから項目を打ち込み送信ボタンを押せば
htmlファイルが生成され、所定のフォルダに保存されるような
プログラムはできるのでしょうか?

当方、cgiを熟知しているわけではありませんので、
お薦めのcgiプログラムがあれば、カスタマイズできるのでは
ないかと考えています。

アドバイス よろしくお願いいたします。

【習熟度】多少の改造ができる

回答者 通りすがり  [削除]  投稿日 2006/11/7(火) 17:10:17
こんなのいかがでしょう?
==構成==
html:生成したHTMLファイルを格納するディレクトリ
index.html:入力フォーム
make_html.cgi:HTMLファイルを生成するCGI
temp.html:生成するHTMLファイルのテンプレート

エラーケースの処理やクロスサイトスクリプティング、改行コードを<br>に変換など
その他モロモロは追加してください。

▼▼▼index.html▼▼▼
<html>
<head>
<title>HTML生成入力フォーム</title>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
</head>
<body>
投稿内容を入力してください。
<form action="./make_html.cgi" method="post" name="frm1">
<table>
<tr>
<th>投稿者</th>
<td>:</td>
<td><input type="text" name="txt_name"></td>
</tr>
<tr>
<th>タイトル</th>
<td>:</td>
<td><input type="text" name="txt_title"></td>
</tr>
<tr>
<th>内容</th>
<td>:</td>
<td><textarea rows="6" name="txt_contents"></textarea></td>
</tr>
<tr>
<td colspan="3" align="center">
<input type="submit" value="HTML生成">
<input type="reset" value="キャンセル">
</td>
</tr>
</table>
</form>
</body>
</html>

▼▼▼make_html.cgi▼▼▼
#! /usr/bin/perl

use CGI;
use CGI::Carp qw(fatalsToBrowser);

my $cgi = CGI::new();
print "Content-type:text/html\n\n";

$temp_name= './temp.html';# テンプレートファイル
$html_dir= './html/';# 生成したHTMLファイル格納ディレクトリ

my $txt_name= $cgi->param('txt_name');# 投稿者
my $txt_title= $cgi->param('txt_title');# タイトル
my $txt_contents= $cgi->param('txt_contents');# 内容

&MakeHTML();

print <<"HTML";
<html>
<head>
<title>完了</title>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
</head>
<body>
HTMLファイルを作りました。。。
</body>
</html>
HTML
exit;


sub MakeHTML {
my @temp_array= &ReadFile($temp_name);

my $h_str= "";
for (my $i=0; $i<@temp_array; $i++){
$temp_array[$i]=~ s/<!-- txt_name -->/$txt_name/;# 投稿者
$temp_array[$i]=~ s/<!-- txt_title -->/$txt_title/;# タイトル
$temp_array[$i]=~ s/<!-- txt_contents -->/$txt_contents/;# 内容
$temp_array[$i].= "\n";
$h_str.= $temp_array[$i];
}

my $file_name= $html_dir . &GetDate . '.html';

open(MakeHTML, ">${file_name}");
print MakeHTML $h_str . "\n";
close(MakeHTML);

}

sub ReadFile{
my ($file_name) = @_;
my @rtn_str = ();
my $list_idx = 0;
if (-e $file_name){
#-- ファイル読込み
open (READIPFILE , "${file_name}");
flock (READIPFILE , 2);
while(<READIPFILE>){
$rtn_str[$list_idx] =$_;
chomp $rtn_str[$list_idx];
$list_idx++;
}
flock (READIPFILE , 8);
close (READIPFILE);
}
return @rtn_str;
}

sub GetDate{
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon+= 1;
sprintf("%04d%02d%02d%02d%02d%02d", $year,$mon,$mday,$hour,$min,$sec);# yyyymmddhhmmss
}


▼▼▼temp.html▼▼▼
<html>
<head>
<title>Template</title>
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
</head>
<body>
<hr>
投稿者:<!-- txt_name --> <br>
タイトル:<!-- txt_title --> <br>
<hr>
内容<br>
<!-- txt_contents -->
</body>
</html>
質問者 とんちん  [削除]  投稿日 2006/11/7(火) 19:04:03
通りすがりさん ありがとうございます。
まさにこんなプログラムです。。(感激)

サーバーに設置もできました。
あとはこちらでカスタマイズさせていただきます。

cgiの腕があまりありませんので助かりました、
とても便利なシステムができるように思います。

ありがとうございました。

このページは終了したので返信(回答)は書きこめません
 


Web裏技