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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

Q&A

解決済

1回答

1245閲覧

PHPでAVGをDBへの保存、出力

nata425

総合スコア2

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PHP

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

0グッド

0クリップ

投稿2020/08/15 23:59

編集2020/08/16 08:47

PHPで映画のレビューサイトを作成しています。
1、レビューのレーティングをformからDBにインプットしたい。
2、映画ごとにレーティングの平均値を表示したい。

■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

1、下記のコードなのですが、ユーザー画面からformでpostしてもDBに保存されません。

2、DBにあるreview_rateの平均値が出力されません。
(上記の件で値が入力できないので、直接SQLでINSERTした値を使用しています)

エラーメッセージ
エラーメッセージなし

該当のソースコード

PHP

1 <div class="container"> 2 <div class="row mt-3"> 3 <div class="col-lg-6 mt-3"> 4 <iframe width="500" height="315" src="https://www.youtube.com/embed/Wg_Ql89fWy4" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 5 </div> 6 <div class="col-lg-6"> 7 <?php if ($Movie->displayMovie2019() == TRUE) { 8 9 foreach ($Movie->displayMovie2019() as $row) { 10 ?> 11 <br> 12 <h2><?php echo $row['movie_name']; ?> (<?php echo $row['release_year']; ?>)</h2> 13 <p><?php echo $row['movie_info']; ?></p> 14 <p>Genre : <?php echo $row['genre']; ?></p> 15 <?php } 16 } 17 ?> 18 <p><b>Average <span class="fa fa-star" id="avg"><?php $Movie->avgRate($movieID);?></span></b><button type="submit" class="btn btn-outline-warning ml-5 w-50" onclick="openForm()">review</button></p> 19 20 </div> 21 <div class="form-popup mx-auto p-5" style="display: none;" id="myForm"> 22 23 <form action="" method="post" class="form-container"> 24 <h4>Review&comment</h4> 25 <input type="hidden" name="movie_id" value="<?php echo $_GET['movie_id'] ?>"> 26 Your name 27 <input type="text" name="reviewer" placeholder="Enter your name"> 28 Rate <br> 29 <select name="rate" id=""> 30 <option value="1"></option> 31 <option value="2">★★</option> 32 <option value="3">★★★</option> 33 <option value="4">★★★★</option> 34 <option value="5">★★★★★</option> 35 </select> <br> 36 <textarea name="comment" id="" cols="5" rows="5" placeholder="Enter Your Review Comment" class="form-control mt-3"></textarea> 37 <button type=" submit" name="review" class="btn mt-2">Submit</button> 38 <button type="submit" class="btn cancel mb-2" onclick="closeForm()">Close</button> 39 </form> 40 <script> 41 function openForm() { 42 document.getElementById("myForm").style.display = "block"; 43 $("body").css("background-color", "black"); 44 45 } 46 function closeForm() { 47 document.getElementById("myForm").style.display = "none"; 48 } 49 </script> 50 </div> 51 52 53 </div> 54 </div> 55 56

PHP

1class Movie extends Database 2{ 3 4 public function postReview($movieID, $reviewer, $reviewRate, $reviewComment) 5 { 6 $sql = "UPDATE reviews SET reviewer = '$reviewer', review_rate = '$reviewRate', review_comment = '$reviewComment' WHERE movie_id = $movieID"; 7 $result = $this->conn->query($sql); 8 9 if ($result == TRUE) { 10 echo "review was submitted"; 11 } else { 12 echo "Error: Your reviewing"; 13 } 14 } 15 16 public function avgRate($movieID) 17 { 18 $sql = "SELECT AVG(review_rate) FROM reviews INNER JOIN movies ON reviews.movie_id=movies.movie_id WHERE movies.movie_id = '$movieID'"; 19 $result = $this->conn->query($sql); 20 21 if ($result->num_rows > 0) { 22 $row = array(); 23 while ($rows = $result->fetch_assoc()) { 24 $row[] = $rows; 25 } 26 return $row; 27 } else { 28 echo "No Data"; 29 } 30 } 31 32} 33

SQL

1movies 2CREATE TABLE `movies` ( 3 `movie_id` int(11) NOT NULL AUTO_INCREMENT, 4 `movie_name` varchar(100) NOT NULL, 5 `movie_info` text NOT NULL, 6 `release_year` varchar(100) NOT NULL, 7 `genre` varchar(100) NOT NULL, 8 `movie_img` varchar(100) DEFAULT NULL, 9 PRIMARY KEY (`movie_id`) 10) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8mb4 11

SQL

1CREATE TABLE `reviews` ( 2 `review_id` int(11) NOT NULL AUTO_INCREMENT, 3 `review_name` varchar(100) NOT NULL, 4 `review_rate` int(10) NOT NULL, 5 `review_comment` text NOT NULL, 6 `movie_id` int(11) NOT NULL, 7 `user_id` int(11) NOT NULL, 8 `review_date` datetime NOT NULL, 9 PRIMARY KEY (`review_id`), 10 KEY `movie_id` (`movie_id`), 11 KEY `user_id` (`user_id`), 12 CONSTRAINT `reviews_ibfk_1` FOREIGN KEY (`movie_id`) REFERENCES `movies` (`movie_id`), 13 CONSTRAINT `reviews_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`), 14 CONSTRAINT `reviews_ibfk_3` FOREIGN KEY (`movie_id`) REFERENCES `movies` (`movie_id`), 15 CONSTRAINT `reviews_ibfk_4` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) 16) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4

SQL

1CREATE TABLE `users` ( 2 `user_id` int(11) NOT NULL AUTO_INCREMENT, 3 `username` varchar(100) NOT NULL, 4 `password` varchar(100) NOT NULL, 5 `email` varchar(100) NOT NULL, 6 `user_status` varchar(1) NOT NULL DEFAULT 'U', 7 PRIMARY KEY (`user_id`) 8) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4

試したこと

movie id = 1にしてSQLで直接AVGを求めたら平均値は出たので、
movie idが取得できていない模様。

補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/08/16 02:03

phpPgAdmin自体はweb経由でPostgreSQLデータベースにアクセスできるツールのことであって、データベースそのものではありません。PostgreSQLをお使いであれば質問につけるタグをphpPgAdminではなくPostgreSQLにすることを強くおすすめします。 それと、クエリーで利用しているテーブルの構造とサンプルデータを示してもらわないとクエリーの妥当性も評価できません。CREATE TABLE文で構造を示すことはできますか?
dameo

2020/08/17 22:51

今あなたが提示したコードだけでは何の判断も出来ず、もしこれが現象を説明するための全てのコードなのだとしたら、このコードだけでは正しく動作するはずはないと思います。こうやればできるはずと自分で確信できるコードを書いて質問してください。どこかにあったコードの断片をコピペして、動くはずがないと自分で分かってるコードで質問するなら、欲しい回答は得られないと思いますよ。
guest

回答1

0

ベストアンサー

データ構造がわからないのでなんとも言えませんが、
idの類は数値(整数値)だと仮定するならば、
なぜ引用符をつけてidを指定しようとしているのか、
通常つけないですよね。

それと、クエリー文字列を文字列の連結や変数展開の上で作るのは
SQL文字列に向けたエスケープを自分で調整する必要が生じたりミスが起こりやすく
やってはいけません。
PDO接続なら
プリペアドステートメントを使って
prepare() → bindValue() → execute()
みたいな流れで作ります。
PHPでデータベースに接続するときのまとめ - Qiita
こちらに丁寧なまとめがありますのでご一読いただければ。
ドライバーが文字列のエスケープ処理をやってくれるので、
引用符を気にしなくても良くなります。

投稿2020/08/16 02:15

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問