##解決したいこと
データベースのidごとのデータ詳細を表示させたいです。
※データの一覧やデータベースの接続などは実装できています。
データの一覧
詳細を押すと、それぞれのデータ詳細画面に遷移し、データを表示させたい。
##問題
以下のようにコードを記述しましたが、エラーが表示されてしまう。
PlayerController
<?php require_once(ROOT_PATH .'/Models/Player.php'); class PlayerController { private $request; private $Player; public function __construct() { $this->request['get'] = $_GET; $this->request['post'] = $_POST; $this->Player = new Player(); } public function index() { $players = $this->Player->findAll(); $params = [ 'players' => $players ]; return $params; } public function view() { if(empty($this->request['get']['id'])) { echo '指定のパラメーターが不正です。このページを表示できません。'; exit; } $player = $this->Player->findById($this->request['get']['id']); $params = [ 'player' => $player ]; return $params; } }
Player.php(モデル)
<?php require_once(ROOT_PATH .'/Models/Db.php'); class Player extends Db { private $table = 'players'; public function __construct($dbh = null) { parent::__construct($dbh); } // playersテーブルから全データを取得 // @param integer $page ページ番号 // @return Array $result 全選手データ public function findAll():Array { $sql = 'SELECT * FROM players'; $sth = $this->dbh->prepare($sql); $sth->execute(); $result = $sth->fetchAll(PDO::FETCH_ASSOC); return $result; } public function findById($id = 0):Array { $sql = 'SELECT * FROM WHERE id = :id'; $sth = $this->dbh->prepare($sql); $sth->bindParam(':id', $id, PDO::PARAM_INT); $sth->execute(); $result = $sth->fetch(PDO::FETCH_ASSOC); return $result; } }
データ一覧
<?php ini_set('display_errors', "On"); require_once(ROOT_PATH .'Controllers/PlayerController.php'); $player = new PlayerController(); $params = $player->index(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>worldcup</title> </head> <body> <h2>選手一覧</h2> <table> <tr> <th>No</th> <th>背番号</th> <th>ポジション</th> <th>名前</th> <th>所属</th> <th>誕生日</th> <th>身長</th> <th>体重</th> </tr> <?php foreach($params['players'] as $player): ?> <tr> <th><?=$player['id'] ?></th> <th><?=$player['uniform_num'] ?></th> <th><?=$player['position'] ?></th> <th><?=$player['name'] ?></th> <th><?=$player['club'] ?></th> <th><?=$player['birth'] ?></th> <th><?=$player['height'] ?>cm</th> <th><?=$player['weight'] ?>kg</th> <th><a href="show.php?id=<?php echo $player['id'] ?>">詳細</a></th> </tr> <?php endforeach; ?> </table> </body> </html>
データ詳細画面
<?php ini_set('display_errors', "On"); require_once(ROOT_PATH .'Controllers/PlayerController.php'); require_once(ROOT_PATH .'/Models/Player.php'); $player = new PlayerController(); $params = $player->view(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>worldcup</title> </head> <body> <h2>選手詳細</h2> <table> <tr> <th>No</th> <th>背番号</th> <th>ポジション</th> <th>名前</th> <th>所属</th> <th>誕生日</th> <th>身長</th> <th>体重</th> </tr> <?php foreach($params['players'] as $player): ?>←31行目 <tr> <th><?=$player['id'] ?></th>←33行目 <th><?=$player['uniform_num'] ?></th> <th><?=$player['position'] ?></th> <th><?=$player['name'] ?></th> <th><?=$player['club'] ?></th> <th><?=$player['birth'] ?></th> <th><?=$player['height'] ?>cm</th> <th><?=$player['weight'] ?>kg</th> </tr> <?php endforeach; ?> </table> </body> </html>
var_dumpで$paramsを調べると全てstring型になっているのが原因?
回答2件
あなたの回答
tips
プレビュー