<?php
#############################################################
## ■セッション
#############################################################
session_start();
?>
<HTML>
<HEAD>
<TITLE>
掲示板
</TITLE>
<META http-equiv="Content-Type"
content="text/html; charset=Shift_JIS">
<META http-equiv="Content-Style-Type"
content="text/css">
<META http-equiv="Content-Script-Type"
content="text/javascript">
<script language="JavaScript"
type="text/javascript">
<!--
function Enter_no() {
return (event.keyCode == 13) ? false : true;
}
-->
</script>
<link rel="stylesheet" href="./css/style.css"
type="text/css">
</HEAD>
<BODY>
<?php
#############################################################
## ■初期設定
#############################################################
// 自分自身のファイル名
$myself = './bbs_main.php';
// ログファイル
$logfile = "./log/bbs.csv";
// ページングファイル(外部読み込み)
$paging = './paging/page_link2.php';
// 管理ページ
$config = './config.php';
// ページモード
$page_mode = 'page_new';
// レコード出力変数
$record_start = "";
// レコード出力開始(レコードスタート)
$record_end = "";
// レコード出力末端(レコードエンド)
// Allリンクフラグ
$flag_all = 'no'; // ONの場合、前10件,次10件表示なし
// 変数明記
// $count_record レコードカウント
#############################################################
## ■ログレコード読み込み
#############################################################
$logdata = bbs_load($logfile);
#############################################################
## ■クエリ文字列取得 $_GET[]
#############################################################
if(strtoupper($_SERVER["REQUEST_METHOD"])
== "GET"){
// ページモード
$page_mode = $_GET["page_mode"];
// testing...
if($page_mode == NULL){
$page_mode = 'page_new';
}
// フラグ:Allリンク(前10件,次10件表示なしの為)
$flag_all = $_GET["flag_all"];
// ページ数リンク取得
$page = $_GET["page"];
// モード取得(ページング)
$mode = $_GET["mode"];
}
//print '$flag_all:'. "$flag_all".
"<BR>\n";
//print '$page_mode:'. "$page_mode".
"<BR>\n";
#############################################################
## ■POST-投稿受付処理 (ログ書き込み)
#############################################################
// 投稿があったときの処理
if(strtoupper($_SERVER["REQUEST_METHOD"])
== "POST"){
###########################################################
## □リロードID取得
###########################################################
$reloader = $_POST["reloader"];
###########################################################
## □リロードIDの比較
###########################################################
// 比較
if($reloader == $_SESSION["ses_reload"]){
// 等しい場合正規POSTフラグ'ON'
$flag_post = 'ON';
}
else{ $flag_post = 'off';}
###########################################################
## ■正規POSTの場合(リロードでない)
###########################################################
if($flag_post == 'ON'){
###########################################################
## □変数取得, 文字列整形
###########################################################
// 変数取得
$formdata = $_POST["formdata"];
###########################################################
## □クッキー保存
###########################################################
// 書き込み
setcookie("COOKIE2",
"name=$formdata[1]", time() + 1 *
24 * 60 * 60);
#########################################################
## ・メッセージチェック
#########################################################
// フォームデータチェック関数
$formdata = form_check($formdata);
// 文字列整形
// フォームデータにタブがあった場合削除
$formdata = str_replace("\t",
"", $formdata);
// 特殊文字のHTMLエントリー
$formdata = str_replace("<",
"<", $formdata);
$formdata = str_replace(">", ">",
$formdata);
// CSVファイル使用の為、カンマ削除
for($i=0; $i < count($formdata);
$i++){
$formdata[$i] = str_replace(",",
"", $formdata[$i]);
}
// 改行を含むテキスト処理
// nl2br関数により、文字列内の改行コード「\r
\n」の前に<br />挿入
$formdata[4] = nl2br($formdata[4]);
// nl2br関数処理後、改行コード削除
$formdata[4] = str_replace("\n",
"", $formdata[4]);
$formdata[4] = str_replace("\r",
"", $formdata[4]);
// CSVファイル使用の為、改行を含むテキストは、""(ダブルクォーテーション)で囲む。
$formdata[4] = "\"".
"$formdata[4]". "\"";
// フォーム配列エンコード
foreach($formdata as $key
=> $value){
$get_data_args[] = mb_convert_encoding($value,
"SJIS", "auto");
}
###########################################################
## □保存用に文字列整形
###########################################################
$formstring = implode(",",
$get_data_args) ;
###########################################################
## □タイムスタンプ
###########################################################
// 日付
$yy = date('Y');
$mm = date('m');
$dd = date('d');
// 曜日
$ww = date('w');
$ww = youbi($ww);
// 時間
$HH = date('H');
$ii = date('i');
$ss = date('s');
$date_str = "$yy".
"/". "$mm". "/".
"$dd". "/". "(".
"$ww". ")". "$HH".
":". "$ii". ":".
"$ss";
###########################################################
## □保存用に文字列整形(最終形態)
###########################################################
$formstring = $formstring
. ",". "$date_str". "\n";
// testing.....
//print_r($formstring);
###########################################################
## □同一レコードがある場合ログデータに書き込まない
###########################################################
// ファイルオープン
$file_args = @file("$logfile")
or die("ファイルが開けません。");
// フォームのレコードとファイルのレコードが等しいかをチェック
foreach($file_args as $value){
// チェック
if($formstring == $value){
$flag_double = 'ON';
}
}
###########################################################
## □同一レコードがない場合正規書き込み
###########################################################
if($flag_double !== 'ON'){
#######################################################
## ・投稿データをログデータに追加
#######################################################
array_push($logdata, $formstring);
#######################################################
## ・重複するレコード内容を削除
#######################################################
$logdata = array_unique($logdata);
#######################################################
## ・ログ書き込み
#######################################################
bbs_save($logfile, $logdata);
}
}
}
?>
<CENTER>
<hr width="600">
<?php
###########################################################
## ■リロードID発行
###########################################################
if(!session_is_registered("ses_reload")){
session_register("ses_reload");
}
$reload_id = $_SESSION["ses_reload"]
+ 1;
//print '$reload_id:'. "$reload_id".
"<BR>\n";
###########################################################
## ■リロードIDセッション登録(現在のリロードID)
###########################################################
$_SESSION["ses_reload"]
= $reload_id;
//print '$_SESSION["ses_reload"]:'.
$_SESSION["ses_reload"]. "<BR>\n";
###########################################################
## ■POST用リロードID保存(前ページのリロードID)
###########################################################
$reload = $_SESSION["ses_reload"];
//print '$get_reload:'. "$reload".
"<BR>\n";
###########################################################
## ■クッキー読み込み
###########################################################
parse_str($_COOKIE["COOKIE2"]);
###########################################################
## ■記事件数取得・クエリリンク・掲示板タイトル:出力
###########################################################
// ファイルオープン
$args = @file("$logfile")
or die("ファイルが開けません。");
// 件数カウント
$record_line = count($args);
// ページ数リンク
// ページ数取得
$page_count = $record_line
/ 10;
// 出力
echo "<TABLE border=\"0\"
width=\"600\" cellspacing=\"0\"
cellpadding=\"2\">\n";
echo "<TR><TD
align=\"center\">掲示板(CSV)</TD></TR>\n";
echo "<TR><TD
align=\"left\">\n";
// ページリンク
// Allリンクフラグが'ON'でない場合にリンク出力
if($flag_all !== 'ON'){
echo "<a href=\"$myself?page_mode=all&flag_all=ON\">[All]</a>\n";
echo "<a href=\"$myself?page_mode=page_new\">[最新10件]</a>\n";
}
else{
echo "<a href=\"$myself?page_mode=page_new\">[掲示板に戻る]</a>\n";
}
// 記事件数
echo "記事件数:". "$record_line".
"件\n";
// ページ数リンク出力
require("$paging");
echo "</TD></TR>\n";
echo "</TABLE>\n";
###########################################################
## ■レコード出力変数:$record_start, $record_end取得
###########################################################
#########################################################
## □All:$record_start, $record_end取得
#########################################################
if($page_mode == 'all'){
$record_start = 1;
$record_end = $record_line;
// $record_start, $record_end出力
if($mode !== 'pin' AND $mode
!== 'next' AND $mode !== 'back'){
echo "<TABLE border=\"0\"
width=\"600\"cellspacing=\"0\"
cellpadding=\"2\">\n";
echo "<TR><TD align=\"left\">\n";
echo '表示範囲:'. "\n";
echo "(". "$record_start".
"〜". "$record_end". ")".
"\n";
echo "<hr width=\"600\">\n";
echo "</TD></TR></TABLE>\n";
}
}
#########################################################
## □最新10件:$record_start, $record_end取得
#########################################################
if($page_mode == 'page_new'){
$record_end = (int)$record_line
-10;
$record_start = (int)$record_end
+ 1;
$record_end = ((int)$record_start
+ 10) -1;
// $record_start, $record_end出力
if($mode !== 'pin' AND $mode
!== 'next' AND $mode !== 'back'){
echo "<TABLE border=\"0\"
width=\"600\"cellspacing=\"0\"
cellpadding=\"2\">\n";
echo "<TR><TD align=\"left\">\n";
echo '表示範囲:'. "\n";
echo "(". "$record_start".
"〜". "$record_end". ")".
"\n";
echo "<hr width=\"600\">\n";
echo "</TD></TR></TABLE>\n";
}
#####################################################
## ・セッション変数登録
#####################################################
if(!session_is_registered("ses_record_end")){
session_register("ses_record_end");
$_SESSION["ses_record_end"]
= $record_end;
}
else{
$_SESSION["ses_record_end"]
= $record_end;
}
}
#########################################################
## □ページ数リンクから:$record_start, $record_end取得
#########################################################
//if($page !== ""
AND $page_mode !== 'page_new' AND $page_mode
!== 'all'
// AND $page_mode !== 'back' AND $page_mode
!== 'next'){
if($mode == 'pin'){
$record_end = $page * 10;
$record_start = $record_end
-9;
// $record_start, $record_end出力
echo "<TABLE border=\"0\"
width=\"600\"cellspacing=\"0\"
cellpadding=\"2\">\n";
echo "<TR><TD align=\"left\">\n";
echo '表示範囲:'. "\n";
echo "(". "$record_start".
"〜". "$record_end". ")".
"\n";
echo "<hr width=\"600\">\n";
echo "</TD></TR></TABLE>\n";
}
?>
</CENTER>
<BR>
<?php
#############################################################
## ■ログレコード出力
#############################################################
echo "<CENTER>\n";
echo "<TABLE border=\"2\"
cellspacing=\"0\" cellpadding=\"2\"
width=\"600\">\n";
###########################################################
## □出力処理
###########################################################
// ファイルオープン
$args = @file($logfile) or
die("ファイルが開けません。");
// レコードカウント
$count_record = 0;
// レコード配列から1レコード読み込む
foreach($args as $value){
// レコードカウント加算
$count_record++;
if($count_record > $record_end){
break;
}
if($count_record >= $record_start
AND $count_recored <= $record_end){
// カンマ区切りで分解後、配列格納
$columns = explode(",",
$value);
// 先頭及び末尾の空白文字列を取り除く
trim($columns);
// 出力
echo "<TR>\n";
echo "<TD width=\"600\"
align=\"left\" valign=\"top\"
bgcolor=\"palegoldenrod\">\n";
echo "<font size=\"2\">$count_record</font> \n";
echo "<font size=\"2\">◆タイトル:$columns[0]</font>\n";
echo "<font size=\"2\">名前:$columns[1]</font>\n";
echo "<font size=\"2\"> $columns[5]</font>";
echo "<font size=\"1\">\n";
if($columns[2] !== ""){
echo ' <a href="mailto:'
. $columns[2] . '">[ MAIL ]</a>';
}
if($columns[3] !== ""){
print ' <a href="'
. $columns[3] . '" target="_blank">[
HOME ]</a>';
}
echo "</font>\n";
echo "</TD>\n";
echo "</TR>\n";
echo "<TR><TD
colspan=\"4\" bgcolor=\"cornsilk\">\n";
// 改行を含むテキスト処理
// メッセージテキストの""(ダブルクォーテーション)を取り除く
$columns[4] = str_replace('"',
'', $columns[4]);
echo "$columns[4]\n";
echo "</TD></TR>\n";
echo "<TR><TD
colspan=\"4\">\n";
echo " \n";
echo "</TD></TR>\n";
}
}
echo "</TABLE>\n";
echo "</CENTER>\n";
echo "<CENTER>\n";
###########################################################
## ■レコードエンド($record_end)0以下の場合メッセージ
###########################################################
if($record_end < 1){
print '対象記事がありません。'. "<BR>\n";
}
###########################################################
## ■レコードスタート($record_start)が全件数超過の場合
###########################################################
if($record_start > $record_line){
print '対象記事がありません。'. "<BR>\n";
}
###########################################################
## ■記事件数取得・クエリリンク:出力
###########################################################
// ファイルオープン
$args = @file("$logfile")
or die("ファイルが開けません。");
// 件数カウント
$record_line = count($args);
// 出力
echo "<TABLE border=\"0\"
width=\"600\" cellspacing=\"0\"
cellpadding=\"2\">\n";
echo "<TR><TD
align=\"left\">\n";
// ページリンク
// Allリンクフラグが'ON'でない場合にリンク出力
if($flag_all !== 'ON'){
echo "<a href=\"$myself?page_mode=all&flag_all=ON\">[All]</a>\n";
echo "<a href=\"$myself?page_mode=page_new\">[最新10件]</a>\n";
}
else{
echo "<a href=\"$myself?page_mode=page_new\">[掲示板に戻る]</a>\n";
}
// 記事件数
echo "記事件数:". "$record_line".
"件\n";
for($i=0; $i<45; $i++){ echo " \n";}
echo "<a href=\"#top\">Page
Top</a>". "\n";
echo "</TD></TR>\n";
echo "</TABLE>\n";
?>
<hr width="600">
<!--######################################################-->
<!--## ■投稿フォーム
<!--######################################################-->
<CENTER>
<?php
echo "<FORM method=\"POST\"
action=\"$myself\">\n";
echo "<TABLE border=\"0\"
cellspacing=\"0\" cellpadding=\"2\">\n";
echo "<TR>\n";
echo "<TD>タイトル</TD>\n";
echo "<TD>\n";
echo "<input type=\"text\"
name=\"formdata[]\" size=\"40\"
maxlength=\"40\" onkeydown=\"return
Enter_no();\">\n";
echo "</TD>\n";
echo "</TR>\n";
echo "<TR>\n";
echo"<TD>名 前</TD>\n";
echo "<TD>\n";
echo "<input type=\"text\"
name=\"formdata[]\" size=\"40\"
maxlength=\"40\" onkeydown=\"return
Enter_no();\" value=\"$name\">\n";
echo "</TD>\n";
echo"</TR>\n";
echo"<TR>\n";
echo"<TD>メール</TD>\n";
echo"<TD>\n";
echo"<input type=\"text\"
name=\"formdata[]\" size=\"40\"
maxlength=\"40\" onkeydown=\"return
Enter_no();\">\n";
echo"</TD>\n";
echo"</TR>\n";
echo"<TR>\n";
echo"<TD>URL</TD>\n";
echo"<TD>\n";
echo"<input type=\"text\"
name=\"formdata[]\" size=\"40\"
maxlength=\"100\" onkeydown=\"return
Enter_no();\">\n";
echo"</TD>\n";
echo"</TR>\n";
echo"<TR>\n";
echo"<TD colspan=\"2\">メッセージ</TD>\n";
echo"</TR>\n";
echo"<TR>\n";
echo"<TD colspan=\"2\"><textarea
name=\"formdata[]\" cols=\"50\"
rows=\"8\"></textarea>\n";
echo"</TD>\n";
echo"</TR>\n";
echo"<TR>\n";
echo"<TD colspan=\"2\" align=\"center\">\n";
echo"<input type=\"submit\"
value=\"投稿する\">\n";
echo"<input type=\"reset\"
value=\"取り消し\">\n";
echo "<input type=\"hidden\"
name=\"reloader\" value=\"$reload\">\n";
echo"</TD>\n";
echo"</TR>\n";
echo"</TABLE>\n";
echo"</FORM>\n";
?>
</CENTER>
<?php
#############################################################
## ■関数lib
#############################################################
###########################################################
## □ログレコード読み込み関数
###########################################################
function bbs_load($get_file){
$data = @file($get_file);
return($data);
}
###########################################################
## □ログ書き込み関数
###########################################################
function bbs_save($file, $data){
// 書き込み
// ファイルオープン
$fp = @fopen($file, "w")
or die("ファイルが開けません。");
// 排他ロック(2重書き込みロック)
flock($fp, LOCK_EX);
// ログデータ配列を1レコードずつ読み込み、1レコードの長さ分書き込む
foreach($data as $value){
fputs($fp, $value, strlen($value));
}
// ロック解除
flock($fp, LOCK_UN);
// ファイルクローズ
fclose($fp);
}
###########################################################
## □曜日取得
###########################################################
function youbi($get_ww){
switch($get_ww){
case 0:
$youbi_str = '日';
break;
case 1:
$youbi_str = '月';
break;
case 2:
$youbi_str = '火';
break;
case 3:
$youbi_str = '水';
break;
case 4:
$youbi_str = '木';
break;
case 5:
$youbi_str = '金';
break;
case 6:
$youbi_str = '土';
break;
}
return($youbi_str);
}
###########################################################
## □フォームデータチェック
###########################################################
function form_check($get_formdata){
// メッセージ欄が空欄の場合
if($get_formdata[4] == ""){
echo '入力確認:'. "<BR>\n";
echo 'メッセージを入力してください。'. "<BR>\n";
echo"<a href=\"./bbs_main.php\">前に戻る</a>\n";
exit();
}
// タイトルがない場合は「無題」に
if($get_formdata[0] == ""){
$get_formdata[0] = '無題';
}
// 名前がない場合は「名無しさん」に
if($get_formdata[1] == ""){
$get_formdata[1] = '名無しさん';
}
// リターン
return $get_formdata;
}
?>
<CENTER>
<hr width="600">
<TABLE border="0" width="600">
<TR>
<TD align="right">
<font size="2" color="gray">Copyright
(C) 2007 projectz All Rights Reserved. </font>
</TD>
<TD>
<!-- ▼管理
<FORM action="" method="POST">
<input type="password" name="pass"
size="6" maxlength="12">
<input type="submit" value="管理"
style="background-color:gainsboro;color:black;border-color:gray;font-size:13">
</FORM>
▲管理 --->
</TD>
</TR>
</TABLE>
</CENTER>
</BODY>
</HTML>
実行画面
|
|
|