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

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

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

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

Q&A

解決済

1回答

1036閲覧

レビュー一覧を表示したい

morin

総合スコア57

PHP

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

0グッド

0クリップ

投稿2019/09/12 07:34

期待する動作:
index.phpのa要素ドラゴン、かめ、かばを押す。
クエリ情報として、Pokemonクラスの$nameを渡す

show.phpに飛ぶ。
まず、クエリ情報を受け取って、$pokemonNameに代入する。
次にPokemonクラスのfindByNameというクラス関数を使って、data.phpの$pokemonsの中から、クエリ情報と一致する要素を探して、$pokemonに代入する。最後にReviewクラスのgetReviewsを使って、$reviews(data.php)の中から、$pokemonの$nameと一致する要素を取得する。

そして、.review-wrapper h2の下にReviewの$body(キャラクターについてのコメント)を表示したい。

現在の状況:
紐ずけがされていないのか$bodyが表示されません。どうしたら、$bodyを表示できるようになるでしょうか??

エラー文:

Fatal error: Uncaught Error: Call to a member function getReviewedPok() on null in /Users/nobuhiromori/Desktop/practice_php/pokemon.php:23 Stack trace: #0 /Users/nobuhiromori/Desktop/practice_php/show.php(7): Pokemon->getReviews(Array) #1 {main} thrown in /Users/nobuhiromori/Desktop/practice_php/pokemon.php on line 23

回答お願いいたします。

php

1<!-- index.php --> 2<?php 3require_once('pokemon.php'); 4require_once('data.php'); 5?> 6<!DOCTYPE html> 7<html> 8 <head> 9 <meta charset="utf-8"> 10 <title>My test page</title> 11 <link rel="stylesheet" href="stylesheet.css"> 12 <link rel="stylesheet" href="stylesheet.min.css"> 13 </head> 14 <body> 15 <div class="top-wrapper"> 16 <h1>好きなキャラクターアンケート</h1> 17 <div class="pokemons"> 18 <?php foreach($pokemons as $pokemon): ?> 19 <div class="pokemon"> 20 <div> 21 <a href="show.php?name=<?php echo $pokemon->getName() ?>"><?php echo $pokemon->getName() ?></a> 22 </div> 23 </div> 24 <?php endforeach ?> 25 </div> 26 </div> 27 </body> 28</html>

php

1// pokemon.php 2<?php 3 class Pokemon { 4 private $name; 5 6 public function __construct($name) { 7 $this->name = $name; 8 } 9 10 public function getName() { 11 return $this->name; 12 } 13 14 public static function findByName($pokemons, $name){ 15 foreach($pokemons as $pokemon) { 16 if ($name == $pokemon->getName()) { 17 return $pokemon; 18 } 19 } 20 } 21 22 public function getReviews($reviews) { 23 $reviewForShow = array(); 24 foreach($reviews as $review) { 25 if ($this->name == $review->getReviewedPok()) { 26 $reviewForShow[] = $review; 27 } 28 } 29 return $reviewForShow; 30 } 31 } 32?>

php

1// pokemon.php 2<?php 3 class Pokemon { 4 private $name; 5 6 public function __construct($name) { 7 $this->name = $name; 8 } 9 10 public function getName() { 11 return $this->name; 12 } 13 14 public static function findByName($pokemons, $name){ 15 foreach($pokemons as $pokemon) { 16 if ($name == $pokemon->getName()) { 17 return $pokemon; 18 } 19 } 20 } 21 22 public function getReviews($reviews) { 23 $reviewForShow = array(); 24 foreach($reviews as $review) { 25 if ($this->name == $review->getReviewedPok()) { 26 $reviewForShow[] = $review; 27 } 28 } 29 return $reviewForShow; 30 } 31 32 33 } 34?> 35

php

1//data.php 2<?php 3 4require_once('review.php'); 5 6$hito = new Pokemon('ドラゴン'); 7$zeni = new Pokemon('かめ'); 8$fushi = new Pokemon('かば'); 9 10$pokemons = array($hito, $zeni, $fushi); 11 12$review1 = new Review($hito->getName(), 'ドラゴンです'); 13$review2 = new Review($zeni->getName(), '亀です'); 14$review3 = new Review($fushi->getName(), 'かばです'); 15 16 17$reviews = array( 18 $reivew1, 19 $reivew2, 20 $reivew3, 21 22); 23 24 25?> 26

php

1// review.php 2 3<?php 4 5class Review { 6 private $reviewedPok; 7 private $body; 8 9 public function __construct($reviewedPok, $body){ 10 $this->reviewedPok = $reviewedPok; 11 $this->body = $body; 12 } 13 14 public function getReviewedPok(){ 15 return $this->reviewedPok; 16 } 17 18 public function getBody(){ 19 return $this->body; 20 } 21} 22 23 ?>

php

1<!-- show.php --> 2<?php 3require_once('pokemon.php'); 4require_once('data.php'); 5 6$pokemonName = $_GET['name']; 7$pokemon = Pokemon::findByName($pokemons, $pokemonName); 8$pokemonReviews = $pokemon->getReviews($reviews); 9?> 10<!DOCTYPE html> 11<html> 12 <head> 13 <meta charset="utf-8"> 14 <title>My test page</title> 15 <link rel="stylesheet" href="stylesheet.css"> 16 <link rel="stylesheet" href="stylesheet.min.css"> 17 </head> 18 <body> 19 <div class="top-wrapper"> 20 <h1>好きなキャラクターアンケート</h1> 21 <div class="pokemons"> 22 23 <div class="pokemon"> 24 25 <div> 26 <p><?php echo $pokemon->getName() ?></p> 27 </div> 28 </div> 29 </div> 30 31 <div class="review-wrapper"> 32 <h2>レビュー</h2> 33 <?php foreach($pokemonReviews as $review): ?> 34 <p><?php echo $review->getBody() ?></p> 35 <?php endforeach ?> 36 <a href="index.php">戻る</a> 37 </div> 38 39 40 </div> 41 <script type="text/javascript" src="script.js"></script> 42 </body> 43</html>

css

1/* stylesheet.min.css */ 2.top-wrapper{background-color:gray;height:auto;margin:0 auto}.top-wrapper h1{color:white;text-align:center}.pokemons .pokemon .star{width:14px}.pokemons .pokemon .pokemon-image{width:150px;height:150px}

php

1/* stylesheet.scss */ 2.top-wrapper { 3 background-color: gray; 4 height: auto; 5 6 h1 { 7 color: white; 8 text-align: center; 9 } 10 margin: 0 auto; 11 12} 13 14.pokemons { 15 .pokemon { 16 .star { 17 width:14px; 18 } 19 .pokemon-image { 20 width: 150px; 21 height: 150px; 22 } 23 } 24}

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

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

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

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

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

guest

回答1

0

ベストアンサー

php

1$review1 = new Review($hito->getName(), 'ドラゴンです'); 2$review2 = new Review($zeni->getName(), '亀です'); 3$review3 = new Review($fushi->getName(), 'かばです'); 4 5 6$reviews = array( 7 $reivew1, 8 $reivew2, 9 $reivew3, 10 11);

arrayで指定してる変数の名称reivewではなくreviewじゃないかと(なのでnullになる)

投稿2019/09/12 07:44

rururu3

総合スコア5545

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

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

morin

2019/09/12 07:56

ありがとうございます!!!!! これでまる2日悩んでたのですが解決してよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問