#!/usr/local/bin/perl
#フォームデコード用ライブラリ
#ダウンロード先↓
#http://www.bio.cam.ac.uk/cgi-lib/
require './cgi-lib.pl';
#基本的に次から次へと内容を追記していくだけです。
#認証部分がある以外はコミュニケーション系とほぼ同じ。
$title = 'Planプラン';
#書き込みデータの位置
$data_file = './data/plandata.dat';
#データの有無 無 = 1
$file_no = 0;
#当スクリプト
$script_file = './p-basic.cgi';
#パスワード
$planpass = 'planpass';
#cgi-lib.plの関数。これを呼び出すとフォームの内容が%inに格納される
&ReadParse;
#フォームデータにパスワード($in{'pass'})があり設定したパスワード($planpass)と一致したら
if($in{'pass'} eq $planpass){
#表示前に記録・削除処理を挟み込む
#フォームデータに「daytime」と「plan」と「regi」が入っていたら記録処理
if ($in{'daytime'} ne "" && $in{'plan'} ne "" && $in{'regi'} ne "") {
®idata;
#上記以外で、フォームデータに「dell」があったら削除
}elsif ($in{'dell'} ne ""){
&delldata;
}
#ページ表示
&printdata;
#パスワードが一致しない、無い、初アクセス。
}else{
#ログイン表示
&login;
}
###########################################################
#ログイン表示
sub login {
#HTML形式出力
print "Content-type: text/html\n\n";
print <<"EOF";
$title
$title LOGIN
EOF
exit;
}
###########################################################
#ページ表示
sub printdata {
#データファイルオープン
if (!open(DATA,$data_file)) { $file_no = 1; }
@lines = ;
close(DATA);
#HTML形式出力
print "Content-type: text/html\n\n";
print <<"EOF";
$title
$title
EOF
#パスワードは非表示フォーム部品(type="hidden")保持されます
#アクセス中にソースを見れば分かってしまいますが・・・
#これが無いと毎回ログイン画面が表示されます。
#Basic認証によるアクセス制限などを使用すればこのあたりは回避できます。
if($file_no == 1){
print "データファイルはありません";
}else{
#テーブルに整形して出力
print "";
foreach $line (@lines) {
#データを切り分け配列へ保存
#配列(@linedata)の代わりに次のように($ptime, $pplan)などと直接変数へ保存することも可能
#($ptime, $pplan) = split( /,/, $line);
#このあたりは掲示板などでもよくやる常套手段です
@linedata = split( /,/, $line);
$ptime = $linedata[0];
$pplan = $linedata[1];
print "$ptime | $pplan |
";
}
print "
";
}
print "\n";
exit;
}
###########################################################
#書き込み
sub regidata {
if (!open(DATA,">> $data_file")) { &error('書き込みエラー','記録できません.'); }
#フォームのDAY/TIME($in{'daytime'})とPLAN($in{'plan'})を継ぎ合わせて保存
print DATA "$in{'daytime'},$in{'plan'}
\n";
close(DATA);
}
###########################################################
#削除
sub delldata {
#データファイルを削除する
unlink $data_file;
}
###########################################################
#エラー表示
sub error {
#ローカル変数の設定
#@_は引数の配列
local (@msg) = @_;
local ($i);
print "Content-type: text/html\n\n";
print <<"EOF";
$_[0]
$_[0]
EOF
print "\n";
foreach $i (1 .. $#msg) { print "- $msg[$i]\n"; }
print "
\n";
print "\n";
exit;
}