## CosmoNavi v3 ## mente.pl <2003/11/29> ## Copyright (c) KentWeb #------------------------------------------------ # ■新規登録フォーム #------------------------------------------------ sub form { # 登録 if ($in{'job'} eq "regist") { # 入力チェック &input_check; # ロック開始 &lock() if ($lockkey); ($cls1[0],$cls2[0]) = split(/:/, $in{'cate'}); $mypw = &encrypt($in{'pw'}); $time = time; &get_host; # データNo open(IN,"$numfile") || &error("Open Error: $numfile"); @num = ; close(IN); ($num,$all) = split(/,/, $num[0]); $num++; $data[0] = "$num<>$cls1[0]<>$cls2[0]<>$in{'sub'}<>$in{'url'}<>$in{'name'}<>$in{'email'}<>$mypw<>$in{'comment'}<>$time<>0<>$host<>\n"; # ログ展開 $url_flag=0; $eml_flag=0; $reco[0] = 0; open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$tim,$reco,$hos) = split(/<>/); # 重複チェック if (!$w_url_regist && $in{'url'} eq $url) { $url_flag=1; last; } if (!$w_eml_regist && $in{'email'} eq $eml) { $url_flag=1; last; } push(@data,$_); push(@cls1,$cls1); push(@cls2,$cls2); push(@reco,$reco); } close(IN); # 重複登録禁止 if ($url_flag) { &error("このURLは既に登録済みです"); } if ($eml_flag) { &error("このE-mailは既に登録済みです"); } # 三段ソート @data = @data[sort { $cls1[$a] <=> $cls1[$b] || $reco[$b] <=> $reco[$a] || $cls2[$a] <=> $cls2[$b] } 0 .. $#cls1]; # 更新 open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @data; close(OUT); $all = @data; $num[1] =~ s/\n//; $i=0; $line2 = "$num,"; foreach ( split(/,/, $num[1]) ) { $i++; $line2 .= "$_,"; last if ($i >= $new_site); } open(OUT,">$numfile") || &error("Write Error: $numfile"); print OUT "$num,$all,\n"; print OUT "$line2\n"; close(OUT); # ロック解除 &unlock if ($lockkey); @part = split(/,/, $class[$cls1[0]]); ($date,$mdate) = &get_time($time); # メール通知 if ($useType == 2) { local($msub, $mbody); # メールタイトル $msub = &base64("登録お礼"); # メール本文 $mbody = "$in{'name'}様\n\n"; $mbody .= "$titleです。以下のとおり登録を完了しました。\n"; $mbody .= "今後登録内容に変更がある場合には、PASSWORDで自由に変更が可能\です。\n\n"; $mbody .= "カテゴリ : $part[0] - $part[$cls2[0]]\n"; $mbody .= "タイトル : $in{'sub'}\n"; $mbody .= "登録URL : $in{'url'}\n"; $mbody .= "管理者名 : $in{'name'}\n"; $mbody .= "E-Mail : $in{'email'}\n"; $mbody .= "PASSWORD : $in{'pw'}\n"; $mbody .= "紹介内容 :\n\n$in{'comment'}\n\n"; $mbody .= "-------------------------------------------------------------\n"; $mbody .= "登録日時 : $date\n"; $mbody .= "ホスト名 : $host\n"; $mbody .= "-------------------------------------------------------------\n"; # sendmail送信 open(MAIL,"| $sendmail -t") || &error("メール送信失敗"); print MAIL "To: $in{'email'}\n"; print MAIL "From: $master\n"; print MAIL "Cc: $master\n"; print MAIL "Subject: $msub\n"; print MAIL "Date: $mdate\n"; print MAIL "MIME-Version: 1.0\n"; print MAIL "Content-type: text/plain; charset=ISO-2022-JP\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "X-Mailer: $ver\n\n"; foreach ( split(/\n/, $mbody) ) { &jcode'convert(*_, 'jis', 'sjis'); print MAIL $_, "\n"; } close(MAIL); } # 完了 &header; print "

ご登録ありがとうございます。

以下のとおり新規登録しました。
ご登録時に設定した「パスワード」で、いつでも自由に
登録内容の修正を行うことが出来ます。

管理者$in{'name'}
E-mail$in{'email'}
カテゴリ$part[0] - $part[$cls2[0]]
タイトル$in{'sub'}
登録URL$in{'url'}
紹介内容$in{'comment'}


\n"; exit; } &header; print <トップ > 登録フォーム

  • 必要事項を記入し、送信ボタンを押してください。

    EOM &myform(); print < 暗証キー

EOM exit; } #------------------------------------------------ # ■登録メンテ画面 #------------------------------------------------ sub mente { # タイトル定義 %sub = ('edit', '修正', 'dele', '削除'); # 削除 if ($in{'pw'} ne "" && $in{'job'} eq "dele") { # ロック開始 &lock() if ($lockkey); # ログ展開 $f=0; @data=(); open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$dat) = split(/<>/); if ($in{'no'} == $no) { $f++; $pw2 = $pw; next; } push(@data,$_); } close(IN); if (!$f) { &error("該当するデータが存在しません"); } # 照合 $check = &decrypt($in{'pw'}, $pw2); if ($check != 1) { &error("暗証キーが違います"); } # 更新 open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @data; close(OUT); # データNo open(IN,"$numfile") || &error("Open Error: $numfile"); @num = ; close(IN); $num[0] =~ s/\n//; $num[1] =~ s/\n//; ($num,$all) = split(/,/, $num[0]); $all--; $line2=''; foreach ( split(/,/, $num[1]) ) { if ($_ == $in{'no'}) { next; } $line2 .= "$_,"; } open(OUT,">$numfile") || &error("Write Error: $numfile"); print OUT "$num,$all,\n"; print OUT "$line2\n"; close(OUT); # カウントデータ削除 unlink("$cntdir/$in{'no'}.dat"); # ロック解除 &unlock if ($lockkey); # 完了 &header; print "登録データを削除しました。\n"; print "

\n"; print "
\n"; print "\n"; exit; # 修正画面 } elsif ($in{'pw'} ne "" && $in{'job'} eq "edit") { # ログ展開 $f=0; open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$dat) = split(/<>/); if ($in{'no'} == $no) { $f++; $pw2 = $pw; last; } } close(IN); if (!$f) { &error("該当するデータが存在しません"); } # 照合 $check = &decrypt($in{'pw'}, $pw2); if ($check != 1) { &error("暗証キーが違います"); } &edit_form($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$dat); # 修正実行 } elsif ($in{'pw'} ne "" && $in{'job'} eq "edit2") { # 入力チェック &input_check; # ロック開始 &lock() if ($lockkey); ($cate1,$cate2) = split(/:/, $in{'cate'}); # ログ展開 $f=0; $url_flag=0; $eml_flag=0; @data=(); @reco=(); open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$tim,$reco,$hos) = split(/<>/); # 重複チェック if (!$w_url_regist && $in{'url'} eq $url) { $url_flag=1; last; } if (!$w_eml_regist && $in{'email'} eq $eml) { $url_flag=1; last; } if ($in{'no'} == $no) { $f++; $_="$no<>$cate1<>$cate2<>$in{'sub'}<>$in{'url'}<>$in{'name'}<>$in{'email'}<>$pw<>$in{'comment'}<>$tim<>$reco<>$hos<>\n"; $cls1 = $cate1; $cls2 = $cate2; $pw2 = $pw; } push(@data,$_); push(@cls1,$cls1); push(@cls2,$cls2); push(@reco,$reco); } close(IN); if (!$f) { &error("該当するデータが存在しません"); } # 重複登録禁止 if ($url_flag) { &error("このURLは既に登録済みです"); } if ($eml_flag) { &error("このE-mailは既に登録済みです"); } # 照合 $check = &decrypt($in{'pw'}, $pw2); if ($check != 1) { &error("暗証キーが違います"); } # 三段ソート @data = @data[sort { $cls1[$a] <=> $cls1[$b] || $reco[$b] <=> $reco[$a] || $cls2[$a] <=> $cls2[$b] } 0 .. $#cls1]; # 更新 open(OUT,">$logfile") || &error("Write Error: $logfile"); print OUT @data; close(OUT); # ロック解除 &unlock if ($lockkey); # 完了 &header; print "登録データを修正しました。\n"; print "

\n"; print "
\n"; print "\n"; exit; } # ログ展開 $f=0; open(IN,"$logfile") || &error("Open Error: $logfile"); while () { ($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$dat) = split(/<>/); if ($in{'no'} == $no) { $f++; last; } } close(IN); if (!$f) { &error("該当するデータが存在しません"); } &header; print <トップ > 登録$sub{$in{'job'}}
  • 以下の登録情報を$sub{$in{'job'}}します。
  • 暗証キーを入力してください。
    タイトル  $sub
    URL  $url
    管理者  $nam
    暗証キー  

EOM exit; } #------------------------------------------------ # ■登録メンテ画面 #------------------------------------------------ sub edit_form { local($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$dat) = @_; &header; print <トップ > 登録メンテ画面

  • 以下の登録情報を修正します。
EOM &myform($no,$cls1,$cls2,$sub,$url,$nam,$eml,$pw,$msg,$dat); print <

EOM exit; } #------------------------------------------------ # ■crypt暗号化 #------------------------------------------------ sub encrypt { local($in) = @_; local($salt, $enc, @s); @s = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/'); srand; $salt = $s[int(rand(@s))] . $s[int(rand(@s))]; $enc = crypt($in, $salt) || crypt ($in, '$1$' . $salt); $enc; } sub decrypt { local($in, $dec) = @_; local $salt = $dec =~ /^\$1\$(.*)\$/ && $1 || substr($dec, 0, 2); if (crypt($in, $salt) eq $dec || crypt($in, '$1$' . $salt) eq $dec) { return (1); } else { return (0); } } #------------------------------------------------ # ■BASE64変換 #------------------------------------------------ # とほほのWWW入門で公開されているルーチンを参考にしました。 # http://tohoho.wakusei.ne.jp/ sub base64 { local($sub) = $_[0]; &jcode'convert(*sub, 'jis', 'sjis'); $sub =~ s/\x1b\x28\x42/\x1b\x28\x4a/g; $sub = "=?iso-2022-jp?B?" . &b64enc($sub) . "?="; $sub; } sub b64enc { local($ch)="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; local($x, $y, $z, $i); $x = unpack("B*", $_[0]); for ($i=0; $y=substr($x,$i,6); $i+=6) { $z .= substr($ch, ord(pack("B*", "00" . $y)), 1); if (length($y) == 2) { $z .= "=="; } elsif (length($y) == 4) { $z .= "="; } } $z; } 1; __END__