#!/usr/bin/perl #サーバーにより、上記のパスは異なります use strict;#定義のない変数はエラーとする use CGI qw(:standard);#CGIライブラリを利用する use CGI::Carp qw(fatalsToBrowser);#重要なエラーを表示する #$ENV{'REQUEST_METHOD'}='GET'; #$ENV{'QUERY_STRING'}='mode=view&yomi=ito&name=makoto&adrs=toyota&mail=kito&phone=0566'; my $postData = &get_PostData;#フォームデータ取得 my $hash_ref = &set_FormData($postData);#フォームデータを連想配列に記録 my %form = %$hash_ref;#連想配列をformの名前で参照する my $pass='1234';#パスワード if($form{'mode'} eq 'record') {&record();}#フォームデータをファイルに保存 if($form{'mode'} eq 'view') {&view();}#名簿を表示 #終了 #Formデータを名簿ファイルに記録する sub record{ open (InFile,"adrsBook.txt"); my @cont=; close InFile; if(($form{'yomi'} eq "")||($form{'name'} eq "" )|| ($form{'mail'} eq "")){#項目確認 &message('入力のない項目があります'); } if(($form{'pwd'} ne $pass)){#パスワード確認 &message('入力を確認して下さい'); } #項目を <> で区切って1行に合成 my $newst="$form{'yomi'}<>$form{'name'}<>$form{'adrs'}<>$form{'mail'}<>$form{'phone'}<>\n"; open (OutFile,">adrsBook.txt"); shift @cont;#先頭行を削除する push (@cont,$newst);#最後に$newstを付加する #print "record: $newst\n"; print OutFile @cont;#ファイルに記録する close OutFile;#ファイルを閉じる print &header(-type=>'text/html;charset=Shift_JIS'); print &start_html(); print qq( 登録完了しました
\n); print qq( 戻る); print &end_html(); } #名簿ファイルを表示する sub view{ if($form{'pwd'} ne $pass){ &message('パスワード入力ミスです'); } open (InFile,"adrsBook.txt");#名簿ファイルを開く print &header(-type=>'text/html;charset=Shift_JIS');#htmlヘッダーを生成 print &start_html('名簿');#html出力を開始 while(){ print qq();#表の出力を開始 my ($yomi,$name,$adrs,$mail,$phone)=split(/<>/);#項目に分解 print qq(); print qq(); print qq(); print qq(); print qq(); print qq(
名前(よみ)$yomi
名前(漢字)$name
住所$adrs
E-Mail$mail
電話番号$phone


); } close InFile; print qq( 戻る); print &end_html();#html出力を終了 } #Formパラメータを取得する sub get_PostData{ my $data; if( $ENV{'REQUEST_METHOD'} eq 'GET' ) { $data = $ENV{'QUERY_STRING'}; } else { read( STDIN, $data, $ENV{'CONTENT_LENGTH'}); } return $data; } #URIエンコードされたデータを戻す sub uri_decode{ my $str = shift; $str =~ tr/+/ /;#空白 $str =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;#漢字 $str =~ s/&/&/g;#タグ用記号 $str =~ s/"/"/g;#タグ用記号 $str =~ s//>/g;#タグ用記号 return $str; } #Formパラメータを連想配列に記録する sub set_FormData{ my $data=shift; my @pair=split(/&/,$data); my %hash;my $key; foreach(@pair){ my($key,$value)=split(/=/); $key=&uri_decode($key); $hash{$key}=&uri_decode($value); #print "form:$key\n"; }; return \%hash; } #メッセージを表示して戻る sub message{ print &header(-type=>'text/html;charset=Shift_JIS'); print &start_html('名簿'); my $str = shift; print qq($str
); print qq( 戻る); print &end_html(); exit; }