CGI_掲示板2_指定データ表示

「CGI_掲示板2_指定データ表示」の編集履歴(バックアップ)一覧はこちら

CGI_掲示板2_指定データ表示」(2008/07/12 (土) 14:38:24) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

<p><br /><br /><br /> #!/usr/local/bin/perl</p> <p># 掲示板2(フレームを利用したパターン)右画面</p> <p># id=bbs2.cgi</p> <p># update.  01.9.16</p> <p># 使用上の注意・・・漢字コードの変換が不完全ですので文字化けするおそれがあります。<br /> #          そのつもりでお使い下さい。</p> <p># 日本語コード変換ライブラリ(v2.0)の指定<br /> # &amp;ReadParse命令で、$in{ }の変数にフォーム入力データが格納される  </p> <p>require 'cgi-lib.pl';<br /> require 'jcode.pl';<br /> &amp;ReadParse;</p> <p># 設置するURLを設定<br /> $reload = 'http://www0.kumagaya.or.jp/cgi-bin/users/chichibu/bbs2.cgi';</p> <p>$file = &quot;/dialup/chichibu/cgi-bin/bbs2.dat&quot;;<br /> $sendmail = '/usr/lib/sendmail';</p> <p># 掲示板へ記入したら管理者へメール通知するならON<br /> $send=&quot;on&quot;;<br /> # メールの送り先<br /> $myaddress = <a href="mailto:">'chichibu@po.kumagaya.or.jp'</a>;</p> <p># データ確認デバッグモード(通常は$test=&quot;&quot;、各画面で変数状態を見たいときは&quot;on&quot;)<br /> $test=&quot;&quot;;</p> <p># 最大登録数<br /> $max=200;<br /> # メッセージの文字数制限(この値の半分が漢字数)<br /> $mojisu = 200;<br /> # 表示期間の設定(設定した日数後のファイル更新時に消去します、消去しない場合は0)<br /> $syokyo=7;  # 1週間後</p> <p># 1画面表示件数<br /> $gyosu=10 ;</p> <p>####################################<br /> #                                  #<br /> #   メインルーチン(処理の分岐)     #<br /> #                                  #<br /> ####################################</p> <p># 消去日計算<br /> ($byo,$fun,$ji,$dd,$mm,$yy,$yobi) = localtime(time);<br /> $mm++;<br /> # 2桁化<br /> $mm = sprintf(&quot;%.2d&quot;,$mm);<br /> $dd = sprintf(&quot;%.2d&quot;,$dd);<br /> # 西暦4桁処理<br /> if ($yy &lt; 70) { $yy = $yy + 2000;}<br /> else          { $yy = $yy + 1900;}<br /> # 本日<br /> $ymd=$yy.$mm.$dd;</p> <p><br /> $page=$in{'page'};<br /> $syurui=$in{'syurui'};<br /> # 最初に渡された状態セーブ<br /> $syurui_sv=$syurui;</p> <p># 該当データを調べる<br /> if ($syurui ne &quot;all&quot;) { &amp;read4 }</p> <p>#  全体の流れを決定する<br /> if ($in{'action'} eq 'main') { &amp;main; }</p> <p>elsif ($in{'action'} eq 'kinyu') { &amp;kinyu; }</p> <p>elsif ($in{'action'} eq 'check') { &amp;check; &amp;main; }</p> <p>elsif ($in{'action'} eq 'meisai') { &amp;meisai; }</p> <p>elsif ($in{'action'} eq 'next') { &amp;next; }</p> <p>elsif ($in{'action'} eq 'back') { &amp;back; }</p> <p>elsif ($in{'action'} eq 'narabi') { &amp;narabi; }<br /> # メール送信画面<br /> elsif ($in{'action'} eq 'email') { &amp;email; }</p> <p># 詳細表示画面<br /> elsif ($in{'action'} eq 'teisei') {&amp;teisei;&amp;main; }</p> <p>else { &amp;first; }</p> <p># なくても良いが最終出口を示す<br /> exit;</p> <p>#############################################<br /> #                                           #<br /> #    データを読む             # <br /> #                                           #<br /> #############################################          </p> <p>sub read {</p> <p># データを読み各連想配列に加算する<br /> #   1       2       3     4    5     6<br /> # 日付時刻、宛先、内容、差出人、消去日、訂正用パスワード<br /> $j=0;<br /> # 配列の初期化<br /> @data=();</p> <p>open(DB,&quot;$file&quot;);<br /> flock(DB,2);<br /> while (&lt;DB&gt;)  {<br /> ($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_);  </p> <p># とりあえずキーがないデータを表示しないため<br /> if ($dt1 ne &quot;&quot;)  {</p> <p><br /> # 表示期限チェック<br /> if ($dt5 &gt; 0 &amp;&amp; $dt5 &gt;= $ymd) {<br /> # 9は全部、他は指定分類のみ、指定なしも全件<br /> if ($syurui eq &quot;all&quot;)  { $data[$j]=$_ ;$j++}<br /> elsif ($syurui eq $dt2)  { $data[$j]=$_ ;$j++}<br /> } # end of if</p> <p>} # とりあえずここまで</p> <p>} # end of while</p> <p>flock(DB,8);<br /> close(DB);<br /> # データ数<br /><a href="mailto:$cnt=@data">$cnt=@data</a>;</p> <p>} # end of read<br /> #############################################<br /> #                                           #<br /> #    登録データを読む(訂正削除用配列)  # <br /> #                                           #<br /> #############################################          </p> <p>sub read2 {</p> <p># データを読み各連想配列に加算する<br /> open(DB,&quot;$file&quot;);<br /> flock(DB,2);<br /> @data=&lt;DB&gt;;<br /> flock(DB,8);<br /> close(DB);</p> <p># データ数<br /><a href="mailto:$cnt=@data">$cnt=@data</a>;<br /> # 配列の初期化<br /> %idxdt=();</p> <p># 各レコードを日時をキーにした連想配列にセットする<br /> foreach (@data) {<br /> ($idx,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_);  </p> <p># キーを変数名に入れて1レコード全体をセットする<br /> $idxdt{$idx} = $_;<br /> } # end of foreach</p> <p>} # end of read2<br /> #############################################<br /> #                                           #<br /> #    データを読む(全件)            # <br /> #                                           #<br /> #############################################          </p> <p>sub read3 {<br /> open(DB,&quot;$file&quot;);<br /> flock(DB,2);<br /> @data=&lt;DB&gt;;<br /> flock(DB,8);<br /> close(DB);<br /> } # end of read3</p> <p><br /> #############################################<br /> #                                          <br /> #    アンカータグで渡されたキーデータから該当内容を調べる  <br /> #                                          <br /> #############################################          </p> <p>sub read4 {</p> <p>open(DB,&quot;$file&quot;);<br /> flock(DB,2);</p> <p>while (&lt;DB&gt;)  {<br /> ($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_);  <br /> # 指定レコードキーがあったらそのレコードの宛先をセットする<br /> if ($syurui == $dt1)  { $syurui=$dt2 ;last ; }</p> <p>} # end of while</p> <p>flock(DB,8);<br /> close(DB);</p> <p>} # end of read4<br /> ########################<br /> #            #<br /> # 項目分解ルーチン   #<br /> #            #<br /> ########################<br /> sub bunkai  {<br /> ($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$bundt);</p> <p># 日付時刻分解<br /> $yy=substr($dt1,0,4);<br /> $mm=substr($dt1,4,2);<br /> $dd=substr($dt1,6,2);<br /> $ji=substr($dt1,8,2);<br /> $fun=substr($dt1,10,2);<br /> $byo=substr($dt1,12,2);<br /> $nichiji=$yy.$mm.$dd.$ji.$fun.$byo;<br /> $hizuke=&quot;$yy年$mm月$dd日$ji時$fun分&quot;;<br /> $hizuke1=&quot;$yy年$mm月$dd日&quot;;<br /> $hizuke2=&quot;$ji時$fun分&quot;;<br /> # 番号</p> <p># 内容の改行を元に戻す<br /> $dt3 =~ s/&amp;k/\n/g;<br /> # 表示用に変換する<br /> $naiyo2 = $dt3;<br /> $naiyo2 =~ s/\n/&lt;BR&gt;/g;</p> <p>} # end of bunkai</p> <p>#############################################<br /> #                                           #<br /> #    最初に処理するルーチン          # <br /> #                                           #<br /> #############################################          </p> <p>sub first {</p> <p>print &quot;Content-type: text/html\n\n&quot;;</p> <p>print &lt;&lt;EOM;<br /> &lt;HTML&gt;<br /> &lt;HEAD&gt;&lt;TITLE&gt;掲示板2&lt;/TITLE&gt;&lt;/HEAD&gt;<br /> &lt;BODY BGCOLOR=&quot;#ffffff&quot; BACKGROUND=&quot;<a href="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif">http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif</a>&quot;&gt;<br /> EOM</p> <p>print '&lt;BR&gt;&lt;BR&gt;&lt;FONT size=5 color=&quot;blue&quot;&gt;';<br /> print '&lt;CENTER&gt;左側から表示させる内容を選択してください&lt;/CENTER&gt;&lt;/FONT&gt;'.&quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;'.&quot;\n&quot;;<br /> $page=1;<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;kinyu&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=submit value=&quot; 記入画面へ &quot;&gt;' . &quot;\n&quot;;<br /> &amp;hidpara;<br /> print '&lt;/FORM&gt;';</p> <p>print '&lt;/BODY&gt;&lt;/HTML&gt;'. &quot;\n&quot;;</p> <p>} # end of first</p> <p>#############################################<br /> #                                           #<br /> #    メイン処理画面を表示する            # <br /> #                                           #<br /> #############################################          </p> <p>sub main {</p> <p># 表示用変数<br /> $page = $in{'page'};<br /> $sortkb = $in{'sortkb'} ;</p> <p>&amp;read;</p> <p># 昇順にする<br /> if ($sortkb == 1)  { @data=reverse(@data);}<br /> # ページ数計算<br /> $page_max = (($cnt-1) / $gyosu) + 1;<br /> # 整数部をとりだす<br /> ($page_max,$dummy)=split(/\./,$page_max);</p> <p># 表示出力処理<br /> print &quot;Content-type: text/html\n\n&quot;;<br /> print &lt;&lt;EOM;<br /> &lt;HTML&gt;<br /> &lt;HEAD&gt;&lt;TITLE&gt;掲示板2&lt;/TITLE&gt;&lt;/HEAD&gt;<br /> &lt;BODY BGCOLOR=&quot;#ffffff&quot; BACKGROUND=&quot;<a href="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif">http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif</a>&quot;&gt;<br /> EOM</p> <p>print '&lt;TABLE BORDER=&quot;1&quot;&gt;';<br /> print '&lt;TR&gt;&lt;TD&gt;';<br /> print '&lt;FONT SIZE=3 COLOR=#0000FF&gt;'.&quot;\n&quot;;<br /> print '掲示板2'.&quot;\n&quot;;<br /> print '&lt;/FONT&gt;&lt;/TD&gt;';<br /> print '&lt;TD&gt;指定データ&lt;/TD&gt;';</p> <p>print &quot;&lt;TH&gt;該当件数&lt;/TH&gt;&lt;TH&gt;&lt;FONT COLOR=#0000FF&gt;表示頁&lt;/FONT&gt;&lt;/TH&gt;&lt;TH&gt;最終頁&lt;/TH&gt;&lt;/TR&gt;\n&quot;;</p> <p>print '&lt;TR VALIGN=&quot;MIDDLE&quot;&gt;&lt;TD ALIGN=&quot;CENTER&quot;&gt;';<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;kinyu&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=submit value=&quot; 記入画面へ &quot;&gt;' . &quot;\n&quot;;<br /> &amp;hidpara;<br /> print '&lt;/FORM&gt;';<br /> print '&lt;/TD&gt;';<br /> if ($syurui eq &quot;all&quot;)  { $sitei=&quot;全件&quot; } else { $sitei=$syurui }<br /> print &quot;&lt;TD ALIGN=\&quot;CENTER\&quot;&gt;&lt;FONT COLOR=#AA0000&gt;$sitei&lt;/FONT&gt;&lt;/TD&gt;\n&quot;;</p> <p>print &quot;&lt;TD ALIGN=\&quot;right\&quot;&gt;&lt;FONT COLOR=#AA0000&gt;$cnt&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN=\&quot;right\&quot;&gt;&lt;FONT COLOR=#0000FF&gt;$page&lt;/FONT&gt;&lt;/TD&gt;\n&quot;;<br /> print &quot;&lt;TD ALIGN=\&quot;right\&quot;&gt;&lt;FONT COLOR=#AA0000&gt;$page_max&lt;/FONT&gt;&lt;/TD&gt;\n&quot;;<br /> print '&lt;/TR&gt;&lt;/TABLE&gt;'.&quot;\n&quot;;</p> <p># 前頁表示</p> <p># ボタンを並べる<br /> # 上段<br /> print '&lt;TABLE BGCOLOR=&quot;#ffffCC&quot;&gt;';<br /> print '&lt;TR VALIGN=&quot;BOTTOM&quot;&gt;';<br /> # 表示順序<br /> print '&lt;TD&gt;';<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;narabi&quot;&gt;' . &quot;\n&quot;;<br /> &amp;hidpara;<br /> if ($sortkb == 0)  { $sortkbn = &quot;日付の古いものを先に&quot;; }<br /> else { $sortkbn = &quot;日付の新しいものを先に&quot;; }<br /> print '&lt;input type=submit value=&quot;'.$sortkbn.'&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;<br /> print '&lt;/TD&gt;';<br /> print '&lt;TD&gt;   &lt;/TD&gt;';<br /> # 前頁表示<br /> print '&lt;TD&gt;';<br /> if ($page == 1)  { print ' '; }<br /> else  {<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;back&quot;&gt;' . &quot;\n&quot;;<br /> &amp;hidpara;<br /> print '&lt;input type=submit value=&quot;前頁&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/FORM&gt;';<br /> } # end of if</p> <p>print '&lt;/TD&gt;';<br /> print '&lt;TD&gt;  &lt;/TD&gt;';<br /> # 次頁表示<br /> print '&lt;TD&gt;';<br /> if ($page == $page_max)  { print ' '; }<br /> else  {<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;next&quot;&gt;' . &quot;\n&quot;;<br /> &amp;hidpara;<br /> print '&lt;input type=submit value=&quot;次頁&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;<br /> } # end of if<br /> print '&lt;/TD&gt;';<br /> print '&lt;TD&gt;  &lt;/TD&gt;';</p> <p>print '&lt;/TR&gt;&lt;/TABLE&gt;'.&quot;\n&quot;;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;</p> <p># 該当データが0件の場合<br /> if ($cnt == 0)  {<br /> print '&lt;BR&gt;&lt;BR&gt;&lt;FONT size=5 color=&quot;blue&quot;&gt;';<br /> print '&lt;CENTER&gt;該当データは0件です、選択内容を変えてご覧ください&lt;/CENTER&gt;&lt;/FONT&gt;'.&quot;\n&quot;;<br /> return } # end of if</p> <p># 最初は詳細形式を表示する<br /> &amp;disp3;</p> <p>} # end of main</p> <p>#################################<br /> #   hiddenパラメータ共通項目  #<br /> #################################<br /> sub  hidpara  {<br /> print '&lt;input type=hidden name=&quot;page&quot; value=&quot;'.$page.'&quot;&gt;'.&quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;sortkb&quot; value=&quot;'.$in{'sortkb'}.'&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;syurui&quot; value=&quot;'.$syurui_sv.'&quot;&gt;' . &quot;\n&quot;;<br /> } # end of hidpara</p> <p>##########################<br /> #            #<br /> #  詳細表示ルーチン  #<br /> #            #<br /> ##########################<br /> sub disp3  {</p> <p>print &quot;&lt;TABLE BORDER=\&quot;1\&quot; WIDTH=\&quot;100%\&quot; &gt;\n&quot;;<br /> print &quot;&lt;TR&gt;&lt;TH&gt;№&lt;/TH&gt;&lt;TH&gt;宛先&lt;/TH&gt;&lt;TH&gt;日付&lt;/TH&gt;&lt;TH&gt;内 容&lt;/TH&gt;&lt;TH&gt;差出人&lt;/TH&gt;&lt;/TR&gt;\n&quot;;</p> <p># 行数分だけ繰り返す<br /> for($i=1; $i&lt;=$gyosu; $i++) {</p> <p>#print '&lt;TR&gt;';<br /> # 1列目はページカウンタ*行数+$i</p> <p>$lno=$gyosu * ($page - 1) + $i;<br /> $no=$lno-1;</p> <p># 項目分解処理<br /> $bundt=$data[$no];<br /> &amp;bunkai;</p> <p># 分類別色<br /> $iro=$buncol[$bunrui];</p> <p>print '&lt;TR&gt;';<br /> print '&lt;TD ALIGN=&quot;right&quot;&gt;&lt;FONT COLOR='.$iro.'&gt;'.$lno.'&lt;/FONT&gt;'.&quot;\n&quot;;<br /> if ($test eq &quot;on&quot;) { print '&lt;BR&gt;'.$bundt.''.&quot;\n&quot;; } # テスト表示<br /> print '&lt;/TD&gt;'.&quot;\n&quot;;<br /> print '&lt;TD ALIGN=&quot;left&quot; NOWRAP&gt;&lt;FONT COLOR='.$iro.'&gt;'.$dt2.'&lt;/FONT&gt;&lt;/TD&gt;';<br /> print '&lt;TD ALIGN=&quot;left&quot; NOWRAP&gt;&lt;FONT COLOR='.$iro.'&gt;'.$hizuke1.'&lt;BR&gt;'.$hizuke2.'&lt;/FONT&gt;&lt;/TD&gt;';<br /> print '&lt;TD ALIGN=&quot;left&quot;&gt;&lt;FONT COLOR='.$iro.'&gt;';<br /> $act=&quot;meisai&quot;;<br /> print '&lt;A HREF = &quot;'.$reload.'?action='.$act.'&amp;keyno='.$dt1.'&amp;tbno='.$lno.'&amp;page='.$page.'&amp;sortkb='.$sortkb.'&quot;&gt;'.$naiyo2.'&lt;/A&gt;';<br /> print '&lt;/FONT&gt;&lt;BR&gt;'.&quot;\n&quot;;<br /> print '&lt;/TD&gt;'.&quot;\n&quot;;<br /> print '&lt;TD ALIGN=&quot;left&quot;&gt;&lt;FONT COLOR='.$iro.'&gt;'.$dt4.'&lt;/FONT&gt;&lt;/TD&gt;'.&quot;\n&quot;;<br /> print '&lt;/TD&gt;'.&quot;\n&quot;;<br /> #print '&lt;TD ALIGN=&quot;left&quot;&gt;&lt;FONT COLOR='.$iro.'&gt;'.$dt5.'&lt;/FONT&gt;&lt;/TD&gt;'.&quot;\n&quot;;<br /> #print '&lt;/TD&gt;'.&quot;\n&quot;;<br /> #print '&lt;TD ALIGN=&quot;left&quot;&gt;&lt;FONT COLOR='.$iro.'&gt;'.$dt6.'&lt;/FONT&gt;&lt;/TD&gt;'.&quot;\n&quot;;<br /> print '&lt;/TR&gt;'.&quot;\n&quot;;</p> <p># 最終データを表示したら抜ける<br /> if ($lno &gt;= $cnt)  { last }</p> <p>} # end of for</p> <p>print '&lt;/TABLE&gt;';<br /> print &quot;&lt;/BODY&gt;&lt;/HTML&gt;\n&quot;;</p> <p>} # end of disp3</p> <p><br /> #############################################<br /> #                                           #<br /> #    掲示板新規記入処理            # <br /> #                                           #<br /> #############################################          </p> <p>sub kinyu {<br /> # 消去日が設定してある場合<br /> if ($syokyo &gt; 0)  {<br /> # 消去日計算<br /> $syokyobyo = $syokyo * 60 * 60 * 24;<br /> ($byo,$fun,$ji,$dd,$mm,$yy,$yobi) = localtime(time + $syokyobyo);<br /> $mm++;<br /> # 2桁化<br /> $mm = sprintf(&quot;%.2d&quot;,$mm);<br /> $dd = sprintf(&quot;%.2d&quot;,$dd);<br /> $ji = sprintf(&quot;%.2d&quot;,$ji);<br /> $fun = sprintf(&quot;%.2d&quot;,$fun);<br /> $byo = sprintf(&quot;%.2d&quot;,$byo);<br /> # 西暦4桁処理<br /> if ($yy &lt; 70) { $yy = $yy + 2000;}<br /> else          { $yy = $yy + 1900;}<br /> # 消去日<br /> $symd=$yy.$mm.$dd;<br /> } # end of if<br /> else { $symd=0 } # end of else</p> <p>print &quot;Content-type: text/html\n\n&quot;;</p> <p>print &lt;&lt;EOM;<br /> &lt;HTML&gt;<br /> &lt;HEAD&gt;&lt;TITLE&gt;掲示板への記入&lt;/TITLE&gt;&lt;/HEAD&gt;<br /> &lt;BODY BGCOLOR=&quot;#ffffff&quot; BACKGROUND=&quot;<a href="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif">http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif</a>&quot;&gt;<br /> &lt;H2&gt;掲示板への記入&lt;/H2&gt;<br /> EOM</p> <p># 外側の飾り線(画面の設定によってはわくとして表示しないことがある)<br /> print '&lt;TABLE BORDER=&quot;10&quot; CELLPADDING=&quot;10&quot; WIDTH=&quot;100%&quot;&gt;';<br /> print '&lt;TR&gt;';</p> <p>print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;check&quot;&gt;' . &quot;\n&quot;;<br /> # 左画面から指定された宛先があれば表示させる<br /> if ($syurui eq &quot;all&quot;)  { $atesaki = &quot;&quot; } else { $atesaki = $syurui }<br /> print '宛先 &lt;input type=text name=&quot;namae&quot; size=&quot;40&quot; MAXLENGTH=&quot;40&quot; value=&quot;'.$atesaki.'&quot;&gt;&lt;br&gt;'.&quot;\n&quot;;<br /> print '&lt;BR&gt;';<br /> print 'メッセージをどうぞ(漢字の場合100文字以内)';<br /> print '&lt;BR&gt;';<br /> print '&lt;TEXTAREA NAME=&quot;naiyo&quot; COLS=70 ROWS=5&gt;&lt;/TEXTAREA&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;';</p> <p>print '差出人 &lt;input type=text name=&quot;sasidasi&quot; size=&quot;40&quot; MAXLENGTH=&quot;40&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;';</p> <p>print '&lt;FONT COLOR=#AA0000&gt;';<br /> print '登録後にあなたが訂正削除する場合に必要。未設定時は訂正削除不可';<br /> print '&lt;/FONT&gt;';<br /> print '&lt;BR&gt;';<br /> print '訂正削除パスワード &lt;input type=text name=&quot;pwd1&quot; size=&quot;10&quot; MAXLENGTH=&quot;10&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;';</p> <p>print '&lt;FONT COLOR=#AA0000&gt;';<br /> print &quot;表示期限は本日より $syokyo日間です、要変更の場合は訂正して下さい\n&quot;;<br /> print '&lt;BR&gt;';<br /> print '&lt;/FONT&gt;';<br /> print '表示期限 &lt;input type=text name=&quot;symd&quot; size=&quot;10&quot; MAXLENGTH=&quot;10&quot; value=&quot;'.$symd.'&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;';<br /> print '&lt;TABLE BGCOLOR=&quot;#ffffCC&quot;&gt;';<br /> print '&lt;TR VALIGN=&quot;BOTTOM&quot;&gt;';<br /> # 表示順序<br /> print '&lt;TD&gt;';<br /> print '&lt;input type=submit value=&quot;登録&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/TD&gt;';<br /> print '&lt;TD&gt;  &lt;/TD&gt;';<br /> print '&lt;TD&gt;';<br /> print '&lt;input type=reset value=&quot;入力内容取消&quot;&gt;' . &quot;\n&quot;;</p> <p># 登録日時セット<br /> ($byo,$fun,$ji,$dd,$mm,$yy,$yobi) = localtime;<br /> $mm++;<br /> # 2桁化<br /> $mm = sprintf(&quot;%.2d&quot;,$mm);<br /> $dd = sprintf(&quot;%.2d&quot;,$dd);<br /> $ji = sprintf(&quot;%.2d&quot;,$ji);<br /> $fun = sprintf(&quot;%.2d&quot;,$fun);<br /> $byo = sprintf(&quot;%.2d&quot;,$byo);<br /> # 西暦4桁処理<br /> if ($yy &lt; 70) { $yy = $yy + 2000;}<br /> else          { $yy = $yy + 1900;}<br /> # 登録日時<br /> $nichiji=$yy.$mm.$dd.$ji.$fun.$byo;</p> <p># ここで同時刻に登録しようとした場合を考えてキーをユニーク(唯一)にするため<br /> # 日時の後に4桁のランダム数字を足す(これでも同一になった場合は訂正時1つのデータ消滅する)<br /> srand;<br /> $a=rand;<br /> $no4=substr($a,index($a,&quot;.&quot;)+1,4);<br /> if ($no4 == 0)  { $no4 = &quot;0000&quot;; }<br /> $nichiji.=$no4;<br /> print '&lt;input type=hidden name=&quot;nichiji&quot; value=&quot;'.$nichiji.'&quot;&gt;' . &quot;\n&quot;;</p> <p># 共通データ渡し<br /> $syurui_sv=$nichiji;<br /> &amp;hidpara;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;<br /> print '&lt;/TD&gt;';<br /> print '&lt;TD&gt;  &lt;/TD&gt;';<br /> print '&lt;TD&gt;';<br /> # 戻る<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;main&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=submit value=&quot;記入せずに戻る&quot;&gt;' . &quot;\n&quot;;</p> <p># 最初の画面から来たときは何も指定データがないから<br /> if ($syurui eq &quot;&quot;)  { $syurui=&quot;all&quot; }<br /> $syurui_sv=$syurui;<br /> &amp;hidpara;<br /> print '&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;'.&quot;\n&quot;;</p> <p><br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;</p> <p># 外側の飾り線<br /> print '&lt;/TR&gt;&lt;/TABLE&gt;';</p> <p>print '&lt;/BODY&gt;&lt;/HTML&gt;'. &quot;\n&quot;;<br /> } # end of kinyu</p> <p>##########################################<br /> #                                        #<br /> #  入力されたデータのチェックルーチン    #<br /> #                                        #<br /> ##########################################</p> <p>sub check {</p> <p>&amp;form_data;</p> <p># 宛名がない場合<br /> if ($namae eq &quot;&quot; ) { &amp;error(2); }<br /> # 差出人がない場合<br /> if ($sasidasi eq &quot;&quot; ) { &amp;error(3); }</p> <p># チェック通過、更新へ<br /> &amp;update;</p> <p>$syurui=$namae;<br /> # 管理者へメール送信<br /> if ($send eq &quot;on&quot;)  {  &amp;mymail }</p> <p>} # end of check</p> <p>#############################################<br /> #                                           #<br /> #    管理者へのメール送信ルーチン       # <br /> #                                           #<br /> #############################################</p> <p>sub mymail  {<br /> # 改行コードを戻す<br /> $naiyo =~ s/&amp;k/\n/g;</p> <p>$message = &lt;&lt;EOM;<br /> Subject: 掲示板記入連絡<br /> Reply-To: $myaddress</p> <p>掲示板2への書き込みがありました。</p> <p>宛先       : $namae</p> <p>メッセージ</p> <p>$naiyo</p> <p>差出人     : $sasidasi</p> <p>訂正削除パスワード : $pwd1</p> <p>登録日時   : $nichiji<br /> EOM</p> <p># メール送信はJISと決められている<br /> &amp;jcode'convert(*message,'jis');</p> <p>open(MAIL,&quot;|$sendmail $myaddress&quot;);<br /> print MAIL $message;<br /> close(MAIL);<br /> } # end of mymail<br /> #############################################<br /> #                                           #<br /> #    フォーム入力データセットルーチン    # <br /> #                                           #<br /> #############################################<br /> sub form_data  {<br /> $nichiji=$in{'nichiji'};<br /> $namae=$in{'namae'};<br /> $naiyo=$in{'naiyo'};</p> <p># メッセージの改行のみをカットする<br /> @chk = split(/\n/,$naiyo);<br /> $msg=&quot;&quot;;<br /> foreach (@chk) {<br /> if (length($_) &gt; 1)  {<br /> $msg=$msg.$_.&quot;\n&quot;;<br /> } # end of if<br /> } # end of foreach<br /> $naiyo=$msg;</p> <p>$naiyo=~ s/\015\012/\n/g;<br /> $naiyo=~ s/\015/\n/g;<br /> $naiyo =~ s/\n/&amp;k/g;<br /> # 文字数チェック<br /> if (length($naiyo) &gt; $mojisu)  { $naiyo = substr($naiyo,0,$mojisu); }</p> <p>$sasidasi=$in{'sasidasi'};<br /> $pwd1=$in{'pwd1'};<br /> $symd=$in{'symd'};</p> <p># タグの無効化<br /> $ckdt=$namae ; &amp;tagck ; $namae=$ckdt;<br /> # 宛先をセットする<br /> $syurui=$namae;<br /> $ckdt=$naiyo ; &amp;tagck ; $naiyo=$ckdt;<br /> $ckdt=$sasidasi ; &amp;tagck ; $sasidasi=$ckdt;<br /> $ckdt=$pwd1 ; &amp;tagck ; $pwd1=$ckdt;<br /> $ckdt=$symd ; &amp;tagck ; $symd=$ckdt;</p> <p>} # end of form_data</p> <p>###############################<br /> #  タグの無効化サブルーチン<br /> ###############################<br /> sub tagck  {<br /> $ckdt =~ s/&lt;/&amp;lt;/ig;<br /> $ckdt =~ s/&gt;/&amp;gt;/ig;<br /> $ckdt =~ s/&lt;!--.*--&gt;//ig;<br /> $ckdt =~ s/\,//g;</p> <p>}</p> <p>##########################################<br /> #                                        #<br /> #  次ページ表示処理              #<br /> #                                        #<br /> ##########################################</p> <p>sub next {<br /> $in{'page'}++;<br /> &amp;main;<br /> } # end of sub</p> <p>##########################################<br /> #                                        #<br /> #  前ページ表示処理              #<br /> #                                        #<br /> ##########################################</p> <p>sub back {<br /> if ($page  &gt; 1)  { $in{'page'}--; }<br /> &amp;main;<br /> } # end of sub<br /> ##########################################<br /> #                                        #<br /> #  表示順序の変更指示             #<br /> #                                        #<br /> ##########################################<br /> sub narabi {<br /> if ($in{'sortkb'} == 0)  { $in{'sortkb'} = 1; }<br /> else { $in{'sortkb'} = 0; }<br /> &amp;main;<br /> } # end of sub</p> <p>#####################<br /> #  ファイル登録<br /> #####################<br /> sub update  {</p> <p>#   1       2       3     4    5     6<br /> # 日付時刻、宛先、内容、差出人、消去日、訂正用パスワード<br /> $value = &quot;$nichiji\t$namae\t$naiyo\t$sasidasi\t$symd\t$pwd1\n&quot;;<br /> $pwd1=$in{'pwd1'};</p> <p># 登録済みデータを読み配列にセットする<br /> if ($pwd1 ne &quot;subetekesu&quot;)  { &amp;read3; unshift(@data,$value);}<br /> else {push(@data,$value);}</p> <p># 表示期限を過ぎたデータを消す<br /> %new=();<br /> foreach(@data)  {<br /> ($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_);<br /> # 消去日が本日を過ぎていたら除外する<br /> if ($dt5 == 0 || $dt5 &gt;= $ymd) { push(@new,$_);}<br /> } # end of foreach</p> <p># 掲示板は先頭から古い順になっているのでそのまま1番目のデータをシフトする<br /><a href="mailto:$a=@new">$a=@new</a>;<br /> if ($a &gt; $max)  {<br /> $herasu=$a - $max;<br /> for ($i=1; $i&lt;=$herasu; $i++)  { pop(@new) }<br /> } # end of if</p> <p># ファイル登録<br /> if (!open(WRITE,&quot;&gt;$file&quot;)) { &amp;error(0); }<br /> flock(WRITE,2);<br /> print WRITE @new;<br /> flock(WRITE,8);<br /> close (WRITE);</p> <p>} # end of update</p> <p>#############################################<br /> #                                           #<br /> #    チェックエラー表示画面ルーチン      # <br /> #                                           #<br /> #############################################</p> <p>sub error {</p> <p>#  &amp;error(xx); で呼び出されたルーチンは、()内の数字が $error に代入される。</p> <p>$error = $_[0];</p> <p>if    ($error eq &quot;0&quot;) { $error_msg = 'ファイルがない、またはOPENできない。'; }</p> <p>elsif    ($error eq &quot;2&quot;) { $error_msg = '宛名がありません'; }</p> <p>elsif    ($error eq &quot;3&quot;) { $error_msg = '差出人は必ず入力してください'; }</p> <p>elsif    ($error eq &quot;91&quot;) { $error_msg = '訂正パスワードが最初の登録時入力してありませんので、訂正/削除はできません。'; }</p> <p>elsif    ($error eq &quot;92&quot;) { $error_msg = '訂正パスワードが最初の登録時のものと不一致のため、訂正/削除はできません。'; }<br />       <br /> print &quot;Content-type: text/html\n\n&quot;;</p> <p>print '&lt;html&gt;&lt;head&gt;&lt;title&gt;掲示板&lt;/title&gt;&lt;/head&gt;' . &quot;\n&quot;;<br /> print '&lt;body bgcolor=&quot;#ff66ff&quot; text=&quot;#000000&quot; LINK=&quot;#0000ff&quot; VLINK=&quot;#ff8888&quot; ALINK=&quot;#FF0000&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;h2&gt;掲示板の入力で下記のエラーが発生しました&lt;/h2&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;';<br /> print &quot;&lt;i&gt;$error_msg&lt;/i&gt;\n&quot;;</p> <p># リロードでもどると入力データが消えてしまうので<br /> print 'ブラウザ画面の戻るをクリックする'.&quot;\n&quot;;;<br /> print '&lt;/body&gt;&lt;/html&gt;' . &quot;\n&quot;;<br /> # サブルーチンからプログラムを抜けるので<br /> exit;<br /> }</p> <p>#############################################<br /> #                                           #<br /> #    明細データの訂正・削除ルーチン      # <br /> #                                           #<br /> #############################################          </p> <p>sub meisai {</p> <p>&amp;read2;<br /> # キー<br /> $keyno=$in{'keyno'};<br /> # 配列番号(次前データ移動用)<br /> $tbno=$in{'tbno'};<br /> # 実配列番号は-1<br /> $tbno--;</p> <p># 項目分解処理<br /> $bundt=$idxdt{$keyno};<br /> &amp;bunkai;</p> <p>&amp;meisai_display;</p> <p>} # end of meisai<br /> #############################################<br /> #                                           #<br /> #    明細データの訂正・削除ルーチン      # <br /> #    (次前データ処理用)                     #<br /> #############################################     <br /> sub meisai2 {</p> <p>&amp;read;</p> <p># 項目分解処理<br /> $bundt=$data[$tbno];<br /> &amp;bunkai;<br /> # キー<br /> $keyno=$dt1;</p> <p>&amp;meisai_display;</p> <p>} # end of meisai2<br /> #############################################<br /> #                                           #<br /> #    明細データの共通表示ルーチン       # <br /> #                                           #<br /> #############################################          <br /> sub meisai_display  {<br /> # 明細表示データ№は配列№+1<br /> $mno=$tbno+1;</p> <p>print &quot;Content-type: text/html\n\n&quot;;<br /> print &lt;&lt;EOM;<br /> &lt;HTML&gt;<br /> &lt;HEAD&gt;&lt;TITLE&gt;掲示板の詳細&lt;/TITLE&gt;&lt;/HEAD&gt;<br /> &lt;BODY BGCOLOR=&quot;#ffffff&quot; BACKGROUND=&quot;<a href="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif">http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif</a>&quot;&gt;<br /> &lt;H2&gt;掲示板の詳細&lt;/H2&gt;<br /> EOM</p> <p>print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> # 外側の飾り線<br /> print '&lt;TABLE BORDER=&quot;10&quot; CELLPADDING=&quot;10&quot; WIDTH=&quot;100%&quot;&gt;';<br /> print '&lt;TR&gt;';</p> <p>print '宛先 &lt;input type=text name=&quot;namae&quot; size=&quot;40&quot; MAXLENGTH=&quot;40&quot; value=&quot;'.$dt2.'&quot;&gt;&lt;br&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;';</p> <p>print 'メッセージをどうぞ';<br /> print '&lt;BR&gt;';<br /> print '&lt;TEXTAREA NAME=&quot;naiyo&quot; COLS=70 ROWS=5&gt;'.$dt3.'&lt;/TEXTAREA&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;';</p> <p>print '差出人 &lt;input type=text name=&quot;sasidasi&quot; size=&quot;40&quot; MAXLENGTH=&quot;40&quot; value=&quot;'.$dt4.'&quot;&gt;&lt;br&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;';</p> <p>print '表示期限 &lt;input type=text name=&quot;symd&quot; size=&quot;10&quot; MAXLENGTH=&quot;10&quot; value=&quot;'.$dt5.'&quot;&gt;&lt;br&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;';</p> <p># パスワードが設定してあれば変更可能<br /> # 最終項目なので改行コードがあるのでカットして比較する<br /> $dt6=~s/\n//g;<br /> if ($dt6 ne &quot;&quot;)  {<br /> print '訂正削除パスワード &lt;input type=text name=&quot;pwd1&quot; size=&quot;10&quot; MAXLENGTH=&quot;10&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;';<br /> print '&lt;FONT COLOR=#AA0000&gt;';<br /> print '*訂正又は削除する場合に必要です。未設定時は訂正削除不可';<br /> print '&lt;/FONT&gt;';<br /> print '&lt;BR&gt;';<br /> # 訂正か削除か選択する<br /> print '&lt;TABLE BGCOLOR=&quot;#ffffCC&quot;&gt;';<br /> print '&lt;TR&gt;&lt;TD&gt;';<br /> print '&lt;input type=&quot;radio&quot; name=&quot;syori&quot; value =&quot;0&quot; checked&gt;訂正削除なし' . &quot;\n&quot;;<br /> print '&lt;/TD&gt;&lt;TD&gt;   &lt;/TD&gt;&lt;TD&gt;';<br /> print '&lt;input type=&quot;radio&quot; name=&quot;syori&quot; value =&quot;1&quot;&gt;訂正します' . &quot;\n&quot;;<br /> print '&lt;/TD&gt;&lt;TD&gt;   &lt;/TD&gt;&lt;TD&gt;';<br /> print '&lt;input type=&quot;radio&quot; name=&quot;syori&quot; value =&quot;2&quot;&gt;削除します' . &quot;\n&quot;;<br /> print '&lt;/TD&gt;&lt;TD&gt;   &lt;/TD&gt;&lt;TD&gt;';<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;teisei&quot;&gt;'.&quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;keyno&quot; value=&quot;'.$keyno.'&quot;&gt;'.&quot;\n&quot;;<br /> $syurui_sv=$dt1;<br /> &amp;hidpara;</p> <p>print '&lt;input type=submit value=&quot;訂正削除の実行&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;'.&quot;\n&quot;;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;<br /> print '&lt;BR&gt;';<br /> # キーの確認表示<br /> if ($test eq &quot;on&quot;)  { print &quot;&lt;right&gt;&lt;i&gt;($keyno)&lt;/i&gt;&lt;/right&gt;\n&quot;; }</p> <p>} # end of if</p> <p>############################</p> <p># 戻る<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;main&quot;&gt;' . &quot;\n&quot;;<br /> $syurui_sv=$dt1;<br /> &amp;hidpara;<br /> print '&lt;input type=submit value=&quot;戻る&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;<br /> print '&lt;BR&gt;';<br /> # 外側の飾り線<br /> print '&lt;/TR&gt;&lt;/TABLE&gt;';</p> <p>print '&lt;/BODY&gt;&lt;/HTML&gt;'. &quot;\n&quot;;<br /> } # end of meisai</p> <p>#####################<br /> #  データ訂正<br /> #####################<br /> sub teisei  {<br /> # 訂正削除なしの場合<br /> if (($in{'action'} eq 'teisei') &amp;&amp; ($in{'syori'} == 0))  { return }<br /> # 入力項目チェック<br /> # フォーム入力データ<br /> &amp;form_data;</p> <p># 宛名がない場合<br /> if ($namae eq &quot;&quot; ) { &amp;error(2); }<br /> # 差出人がない場合<br /> if ($sasidasi eq &quot;&quot; ) { &amp;error(3); }</p> <p># チェック通過、更新へ</p> <p>$syurui=$namae;<br /> # 管理者へメール送信<br /> if ($send eq &quot;on&quot;)  {  &amp;mymail }</p> <p>&amp;read2;<br /> # キー<br /> $keyno=$in{'keyno'};<br /> # 管理者用強制パスワード<br /> if ($pwd1 ne &quot;nopassword&quot;)  {<br /> # 訂正パスワードチェック<br /> $bundt=$idxdt{$keyno};<br /> ($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$bundt);</p> <p>#登録パスワードの改行コードをカットしたものと比較する (98.7.11)<br /> $pck=$dt6;<br /> $pck=~s/\n//g;</p> <p>if ($pck eq &quot;&quot;) { &amp;error(91) }<br /> if ($pck ne $pwd1) { &amp;error(92) }<br /> } # end of if<br /> ########################</p> <p># 削除の場合<br /> if (($in{'action'} eq 'teisei') &amp;&amp; ($in{'syori'} == 2))  { &amp;sakujo; return }</p> <p># ここからは訂正選択時処理</p> <p># データ訂正<br /> #   1       2       3     4    5     6<br /> # 日付時刻、宛先、内容、差出人、消去日、訂正用パスワード<br /> $value = &quot;$keyno\t$namae\t$naiyo\t$sasidasi\t$symd\t$pwd1\n&quot;;<br /> $idxdt{$keyno}=$value;<br /> &amp;file_write;<br /> } # end of teisei</p> <p>#####################<br /> #  データ削除<br /> #####################<br /> sub sakujo  {</p> <p># データ削除<br /> delete $idxdt{$keyno};<br /> &amp;file_write;<br /> } # end of sakujo</p> <p><br /> ##########################<br /> #  ファイル登録共通処理 #<br /> ##########################<br /> sub file_write  {</p> <p>#  登録用配列にデータセット<br /> %new=();</p> <p># 配列データを降順にソートする(keysでは登録順に値が返されるとは限らないため)<br /> @data=sort by_date keys(%idxdt);</p> <p>foreach (@data){<br /> # 通常では発生しないが開発途中での空のデータを除く(10は適当)<br /> if (length($idxdt{$_}) &gt; 10) {<br /> push(@new,$idxdt{$_});}<br /> } # end of foreach</p> <p># ファイル登録<br /> if (!open(WRITE,&quot;&gt;$file&quot;)) { &amp;error(0); }<br /> flock(WRITE,2);<br /> print WRITE @new;<br /> flock(WRITE,8);<br /> close (WRITE);</p> <p>} # end of write<br /> ####################################<br /> #                                  #<br /> #   キー(日付)を降順ソートする    #<br /> #                                  #<br /> ####################################<br /> sub by_date { $b cmp $a }</p> <p>################ end of script ###################</p>
<p><br /><br /><br /> #!/usr/local/bin/perl</p> <p># 掲示板2(フレームを利用したパターン)右画面</p> <p># id=bbs2.cgi</p> <p># update.  01.9.16</p> <p># 使用上の注意・・・漢字コードの変換が不完全ですので文字化けするおそれがあります。<br /> #          そのつもりでお使い下さい。</p> <p># 日本語コード変換ライブラリ(v2.0)の指定<br /> # &amp;ReadParse命令で、$in{ }の変数にフォーム入力データが格納される  </p> <p>require 'cgi-lib.pl';<br /> require 'jcode.pl';<br /> &amp;ReadParse;</p> <p># 設置するURLを設定<br /> $reload = 'http://xxx/bbs2.cgi';</p> <p>$file = &quot;/cgi/bbs2.dat&quot;;<br /> $sendmail = '/usr/lib/sendmail';</p> <p># 掲示板へ記入したら管理者へメール通知するならON<br /> $send=&quot;off&quot;;<br /> # メールの送り先<br /> $myaddress =<a href="mailto:">' oooooo@xxx.co.jp'</a>;</p> <p># データ確認デバッグモード(通常は$test=&quot;&quot;、各画面で変数状態を見たいときは&quot;on&quot;)<br /> $test=&quot;&quot;;</p> <p># 最大登録数<br /> $max=200;<br /> # メッセージの文字数制限(この値の半分が漢字数)<br /> $mojisu = 200;<br /> # 表示期間の設定(設定した日数後のファイル更新時に消去します、消去しない場合は0)<br /> $syokyo=7;  # 1週間後</p> <p># 1画面表示件数<br /> $gyosu=10 ;</p> <p>####################################<br /> #                                  #<br /> #   メインルーチン(処理の分岐)     #<br /> #                                  #<br /> ####################################</p> <p># 消去日計算<br /> ($byo,$fun,$ji,$dd,$mm,$yy,$yobi) = localtime(time);<br /> $mm++;<br /> # 2桁化<br /> $mm = sprintf(&quot;%.2d&quot;,$mm);<br /> $dd = sprintf(&quot;%.2d&quot;,$dd);<br /> # 西暦4桁処理<br /> if ($yy &lt; 70) { $yy = $yy + 2000;}<br /> else          { $yy = $yy + 1900;}<br /> # 本日<br /> $ymd=$yy.$mm.$dd;</p> <p><br /> $page=$in{'page'};<br /> $syurui=$in{'syurui'};<br /> # 最初に渡された状態セーブ<br /> $syurui_sv=$syurui;</p> <p># 該当データを調べる<br /> if ($syurui ne &quot;all&quot;) { &amp;read4 }</p> <p>#  全体の流れを決定する<br /> if ($in{'action'} eq 'main') { &amp;main; }</p> <p>elsif ($in{'action'} eq 'kinyu') { &amp;kinyu; }</p> <p>elsif ($in{'action'} eq 'check') { &amp;check; &amp;main; }</p> <p>elsif ($in{'action'} eq 'meisai') { &amp;meisai; }</p> <p>elsif ($in{'action'} eq 'next') { &amp;next; }</p> <p>elsif ($in{'action'} eq 'back') { &amp;back; }</p> <p>elsif ($in{'action'} eq 'narabi') { &amp;narabi; }<br /> # メール送信画面<br /> elsif ($in{'action'} eq 'email') { &amp;email; }</p> <p># 詳細表示画面<br /> elsif ($in{'action'} eq 'teisei') {&amp;teisei;&amp;main; }</p> <p>else { &amp;first; }</p> <p># なくても良いが最終出口を示す<br /> exit;</p> <p>#############################################<br /> #                                           #<br /> #    データを読む             # <br /> #                                           #<br /> #############################################          </p> <p>sub read {</p> <p># データを読み各連想配列に加算する<br /> #   1       2       3     4    5     6<br /> # 日付時刻、宛先、内容、差出人、消去日、訂正用パスワード<br /> $j=0;<br /> # 配列の初期化<br /> @data=();</p> <p>open(DB,&quot;$file&quot;);<br /> flock(DB,2);<br /> while (&lt;DB&gt;)  {<br /> ($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_);  </p> <p># とりあえずキーがないデータを表示しないため<br /> if ($dt1 ne &quot;&quot;)  {</p> <p><br /> # 表示期限チェック<br /> if ($dt5 &gt; 0 &amp;&amp; $dt5 &gt;= $ymd) {<br /> # 9は全部、他は指定分類のみ、指定なしも全件<br /> if ($syurui eq &quot;all&quot;)  { $data[$j]=$_ ;$j++}<br /> elsif ($syurui eq $dt2)  { $data[$j]=$_ ;$j++}<br /> } # end of if</p> <p>} # とりあえずここまで</p> <p>} # end of while</p> <p>flock(DB,8);<br /> close(DB);<br /> # データ数<br /><a href="mailto:$cnt=@data">$cnt=@data</a>;</p> <p>} # end of read<br /> #############################################<br /> #                                           #<br /> #    登録データを読む(訂正削除用配列)  # <br /> #                                           #<br /> #############################################          </p> <p>sub read2 {</p> <p># データを読み各連想配列に加算する<br /> open(DB,&quot;$file&quot;);<br /> flock(DB,2);<br /> @data=&lt;DB&gt;;<br /> flock(DB,8);<br /> close(DB);</p> <p># データ数<br /><a href="mailto:$cnt=@data">$cnt=@data</a>;<br /> # 配列の初期化<br /> %idxdt=();</p> <p># 各レコードを日時をキーにした連想配列にセットする<br /> foreach (@data) {<br /> ($idx,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_);  </p> <p># キーを変数名に入れて1レコード全体をセットする<br /> $idxdt{$idx} = $_;<br /> } # end of foreach</p> <p>} # end of read2<br /> #############################################<br /> #                                           #<br /> #    データを読む(全件)            # <br /> #                                           #<br /> #############################################          </p> <p>sub read3 {<br /> open(DB,&quot;$file&quot;);<br /> flock(DB,2);<br /> @data=&lt;DB&gt;;<br /> flock(DB,8);<br /> close(DB);<br /> } # end of read3</p> <p><br /> #############################################<br /> #                                          <br /> #    アンカータグで渡されたキーデータから該当内容を調べる  <br /> #                                          <br /> #############################################          </p> <p>sub read4 {</p> <p>open(DB,&quot;$file&quot;);<br /> flock(DB,2);</p> <p>while (&lt;DB&gt;)  {<br /> ($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_);  <br /> # 指定レコードキーがあったらそのレコードの宛先をセットする<br /> if ($syurui == $dt1)  { $syurui=$dt2 ;last ; }</p> <p>} # end of while</p> <p>flock(DB,8);<br /> close(DB);</p> <p>} # end of read4<br /> ########################<br /> #            #<br /> # 項目分解ルーチン   #<br /> #            #<br /> ########################<br /> sub bunkai  {<br /> ($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$bundt);</p> <p># 日付時刻分解<br /> $yy=substr($dt1,0,4);<br /> $mm=substr($dt1,4,2);<br /> $dd=substr($dt1,6,2);<br /> $ji=substr($dt1,8,2);<br /> $fun=substr($dt1,10,2);<br /> $byo=substr($dt1,12,2);<br /> $nichiji=$yy.$mm.$dd.$ji.$fun.$byo;<br /> $hizuke=&quot;$yy年$mm月$dd日$ji時$fun分&quot;;<br /> $hizuke1=&quot;$yy年$mm月$dd日&quot;;<br /> $hizuke2=&quot;$ji時$fun分&quot;;<br /> # 番号</p> <p># 内容の改行を元に戻す<br /> $dt3 =~ s/&amp;k/\n/g;<br /> # 表示用に変換する<br /> $naiyo2 = $dt3;<br /> $naiyo2 =~ s/\n/&lt;BR&gt;/g;</p> <p>} # end of bunkai</p> <p>#############################################<br /> #                                           #<br /> #    最初に処理するルーチン          # <br /> #                                           #<br /> #############################################          </p> <p>sub first {</p> <p>print &quot;Content-type: text/html\n\n&quot;;</p> <p>print &lt;&lt;EOM;<br /> &lt;HTML&gt;<br /> &lt;HEAD&gt;&lt;TITLE&gt;掲示板2&lt;/TITLE&gt;&lt;/HEAD&gt;<br /> &lt;BODY BGCOLOR=&quot;#ffffff&quot; BACKGROUND=&quot;<a href="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif">http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif</a>&quot;&gt;<br /> EOM</p> <p>print '&lt;BR&gt;&lt;BR&gt;&lt;FONT size=5 color=&quot;blue&quot;&gt;';<br /> print '&lt;CENTER&gt;左側から表示させる内容を選択してください&lt;/CENTER&gt;&lt;/FONT&gt;'.&quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;'.&quot;\n&quot;;<br /> $page=1;<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;kinyu&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=submit value=&quot; 記入画面へ &quot;&gt;' . &quot;\n&quot;;<br /> &amp;hidpara;<br /> print '&lt;/FORM&gt;';</p> <p>print '&lt;/BODY&gt;&lt;/HTML&gt;'. &quot;\n&quot;;</p> <p>} # end of first</p> <p>#############################################<br /> #                                           #<br /> #    メイン処理画面を表示する            # <br /> #                                           #<br /> #############################################          </p> <p>sub main {</p> <p># 表示用変数<br /> $page = $in{'page'};<br /> $sortkb = $in{'sortkb'} ;</p> <p>&amp;read;</p> <p># 昇順にする<br /> if ($sortkb == 1)  { @data=reverse(@data);}<br /> # ページ数計算<br /> $page_max = (($cnt-1) / $gyosu) + 1;<br /> # 整数部をとりだす<br /> ($page_max,$dummy)=split(/\./,$page_max);</p> <p># 表示出力処理<br /> print &quot;Content-type: text/html\n\n&quot;;<br /> print &lt;&lt;EOM;<br /> &lt;HTML&gt;<br /> &lt;HEAD&gt;&lt;TITLE&gt;掲示板2&lt;/TITLE&gt;&lt;/HEAD&gt;<br /> &lt;BODY BGCOLOR=&quot;#ffffff&quot; BACKGROUND=&quot;<a href="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif">http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif</a>&quot;&gt;<br /> EOM</p> <p>print '&lt;TABLE BORDER=&quot;1&quot;&gt;';<br /> print '&lt;TR&gt;&lt;TD&gt;';<br /> print '&lt;FONT SIZE=3 COLOR=#0000FF&gt;'.&quot;\n&quot;;<br /> print '掲示板2'.&quot;\n&quot;;<br /> print '&lt;/FONT&gt;&lt;/TD&gt;';<br /> print '&lt;TD&gt;指定データ&lt;/TD&gt;';</p> <p>print &quot;&lt;TH&gt;該当件数&lt;/TH&gt;&lt;TH&gt;&lt;FONT COLOR=#0000FF&gt;表示頁&lt;/FONT&gt;&lt;/TH&gt;&lt;TH&gt;最終頁&lt;/TH&gt;&lt;/TR&gt;\n&quot;;</p> <p>print '&lt;TR VALIGN=&quot;MIDDLE&quot;&gt;&lt;TD ALIGN=&quot;CENTER&quot;&gt;';<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;kinyu&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=submit value=&quot; 記入画面へ &quot;&gt;' . &quot;\n&quot;;<br /> &amp;hidpara;<br /> print '&lt;/FORM&gt;';<br /> print '&lt;/TD&gt;';<br /> if ($syurui eq &quot;all&quot;)  { $sitei=&quot;全件&quot; } else { $sitei=$syurui }<br /> print &quot;&lt;TD ALIGN=\&quot;CENTER\&quot;&gt;&lt;FONT COLOR=#AA0000&gt;$sitei&lt;/FONT&gt;&lt;/TD&gt;\n&quot;;</p> <p>print &quot;&lt;TD ALIGN=\&quot;right\&quot;&gt;&lt;FONT COLOR=#AA0000&gt;$cnt&lt;/FONT&gt;&lt;/TD&gt;&lt;TD ALIGN=\&quot;right\&quot;&gt;&lt;FONT COLOR=#0000FF&gt;$page&lt;/FONT&gt;&lt;/TD&gt;\n&quot;;<br /> print &quot;&lt;TD ALIGN=\&quot;right\&quot;&gt;&lt;FONT COLOR=#AA0000&gt;$page_max&lt;/FONT&gt;&lt;/TD&gt;\n&quot;;<br /> print '&lt;/TR&gt;&lt;/TABLE&gt;'.&quot;\n&quot;;</p> <p># 前頁表示</p> <p># ボタンを並べる<br /> # 上段<br /> print '&lt;TABLE BGCOLOR=&quot;#ffffCC&quot;&gt;';<br /> print '&lt;TR VALIGN=&quot;BOTTOM&quot;&gt;';<br /> # 表示順序<br /> print '&lt;TD&gt;';<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;narabi&quot;&gt;' . &quot;\n&quot;;<br /> &amp;hidpara;<br /> if ($sortkb == 0)  { $sortkbn = &quot;日付の古いものを先に&quot;; }<br /> else { $sortkbn = &quot;日付の新しいものを先に&quot;; }<br /> print '&lt;input type=submit value=&quot;'.$sortkbn.'&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;<br /> print '&lt;/TD&gt;';<br /> print '&lt;TD&gt;   &lt;/TD&gt;';<br /> # 前頁表示<br /> print '&lt;TD&gt;';<br /> if ($page == 1)  { print ' '; }<br /> else  {<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;back&quot;&gt;' . &quot;\n&quot;;<br /> &amp;hidpara;<br /> print '&lt;input type=submit value=&quot;前頁&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/FORM&gt;';<br /> } # end of if</p> <p>print '&lt;/TD&gt;';<br /> print '&lt;TD&gt;  &lt;/TD&gt;';<br /> # 次頁表示<br /> print '&lt;TD&gt;';<br /> if ($page == $page_max)  { print ' '; }<br /> else  {<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;next&quot;&gt;' . &quot;\n&quot;;<br /> &amp;hidpara;<br /> print '&lt;input type=submit value=&quot;次頁&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;<br /> } # end of if<br /> print '&lt;/TD&gt;';<br /> print '&lt;TD&gt;  &lt;/TD&gt;';</p> <p>print '&lt;/TR&gt;&lt;/TABLE&gt;'.&quot;\n&quot;;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;</p> <p># 該当データが0件の場合<br /> if ($cnt == 0)  {<br /> print '&lt;BR&gt;&lt;BR&gt;&lt;FONT size=5 color=&quot;blue&quot;&gt;';<br /> print '&lt;CENTER&gt;該当データは0件です、選択内容を変えてご覧ください&lt;/CENTER&gt;&lt;/FONT&gt;'.&quot;\n&quot;;<br /> return } # end of if</p> <p># 最初は詳細形式を表示する<br /> &amp;disp3;</p> <p>} # end of main</p> <p>#################################<br /> #   hiddenパラメータ共通項目  #<br /> #################################<br /> sub  hidpara  {<br /> print '&lt;input type=hidden name=&quot;page&quot; value=&quot;'.$page.'&quot;&gt;'.&quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;sortkb&quot; value=&quot;'.$in{'sortkb'}.'&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;syurui&quot; value=&quot;'.$syurui_sv.'&quot;&gt;' . &quot;\n&quot;;<br /> } # end of hidpara</p> <p>##########################<br /> #            #<br /> #  詳細表示ルーチン  #<br /> #            #<br /> ##########################<br /> sub disp3  {</p> <p>print &quot;&lt;TABLE BORDER=\&quot;1\&quot; WIDTH=\&quot;100%\&quot; &gt;\n&quot;;<br /> print &quot;&lt;TR&gt;&lt;TH&gt;№&lt;/TH&gt;&lt;TH&gt;宛先&lt;/TH&gt;&lt;TH&gt;日付&lt;/TH&gt;&lt;TH&gt;内 容&lt;/TH&gt;&lt;TH&gt;差出人&lt;/TH&gt;&lt;/TR&gt;\n&quot;;</p> <p># 行数分だけ繰り返す<br /> for($i=1; $i&lt;=$gyosu; $i++) {</p> <p>#print '&lt;TR&gt;';<br /> # 1列目はページカウンタ*行数+$i</p> <p>$lno=$gyosu * ($page - 1) + $i;<br /> $no=$lno-1;</p> <p># 項目分解処理<br /> $bundt=$data[$no];<br /> &amp;bunkai;</p> <p># 分類別色<br /> $iro=$buncol[$bunrui];</p> <p>print '&lt;TR&gt;';<br /> print '&lt;TD ALIGN=&quot;right&quot;&gt;&lt;FONT COLOR='.$iro.'&gt;'.$lno.'&lt;/FONT&gt;'.&quot;\n&quot;;<br /> if ($test eq &quot;on&quot;) { print '&lt;BR&gt;'.$bundt.''.&quot;\n&quot;; } # テスト表示<br /> print '&lt;/TD&gt;'.&quot;\n&quot;;<br /> print '&lt;TD ALIGN=&quot;left&quot; NOWRAP&gt;&lt;FONT COLOR='.$iro.'&gt;'.$dt2.'&lt;/FONT&gt;&lt;/TD&gt;';<br /> print '&lt;TD ALIGN=&quot;left&quot; NOWRAP&gt;&lt;FONT COLOR='.$iro.'&gt;'.$hizuke1.'&lt;BR&gt;'.$hizuke2.'&lt;/FONT&gt;&lt;/TD&gt;';<br /> print '&lt;TD ALIGN=&quot;left&quot;&gt;&lt;FONT COLOR='.$iro.'&gt;';<br /> $act=&quot;meisai&quot;;<br /> print '&lt;A HREF = &quot;'.$reload.'?action='.$act.'&amp;keyno='.$dt1.'&amp;tbno='.$lno.'&amp;page='.$page.'&amp;sortkb='.$sortkb.'&quot;&gt;'.$naiyo2.'&lt;/A&gt;';<br /> print '&lt;/FONT&gt;&lt;BR&gt;'.&quot;\n&quot;;<br /> print '&lt;/TD&gt;'.&quot;\n&quot;;<br /> print '&lt;TD ALIGN=&quot;left&quot;&gt;&lt;FONT COLOR='.$iro.'&gt;'.$dt4.'&lt;/FONT&gt;&lt;/TD&gt;'.&quot;\n&quot;;<br /> print '&lt;/TD&gt;'.&quot;\n&quot;;<br /> #print '&lt;TD ALIGN=&quot;left&quot;&gt;&lt;FONT COLOR='.$iro.'&gt;'.$dt5.'&lt;/FONT&gt;&lt;/TD&gt;'.&quot;\n&quot;;<br /> #print '&lt;/TD&gt;'.&quot;\n&quot;;<br /> #print '&lt;TD ALIGN=&quot;left&quot;&gt;&lt;FONT COLOR='.$iro.'&gt;'.$dt6.'&lt;/FONT&gt;&lt;/TD&gt;'.&quot;\n&quot;;<br /> print '&lt;/TR&gt;'.&quot;\n&quot;;</p> <p># 最終データを表示したら抜ける<br /> if ($lno &gt;= $cnt)  { last }</p> <p>} # end of for</p> <p>print '&lt;/TABLE&gt;';<br /> print &quot;&lt;/BODY&gt;&lt;/HTML&gt;\n&quot;;</p> <p>} # end of disp3</p> <p><br /> #############################################<br /> #                                           #<br /> #    掲示板新規記入処理            # <br /> #                                           #<br /> #############################################          </p> <p>sub kinyu {<br /> # 消去日が設定してある場合<br /> if ($syokyo &gt; 0)  {<br /> # 消去日計算<br /> $syokyobyo = $syokyo * 60 * 60 * 24;<br /> ($byo,$fun,$ji,$dd,$mm,$yy,$yobi) = localtime(time + $syokyobyo);<br /> $mm++;<br /> # 2桁化<br /> $mm = sprintf(&quot;%.2d&quot;,$mm);<br /> $dd = sprintf(&quot;%.2d&quot;,$dd);<br /> $ji = sprintf(&quot;%.2d&quot;,$ji);<br /> $fun = sprintf(&quot;%.2d&quot;,$fun);<br /> $byo = sprintf(&quot;%.2d&quot;,$byo);<br /> # 西暦4桁処理<br /> if ($yy &lt; 70) { $yy = $yy + 2000;}<br /> else          { $yy = $yy + 1900;}<br /> # 消去日<br /> $symd=$yy.$mm.$dd;<br /> } # end of if<br /> else { $symd=0 } # end of else</p> <p>print &quot;Content-type: text/html\n\n&quot;;</p> <p>print &lt;&lt;EOM;<br /> &lt;HTML&gt;<br /> &lt;HEAD&gt;&lt;TITLE&gt;掲示板への記入&lt;/TITLE&gt;&lt;/HEAD&gt;<br /> &lt;BODY BGCOLOR=&quot;#ffffff&quot; BACKGROUND=&quot;<a href="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif">http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif</a>&quot;&gt;<br /> &lt;H2&gt;掲示板への記入&lt;/H2&gt;<br /> EOM</p> <p># 外側の飾り線(画面の設定によってはわくとして表示しないことがある)<br /> print '&lt;TABLE BORDER=&quot;10&quot; CELLPADDING=&quot;10&quot; WIDTH=&quot;100%&quot;&gt;';<br /> print '&lt;TR&gt;';</p> <p>print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;check&quot;&gt;' . &quot;\n&quot;;<br /> # 左画面から指定された宛先があれば表示させる<br /> if ($syurui eq &quot;all&quot;)  { $atesaki = &quot;&quot; } else { $atesaki = $syurui }<br /> print '宛先 &lt;input type=text name=&quot;namae&quot; size=&quot;40&quot; MAXLENGTH=&quot;40&quot; value=&quot;'.$atesaki.'&quot;&gt;&lt;br&gt;'.&quot;\n&quot;;<br /> print '&lt;BR&gt;';<br /> print 'メッセージをどうぞ(漢字の場合100文字以内)';<br /> print '&lt;BR&gt;';<br /> print '&lt;TEXTAREA NAME=&quot;naiyo&quot; COLS=70 ROWS=5&gt;&lt;/TEXTAREA&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;';</p> <p>print '差出人 &lt;input type=text name=&quot;sasidasi&quot; size=&quot;40&quot; MAXLENGTH=&quot;40&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;';</p> <p>print '&lt;FONT COLOR=#AA0000&gt;';<br /> print '登録後にあなたが訂正削除する場合に必要。未設定時は訂正削除不可';<br /> print '&lt;/FONT&gt;';<br /> print '&lt;BR&gt;';<br /> print '訂正削除パスワード &lt;input type=text name=&quot;pwd1&quot; size=&quot;10&quot; MAXLENGTH=&quot;10&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;';</p> <p>print '&lt;FONT COLOR=#AA0000&gt;';<br /> print &quot;表示期限は本日より $syokyo日間です、要変更の場合は訂正して下さい\n&quot;;<br /> print '&lt;BR&gt;';<br /> print '&lt;/FONT&gt;';<br /> print '表示期限 &lt;input type=text name=&quot;symd&quot; size=&quot;10&quot; MAXLENGTH=&quot;10&quot; value=&quot;'.$symd.'&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;';<br /> print '&lt;TABLE BGCOLOR=&quot;#ffffCC&quot;&gt;';<br /> print '&lt;TR VALIGN=&quot;BOTTOM&quot;&gt;';<br /> # 表示順序<br /> print '&lt;TD&gt;';<br /> print '&lt;input type=submit value=&quot;登録&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/TD&gt;';<br /> print '&lt;TD&gt;  &lt;/TD&gt;';<br /> print '&lt;TD&gt;';<br /> print '&lt;input type=reset value=&quot;入力内容取消&quot;&gt;' . &quot;\n&quot;;</p> <p># 登録日時セット<br /> ($byo,$fun,$ji,$dd,$mm,$yy,$yobi) = localtime;<br /> $mm++;<br /> # 2桁化<br /> $mm = sprintf(&quot;%.2d&quot;,$mm);<br /> $dd = sprintf(&quot;%.2d&quot;,$dd);<br /> $ji = sprintf(&quot;%.2d&quot;,$ji);<br /> $fun = sprintf(&quot;%.2d&quot;,$fun);<br /> $byo = sprintf(&quot;%.2d&quot;,$byo);<br /> # 西暦4桁処理<br /> if ($yy &lt; 70) { $yy = $yy + 2000;}<br /> else          { $yy = $yy + 1900;}<br /> # 登録日時<br /> $nichiji=$yy.$mm.$dd.$ji.$fun.$byo;</p> <p># ここで同時刻に登録しようとした場合を考えてキーをユニーク(唯一)にするため<br /> # 日時の後に4桁のランダム数字を足す(これでも同一になった場合は訂正時1つのデータ消滅する)<br /> srand;<br /> $a=rand;<br /> $no4=substr($a,index($a,&quot;.&quot;)+1,4);<br /> if ($no4 == 0)  { $no4 = &quot;0000&quot;; }<br /> $nichiji.=$no4;<br /> print '&lt;input type=hidden name=&quot;nichiji&quot; value=&quot;'.$nichiji.'&quot;&gt;' . &quot;\n&quot;;</p> <p># 共通データ渡し<br /> $syurui_sv=$nichiji;<br /> &amp;hidpara;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;<br /> print '&lt;/TD&gt;';<br /> print '&lt;TD&gt;  &lt;/TD&gt;';<br /> print '&lt;TD&gt;';<br /> # 戻る<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;main&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=submit value=&quot;記入せずに戻る&quot;&gt;' . &quot;\n&quot;;</p> <p># 最初の画面から来たときは何も指定データがないから<br /> if ($syurui eq &quot;&quot;)  { $syurui=&quot;all&quot; }<br /> $syurui_sv=$syurui;<br /> &amp;hidpara;<br /> print '&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;'.&quot;\n&quot;;</p> <p><br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;</p> <p># 外側の飾り線<br /> print '&lt;/TR&gt;&lt;/TABLE&gt;';</p> <p>print '&lt;/BODY&gt;&lt;/HTML&gt;'. &quot;\n&quot;;<br /> } # end of kinyu</p> <p>##########################################<br /> #                                        #<br /> #  入力されたデータのチェックルーチン    #<br /> #                                        #<br /> ##########################################</p> <p>sub check {</p> <p>&amp;form_data;</p> <p># 宛名がない場合<br /> if ($namae eq &quot;&quot; ) { &amp;error(2); }<br /> # 差出人がない場合<br /> if ($sasidasi eq &quot;&quot; ) { &amp;error(3); }</p> <p># チェック通過、更新へ<br /> &amp;update;</p> <p>$syurui=$namae;<br /> # 管理者へメール送信<br /> if ($send eq &quot;on&quot;)  {  &amp;mymail }</p> <p>} # end of check</p> <p>#############################################<br /> #                                           #<br /> #    管理者へのメール送信ルーチン       # <br /> #                                           #<br /> #############################################</p> <p>sub mymail  {<br /> # 改行コードを戻す<br /> $naiyo =~ s/&amp;k/\n/g;</p> <p>$message = &lt;&lt;EOM;<br /> Subject: 掲示板記入連絡<br /> Reply-To: $myaddress</p> <p>掲示板2への書き込みがありました。</p> <p>宛先       : $namae</p> <p>メッセージ</p> <p>$naiyo</p> <p>差出人     : $sasidasi</p> <p>訂正削除パスワード : $pwd1</p> <p>登録日時   : $nichiji<br /> EOM</p> <p># メール送信はJISと決められている<br /> &amp;jcode'convert(*message,'jis');</p> <p>open(MAIL,&quot;|$sendmail $myaddress&quot;);<br /> print MAIL $message;<br /> close(MAIL);<br /> } # end of mymail<br /> #############################################<br /> #                                           #<br /> #    フォーム入力データセットルーチン    # <br /> #                                           #<br /> #############################################<br /> sub form_data  {<br /> $nichiji=$in{'nichiji'};<br /> $namae=$in{'namae'};<br /> $naiyo=$in{'naiyo'};</p> <p># メッセージの改行のみをカットする<br /> @chk = split(/\n/,$naiyo);<br /> $msg=&quot;&quot;;<br /> foreach (@chk) {<br /> if (length($_) &gt; 1)  {<br /> $msg=$msg.$_.&quot;\n&quot;;<br /> } # end of if<br /> } # end of foreach<br /> $naiyo=$msg;</p> <p>$naiyo=~ s/\015\012/\n/g;<br /> $naiyo=~ s/\015/\n/g;<br /> $naiyo =~ s/\n/&amp;k/g;<br /> # 文字数チェック<br /> if (length($naiyo) &gt; $mojisu)  { $naiyo = substr($naiyo,0,$mojisu); }</p> <p>$sasidasi=$in{'sasidasi'};<br /> $pwd1=$in{'pwd1'};<br /> $symd=$in{'symd'};</p> <p># タグの無効化<br /> $ckdt=$namae ; &amp;tagck ; $namae=$ckdt;<br /> # 宛先をセットする<br /> $syurui=$namae;<br /> $ckdt=$naiyo ; &amp;tagck ; $naiyo=$ckdt;<br /> $ckdt=$sasidasi ; &amp;tagck ; $sasidasi=$ckdt;<br /> $ckdt=$pwd1 ; &amp;tagck ; $pwd1=$ckdt;<br /> $ckdt=$symd ; &amp;tagck ; $symd=$ckdt;</p> <p>} # end of form_data</p> <p>###############################<br /> #  タグの無効化サブルーチン<br /> ###############################<br /> sub tagck  {<br /> $ckdt =~ s/&lt;/&amp;lt;/ig;<br /> $ckdt =~ s/&gt;/&amp;gt;/ig;<br /> $ckdt =~ s/&lt;!--.*--&gt;//ig;<br /> $ckdt =~ s/\,//g;</p> <p>}</p> <p>##########################################<br /> #                                        #<br /> #  次ページ表示処理              #<br /> #                                        #<br /> ##########################################</p> <p>sub next {<br /> $in{'page'}++;<br /> &amp;main;<br /> } # end of sub</p> <p>##########################################<br /> #                                        #<br /> #  前ページ表示処理              #<br /> #                                        #<br /> ##########################################</p> <p>sub back {<br /> if ($page  &gt; 1)  { $in{'page'}--; }<br /> &amp;main;<br /> } # end of sub<br /> ##########################################<br /> #                                        #<br /> #  表示順序の変更指示             #<br /> #                                        #<br /> ##########################################<br /> sub narabi {<br /> if ($in{'sortkb'} == 0)  { $in{'sortkb'} = 1; }<br /> else { $in{'sortkb'} = 0; }<br /> &amp;main;<br /> } # end of sub</p> <p>#####################<br /> #  ファイル登録<br /> #####################<br /> sub update  {</p> <p>#   1       2       3     4    5     6<br /> # 日付時刻、宛先、内容、差出人、消去日、訂正用パスワード<br /> $value = &quot;$nichiji\t$namae\t$naiyo\t$sasidasi\t$symd\t$pwd1\n&quot;;<br /> $pwd1=$in{'pwd1'};</p> <p># 登録済みデータを読み配列にセットする<br /> if ($pwd1 ne &quot;subetekesu&quot;)  { &amp;read3; unshift(@data,$value);}<br /> else {push(@data,$value);}</p> <p># 表示期限を過ぎたデータを消す<br /> %new=();<br /> foreach(@data)  {<br /> ($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$_);<br /> # 消去日が本日を過ぎていたら除外する<br /> if ($dt5 == 0 || $dt5 &gt;= $ymd) { push(@new,$_);}<br /> } # end of foreach</p> <p># 掲示板は先頭から古い順になっているのでそのまま1番目のデータをシフトする<br /><a href="mailto:$a=@new">$a=@new</a>;<br /> if ($a &gt; $max)  {<br /> $herasu=$a - $max;<br /> for ($i=1; $i&lt;=$herasu; $i++)  { pop(@new) }<br /> } # end of if</p> <p># ファイル登録<br /> if (!open(WRITE,&quot;&gt;$file&quot;)) { &amp;error(0); }<br /> flock(WRITE,2);<br /> print WRITE @new;<br /> flock(WRITE,8);<br /> close (WRITE);</p> <p>} # end of update</p> <p>#############################################<br /> #                                           #<br /> #    チェックエラー表示画面ルーチン      # <br /> #                                           #<br /> #############################################</p> <p>sub error {</p> <p>#  &amp;error(xx); で呼び出されたルーチンは、()内の数字が $error に代入される。</p> <p>$error = $_[0];</p> <p>if    ($error eq &quot;0&quot;) { $error_msg = 'ファイルがない、またはOPENできない。'; }</p> <p>elsif    ($error eq &quot;2&quot;) { $error_msg = '宛名がありません'; }</p> <p>elsif    ($error eq &quot;3&quot;) { $error_msg = '差出人は必ず入力してください'; }</p> <p>elsif    ($error eq &quot;91&quot;) { $error_msg = '訂正パスワードが最初の登録時入力してありませんので、訂正/削除はできません。'; }</p> <p>elsif    ($error eq &quot;92&quot;) { $error_msg = '訂正パスワードが最初の登録時のものと不一致のため、訂正/削除はできません。'; }<br />       <br /> print &quot;Content-type: text/html\n\n&quot;;</p> <p>print '&lt;html&gt;&lt;head&gt;&lt;title&gt;掲示板&lt;/title&gt;&lt;/head&gt;' . &quot;\n&quot;;<br /> print '&lt;body bgcolor=&quot;#ff66ff&quot; text=&quot;#000000&quot; LINK=&quot;#0000ff&quot; VLINK=&quot;#ff8888&quot; ALINK=&quot;#FF0000&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;h2&gt;掲示板の入力で下記のエラーが発生しました&lt;/h2&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;';<br /> print &quot;&lt;i&gt;$error_msg&lt;/i&gt;\n&quot;;</p> <p># リロードでもどると入力データが消えてしまうので<br /> print 'ブラウザ画面の戻るをクリックする'.&quot;\n&quot;;;<br /> print '&lt;/body&gt;&lt;/html&gt;' . &quot;\n&quot;;<br /> # サブルーチンからプログラムを抜けるので<br /> exit;<br /> }</p> <p>#############################################<br /> #                                           #<br /> #    明細データの訂正・削除ルーチン      # <br /> #                                           #<br /> #############################################          </p> <p>sub meisai {</p> <p>&amp;read2;<br /> # キー<br /> $keyno=$in{'keyno'};<br /> # 配列番号(次前データ移動用)<br /> $tbno=$in{'tbno'};<br /> # 実配列番号は-1<br /> $tbno--;</p> <p># 項目分解処理<br /> $bundt=$idxdt{$keyno};<br /> &amp;bunkai;</p> <p>&amp;meisai_display;</p> <p>} # end of meisai<br /> #############################################<br /> #                                           #<br /> #    明細データの訂正・削除ルーチン      # <br /> #    (次前データ処理用)                     #<br /> #############################################     <br /> sub meisai2 {</p> <p>&amp;read;</p> <p># 項目分解処理<br /> $bundt=$data[$tbno];<br /> &amp;bunkai;<br /> # キー<br /> $keyno=$dt1;</p> <p>&amp;meisai_display;</p> <p>} # end of meisai2<br /> #############################################<br /> #                                           #<br /> #    明細データの共通表示ルーチン       # <br /> #                                           #<br /> #############################################          <br /> sub meisai_display  {<br /> # 明細表示データ№は配列№+1<br /> $mno=$tbno+1;</p> <p>print &quot;Content-type: text/html\n\n&quot;;<br /> print &lt;&lt;EOM;<br /> &lt;HTML&gt;<br /> &lt;HEAD&gt;&lt;TITLE&gt;掲示板の詳細&lt;/TITLE&gt;&lt;/HEAD&gt;<br /> &lt;BODY BGCOLOR=&quot;#ffffff&quot; BACKGROUND=&quot;<a href="http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif">http://www0.kumagaya.or.jp/~chichibu/gazo/bg1.gif</a>&quot;&gt;<br /> &lt;H2&gt;掲示板の詳細&lt;/H2&gt;<br /> EOM</p> <p>print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> # 外側の飾り線<br /> print '&lt;TABLE BORDER=&quot;10&quot; CELLPADDING=&quot;10&quot; WIDTH=&quot;100%&quot;&gt;';<br /> print '&lt;TR&gt;';</p> <p>print '宛先 &lt;input type=text name=&quot;namae&quot; size=&quot;40&quot; MAXLENGTH=&quot;40&quot; value=&quot;'.$dt2.'&quot;&gt;&lt;br&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;';</p> <p>print 'メッセージをどうぞ';<br /> print '&lt;BR&gt;';<br /> print '&lt;TEXTAREA NAME=&quot;naiyo&quot; COLS=70 ROWS=5&gt;'.$dt3.'&lt;/TEXTAREA&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;&lt;BR&gt;';</p> <p>print '差出人 &lt;input type=text name=&quot;sasidasi&quot; size=&quot;40&quot; MAXLENGTH=&quot;40&quot; value=&quot;'.$dt4.'&quot;&gt;&lt;br&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;';</p> <p>print '表示期限 &lt;input type=text name=&quot;symd&quot; size=&quot;10&quot; MAXLENGTH=&quot;10&quot; value=&quot;'.$dt5.'&quot;&gt;&lt;br&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;';</p> <p># パスワードが設定してあれば変更可能<br /> # 最終項目なので改行コードがあるのでカットして比較する<br /> $dt6=~s/\n//g;<br /> if ($dt6 ne &quot;&quot;)  {<br /> print '訂正削除パスワード &lt;input type=text name=&quot;pwd1&quot; size=&quot;10&quot; MAXLENGTH=&quot;10&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;BR&gt;';<br /> print '&lt;FONT COLOR=#AA0000&gt;';<br /> print '*訂正又は削除する場合に必要です。未設定時は訂正削除不可';<br /> print '&lt;/FONT&gt;';<br /> print '&lt;BR&gt;';<br /> # 訂正か削除か選択する<br /> print '&lt;TABLE BGCOLOR=&quot;#ffffCC&quot;&gt;';<br /> print '&lt;TR&gt;&lt;TD&gt;';<br /> print '&lt;input type=&quot;radio&quot; name=&quot;syori&quot; value =&quot;0&quot; checked&gt;訂正削除なし' . &quot;\n&quot;;<br /> print '&lt;/TD&gt;&lt;TD&gt;   &lt;/TD&gt;&lt;TD&gt;';<br /> print '&lt;input type=&quot;radio&quot; name=&quot;syori&quot; value =&quot;1&quot;&gt;訂正します' . &quot;\n&quot;;<br /> print '&lt;/TD&gt;&lt;TD&gt;   &lt;/TD&gt;&lt;TD&gt;';<br /> print '&lt;input type=&quot;radio&quot; name=&quot;syori&quot; value =&quot;2&quot;&gt;削除します' . &quot;\n&quot;;<br /> print '&lt;/TD&gt;&lt;TD&gt;   &lt;/TD&gt;&lt;TD&gt;';<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;teisei&quot;&gt;'.&quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;keyno&quot; value=&quot;'.$keyno.'&quot;&gt;'.&quot;\n&quot;;<br /> $syurui_sv=$dt1;<br /> &amp;hidpara;</p> <p>print '&lt;input type=submit value=&quot;訂正削除の実行&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;'.&quot;\n&quot;;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;<br /> print '&lt;BR&gt;';<br /> # キーの確認表示<br /> if ($test eq &quot;on&quot;)  { print &quot;&lt;right&gt;&lt;i&gt;($keyno)&lt;/i&gt;&lt;/right&gt;\n&quot;; }</p> <p>} # end of if</p> <p>############################</p> <p># 戻る<br /> print '&lt;form method=&quot;post&quot; action=&quot;' . $reload . '&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;input type=hidden name=&quot;action&quot; value=&quot;main&quot;&gt;' . &quot;\n&quot;;<br /> $syurui_sv=$dt1;<br /> &amp;hidpara;<br /> print '&lt;input type=submit value=&quot;戻る&quot;&gt;' . &quot;\n&quot;;<br /> print '&lt;/FORM&gt;'. &quot;\n&quot;;<br /> print '&lt;BR&gt;';<br /> # 外側の飾り線<br /> print '&lt;/TR&gt;&lt;/TABLE&gt;';</p> <p>print '&lt;/BODY&gt;&lt;/HTML&gt;'. &quot;\n&quot;;<br /> } # end of meisai</p> <p>#####################<br /> #  データ訂正<br /> #####################<br /> sub teisei  {<br /> # 訂正削除なしの場合<br /> if (($in{'action'} eq 'teisei') &amp;&amp; ($in{'syori'} == 0))  { return }<br /> # 入力項目チェック<br /> # フォーム入力データ<br /> &amp;form_data;</p> <p># 宛名がない場合<br /> if ($namae eq &quot;&quot; ) { &amp;error(2); }<br /> # 差出人がない場合<br /> if ($sasidasi eq &quot;&quot; ) { &amp;error(3); }</p> <p># チェック通過、更新へ</p> <p>$syurui=$namae;<br /> # 管理者へメール送信<br /> if ($send eq &quot;on&quot;)  {  &amp;mymail }</p> <p>&amp;read2;<br /> # キー<br /> $keyno=$in{'keyno'};<br /> # 管理者用強制パスワード<br /> if ($pwd1 ne &quot;nopassword&quot;)  {<br /> # 訂正パスワードチェック<br /> $bundt=$idxdt{$keyno};<br /> ($dt1,$dt2,$dt3,$dt4,$dt5,$dt6) = split(/\t/,$bundt);</p> <p>#登録パスワードの改行コードをカットしたものと比較する (98.7.11)<br /> $pck=$dt6;<br /> $pck=~s/\n//g;</p> <p>if ($pck eq &quot;&quot;) { &amp;error(91) }<br /> if ($pck ne $pwd1) { &amp;error(92) }<br /> } # end of if<br /> ########################</p> <p># 削除の場合<br /> if (($in{'action'} eq 'teisei') &amp;&amp; ($in{'syori'} == 2))  { &amp;sakujo; return }</p> <p># ここからは訂正選択時処理</p> <p># データ訂正<br /> #   1       2       3     4    5     6<br /> # 日付時刻、宛先、内容、差出人、消去日、訂正用パスワード<br /> $value = &quot;$keyno\t$namae\t$naiyo\t$sasidasi\t$symd\t$pwd1\n&quot;;<br /> $idxdt{$keyno}=$value;<br /> &amp;file_write;<br /> } # end of teisei</p> <p>#####################<br /> #  データ削除<br /> #####################<br /> sub sakujo  {</p> <p># データ削除<br /> delete $idxdt{$keyno};<br /> &amp;file_write;<br /> } # end of sakujo</p> <p><br /> ##########################<br /> #  ファイル登録共通処理 #<br /> ##########################<br /> sub file_write  {</p> <p>#  登録用配列にデータセット<br /> %new=();</p> <p># 配列データを降順にソートする(keysでは登録順に値が返されるとは限らないため)<br /> @data=sort by_date keys(%idxdt);</p> <p>foreach (@data){<br /> # 通常では発生しないが開発途中での空のデータを除く(10は適当)<br /> if (length($idxdt{$_}) &gt; 10) {<br /> push(@new,$idxdt{$_});}<br /> } # end of foreach</p> <p># ファイル登録<br /> if (!open(WRITE,&quot;&gt;$file&quot;)) { &amp;error(0); }<br /> flock(WRITE,2);<br /> print WRITE @new;<br /> flock(WRITE,8);<br /> close (WRITE);</p> <p>} # end of write<br /> ####################################<br /> #                                  #<br /> #   キー(日付)を降順ソートする    #<br /> #                                  #<br /> ####################################<br /> sub by_date { $b cmp $a }</p> <p>################ end of script ###################</p>

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。