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>';
$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
の配列の中にある分だけ値を取り出します。
これで表示させるところまでできました。