LoginSignup
0
0

More than 3 years have passed since last update.

【PHP】投稿種類別で投稿を出力してくれる機能

Posted at

PHPについて学習内容を備忘録としてまとめます。
投稿種類別で投稿を出力してくれる機能を実装しましたので記載します。

アニメーション.gif

投稿を種類別で表示

まずは表示したいページに下記コードを書きます。


<?php
$page_type = $_GET['type'];
//$_SESSION['staff_code']は現在ログインしているユーザーのIDを取得しています
print'<a href="staff_top.php?staff_code='.$_SESSION['staff_code'].'&type=main">自分の投稿</a>';
print'<a href="staff_top.php?staff_code='.$_SESSION['staff_code'].'&type=favorites">いいねした投稿</a>';

$current_user=get_user($_SESSION['staff_code']);

switch ($page_type) {
  case 'main':
    $posts = get_posts($current_user['code'],'my_post',0);
  break;

  case 'favorites':
    $posts = get_posts($current_user['code'],'favorite',0);
  break;
}

<?php foreach($posts as $post): ?>

    <?php print'<br />'; ?>
    <?php print ''.$post['name'].''; ?>

<?php endforeach ?>

自分の投稿いいねした投稿をリンク表示させて現在のパスを指定します。
そして&以降にtypeを指定し投稿別で種類を分けています。
パスの中のtypeの値は$page_typeに渡しています。

パス中の?や&については、【PHP】リンクの?と& を参照ください。


<?php
$page_type = $_GET['type'];
//$_SESSION['staff_code']は現在ログインしているユーザーのIDを取得しています
print'<a href="staff_top.php?staff_code='.$_SESSION['staff_code'].'&type=main">自分の投稿</a>';
print'<a href="staff_top.php?staff_code='.$_SESSION['staff_code'].'&type=favorites">いいねした投稿</a>';

typeの値は$page_typeに渡されているので、この値ごとに$postsに渡す値を分けています。
get_posts関数についてはまた別の処理なので説明していきます。

get_posts関数

少し長い関数にはなっていますがやっていることとしては、
受け取った$page_typeによってspl文を変更し取得する投稿種類を判別する関数です。


function get_posts($page_id,$type){
  try {
    $dsn='mysql:dbname=shop;host=localhost;charset=utf8';
    $user='root';
    $password='';
    $dbh=new PDO($dsn,$user,$password);
    switch ($type) {
      case 'my_post':
      $sql = "SELECT mst_staff.code,mst_staff.name,mst_staff.password,mst_staff.delete_flg,mst_product.code,mst_product.name,mst_product.address,mst_product.time_start,mst_product.time_end,mst_product.gazou,mst_product.user_id
              FROM mst_staff INNER JOIN mst_product ON mst_staff.code = mst_product.user_id
              WHERE user_id = :id AND delete_flg = 0";
      break;

      case 'favorite':
      $sql = "SELECT mst_staff.code,mst_staff.name,mst_staff.password,mst_staff.delete_flg,mst_product.code,mst_product.name,mst_product.address,mst_product.time_start,mst_product.time_end,mst_product.gazou,mst_product.user_id
              FROM mst_product INNER JOIN favorite ON mst_product.code = favorite.post_id
              INNER JOIN mst_staff ON mst_staff.code = mst_product.user_id
              WHERE favorite.user_id = :id";
      break;

    }
    $stmt = $dbh->prepare($sql);
    $stmt->bindValue(':id', $page_id);
    $stmt->execute();
    return $stmt->fetchAll();
  } catch (\Exception $e) {
    error_log('エラー発生:' . $e->getMessage());
    set_flash('error',ERR_MSG1);
  }
}

get_posts関数の引数である$page_idが現在のユーザーID、$type$page_typeの値になります。
$page_typeの値よりSQL文を判別して該当の投稿を出力しています。

favoriteテーブルは投稿をいいねした際にいいねした人いいねした投稿を紐づけてくれるテーブルです。
詳しくはこちらで説明していますのでご参考ください。
【PHP】いいね機能実装

投稿種類別に投稿表示

投稿種類別に投稿を出力できるようになったので、実際に表示させます。
一番初めに記載したコードの中にあった下記の記述により投稿を表示させることができます。


<?php foreach($posts as $post): ?>

    <?php print'<br />'; ?>
    <?php print ''.$post['name'].''; ?>

<?php endforeach ?>

上記の処理は$postsの配列の中にある分だけ値を取り出します。
これで表示させるところまでできました。

参考URL

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0