初心者だけどPerlが大好き

コードが世界を変える!

フォームからのデータをテキストファイルに収納するの巻

なんで 今頃 こんなことをと思われるかも知れませんが
use CGI;
%params =$q->Vars;     というのを やってみたくなったからです

trinity777.txtを作り 以後データを日付とともに足し続けていきます

既存のCGIの使いまわしで シンプルにしましたので 
CGI.pmのフォームのファイル添付はファイル名だけが記録されるのみです

tofile.cgi

#!D:/xampp/perl/bin/perl
use CGI;
use utf8;
$q = new CGI;
print $q->header(-charset => 'utf-8'),
$q->start_html(-title=>"Example CGI.pm Form", -style=>{'src'=>'form.css'}),
$q->h1(' Example CGI.pm Form'),
$q->start_div({-class=>"aaa"}),
$q->p('これは class="aaa" の部分です'),
$q->start_multipart_form(-action=>"makefile.cgi"),
$q->em("What's your name?"),
$q->br,
$q->br,
$q->textfield('name'),
$q->checkbox('Not my real name'),
$q->br,
$q->em("What's your e-mail?"),
$q->br,
$q->br,
$q->textfield('email'),
$q->br,
$q->em("What's your subject?"),
$q->br,
$q->br,
$q->textfield('subject'),
$q->br,
$q->em('Any parting comments?'),
$q->br,
$q->br,
$q->textarea(-name=>'comments',-rows=>3,-columns=>50),
$q->br,
$q->br,
$q->filefield(-name=>'uploaded_file',
                -default=>'starting value',
                -size=>50,
                -maxlength=>80),
$q->reset,
$q->submit(-name =>'Action', -value =>'送信'),
$q->submit(-name =>'Action', -value =>'Scream'),
$q->end_multipart_form,
$q->end_div,
$q->start_div({-id=>"bbb"}), 
$q->h3('これは id="bbb" の部分です'),
$q->end_div,
$q->start_div({-class=>"ccc"}),
$q->h3('これは class="ccc" の部分です'),
$q->end_div,
$q->end_html;

いつもの form.css

/* --基本部分の設定-- */

body{background-color:#66ffcc;font-size:20px;line-height:20px}

h1{text-align:center;margin:0 15%;
background-color:#eea8aa;
font-size:20px;
color:#ffffff;
font-style:italic;}

em{font-size:20px;
border-bottom:dashed;
color:#808000;}

#bbb {color:#ff1493;margin:0 15%;line-height:12px;}
.ccc {color:#008000;margin:0 15%;line-height:15px;}
.aaa{border:solid 20px red;margin:2px 15%;padding:0px;line-height:20px;}


makefile.cgi

#!D:/xampp/perl/bin/perl
use CGI;
use utf8;
$q = new CGI;
#// HTML ヘッド出力
($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
$mytime = sprintf("%04d年%d月%d日%02d時%02d分%02d秒", $year + 1900, $mon +1, $mday,$hour, $min, $sec);
%params =$q->Vars;
$fname = 'trinity777.txt';
#// ファイル書き込み
open(FILE, ">>$fname") or die;
print FILE 'Perlって楽しいね', "\n";
print FILE $mytime,"\n"; 
print FILE %params, "\n";
close(FILE);
#// ファイル読み込み
open(FILE, "<$fname") or die;
@rec = <FILE>;
close(FILE);

#// HTML ヘッド出力をして
#// ファイルを読み込み中味をみてみましょう

print $q->header(-type =>'text/html', -charset =>'utf-8');
print $q->start_html;

#// trinity777.txtファイルの中は改行されています
#// 配列@recの要素数はファイルtrinity777.txtの行数と同じになります

print @rec;

#// 行入力演算子なので 内容を行単位で引っ張り出すことができます
#// 1行目の'Perlって楽しいね'を引っ張り出してみましょう
print $rec[0];
print $q->end_html;



そして 下記のように $mytime, %params,をくっつけて
ファイルに書き込んでみましょう。
ファイルをオープンしたときに 1行のテーブル表示にできます

#!D:/xampp/perl/bin/perl
use CGI;
use utf8;
$q = new CGI;
#// HTML ヘッド出力
($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
$mytime = sprintf("%04d年%d月%d日%02d時%02d分%02d秒", $year + 1900, $mon +1, $mday,$hour, $min, $sec);
%params =$q->Vars;
$fname = 'trinity777.txt';
#// ファイル書き込み
open(FILE, ">>$fname") or die;
print FILE $mytime, %params, "\n";
close(FILE);
#// HTML ヘッド出力をして
#// ファイルを読み込み中味をみてみましょう
print $q->header(-type =>'text/html', -charset =>'utf-8');
print $q->start_html;
#// ファイル読み込み
open(FILE, "<$fname") or die;
print "<table  border=1 >\n";
foreach $data_line( &lt FILE &gt ) {
print "<tr><td>" . $data_line . "</td></tr>\n";
}
print " </tr>\n";
print " </table>\n"; 
close(FILE);
print $q->end_html;



下記のように $mytime, %params,を ";"でくっつけて
%paramsをデリファレンスしてファイルに書き込んでみましょう。
ファイルをオープンしたときに 別々に分割して表示にできます

#!D:/xampp/perl/bin/perl
use CGI;
use utf8;
$q = new CGI;
#// HTML ヘッド出力
($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
$mytime = sprintf("%04d年%d月%d日%02d時%02d分%02d秒", $year + 1900, $mon +1, $mday,$hour, $min, $sec);
%params =$q->Vars;
#// ハッシュリファレンスにしてファイルに書き込みたと思います
#// 後で分割しやすいように日付とリファレンスを":"でつなぎます
$ref_params = &yen;%params;
$fname = 'trinity777.txt';
#// ファイル書き込み
open(FILE, ">>$fname") or die;
print FILE $mytime,":", $ref_params, "\n";
close(FILE);
#// HTML ヘッド出力をして
#// ファイルを読み込み中味をみてみましょう
print $q->header(-type =>'text/html', -charset =>'utf-8');
print $q->start_html;
#// ファイル読み込み
open(FILE, "<$fname") or die;
while (<FILE>) {
chomp;
my ($mytime, $ref_params) = split(/:/, $_,);
} 
print $mytime;
print $q->hr;
print %{$ref_params};
close(FILE);
print $q->end_html;