php 掲示板 投稿一覧画面を作成中
解決したいこと
PHP学習のため掲示板を作成中です。
作成中によりエラーは出ておりますが備忘録のため投稿しておきます。
改善すべき点は多々あると思いますので、
可能であればコメントを頂けますと幸いです。
<課題点>
・ユーザーのプロフィール画面にて、
そのユーザーの投稿一覧の取得ができていない(list.php)
随時追加します。
<?php
// 会員登録画面
require('./dbconnect.php');
//👇Warningを非表示にする
error_reporting(0);
session_start();
if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) {
// ログインしている
$_SESSION['time'] = time();
$members = $db->prepare('SELECT * FROM members WHERE id=?');
$members->execute(array($_SESSION['id']));
$member = $members->fetch();
} else {
// ログインしていない
header('Location: login.php'); exit();
}
if (!empty($_POST)) {
// エラー項目の確認
$fileName = $_FILES['image']['name'];
if (!empty($fileName)) {
$ext = substr($fileName, -3);
if ($ext != 'jpg' && $ext != 'png') {
$error['image'] = 'type';
}
}
if (empty($error)) {
// 画像をアップロードする
$image = date('YmdHis') . $_FILES['image']['name'];
move_uploaded_file($_FILES['image']['tmp_name'], './index_image/' . $image);
$_SESSION['join'] = $_POST;
$_SESSION['join']['image'] = $image;
}
// 登録処理をする
$statement = $db->prepare('INSERT INTO posts SET member_id=?, message=?, image=?, reply_image_id=?, created=NOW()');
echo $ret = $statement->execute(array(
$member['id'],
$_SESSION['join']['message'],
$_SESSION['join']['image'],
$_POST['reply_image_id'] ));
header('Location: pic.php');
exit();
}
// 書き直し
if ($_GET['action'] == 'rewrite') {
$_POST = $_SESSION['join'];
$error['rewrite'] = true;
}
// 投稿を取得する
$page = $_GET['page'];
if ($page == '') {
$page = 1;
}
$page = max($page, 1);
// 最終ページを取得する
$counts = $db->query('SELECT COUNT(*) AS cnt FROM posts');
$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();
// 返信の場合
if (isset($_GET['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($_GET['res']));
$table = $response->fetch();
$message = '@' . $table['name'] . ' ' . $table['message'];
}
// htmlspecialcharsのショートカット
function h($value) {
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}
// 本文内のURLにリンクを設定します
function makeLink($value) {
return mb_ereg_replace("(https?)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)", '<a href="\1\2">\1\2</a>' , $value);
}
?>
<!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="profile.php">プロフィール</a></div>
<div style="text-align: right"><a href="user.php">ユーザー一覧画面</a></div>
<div style="text-align: right"><a href="logout.php">ログアウト</a></div>
<div style="text-align: center"><p><?php echo h($member['name']); ?>さん、こんにちは</p></div><br>
<form action="" method="post" enctype="multipart/form-data">
<dl>
<dt><?php echo h($member['name']); ?>さん、メッセージをどうぞ</dt>
<dd>
<textarea name="message" cols="50" rows="5"><?php echo h($message); ?></textarea>
<input type="hidden" name="reply_image_id" value="<?php echo h($_GET['res']); ?>" />
</dd>
<dt><?php echo h($member['name']); ?>さん、画像をどうぞ
<?php if ($error['image'] == 'type'): ?>
<p class="error">* 写真などは「.png」または「.jpg」の画像を指定してください</p>
<?php endif; ?>
<dd>
<input type="file" name="image" size="35" value="test" />
</dd>
</dl>
<div><input type="submit" value="送信する" /></div><br>
</form>
<?php foreach ($posts as $post): ?>
<div class="msg">
<a href="list.php?member_id=<?php echo h($post['member_id']); ?>">
<img src="./member_picture/<?php echo h($post['picture']); ?>" width="48" height="48" alt="<?php echo h($post['name']); ?>" />
</a>
<p><?php echo makeLink(h($post['message'])); ?></p>
<a href="view.php?id=<?php echo h($post['id']); ?>">
<img src="./index_image/<?php echo htmlspecialchars($post['image'], ENT_QUOTES); ?>" width="200" height="200" alt="<?php echo h($post['name']); ?>" />
</a>
<p><span class="name"><a href="list.php?member_id=<?php echo h($post['member_id']); ?>">(<?php echo h($post['name']); ?>)</a></span>
<br>[<a href="pic.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_image_id'] > 0): ?>
<a href="view.php?id=<?php echo h($post['reply_image_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="pic.php?page=<?php print($page - 1); ?>">前のページへ</a></li>
<?php } else { ?>
<li>前のページへ</li>
<?php } ?>
<?php if ($page < $maxPage) { ?>
<li><a href="pic.php?page=<?php print($page + 1); ?>">次のページへ</a></li>
<?php } else { ?>
<li>次のページへ</li>
<?php } ?>
</ul>
</div>
</div>
</body>
</html>
0 likes