前提・実現したいこと
MVCで一覧画面から特定の選手の情報を編集し、入力した情報を更新したい。
発生している問題・エラーメッセージ
編集画面で情報を入力し、更新ボタンを押すと、update.phpの画面でエラーが表示される。
モデルに記載している $sth->bindValue・・・のところで以下のエラーが発生する。
Notice: Undefined index: id in /Applications/MAMP/Models/Player.php on line 60
Notice: Undefined index: uniform_num in /Applications/MAMP/Models/Player.php on line 61
Notice: Undefined index: position in /Applications/MAMP/Models/Player.php on line 62
Notice: Undefined index: name in /Applications/MAMP/Models/Player.php on line 63
Notice: Undefined index: club in /Applications/MAMP/Models/Player.php on line 64
Notice: Undefined index: birth in /Applications/MAMP/Models/Player.php on line 65
Notice: Undefined index: height in /Applications/MAMP/Models/Player.php on line 66
Notice: Undefined index: weight in /Applications/MAMP/Models/Player.php on line 67
該当のソースコード
php
1Model - Player.php 2<?php 3 4require_once(ROOT_PATH . '/Models/Db.php'); 5 6class Player extends Db { 7 private $table = 'players'; 8 public function __construct($dbh = null) { 9 parent::__construct($dbh); 10 } 11 12 // playersテーブルから指定idに一致するデータを取得 13 // 14 // @param integer $id 選手のID 15 // @return Array $result 指定の選手データ 16 17 public function findById($id = 0):Array { 18 $sql = 'SELECT players.id, players.uniform_num, players.position, players.name, players.club, players.birth, players.height, players.weight, 19 countries.name AS 国名, countries.id AS countryId FROM '.$this->table.' INNER JOIN countries ON players.country_id = countries.id'; 20 $sql .=' WHERE players.id = :id'; 21 $sth = $this->dbh->prepare($sql); 22 $sth->bindParam(':id', $id, PDO::PARAM_INT); 23 $sth->execute(); 24 $result = $sth->fetch(PDO::FETCH_ASSOC); 25 return $result; 26 } 27 28 //編集画面 29 30 public function editPlayer($result) { 31 $sql = 'UPDATE players 32 SET uniform_num = :uniform_num, position = :position, name = :name, club = :club, birth = :birth, height = :height, weight = :weight'; 33 $sql .=' WHERE players.id = :id'; 34 $sth = $this->dbh->prepare($sql); 35 $sth->bindValue(':id', $result['id'], PDO::PARAM_INT); 36 $sth->bindValue(':uniform_num', $result['uniform_num'], PDO::PARAM_INT); 37 $sth->bindValue(':position', $result['position'], PDO::PARAM_STR); 38 $sth->bindValue(':name', $result['name'], PDO::PARAM_STR); 39 $sth->bindValue(':club', $result['club'], PDO::PARAM_STR); 40 $sth->bindValue(':birth', $result['birth'], PDO::PARAM_STR); 41 $sth->bindValue(':height', $result['height'], PDO::PARAM_INT); 42 $sth->bindValue(':weight', $result['weight'], PDO::PARAM_INT); 43 44 $sth->execute(); 45 } 46} 47 48?>
php
1Controller - PlayerController.php 2 3<?php 4 5require_once(ROOT_PATH . '/Models/Player.php'); 6require_once(ROOT_PATH . '/Models/Goal.php'); 7require_once(ROOT_PATH . '/Models/Delete.php'); 8 9class PlayerController { 10 private $request; //リクエストパラメータ(GET,POST) 11 private $Player; //playerモデル 12 // private $Goal; //Goalモデル 13 14 public function __construct() { 15 //リクエストパラメータの取得 16 $this->request['get'] = $_GET; 17 $this->request['post'] = $_POST; 18 19 //モデルオブジェクトの生成 20 $this->Player = new Player(); 21 //別モデルと連携 22 $dbh = $this->Player->get_db_handler(); 23 $this->Goal = new Goal($dbh); 24 25 $dbh = $this->Player->get_db_handler(); 26 $this->Delete = new Delete($dbh); 27 } 28 29 public function view() { 30 if(empty($this->request['get']['id'])) { 31 echo '指定のパラメータが不正です。このページを表示できません'; 32 exit; 33 } 34 35 $player = $this->Player->findById($this->request['get']['id']); 36 $goals = $this->Goal->findGoalById($this->request['get']['id']); 37 38 $params = [ 39 'player' => $player, 40 'goals' => $goals 41 ]; 42 return $params; 43 } 44 45 //編集画面 46 47 public function edit($result) { 48 $this->Player->editPlayer($result); 49 } 50} 51?>
php
1View - edit.php 2 3<?php 4require_once(ROOT_PATH . 'Controllers/PlayerController.php'); 5$Player = new PlayerController(); 6$params = $Player -> view(); 7 8<!DOCTYPE html> 9<html lang="en" dir="ltr"> 10 <head> 11 <meta charset="utf-8"> 12 <title>オブジェクト指向 - 編集</title> 13 <link rel="stylesheet" type="text/css" href="/css/base.css"> 14 <link rel="stylesheet" type="text/css" href="/css/style.css"> 15 </head> 16 <body> 17 <h3 id="edit_title">編集</h3> 18 19以下省略
php
1View - update.php 2 3<?php 4require_once(ROOT_PATH . 'Controllers/PlayerController.php'); 5$result = $_POST; 6$Player = new PlayerController(); 7$Player -> edit($result); 8// header('Location: ./index.php'); 9?>
選手一覧 No 背番号 ポジション 名前 所属 誕生日 身長 体重 国 19 9 FW フレジ フルミネンセ(ブラジル) 1983-10-03 185cm 90kg ブラジル 詳細 削除 編集 20 7 FW フッキ ゼニト(ロシア) 1986-07-25 180cm 85kg ブラジル 詳細 削除 編集 22 10 FW ネイマール バルセロナ(スペイン) 1992-02-05 175cm 64kg ブラジル 詳細 削除 編集 24 12 GK コロナ クルスアスル(メキシコ) 1981-01-26 178cm 72kg メキシコ 詳細 削除 編集 25 23 GK タラベラ トルーカ(メキシコ) 1982-09-18 188cm 85kg メキシコ 詳細 削除 編集 以下省略
補足情報(FW/ツールのバージョンなど)
PHP のバージョン: 7.4.12
サーバの種類: MySQL
サーバのバージョン: 5.7.32 - MySQL Community Server (GPL)
あなたの回答
tips
プレビュー