<?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>