前提・実現したいこと
現在私は、ツイッターのような投稿機能を作っております。
今回質問させていただきたいのは、更新方法です。
順序立って説明するとまず検索機能がありその検索にヒットしたユーザーの名前が数人出てきてその各ユーザー名の横に、お気に入り登録ボタンがあります。お気に入り登録ボタンを押すとお気に入り登録されたユーザーのfishテーブルのすべてのidを取得そして自分のid(userテーブルのid)を取得します。そしてその取得した値を元にお気に入り登録した人の投稿一覧画面に移るのですが、一回一回お気に入り登録をしないとお気に入りした人の投稿が更新されません。もちろんお気に入り登録ボタンを押すとお気に入り登録されたユーザーのfishテーブルのすべてのidを取得しているので当たり前ですが、どのように解決したらよいでしょうか??
該当のソースコード
php
1 2// 参照 (他テーブルからfishテーブルの値をお気に入りボタンから出るデータを元に見つける) 3public function favoriteAddId() { 4 $sql = 'SELECT id FROM fish WHERE user_id = :user_id'; 5 $stmt = $this->con->prepare($sql); 6 $params = array(':user_id'=>$_GET['favorite']); 7 $stmt->execute($params); 8 $result = $stmt->fetchAll(); 9 return $result; 10} 11 12 13// 上記から受け取ったデータを引数として共通IDを挿入する 14public function favoriteAdd($id) { 15 foreach ($id as $ids) { 16 $sql = "INSERT INTO favorite(user_id, fish_id) VALUES(:user_id, :fish_id)"; 17 $stmt = $this->con->prepare($sql); 18 $temp = implode(",", $ids); 19 $params = array(':user_id'=>$_SESSION['User']['id'], ':fish_id'=>$temp); 20 $stmt->execute($params); 21 } 22} 23 24// 上記の全データを参照する 25 public function favoriteAll() { 26 $sql = "SELECT * FROM fish f JOIN favorite fa ON fa.user_id = :user_id AND fa.fish_id = f.id ORDER BY catch_time"; 27 $stmt = $this->con->prepare($sql); 28 $params = array(':user_id'=>$_SESSION['User']['id']); 29 $stmt->execute($params); 30 $result = $stmt->fetchAll(); 31 return $result; 32 }
php
1 <section class="section1"> 2 <div class="section1_wrapper"> 3 <div class="catchcopy"> 4 <?php if($myUser == $result[0]['name']) { 5 print '<h1 style ="margin-top: 200px;">'.'※ご自身の友達追加は出来ません。<br>ほかの友人を探しましょう。'.'</h1>'; 6 } 7 ?> 8 <?php if($myUser != $result[0]['name']): ?> 9 <h3>ヒットしたユーザー</h3> 10 </div> 11 <table> 12 <tr> 13 <th>お名前</th> 14 <th>カタカナ名</th> 15 </tr> 16 <?php foreach((array)$result as $row): ?> 17 <tr> 18 <td><?=$row['name']?></td> 19 <td><?=$row['katakana']?></td> 20 <td><a href="favorite.php?favorite=<?=$row['id']?>">お気に入りに追加する</a></td> 21 </tr> 22 <?php endforeach; ?> 23 <?php endif; ?> 24 </table> 25 </div> 26 </section>
php
1<?php 2 require_once('config/config.php'); 3 require_once('model/User.php'); 4 session_start(); 5 /* データベースへ接続 */ 6try { 7 // MySQLへの接続 8 $user = new User($host, $dbname, $user, $password); 9 // 接続を使用する 10 $user->connectDb(); 11 if(isset($_REQUEST['favorite'])) { 12 $fish_id['Fish'] = $user->favoriteAddId(); 13 $user->favoriteAdd($fish_id['Fish']); 14 $result = $user->favoriteAll(); 15 16 } elseif(empty($_REQUEST['favorite'])) { 17 $result = $user->favoriteIdAll(); 18 } 19 20 21 22//該当しなかったら実行しない 23} catch (PDOException $e){ 24 echo $e->getMessage(); 25 exit; 26} 27 ?>
試したこと
一定時間ごとにDBと同期する必要
トリガー処理
補足情報(FW/ツールのバージョンなど)
MySQLを使用しております。
足りない情報がありましたら、申しつけください。
テーブル設計はこのようになっております。
User
+----+---------------------+------------+
| id | name | katakana |
+----+---------------------+------------+
| 1 | | |
| 2 | | |
+----+---------------------+------------+
Fish
+----+---------------------+------------+
| id | user_id | fish |
+----+---------------------+------------+
| 3 | | |
| 4 | | |
+----+---------------------+------------+
Favorite
+----+---------------------+------------+
| id | user_id | fish_id |
+----+---------------------+------------+
| 1 | 1 | 3 |
| 2 | 2 | 4 |
+----+---------------------+------------+
あなたの回答
tips
プレビュー