<?php
// セッションの開始
session_start();
// エラー表示の設定
error_reporting(E_ALL);
ini_set('display_errors', 1);
// データベース接続
require('dbconnect.php');
// $message変数を初期化
$message = '';
// セッションの有効期限の確認
if (isset($_SESSION['id']) && isset($_SESSION['time']) &&
$_SESSION['time'] + 3600 > time()) {
// ログインしている
$_SESSION['time'] = time();
// ユーザー情報の取得
$members = $db->prepare('SELECT * FROM members WHERE id=?');
$members->execute(array($_SESSION['id']));
$member = $members->fetch();
// ログインしているユーザーの名前を取得
$user_name = $member['name'];
// メッセージの初期値を設定
if (isset($member)) {
$message = ''; // 投稿フォームの初期値として空の文字列をセット
$message .= h($user_name) . 'さん、メッセージをどうぞ';
}
} elseif (!empty($_SESSION['id'])) {
$notLoggedIn = true;
} else {
// セッションが存在しない場合
// またはセッションが存在するがログインしていない場合
// 何もしない
}
// ログインしていない場合はフラグがセットされるので、それを使って遷移の判定を行う
if (isset($notLoggedIn) && $notLoggedIn) {
// ログインしていない場合、ログインページにリダイレクト
header('Location: login.php');
exit();
}
// エラー配列
$error = array();
// エラー処理
if (!empty($error) && isset($error['message'])) {
echo $error['message'];
} elseif (isset($message)) {
echo $message;
}
if (!empty($_POST)) {
// Check if
message is set and not empty
if (isset($_POST['message']) &&
$_POST['message'] != '') {
// ...
} else {
// Handle
error: message is empty
$error['message'] = 'メッセージを入力してください (Message is empty)';
}
}
// 投稿の取得
if (isset($_REQUEST['page'])) {
$page = $_REQUEST['page']; // Get the
requested page number
} else {
$page = 1; // Set
default page to 1 if no page is requested
}
$page = max($page, 1); // Ensure page is at least 1
// 最終ページの取得
$counts = $db->query('SELECT COUNT(*) AS cnt FROM posts');
if ($counts) {
$cnt = $counts->fetch();
$maxPage = ceil($cnt['cnt'] / 5);
$page = min($page, $maxPage);
$start = ($page - 1) * 5;
$start = max(0, $start);
$posts =$db->prepare('SELECT m.name, m.picture, p.* FROM members m,
posts p WHERE m.id=p.member_id ORDER BY p.created DESC LIMIT ?, 5');
$posts->bindParam(1, $start, PDO::PARAM_INT);
$posts->execute();
} else {
echo "Error
fetching post counts.";
}
// 返信の場合
if (isset($_REQUEST['res'])) {
$response = $db->prepare('SELECT m.name, m.picture, p.* FROM members m,
posts p WHERE m.id=p.member_id AND p.id=? ORDER BY p.created DESC');
$response->execute(array($_REQUEST['res']));
$table = $response->fetch();
if ($table === false) {
// レコードが見つからなかった場合の処理
echo "Error:
Response not found.";
} else {
// レコードが見つかった場合の処理
$message = '@' . $table['name'] . ' ' . $table['message'];
}
}
function h($value) {
if ($value !== null) { // $value が null でないことを確認する
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
return ''; // $value が null の場合は空の文字列を返す
}
// 本文内のURLにリンクを設定します
function makeLink($value) {
if ($value !== null) { // $value が null でないことを確認する
return mb_ereg_replace("(https?)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)", '<a href="\1\2">\1\2</a>' , $value);
}
return ''; // $value が null の場合は空の文字列を返す
}
// エラー処理
if (isset($error['message'])) {
echo $error['message'];
}
// デバッグ: セッション情報の出力
echo 'Session ID: ' . session_id() . '<br>';
if(isset($_SESSION['id'])) {
echo 'User ID: ' . $_SESSION['id'] . '<br>';
echo 'Session
Time: ' . $_SESSION['time'] . '<br>';
} else {
echo 'User ID is
not set.<br>';
}
// ここに残りのコードを記述...
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,
initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>ひとこと掲示板</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div id="wrap">
<div id="head">
<h1>ひとこと掲示板</h1>
</div>
<div id="content">
<div style="text-align: right"><a href="logout.php">ログアウト</a></div>
<form action="" method="post">
<dl>
<?php if(isset($member)): ?>
<?php echo h($member['name']); ?>さん、メッセージをどうぞ
<?php endif; ?>
<dd>
<textarea name="message" cols="50" rows="5"><?php echo h($message); ?></textarea>
<input type="hidden" name="reply_post_id" value="<?php if(isset($_REQUEST['res'])) { echo h($_REQUEST['res']); } ?>" />
</dd>
</dl>
<div>
<p>
<input type="submit" value="投稿する" />
</p>
</div>
</form>
<?php
foreach ($posts as $post):
?>
<div class="msg">
<img src="member_picture/<?php echo h($post['picture']); ?>" width="48" height="48" alt="<?php echo h($post['name']); ?>" />
<p><?php echo makeLink(h($post['message'])); ?><span class="name">(<?php echo h($post['name']); ?>)</span>[<a href="index.php?res=<?php echo h($post['id']); ?>">Re</a>]</p>
<p class="day"><a href="view.php?id=<?php echo h($post['id']); ?>"><?php echo h($post['created']); ?></a>
<?php
if ($post['reply_post_id'] > 0):
?>
<a href="view.php?id=<?php echoh($post['reply_post_id']); ?>">
返信元のメッセージ</a>
<?php
endif;
?>
<?php
if ($_SESSION['id'] == $post['member_id']):
?>
[<a href="delete.php?id=<?php echo h($post['id']); ?>"
style="color: #F33;">削除</a>]
<?php
endif;
?>
</p>
</div>
<?php
endforeach;
?>
<ul class="paging">
<?php
if ($page > 1) {
?>
<li><a href="index.php?page=<?php print($page - 1); ?>">前のページへ</a></li>
<?php
} else {
?>
<li>前のページへ</li>
<?php
}
?>
<?php
if ($page < $maxPage) {
?>
<li><a href="index.php?page=<?php print($page + 1); ?>">次のページへ</a></li>
<?php
} else {
?>
<li>次のページへ</li>
<?php
}
?>
</ul>
</div>
</div>
</body>
</html>