#!/usr/local/bin/perl # # 簡易データベース v3.0 # (c)2002 CGI-RESCUE # database.txt → database.cgi に名前変更してください。 # [History] # v2.0 13/NOV/1998 ページ機能他 # v2.1 17/DEC/1998 全角文字マッチの不具合の訂正 # ---------------- ここを境にデータ互換はありません --- # v3.0 17/SEP/2002 データフォーマットや画面出力の変更 # ---------- # おことわり # # このプログラムは、画面や文字の色、文章挿入、フォーマットなど、直接手を加えて使う # ように作られています。このまま(初期設定のみ)でも動作しますが、好きなようにアレンジ # してご利用できます。ただし、相応のプログラミング技術が必要です。当サイトではその # 方法については対応しません。サポート掲示板等をご利用ください。 # ---------- #----------------------------------------------------------------------------------- # 既知の動作 # v3.0 半角記号については一部マッチしない場合がある. #----------------------------------------------------------------------------------- # [配置の例] # # |- jcode.pl <644> .. 日本語コード変換ライブラリ # |- database.cgi <755> .. 実行CGI # |- data.cgi <666> .. データファイル(空のファイルを用意) #-- 日本語コード処理ライブラリ require './jcode.pl'; #-- データベースファイル $file = "./data.cgi"; #-- 1ページの表示数 $page = 10; #-- お住まい選択の配列 @PREFs = ("北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県", "海外", "非公開"); ################################################################################################ # 時刻取得・MIMEタイプ出力・データ入力 ################################################################################################ ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); @wday_array = ('日','月','火','水','木','金','土'); $date_now = sprintf("%01d月%01d日(%s)%02d時%02d分",$mon +1,$mday,$wday_array[$wday],$hour,$min); print "Content-type: text/html\n\n"; # Web出力には必須 if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } # 標準入力(POST入力) else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s/&/&/g; $value =~ s/</g; $value =~ s/>/>/g; $value =~ s/"/"/g; $value =~ s/\n//g; $value =~ s/\r//g; $value =~ s/\t//g; $FORM{$name} = $value; $name2 = $name; # ページ処理用 $value2 = $value; $FORM2{$name} = $value; $value_euc = $value; &jcode'convert(*value_euc,'euc'); # 検索用 $EUC{$name} = $value_euc; } if ($buffer ne "" && !$FORM{'search'} && $ENV{'REQUEST_METHOD'} ne "POST") { exit; } # 不正防止(検索以外の処理で標準入力以外の入力を検知) ################################################################################################ # メニュー表示(ヘッダ) ################################################################################################ print <<"---HTML---";
次の内容を登録しました。| 検索 |
名前 $FORM{'NAME'} 性別 $FORM{'SEX'} メールアドレス $FORM{'EMAIL'} 年齢 $FORM{'AGE'} お住まい $FORM{'PREF'} コメント $FORM{'REM'}
---HTML--- } #2 else { print "[設置エラー] 記録ファイルの配置またはパーミッションに誤りがあります。
\n"; } } #1 else { ################################################################################################ # メニュー表示(入力チェック) ################################################################################################ if ($FORM{'preview'}) { #$FORM{'NAME'} =~ s/ //g; # 空文字を詰める処理 #$FORM{'NAME'} =~ s/ //g; if ($FORM{'NAME'} eq '') { $err = 1; $messages = '未記入があります。名前を入力してください。'; } if ($FORM{'SEX'} eq '') { $err = 1; $messages = '未選択があります。性別を選択してください。'; } $FORM{'EMAIL'} =~ s/ //g; $FORM{'EMAIL'} =~ s/ //g; if ($FORM{'EMAIL'} !~ /\b[-\w.]+@[-\w.]+\.[-\w]+\b/) { $err = 1; $messages = '未記入があります。Eメールは半角で正しくご記入ください。'; } if ($FORM{'AGE'} eq '') { $err = 1; $messages = '未選択があります。年齢を選択してください。'; } if ($FORM{'PREF'} eq '') { $err = 1; $messages = '未選択があります。お住まいを選択してください。'; } $FORM{'REM'} =~ s/ //g; $FORM{'REM'} =~ s/ //g; if ($err) { print <<"---HTML---";
$messages
---HTML--- } else { print <<"---HTML---";
名前 | $FORM{'NAME'} |
---|---|
性別 | $FORM{'SEX'} |
メールアドレス | $FORM{'EMAIL'} |
年齢 | $FORM{'AGE'} |
お住まい | $FORM{'PREF'} |
コメント | $FORM{'REM'} |
\n"; } else { ################################################################################################ # メニュー表示(検索) ################################################################################################ $sex_selected{$FORM{'SEX'}} = " selected"; $age_selected{$FORM{'AGE'}} = " selected"; $pref_selected{$FORM{'PREF'}} = " selected"; $sort_checked{$FORM{'sort'}} = " checked"; print <<"---HTML---";
---HTML---
}
if ($FORM{'search'}) {
################################################################################################
# 検索処理
################################################################################################
if (!open(IN,$file)) { print "$! $file\n\n"; exit; }
@BASE = \n"; }
else {
print " \n";
if ($next_num ne '') {
while (($key,$val) = each %FORM2) {
if ($key ne 'FF') { $buf = "$buf&$key=$val"; }
}
print " \n";
}
else {
################################################################################################
# メニュー表示(登録)
################################################################################################
$sex_checked{$FORM{'SEX'}} = " checked";
$age_selected{$FORM{'AGE'}} = " selected";
$pref_selected{$FORM{'PREF'}} = " selected";
print <<"---HTML---";
\n";
if (!@NEW) { print "●ご指定の条件では見当たりませんでした.
検索結果\n";
print " \n";
foreach $data (@NEW) {
($NAME,$SEX,$EMAIL,$AGE,$PREF,$REM) = &DecodeCSV($data);
print "名前 \n";
print "性別 \n";
print "Eメール \n";
print "年齢 \n";
print "お住まい \n";
print "コメント \n";
print "\n";
print " \n";
}
print "$NAME \n";
print "$SEX \n";
print "$EMAIL \n";
print "$AGE \n";
print "$PREF \n";
print "$REM \n";
print "↓次の$page件
\n";
}
}
print "| 登録 |
---HTML---
}}
################################################################################################
# メニュー表示(フッタ)
################################################################################################
print <<"---HTML---";
登録