@poyon (ぽよんぽよん)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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>

2023-04-21 (2).png

0 likes

Your answer might help someone💌