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

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

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

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

0回答

1915閲覧

MVC 編集した情報を入力し、データベースに更新したい。

MitsukiN

総合スコア2

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2021/04/29 06:18

前提・実現したいこと

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)

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

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

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

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

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

m.ts10806

2021/04/29 06:21

Notice: Undefined index が何かわからないということでしょうか。 PHPにおいては初学者がよく直面し、原因も対策もほぼ確立されているものと思われますが、調べても何も出ませんか?(調べても、には「自身でデバッグすること」も含みます)
takasima20

2021/04/29 06:21

Player.php は 60行もないように見えますが?
MitsukiN

2021/04/29 06:58

Notice: Undefined indexが何かわからないというよりは、 Player.phpの$sth->bindValue(':id', $result['id'], PDO::PARAM_INT); ここでエラーが出ていて、update.phpの$result = $_POST;で値を受け取っているはずなのに このエラーが解消されずに悩んでいます。
MitsukiN

2021/04/29 07:00

Player.phpは長いので必要ないところは省略してます。
m.ts10806

2021/04/29 07:06

デバッグされたら明白ではないかと。
MitsukiN

2021/04/29 07:16 編集

var_dumpで表示してみましたが、配列に値は入ってませんでした。
m.ts10806

2021/04/29 08:43

では、update.phpってどこからどのようにリクエストされて呼び出されますか?
MitsukiN

2021/04/29 16:41

解決しました。 ありがとうございました。
m.ts10806

2021/04/29 23:30

解決までの経緯を具体的に記載した回答として投稿し、自己解決としてください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問