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/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー