

会員制掲示板をphp+mysqlで作ってます。

ユーザーごとに投稿が表示されるのですが、 自分の投稿以外は「投稿編集」「投稿削除」できないようにしたいです。
（※「投稿編集」「投稿削除」のリンクを表示させない）

例：testuserでログインしたらtestuser以外のユーザーの投稿は 「投稿編集」「投稿削除」のリンクを表示させない

【posts】テーブルのuser_idは【users】テーブルのidの値が入るようになってます。
その値同士が同じであれば「投稿編集」「投稿削除」のリンクを表示するという構成です。

実装はしたものの、正常に動作しません。 どこが間違っているのかご教示願います。

テーブル情報はこんな感じ。  
【users】テーブル

[code]

    create table users (
      id int primary key auto_increment,
      name varchar(255),
      email varchar(255),
      created_at datetime,
      password varchar(255)
    );
    
[/code]

【posts】テーブル

[code]

    create table posts (
      id int primary key auto_increment,
      user_id int,
      name varchar(255),
      title varchar(255),
      content text,
      created_at datetime,
      updated_at datetime
    );
    
[/code]

サンプルコードは以下です。

[code]

    <?php
    
    session_start();
    
    
    require_once('config.php');
    require_once('functions.php');
    
    if (empty($_SESSION['id'])) {
      header('Location: login.php');
      exit;
    }
    //var_dump($_SESSION['id']);
    //var_dump($_SESSION['name']);
    
    $dbh = connectDatabase();
    $sql = "select * from posts";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();
    
    $posts = $stmt->fetchAll(PDO::FETCH_ASSOC);
    //var_dump($posts);
    
    $dbh = connectDatabase();
    $sql = "select * from users";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();
    
    $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    ?>
    
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>ELITES Blog</title>
      <link type="text/css" rel="stylesheet" href="reset.css">
      <link type="text/css" rel="stylesheet" href="style.css">
    </head>
    <body>
    <div id="wrapper">
    <nav>
      <ul>
        <li class="on"><a href="index.php">ホーム</a></li>
        <li class="on"><a href="list.php">日記一覧</a></li>
        <li class="on"><a href="add.php">日記追加</a></li>
        <li class="on"><a href="logout.php">ログアウト</a></li>
      </ul>
    </nav>
    <h1>ELITES Blog</h1>
    <h2>ELITES 公式開発ブログ</h2>
    <h3>投稿されたブログ一覧</h3>
    <?php if (count($posts)) : ?>
      <?php foreach($posts as $post) : ?>
      <ul>
        <li class="link"><a href="detail.php?id=<?php echo h($post['id'])?>"><?php echo h($post['title'])?>（作成日：<?php echo h($post['updated_at'])?>）</a>
          <?php if (h($users['id']) == h($post['user_id'])) : ?>
          ｜[<a href="edit.php?id=<?php echo h($post['id'])?>">編集</a>]｜[<a href="delete.php?id=<?php echo h($post['id'])?>">削除</a>]
          <?php endif ?>
        </li>
      </ul>
      <?php endforeach ?>
    <?php else : ?>
      投稿された日記はありません。
    <?php endif ?>
    
    <footer>
      <p><a href="http://nowall.co.jp">株式会社 NOWALL</a></p>
      <small>2015 NOWALL,Inc. All Right Reserved.</small>
    </footer>
    </div>
    </body>
    </html>
    
[/code]


CC BY-SA 3.0
2015-12-06T08:32:35.257
19680
2016-11-16T02:32:37.507
7176
question
php mysql
mysqlでテーブル間の情報参照の上、リンクを表示する


以下のソースから、ログインしているユーザが、投稿しているユーザと一致していれば編集などが可能になるようですので、

[code]

    <?php if (h($users['id']) == h($post['user_id'])) : ?>
    
[/code]

一方、usersは、

[code]

    $sql = "select * from users";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();
    $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
[/code]

と、usersテーブルの中身を全取得しています。

usersのidと、postのuser_idを比較するのではなく、  
現在ログインしているユーザid($_SESSION['id'])と、postのuser_idを比較するのではないでしょうか。

以上です。


CC BY-SA 3.0
2015-12-06T14:37:17.613
19690
2015-12-06T14:37:17.613
5778
19680
answer

[code]

    /*
    $dbh = connectDatabase();
    $sql = "select * from users";
    $stmt = $dbh->prepare($sql);
    $stmt->execute();
    
    $users = $stmt->fetchAll(PDO::FETCH_ASSOC);
    */
    
[/code]

↑ 不要

[code]

    <?php if (h($users['id']) == h($post['user_id'])) : ?>
          ｜[<a href="edit.php?id=<?php echo h($post['id'])?>">編集</a>]｜[<a href="delete.php?id=<?php echo h($post['id'])?>">削除</a>]
    <?php endif ?>
    
[/code]

↓ 変更

[code]

    <?php if (h($_SESSION['id']) == h($post['user_id'])) : ?>
          ｜[<a href="edit.php?id=<?php echo h($post['id'])?>">編集</a>]｜[<a href="delete.php?id=<?php echo h($post['id'])?>">削除</a>]
    <?php endif ?>
    
[/code]

$users['id']  
↓  
$_SESSION['id']


CC BY-SA 3.0
2015-12-07T09:05:01.000
19705
2015-12-07T09:05:01.000
13291
19680
answer