|
|||||
汎用的(不特定用途対応)な掲示板 ダウンロード #--------------------------------------------------------------------- # ファイル名:NONbbs.cgi:のん掲示板 Ver1.06 # # 更新履歴: # 2002.01.01 Ver1.00 初版。 作成者(のん) # 2002.01.02 Ver1.01 ゴミとして残っている # 返信メッセージを削除する処理追加 変更者(のん) # 2002.03.02 Ver1.02 コメント修正 変更者(のん) # 2002.03.09 Ver1.03 メンバーパスワードをクッキー設定 # しない様に変更し、セキュリティー # を高める 変更者(のん) # 2002.03.10 Ver1.04 HTMLテンプレート不正指定禁止 変更者(のん) # 2002.03.21 Ver1.05 クロスサイトスクリプティング対応 変更者(のん) # 2002.03.25 Ver1.06 クロスサイトスクリプティング対応 変更者(のん) # 2002.03.25 Ver1.06 open関数でのコマンド実行の禁止 変更者(のん) # # Copyright (c) 2001 のん # 連絡先 :http://nonsoft.la.coocan.jp/ # 著作権 :著作権は放棄しません。 # ファイル名の変更は禁止します。 # 使用・改造・再配布は制限しませんが、 # 改造したものを配布する場合は更新履歴をいれてください。 # # 開発目標 :中小規模の汎用的(不特定用途対応)な掲示板を # 目指しています。 # # 機能概要 :概略としては以下の機能があります。 # 1.画面レイアウトを自由(ある程度)に変更できます。 # (例)一覧表示、入力全項目表示 # 画面レイアウト用のHTMLテンプレートにより画面表示 # するため、HTMLの変更によって画面レイアウト変更が # ある程度、簡単に可能です。 # この掲示板の仕様を理解する必要はありますがPerlの # プログラミング知識はいりません。 # (私もPerlが得意な訳ではありませんが...) # Perlをご存知の方は機能追加が出来ます。 # 2.入力する項目を自由(ある程度)に選べます。 # (1)タイトル # (2)名前 # (3)年齢 # (4)性別 # (5)Eメール # (6)URL # (7)文字の色 # (8)背景の色 # (9)削除キー # (10)本文 # (11)その他1 # (12)その他2 # 3.トピック(最初の投稿)毎に返信を表示します。 # 4.1ページに表示するトピック件数をHTMLテンプレート # で変更出来ます。 # 5.SIDという単位で掲示板データを管理しますので、この # プログラム一つでタイトルの異なる複数の掲示板を運営出 # 来ます。 # 6.掲示板の基本機能として以下の機能を備えています。 # (1)新規登録:新規トピックとして登録します。 # (2)返信表示:(Re:)形式で入力項目を表示します。 # (3)返信登録:返信表示したトピックに返信します。 # (4)削除 :削除キーが一致した時に削除します。 # トピックを削除すると返信登録したデータ # 全てを削除します。 # 7.管理者機能として以下の機能を備えています。 # (1)バックアップ # 掲示板データをダウンロードします。 # (2)管理者パスワード変更 # (3)SID追加 # (4)SID削除 # 運営していた掲示板が一時的にアクセス出来無くなり # ます。 # (5)メンバー追加 # (6)メンバー削除 # メンバーを登録すると登録したメンバーのみ掲示板に # アクセス出来ます。 # メンバー登録した掲示板にアクセスするとメンバーパ # スワード入力画面が表示され認証します。 # 認証にはクッキーを使用しています。 # 8.エラー表示 # 認証エラー等でエラーメッセージを表示しますが、セキュ # リティーのため、詳しいメッセージは表示しません。 # ...と言うか面倒だった!? # # 関連ファイル :この掲示板はHTMLテンプレートファイルが1つ # 以上必要です。このCGI単体では動きません。 # HTMLテンプレートファイルは"NONbbs.cgi"と同じ # ディレクトリに存在し、拡張子は".htm"または".html" # です。 # # 管理ファイル :(1)SIDファイル(data/sid_NONbbs.txt) # SIDを1行単位で複数記述します。 # 各行に改行が必要です。 # 管理者機能でも追加/削除出来ます。 # (2)管理者パスワードファイル(data/passwd_NONbss.txt) # 管理者パスワード1件のみを1行に記述します。 # 管理者パスワードの後ろに改行が必要です。 # 管理者機能でも変更出来ます。 # (3)メンバーファイル(data/xxx_menber.txt) # xxxの部分は、SIDです。 # メンバーを1行単位で複数記述します。 # 各行に改行が必要です。 # 管理者機能でも追加/削除出来ます。 # (4)掲示板データファイル(data/xxx_NONbbs.txt) # xxxの部分は、SIDです。 # 掲示板データファイルです。 # バックアップ機能でこのファイルをバックアップ # します。 # # インストール方法:NONbbs.cgiと関連ファイルをCGIが動作するディレクトリ # に置きます。(サーバーがUNIXの場合は、 # ".cgi"ファイルと".pl"ファイルに実行権を与えます。) # NONbbs.cgiと同じディレクトリにdataディレクトリを作成し # 管理ファイルを置きます。 # NONbbs.cgiをURL指定して起動するとデフォルトSIDで # 動作します。 # # 起動パラメータ :html---HTMLテンプレート(default="NONbbs.html") # sid----SID(default="etc") # sname--掲示板タイトル(default="掲示板") # sno----表示先頭トピック番号(default="0") # # CGIの起動方法(例): # 1行目:<form name="bbs" # 2行目: action="http://xxx.xxx.xxx/NONbbs/NONbbs.cgi" # 3行目: method="POST" target="_blank"> # 4行目:<input type="hidden" name="sid" value="etc"> # 5行目:<input type="hidden" name="sname" value="掲示板タイトル"> # 6行目:<a href="javaScript:document.bbs.submit()">掲示板タイトル</a> # 7行目:</form> # # (CGIの起動方法(例)の説明) # 1〜3行目で、起動するCGIを指定しています。 # 4行目で、掲示板のSIDを指定しています。 # 5行目で、掲示板のタイトルを指定しています。 # 6行目で、掲示板へのリンクを指定しています。 # # 関連ドキュメント:掲示板カスタマイズ用のマニュアルを作成予定です。 # HTMLテンプレートの作成方法を記述します。 # # 関連プログラム :(1)カウンタを表示する場合は、NONcount.cgiを # 使用する事が出来ます。 # (2)この掲示板にGIFイメージを表示する場合は、 # NONimg.cgiを使用する事が出来ます。 # 関連プログラムについては、関連プログラムの仕様書を # 参照してください。 # #--------------------------------------------------------------------- 1.HTMLテンプレートの作成方法 のん掲示板は、HTMLテンプレート(テキストファイル)と CGI(Kjbbs.cgi)でデータのやり取りを行ない画面表示を 行ないます。 HTMLテンプレートの内容をそのままブラウザに表示する部分と、 CGIが解釈してCGIが持っているデータと置き換えて表示する部分が あります。 HTMLテンプレートとCGIでやり取りを行なうデータは以下の内容です。 1.1 HTMLテンプレートからCGIへフォームで渡すデータ (1)起動情報 html :HTMLテンプレート(default="NONbbs.html") sid :SID(default="etc") sname :掲示板タイトル(default="掲示板") sno :表示先頭トピック番号(default="0") (2)掲示板入力情報 title :タイトル name :名前 age :年齢 sex :性別 email :Eメール url :URL fgcol :文字の色 bgcol :背景の色 delkey :削除キー msg :本文 etc1 :その他1 etc2 :その他2 (3)メンバーパスワード情報 mempswd :メンバーパスワード (4)ボタン情報 save :新規投稿ボタン delete :削除ボタン res_save :返信投稿ボタン res_dsp :返信表示ボタン selno :削除または返信表示、返信投稿するメッセージのNo. (5)管理者機能情報 mngpswd :管理者パスワード mngpswd1 :管理者パスワード変更1 mngpswd2 :管理者パスワード変更2 chgval :その他の管理者情報変更データ (SIDまたはメンバーパスワード) mngmenu :管理者機能ID backup :バックアップ pswdchg :パスワード変更 sidadd :SID追加 siddel :SID削除 memadd :メンバー追加 memdel :メンバー削除 1.2 HTMLテンプレートをCGIが解釈するデータ (1)CGIは以下のキーワードを解釈し、CGIで持っているデータ 置き換えて掲示板を表示します。 <!--bbs_cgi--> :CGIファイル名 (2)CGIは以下のキーワードを解釈し、HTMLテンプレートから フォームで渡された情報と置き換えて掲示板を表示します。 <!--html--> :HTMLテンプレート <!--sid--> :SID <!--sname--> :掲示板タイトル <!--sno--> :表示先頭トピック番号 <!--selno--> :削除または返信表示、返信投稿するメッセージのNo. (3)CGIは以下のキーワードを解釈し、現在の掲示板表示から 前ページと次ページを計算した値と置き換えて掲示板を表示します。 <!--before_no--> :前ページの先頭メッセージ番号 <!--next_no--> :次ページの先頭メッセージ番号 (4)CGIは以下のキーワードを解釈し、掲示板メッセージ管理ファイル から取得したデータと置き換えて掲示板を表示します。 投稿されたメッセージは、メッセージ管理ファイルと言うファイルに 書きこまれています。 <!--no--> :メッセージ番号 <!--parent--> :親メッセージ番号(返信投稿以外はnoと同じ) <!--ip--> :投稿IPアドレス <!--yyyy--> :投稿日(年) <!--yyyymm--> :投稿日(年月) <!--yyyymmdd--> :投稿日(年月日) <!--yyyymmddhh--> :投稿日(年月日時) <!--yyyymmddhhmm--> :投稿日(年月日時分) <!--yyyymmddhhmmss--> :投稿日(年月日時分秒) <!--title--> :タイトル <!--name--> :名前 <!--age--> :年齢 <!--sex--> :性別 <!--email--> :Eメール <!--emaillink--> :名前にmailtoのリンクを貼った形式 <!--url--> :URL <!--urllink--> :”URL”という文字にリンクを貼った形式 <!--msg--> :本文 <!--fgcol--> :文字の色 <!--bgcol--> :背景の色 <!--delkey--> :削除キー <!--etc1--> :その他1 <!--etc2--> :その他2 (5)その他の掲示板表示制御情報 <!--main_loop=(xx)--> :HTMLのこの位置から<!--/main_loop--> までをメッセージを表示するためのループ となる事をCGIに知らせる。 xxは1ページに表示するトピック数。 (4)で記述したキーワードを解釈する。 <!--/main_loop--> <!--res_loop--> :HTMLのこの位置から<!--/res_loop--> までを各トピックに対する返信メッセージ を表示するためのループとなる事をCGI に知らせる。 <!--/res_loop--> <!--resmode_if--> :HTMLのこの位置から<!--/resmode_if--> までを返信モード時のみ表示する事を CGIに知らせる。 (例)返信投稿ボタン <!--/resmode_if--> <!--before_if--> :HTMLのこの位置から<!--/before_if--> までを前ページに表示するメッセージが有る 時のみ表示する事をCGIに知らせる。 (例)前ページボタン <!--/before_if--> <!--next_if--> :HTMLのこの位置から<!--/next_if--> までを次ページに表示するメッセージが有る 時のみ表示する事をCGIに知らせる。 (例)次ページボタン <!--/next_if--> 2.HTMLテンプレート(例) 1行目:<html> 2行目:<head> 3行目:<title><!--sname--></title> 4行目:<meta http-equiv="Content-Type" content="text/html; charset=x-sjis"> 5行目:<style type="Text/Css"> 6行目:<!-- 7行目:li.oItem { color: #000000; cursor: text; font-size: 11pt; } ; 8行目:ul ul { display: none; font-size: 11pt; } ; 9行目:A{ 10行目: Color:#000000; 11行目: text-decoration: underline; 12行目:} 13行目:A:hover{ 14行目: Color:#FF0000; 15行目: text-decoration: underline; 16行目:} 17行目:--> 18行目:</style> 19行目:<script language="JavaScript"> 20行目:<!-- 21行目:function initDsp(){ 22行目: document.bbs_post.title.focus(); 23行目:} 24行目:function bbsCheck(){ 25行目: if( document.bbs_post.name.value == "" ){ 26行目: alert("(*)が付いた項目は必ず入力してください。"); 27行目: document.bbs_post.name.focus(); 28行目: return false; 29行目: } 30行目: if( document.bbs_post.msg.value == "" ){ 31行目: alert("(*)が付いた項目は必ず入力してください。"); 32行目: document.bbs_post.msg.focus(); 33行目: return false; 34行目: } 35行目: return true; 36行目:} 37行目:function bbsHtmlChg(param){ 38行目: document.bbs_post.html.value = param; 39行目: document.bbs_post.submit(); 40行目: return true; 41行目:} 42行目:function bbsPageChg(param){ 43行目: document.bbs_post.sno.value = param; 44行目: document.bbs_post.submit(); 45行目: return true; 46行目:} 47行目://--> 48行目:</script> 49行目:</head> 50行目:<body background="NONimg.cgi" bgcolor="#FFFFFF" topmargin="5" leftmargin="5" text="#000000"> 51行目:<center> 52行目:<form name="bbs_post" action="<!--bbs_cgi-->" method="POST" onSubmit="return bbsCheck()"> 53行目:<input type="hidden" name="html" value="<!--html-->"> 54行目:<input type="hidden" name="sid" value="<!--sid-->"> 55行目:<input type="hidden" name="sname" value="<!--sname-->"> 56行目:<input type="hidden" name="sno" value="<!--sno-->"> 57行目:<input type="hidden" name="selno" value="<!--selno-->"> 58行目:<table> 59行目: <tr> 60行目: <td nowrap colspan="4" background="NONimg.cgi?img=NONbbs_title.gif"> 61行目: <center> 62行目: <font color="#FFFFFF"><font size="5"> 63行目: <i> ★★★ <!--sname--> ★★★ </i> 64行目: </font></font> 65行目: <img src="../NONcount/NONcount.cgi?sid=<!--sid-->&ino=0"> 66行目: </center> 67行目: </td> 68行目: </tr> 69行目: <tr> 70行目: <td nowrap colspan="4" > 71行目: <center><font size="2"> 72行目: (*)<i>が付いた項目は必ず入力してください。</i> 73行目: </font> 74行目: </center> 75行目: </td> 76行目: </tr> 77行目: <tr> 78行目: <td nowrap>タイトル</td> 79行目: <td nowrap><input type="text" name="title" value="<!--title-->" size=40 maxlength=50></td> 80行目: <td nowrap>名前(*)</td> 81行目: <td nowrap><input type="text" name="name" value="" size=40 maxlength=50></td> 82行目: </tr> 83行目: <tr> 84行目: <td nowrap>Eメール</td> 85行目: <td nowrap><input type="text" name="email" value="" size=40 maxlength=50></td> 86行目: <td nowrap>URL</td> 87行目: <td nowrap><input type="text" name="url" value="http://" size=40 maxlength=50></td> 88行目: </tr> 89行目: <tr> 90行目: <td nowrap>本文(*)</td> 91行目: <td nowrap colspan="3"><textarea name="msg" value="" cols=70 rows=3 wrap="hard"><!--msg--></textarea></td> 92行目: </tr> 93行目: <tr> 94行目: <td nowrap colspan="4"> 95行目: 削除キー<input type="password" name="delkey" value="" size=5 maxlength=10> 96行目: 文字の色<select name="fgcol" size="1"> 97行目: <option value="000000">標準</option> 98行目: <option value="009900">緑</option> 99行目: <option value="0000ff">青</option> 100行目: <option value="000000">黒</option> 101行目: <option value="ffffff">白</option> 102行目: </select> 103行目: <input type="submit" name="save" value="新規投稿"> 104行目:<!--resmode_if--> 105行目: <input type="submit" name="res_save" value="返信投稿"> 106行目:<!--/resmode_if--> 107行目: <input type="reset" name="reset" value="リセット"> 108行目: <a href="javascript:bbsHtmlChg('NONbbs_l.html')"><リスト表示></a> 109行目: </td> 110行目: </tr> 111行目:</table> 112行目:<hr> 113行目:</form> 114行目: 115行目:<table width="80%"> 116行目:<tr><td> 117行目:<!--main_loop=3--> 118行目: <table width="100%"> 119行目: <tr><td colspan="2"> 120行目: <form name="bbs_list<!--no-->" action="<!--bbs_cgi-->" method="POST"> 121行目: <input type="hidden" name="html" value="<!--html-->"> 122行目: <input type="hidden" name="sid" value="<!--sid-->"> 123行目: <input type="hidden" name="sname" value="<!--sname-->"> 124行目: <input type="hidden" name="sno" value="<!--parent-->"> 125行目: <input type="hidden" name="selno" value="<!--no-->"> 126行目: <table width="100%" border=1> 127行目: <tr> 128行目: <td nowrap width="1%">No.<a href="javaScript:document.bbs_list<!--no-->.submit()"><!--no--></a></td> 129行目: <td nowrap> 130行目: <input type="submit" name="res_dsp" value="返信"> 131行目: <input type="submit" name="delete" value="削除"> 132行目: 削除キー<input type="password" name="delkey" value="" size=5 maxlength=10> 133行目: </td> 134行目: <td nowrap>投稿日</td> 135行目: <td nowrap><!--yyyymmddhhmm--> </td> 136行目: </tr> 137行目: <tr> 138行目: <td nowrap>タイトル</td> 139行目: <td><!--title--> </td> 140行目: <td nowrap>名前</td> 141行目: <td width="50%"><!--emaillink--> <!--urllink--></td> 142行目: </tr> 143行目: <tr> 144行目: <td nowrap>本文</td> 145行目: <td colspan="3"><font color="#<!--fgcol-->"><!--msg--> </font></td> 146行目: </tr> 147行目: </table> 148行目: </form> 149行目: </td></tr> 150行目: 151行目: <!--res_loop--> 152行目: <tr><td> </td><td> 153行目: <form name="bbs_list<!--no-->" action="<!--bbs_cgi-->" method="POST"> 154行目: <input type="hidden" name="html" value="<!--html-->"> 155行目: <input type="hidden" name="sid" value="<!--sid-->"> 156行目: <input type="hidden" name="sname" value="<!--sname-->"> 157行目: <input type="hidden" name="sno" value="<!--parent-->"> 158行目: <input type="hidden" name="selno" value="<!--no-->"> 159行目: <table width="100%" border=1> 160行目: <tr> 161行目: <td nowrap width="1%">No.<a href="javaScript:document.bbs_list<!--no-->.submit()"><!--no--></a></td> 162行目: <td nowrap> 163行目: <input type="submit" name="res_dsp" value="返信"> 164行目: <input type="submit" name="delete" value="削除"> 165行目: 削除キー<input type="password" name="delkey" value="" size=5 maxlength=10> 166行目: </td> 167行目: <td nowrap>投稿日</td> 168行目: <td nowrap><!--yyyymmddhhmm--> </td> 169行目: </tr> 170行目: <tr> 171行目: <td nowrap>タイトル</td> 172行目: <td><!--title--> </td> 173行目: <td nowrap>名前</td> 174行目: <td width="50%"><!--emaillink--> <!--urllink--></td> 174行目: </tr> 176行目: <tr> 177行目: <td nowrap>本文</td> 178行目: <td colspan="3"><font color="#<!--fgcol-->"><!--msg--> </font></td> 179行目: </tr> 180行目: </table> 181行目: </form> 182行目: </td></tr> 183行目: <!--/res_loop--> 184行目: </table> 185行目:<!--/main_loop--> 186行目:</td></tr> 187行目:</table> 188行目: 189行目:<!--before_if--> 190行目:<a href="javaScript:bbsPageChg('<!--before_no-->')"><前へ></a> 191行目:<!--/before_if--> 192行目:<!--next_if--> 193行目:<a href="javaScript:bbsPageChg('<!--next_no-->')"><次へ></a> 194行目:<!--/next_if--> 195行目: 196行目:<font color="#888888" size="2"> 197行目:<form name="bbs_mng" action="<!--bbs_cgi-->" method="POST"> 198行目:<input type="hidden" name="html" value="<!--html-->"> 199行目:<input type="hidden" name="sid" value="<!--sid-->"> 200行目:<input type="hidden" name="sname" value="<!--sname-->"> 201行目:<input type="hidden" name="sno" value="<!--sno-->"> 202行目:<input type="hidden" name="selno" value=""> 203行目:<hr> 204行目:管理機能<select name="mngmenu" size="1"> 205行目:<option value="backup">バックアップ</option> 206行目:<option value="pswdchg">パスワード変更</option> 207行目:<option value="sidadd">SID追加</option> 208行目:<option value="siddel">SID削除</option> 209行目:<option value="memadd">メンバー追加</option> 210行目:<option value="memdel">メンバー削除</option> 211行目:</select> 212行目:新パスワード<input type="password" name="mngpswd1" value="" size=5 maxlength=10> 213行目:<input type="password" name="mngpswd2" value="" size=5 maxlength=10> 214行目:SID/メンバー<input type="text" name="chgval" value="" size=5 maxlength=10> 215行目:管理者パスワード<input type="password" name="mngpswd" value="" size=5 maxlength=10> 216行目:<input type="submit" name="manage" value="実 行"> 217行目:<hr> 218行目:</form> 219行目:</font> 220行目: 221行目:</center> 222行目:</body> 223行目:</html> (HTMLテンプレート(例)の説明) 1〜20行目目までは普通のHTML&ジャバスクリプトです。 21〜23行目までは、初期表示でタイトル入力エリアにカーソルを 移動するものです。 24〜36行目までは、必須項目のチェックです。 37〜41行目までは、リスト表示用のHTMLテンプレートに 切り替えるものです。 42〜26行目までは、前ページ、次ページを切り替えるものです。 51行目は、掲示板のバックグランドイメージをNONimgで表示して います。 52〜57行目までは、CGI名やその他の起動情報を設定しています。 79行目は、返信表示用のタイトルを引用しています。 91行目は、返信表示用の本文を引用しています。 104〜106行目までは、返信モード用の「返信投稿」ボタンを 表示しています。 117行からは、メインの投稿(トピック)のループを宣言して います。 118〜185行目までは、メインの投稿(トピック)の表示フォーマット を記述しています。 151行からは、返信投稿のループを宣言しています。 151〜183行目までは、返信投稿の表示フォーマットを記述しています。 189〜191行目までは、前ページボタンを表示しています。 196〜219行目までは、管理者機能を表示しています。 −以上− |