質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

670閲覧

PHPでの投稿機能の更新機能について

meruchaaan

総合スコア18

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/11/17 11:36

前提・実現したいこと

現在私は、ツイッターのような投稿機能を作っております。
今回質問させていただきたいのは、更新方法です。
順序立って説明するとまず検索機能がありその検索にヒットしたユーザーの名前が数人出てきてその各ユーザー名の横に、お気に入り登録ボタンがあります。お気に入り登録ボタンを押すとお気に入り登録されたユーザーの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 |
+----+---------------------+------------+

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問