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

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

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

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

phpMyAdmin

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

PHP

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

YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

1回答

1347閲覧

「配列に格納できない」とかでアカウントを登録できない。

Nishin

総合スコア30

MySQL

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

phpMyAdmin

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

PHP

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

YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2020/10/22 11:25

youtubeの動画を見ながらコードを手入力する形で、現在、PHPのログイン認証システムを再度作成しています。
現在使用している開発環境は、IDEのpaizacloudで、ログイン認証に必要なファイルのうち、ユーザーアカウントの登録までは進めております。

ログイン認証システムのファイルを収めるディレクトリの構成は、次の画像のとおりです。
ログインシステム用ファイルディレクトリ

内部のファイルのコードは、以下のとおりです。

sql

1//MySQL 2 3-- create "users" table 4CREATE TABLE `crud`.`users` ( 5 `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 6 `name` VARCHAR(64) NOT NULL , 7 `email` VARCHAR(191) NOT NULL UNIQUE, 8 `password` VARCHAR(191) NOT NULL UNIQUE 9) ENGINE = InnoDB;

php

1 2//dbconnect.php 3<?php 4 5require_once('env.php'); 6/* ↓次の構文があれば具体的に何が原因で接続エラーになっているのかが分かる。 */ 7ini_set('display_errors',true); 8function connect() 9{ 10 $host = DB_HOST; 11 $db = DB_NAME; 12 $user = DB_USER; 13 $pass = DB_PASS; 14 15 $dsn = "mysql:host=$host;dbname=$db;charset=utf8mb4"; 16 try{ 17 $pdo = new PDO($dsn,$user,$pass, [ 18 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 19 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 20 ]); 21 // echo '接続できました。'; 22 return $pdo; 23 }catch(PDOExeption $e){ 24 echo '接続できませんでした... '.$e->getMessage(); 25 exit; 26 } 27 28}

php

1//env.php 2 3<?php 4 5define('DB_HOST','localhost'); 6define('DB_NAME','crud'); 7define('DB_USER','root'); 8define('DB_PASS','');

php

1// classes/UserLogic.php 2 3<?php 4 5require_once('../dbconnect.php'); 6 7/* PHPDocとは? 8コメントを書く時の共通の形式。 9(例)クラスやメソッドの役割を書く時は・・・ 10*/ 11 12class UserLogic 13{ 14 /** 15 * ユーザーを登録する 16 * @param array $userData 17 * @return bool $result 18 */ 19 public static function createUser($userData) 20 { 21 $result = false; //←最初にこちらを設定しておく 22 $sql = 'INSERT INTO users (name, email, password) VALUES (?, ?, ?)'; 23 24 // ユーザーデータを配列に入れる 25 $arr = []; 26 $arr[] = $UserData['username']; 27 $arr[] = $UserData['email']; 28 $arr[] = password_hash($UserData['password'],PASSWORD_DEFAULT); 29 /* これでパスワードをハッシュ化している */ 30 try { //これが「例外処理」。 31 $stmt = connect()->prepare($sql); 32 $result = $stmt->execute($arr); 33 return $result; //←うまく言った場合は$resultがtrueになる 34 }catch(\Exception $e){ 35 return $result; //そうでなければfalseのまま 36 } 37 38 } 39} 40

php

1// public/register.php 2 3<?php 4 5 require_once('../classes/UserLogic.php'); 6 // エラーメッセージ 7 $err = []; 8 9 // バリデーション 10 if(!$username = filter_input(INPUT_POST, 'username')){ 11 $err[] = 'ユーザー名を記入して下さい。'; 12 } 13 if(!$email = filter_input(INPUT_POST, 'email')){ 14 $err[] = 'メールアドレスを記入して下さい。'; 15 } 16 $password = filter_input(INPUT_POST, 'password'); 17 // 正規表現を使う 18 if(!preg_match("/\A[a-z\d]{8,100}+\z/i",$password)){ 19 $err[] = 'パスワードは英数字8文字以上100文字以下にして下さい。'; 20 } 21 $password_conf = filter_input(INPUT_POST, 'password_conf'); 22 if($password !== $password_conf){ 23 $err[] = '確認用パスワードと異なっています。'; 24 } 25 26 if(count($err) === 0){ 27 // ユーザー登録処理 28 $hasCreated = UserLogic::createUser($_POST); 29 if(!$hasCreated){ 30 $err[] = '登録に失敗しました。'; 31 } 32 } 33 34 $theme = 'ユーザー登録'; 35?> 36<!DOCTYPE html> 37<html lang="ja"> 38<head> 39 <meta charset="UTF-8"> 40 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 41 <title><?= $theme; ?>完了画面</title> 42</head> 43<body> 44 <?php if(count($err) > 0): ?> 45 <?php foreach($err as $e): ?> 46 <p><?= $e; ?></p> 47 <?php endforeach ?> 48 <?php else: ?> 49 <p><?= $theme; ?>が完了しました。</p> 50 <?php endif ?> 51 <button><a href="signup_form.php">戻る</a></button> 52</body> 53</html> 54

php

1 2// public/signup_form.php 3 4<?php 5 $theme = 'ユーザー登録'; 6?> 7<!DOCTYPE html> 8<html lang="ja"> 9<head> 10 <meta charset="UTF-8"> 11 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 12 <title><?= $theme; ?>画面</title> 13</head> 14<body> 15 <h2><?= $theme; ?>フォーム</h2> 16 <form action="register.php" method="post"> 17 <p> 18 <label for="username">ユーザー名:</label><input type="text" name="username" id="username"> 19 </p> 20 <p> 21 <label for="email">メールアドレス:</label><input type="text" name="email" id="email"> 22 </p> 23 <p> 24 <label for="password">パスワード:</label><input type="password" name="password" id="password"> 25 </p> 26 <p> 27 <label for="password_conf">パスワード確認:</label><input type="password" name="password_conf" id="password_conf"> 28 </p> 29 <p><input type="submit" value="新規登録"></p> 30 </form> 31</body> 32</html>

ここまでを動画で紹介されている通りに記述してきたのですが、次のようなエラーが画面に表示されてしまい、対処できずに詰まっている次第です。

Notice: Undefined variable: UserData in /home/ubuntu/public_html/login/classes/UserLogic.php on line 24 Notice: Trying to access array offset on value of type null in /home/ubuntu/public_html/login/classes/UserLogic.php on line 24 Notice: Undefined variable: UserData in /home/ubuntu/public_html/login/classes/UserLogic.php on line 25 Notice: Trying to access array offset on value of type null in /home/ubuntu/public_html/login/classes/UserLogic.php on line 25 Notice: Undefined variable: UserData in /home/ubuntu/public_html/login/classes/UserLogic.php on line 26 Notice: Trying to access array offset on value of type null in /home/ubuntu/public_html/login/classes/UserLogic.php on line 26 登録に失敗しました。

「classes/UserLogic.php on line 24~26」は、「UserLogic.php」の

php

1 // ユーザーデータを配列に入れる 2 $arr = []; 3 $arr[] = $UserData['username']; 4 $arr[] = $UserData['email']; 5 $arr[] = password_hash($UserData['password'],PASSWORD_DEFAULT);

にあたる部分です。

おそらくはこの「UserLogic.php」か、或いは「register.php」のphp部分に誤りがあるのではないか、と見ているのですが、それをどう修正すればよいかが分からずにいます。

解決方法にお気づきの方がおられましたら、今回も畏れ入りますが、ご教示宜しくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーに原因出てますが、読まれたのでしょうか。
エラーメッセージの読み方と対処, 検索や質問の原則

Iとlはもちろん、aとAも別物(メソッド名など除く)。
手入力しないことです。

投稿2020/10/22 11:28

m.ts10806

総合スコア80850

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

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

Nishin

2020/10/22 13:52

「Iとlはもちろん、aとAも別物」という言い回しで気づきました! その後コードを書くに際して見ていた動画を再度視聴して、確信しました。 帰宅してから、「$UserData」となっていたのを「$userData」に直してから再度実行したところ、正常にDBに登録されていることが確認できました。 仰る通り。エラーメッセージの箇所がエラーの原因でした。 それが「変数のスペルミス」が原因だったという事に自分だけですぐ気づく程の力量には、まだ至れていないという事なのでしょう・・・
m.ts10806

2020/10/22 13:57 編集

そもそもエラーを読んでないことが根本原因です。 「スペルミス」という認識では治りません。書いたとおりにしか動いてません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問