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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

解決済

配列の要素が文字列化している

I_d
I_d

総合スコア26

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

1回答

0評価

0クリップ

199閲覧

投稿2022/06/07 15:57

現在MVCモデルを利用して簡単なレシピサイトを制作しています。
現在、編集機能に置いて編集した要素が配列に入らず文字列化してしまい、編集した内容がデータベースに
反映することができません。

以前もこのエラーで悩んでおり、その際は
$dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);のコードにて
$dbhを$this->dbh->に変更しました。
また
'mysql:dbname='.DB_NAME.にスペースが入っていたのでそのスペース部分を直したところ、
実行されることがデータベースに反映することができました。

しかし今回は以前直した部分が反映されていたため、行き詰まっています。
試したことは、クオーテーションの変更や戻り値の変更を行いました。

お手数お掛け致しますが、ご教示頂きますと幸いです。
よろしくおねがいします。

edit_profile_form.php

<?php session_start(); if (!isset($_SESSION)) { header('Location: login_form.php'); return; } ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="/css/bootstrap.css" type="text/css"/> <link rel="stylesheet" href="/css/index.css" type="text/css"/> <title>プロフィール編集</title> </head> <body style = "background-color :#FAEBD7;"> <?php include("header.html")?> <p>プロフィール編集</p> <form action = "edit_profile.php" method = "POST"> <input type="hidden" name = 'id' value = <?php echo $_SESSION["login_user"]["id"]?>> <p> <label for="name">ユーザー名</label><br> <span style="color:red;"><?php if (isset($_SESSION["err"]["err_name"])) { echo $_SESSION["err"]["err_name"]; } ?></span><br> <input type="text" name = 'name' value = <?php echo $_SESSION["login_user"]["name"]?>> </p> <p> <label for="name">働いている店名</label><br> <span style="color:red;"><?php if (isset($_SESSION["err"]["err_restaurant"])) { echo $_SESSION["err"]["err_restaurant"]; } ?></span><br> <input type="text" name = 'restaurant' value = <?php echo $_SESSION["login_user"]["restaurant"]?>> </p> <p> <label for="name">ひとこと</label><br> <span style="color:red;"><?php if (isset($_SESSION["err"]["err_comment"])) { echo $_SESSION["err"]["err_comment"]; } ?></span><br> <input type="text" name = 'comment' value = <?php echo $_SESSION["login_user"]["comment"]?>> </p> <input type="submit" name = 'send' value = "編集"> </form> <?php include("footer.html")?> <?php unset($_SESSION["err"]);?> </body> </html>

edit_profile.php

<?php session_start(); require_once(ROOT_PATH .'/Controllers/UserController.php'); $err = []; if (empty($_POST['name']) || mb_strlen($_POST['name']) > 10) { $err['err_name'] = "名前は10文字以下で入力してください"; } if (empty($_POST["restaurant"]) || mb_strlen($_POST["restaurant"] > 30)) { $err['err_restaurant'] = "飲食店名は30文字以下で入力してください"; } if (empty($_POST["comment"]) || mb_strlen($_POST['comment']) > 50) { $err['err_comment'] = "ひとことは50文字以下で入力してください"; } if (count($err) > 0) { // エラーがあった場合は戻す $_SESSION["err"] = $err; header('Location:./edit_profile_form.php'); return; } $data = $_POST; $user = new UserController(); $edit = $user -> update($data); var_dump($edit); ?> <!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>プロフィール編集完了</title> </head> <body style = "background-color :#FAEBD7;"> <?php include("header.html")?> <div> <p>編集が完了しました。</p> <p><a href="index.php">トップへ戻る</a></p> </div> <?php include("footer.html")?> </body> </html>

UserController.php

<?php require_once(ROOT_PATH .'/Models/User.php'); class UserController { private $request; //リクエストパラメータ(GET,POST) private $User; //Cafeモデル public function __construct() { //インスタンス化で最初に走る処理 //get['id']とpostはrequestに入る $this->request['get'] = $_GET; $this->request['post'] = $_POST; //モデルオブジェクトの生成 $this->User = new User(); } public function register($data) { if (isset($this->request['get']['id'])) { } $register = $this->User->register($data); $params = [ 'register' => $register ]; return $params; } public function login($email, $password) { $login = $this -> User -> login($email, $password); $params = $login; return $params; } /** *ログインチェック * @param void * @return bool $result */ public function checkLogin() { $result = false; if (isset($_SESSION['login_user']) && $_SESSION['login_user']['id'] > 0) { return $result = true; } } public function update($data) { $update = $this -> User -> update($data); $params = [ 'update' => $update ]; return $params; } }

User.php

<?php require_once(ROOT_PATH .'/Models/Db.php'); class User extends Db { private $table = 'recipes'; public function __construct($dbh = null) { parent::__construct($dbh); } /** *Userテーブルに登録  * * @param $data array 登録情報 * @return $result 結果 */ public function register($data) { $sql = 'INSERT INTO users (name, email, restaurant, comment, password, roles) VALUES (:name, :email, :restaurant, :comment, :password, :role)'; $sth = $this->dbh->prepare($sql); $hash = password_hash($data['password'], PASSWORD_DEFAULT); $sth->bindValue(':name', $data['name'], \PDO::PARAM_STR); $sth->bindValue(':email', $data['email'], \PDO::PARAM_STR); $sth->bindValue(':restaurant', $data['restaurant'], \PDO::PARAM_STR); $sth->bindValue(':comment', $data['comment'], \PDO::PARAM_STR); $sth->bindValue(':password', $hash, \PDO::PARAM_STR); $sth->bindValue(':role', $data['role'], \PDO::PARAM_INT); $sth->execute(); return $sth; } /** *処理ログイン処理 * @param string $email * @param string $password * @return array $user||false */ public function login($email, $password) { $result = false; $user = self::getUserByEmail($email); if (!$user) { $_SESSION['email'] = 'emailが一致しません。'; return $result; } if (password_verify($password, $user['password'])) { session_regenerate_id(true); $_SESSION['login_user'] = $user; $result = true; return $result; } $_SESSION['password'] = 'パスワードが一致しません。'; return $result; } /** *emailからユーザーを取得 * @param string $email * @return array $user||false */ public function getUserByEmail($email) { $sql = 'SELECT * FROM users WHERE email = ?'; $arr = []; $arr[] = $email; try { $sth = $this->dbh->prepare($sql); $sth->execute($arr); //結果を返す $user = $sth->fetch(); return $user; } catch (\Exception $e) { return false; } } /** * 指定したデータ(プロフィール)を編集 * @param intger $id ユーザのid * @result Array $sth 編集したデータ */ public function update($data) { $sql = 'UPDATE users SET name = :name, restaurant = :restaurant, comment = :comment WHERE id = :id'; $sth = $this -> dbh -> prepare($sql); $sth -> bindParam(':id', $data['id'], PDO::PARAM_INT); $sth -> bindParam(':name', $data['name'], PDO::PARAM_STR); $sth -> bindParam(':restaurant', $data['restaurant'], PDO::PARAM_STR); $sth -> bindParam(':comment', $data['comment'], PDO::PARAM_STR); $sth -> execute(); return $sth; } }

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 ); $this -> dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //接続成功 } catch (PDOException $e) { echo "接続失敗: " . $e -> getMessage() . "\n"; exit(); } } else { //接続情報が存在する場合 $this -> dbh = $dbh; } } public function getDbHandler() { return $this-> dbh; } }

database.php

<?php define('DB_HOST', 'localhost'); define('DB_USER', 'root'); define('DB_PASSWD', 'root'); define('DB_NAME', 'recipe');

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

y_waiwai

2022/06/07 22:49

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、よけいな省略翻訳しないで出たそのママをコピペで提示してください
I_d

2022/06/08 07:11

コメントありがとうございます。 すみません。エラーが出てからも色々とコードを変更してしまいまして。 今はver_dumpで文字列化していると確認している状況です。 エラーが出ていた時は下記のエラーメッセージでした。 Notice: Array to string conversion in UserContller.php on line 58

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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