前提・実現したいこと
MVCモデルでデータを更新したい。
PHPのMVCモデルを勉強中。MVCモデルでデータの更新を実装しています。
データを更新する機能を実装中に、データが更新できないことで困っています。
##手順の流れ
一覧ページから編集ページへ移動
編集ページで、体重を100キロに変更
更新ページに遷移
一覧で体重が100キロに変更できたか確認してみるが、データを更新できていない
ビューページ
edit.php(編集ページ)で以下のようにupdate.phpにデータを渡す
if(isset($_GET['id']) && $_GET['id']) { if(empty($errors)) { $_SESSION['id'] = $id; $_SESSION['uniform_num'] = $uniform_num; $_SESSION['position'] = $position; $_SESSION['name'] = $name; $_SESSION['club'] = $club; $_SESSION['birth'] = $birth; $_SESSION['height'] = $height; $_SESSION['weight'] = $weight; $_SESSION['country'] = $country; header('Location: ./update.php'); exit(); }
update.php(更新ページ)で以下のようにデータを受け取る。var_dumpでデータが全て受け取れていることは確認済み。
<?php session_start(); ini_set('display_errors', "On"); $id = $_SESSION['id']; $uniform_num = $_SESSION['uniform_num']; $position = $_SESSION['position']; $name = $_SESSION['name']; $club = $_SESSION['club']; $birth = $_SESSION['birth']; $height = $_SESSION['height']; $weight = $_SESSION['weight']; $country = $_SESSION['country']; require_once(ROOT_PATH .'Controllers/PlayerController.php'); $player = new PlayerController(); $player->update($id,$uniform_num,$position,$name,$club,$birth,$height,$weight,$country); // var_dump($id); // var_dump($uniform_num); // var_dump($position); // var_dump($name); // var_dump($club); // var_dump($birth); // var_dump($height); // var_dump($weight); // var_dump($country); ?> <br>更新しました。 <a href="index.php">選手一覧へ</a>
モデル
php
1<?php 2require_once(ROOT_PATH .'/Models/Db.php'); 3 4class Player extends Db { 5 public function __construct($dbh = null) { 6 parent::__construct($dbh); 7 } 8 9 // 選手編集 10 public function updatePlayer($id,$uniform_num,$position,$name,$club,$birth,$height,$weight,$country) { 11 $sql = 'UPDATE players 12 SET uniform_num = :uniform_num,position = :position, name = :name, club = :club, birht = :birth, height = :height, weight = :weight, country_id = :country_id 13 WHERE id = :id'; 14 $sth = $this->dbh->prepare($sql); 15 $sth->bindValue(':id', $id, PDO::PARAM_INT); 16 $sth->bindValue(':uniform_num', $uniform_num, PDO::PARAM_INT); 17 $sth->bindValue(':position', $position, PDO::PARAM_INT); 18 $sth->bindValue(':name', $name, PDO::PARAM_STR); 19 $sth->bindValue(':club', $club, PDO::PARAM_STR); 20 $sth->bindValue(':birth', $birth, PDO::PARAM_INT); 21 $sth->bindValue(':height', $height, PDO::PARAM_INT); 22 $sth->bindValue(':weight', $weight, PDO::PARAM_INT); 23 $sth->bindValue(':country_id', $country, PDO::PARAM_INT); 24 $sth->execute(); 25 }
##コントローラー
php
1<?php 2require_once(ROOT_PATH .'/Models/Player.php'); 3require_once(ROOT_PATH .'/Models/Goal.php'); 4 5class PlayerController { 6 private $request; 7 private $player; 8 private $goal; 9 10 public function __construct() { 11 $this->request['get'] = $_GET; 12 $this->request['post'] = $_POST; 13 $this->request['session'] = $_SESSION; 14 $this->Player = new Player(); 15 $this->Goal = new Goal(); 16 } 17 18 // 選手編集 19 public function update($id,$uniform_num,$position,$name,$club,$birth,$height,$weight,$country) { 20 if(empty($this->request['session']['id'])) { 21 echo '指定のパラメーターが不正です。このページを表示できません。'; 22 exit; 23 } 24 25 $this->Player->updatePlayer($id,$uniform_num,$position,$name,$club,$birth,$height,$weight,$country); 26 }
試したこと
・データベースの接続は一覧ページや詳細ページなどで確認。
・編集ページや更新ページでも簡単にテストし、接続はできている。
●を▶︎に変更すると、Fatal error: Uncaught ArgumentCountError: Too few arguments to function Player::updatePlayer()と出るので、全て変数を入れている。
public function update($id,$uniform_num,$position,$name,$club,$birth,$height,$weight,$country) { if(empty($this->request['session']['id'])) { echo '指定のパラメーターが不正です。このページを表示できません。'; exit; } ●$this->Player->updatePlayer($id,$uniform_num,$position,$name,$club,$birth,$height,$weight,$country); } ▶︎$this->Player->updatePlayer($this->request['session']['id']);
どのようにすれば、データを更新できるようになるでしょうか?
もし、足りない情報がございましたらご指摘ください。
追記
Db.php(データベースの接続)
<?php require_once(ROOT_PATH .'/database.php'); class Db { protected $dbh; public function __construct($dbh = null) { if(!$dbh) { try { $this->dbh = new PDO( 'mysql:dbname='.DB_NAME. ';host='.DB_HOST, DB_USER, DB_PASSWD ); } catch (PDOException $e) { echo "接続失敗:".$e->getMessage()."\n"; exit(); } } else { $this->dbh = $dbh; } } public function get_db_handler(){ return $this->dbh; } }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/03/13 08:58
退会済みユーザー
2021/03/13 09:00