前提・実現したいこと
PHPでいいね機能を作成していて、いいねボタンを押すとそのページが更新されて、
ボタン表記をいいね->いいね解除
表示するいいねの数を+1するという処理を作成しています
DBはいいねテーブルにユーザーIDと投稿IDの組み合わせで登録という処理
投稿テーブルのいいねカウントを+1
発生している問題・エラーメッセージ
いいねボタンを2回押さないと上記の処理ができない
1回目押すといいねテーブルにユーザーIDと投稿IDが追加
2回目押すと投稿テーブルのいいねが+1になる
これをボタン1回で処理したい
該当のソースコード
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>投稿詳細</title> </head> <body> <?php require 'menu.php';?> <?php $pdo = new PDO('mysql:host=localhost;dbname=fps;charset=utf8','staff','password'); $sql=$pdo->prepare('select * from post_tbl where post_id = ?'); $sql->execute([$_REQUEST['post_id']]); foreach($sql as $row){ echo 'タイトル:'.$row['post_title'].'<br>'; echo '説明文<br>'; echo '<textarea name="post_detail" cols="50" rows="5">'.$row['post_detail'].'</textarea><br>'; echo 'カテゴリー:'.$row['post_category'].'<br>'; echo 'いいね:'.$row['post_like_count'].'<br>';
$sql=$pdo->prepare('select * from favorite_tbl where user_id = ? and post_id = ?'); $sql->execute([$_SESSION['login_id'],$_REQUEST['post_id']]); $result=$sql->fetch(); if(empty($result)){ echo '<form action="" method="post">'; echo '<button type="submit" name="add_like">いいね</button>'; echo '</form>'; if(isset($_POST['add_like'])){ $sql=$pdo->prepare('insert into favorite_tbl values(?,?)'); $sql->execute([$_SESSION['login_id'],$_REQUEST['post_id']]); $sql=$pdo->prepare('update post_tbl set post_like_count = post_like_count + 1 where post_id = ?'); $sql->execute([$_REQUEST['post_id']]); header('refresh'); } }else{ echo '<form action="" method="post">'; echo '<button type="submit" name="del_like">いいね解除</button>'; echo '</form>'; if(isset($_POST['del_like'])){ $sql=$pdo->prepare('delete from favorite_tbl where user_id = ? and post_id = ?'); $sql->execute([$_SESSION['login_id'],$_REQUEST['post_id']]); $sql=$pdo->prepare('update post_tbl set post_like_count = post_like_count - 1 where post_id = ?'); $sql->execute([$_REQUEST['post_id']]); header('refresh'); } } } ?> <?php require 'footer.php';?>
データベース
create table post_tbl( post_id int(10) auto_increment not null primary key, user_id int(10) not null, post_title varchar(50) not null, post_detail text not null, post_category varchar(20) not null, post_date date not null, post_like_count int(200) default 0 ); create table favorite_tbl( user_id int(10) not null, post_id int(10) not null, primary key(user_id,post_id) );
回答2件
あなたの回答
tips
プレビュー