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

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

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

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

PHP

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

Q&A

解決済

2回答

662閲覧

phpでおそらく構文ミスだと思うのですが、どこで間違ってるか全くわかりません。

dd_

総合スコア111

MySQL

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

PHP

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

0グッド

0クリップ

投稿2021/08/18 09:51

ユーザー登録機能を作りたいと思い
こちらの動画https://youtu.be/cf4appMVoFM
を参考にして作業を進めてみました。

ユーザー情報を入れるフォームを作り

別ファイルに入力情報についてファイルを作り

php

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

また別ファイルに
ユーザーデータを登録するファイルを作りました。

php

1<?php 2 3require_once "./dbconnect.php"; 4 5class UserLogic 6{ 7 /** 8 * ユーザーを登録する 9 * @param array $userData 10 * @return bool $result 11 * */ 12 public static function createUser($userData) 13 { 14 $result = false; 15 $sql = "INSERT INTO users (name, email, 16 password) VALUES (?, ?, ?)"; 17 18 // ユーザーデータを配列に入れる 19 $arr = []; 20 $arr[] = $userData["username"]; 21 $arr[] = $userData["email"]; 22 $arr[] = password_hash( 23 $userData["password"], 24 PASSWORD_DEFAULT 25 ); 26 try { 27 // sqlの準備でprepareを使います 28 $stmt = connect()->prepare($sql); 29 // executeで実行 30 // arrに入った値が上の $sql = に入っていく 31 $stmt->execute($arr); 32 return $result; 33 } catch (\Exception $e) { 34 echo $e; 35 return $result; 36 } 37 } 38}

ブラウザで
名前
メールアドレス
パスワード
確認用のパスワード
を入力し画面を進むと

「登録に失敗しました」
と出ます。

しかし、phpmyadminでサーバーのテーブルを見てみると
先ほど私が入力した内容で
ユーザー登録されているのが確認できました。

次に入力した同じ内容で
画面を進んでみると、

PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'daiki@test.com' for key 'email' in C:\xampp\htdocs\public\UserLogic.php:31 Stack trace: #0 C:\xampp\htdocs\public\UserLogic.php(31): PDOStatement->execute(Array) #1 C:\xampp\htdocs\public\register.php(28): UserLogic::createUser(Array) #2 {main} 登録に失敗しました。

ググるとこのエラーは「もう登録されてるよ」的なエラーだとわかり
じゃあ登録されてるのは間違いないんだろうと思いました。

ユーザー登録はされているのに
「登録に失敗しました」と出てしまうのでしょう?

おそらくは

php

1// もしエラーが0だった場合 2if (count($err) === 0){ 3 // ユーザーを登録する処理 4 $hasCreated = UserLogic::createUser($_POST); 5 6 if(!$hasCreated){ 7 $err[] = "登録に失敗しました。"; 8 }

この部分で上手くいってない様な気がするのですが
参考にした動画とコード見比べても
違いが無いように思えるので
こちらで質問させて頂きました。

ユーザー登録完了しました。を出すには
どちらを改善するべきでしょうか?
教えていただけると幸いです。
宜しくお願い致します。

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

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

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

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

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

guest

回答2

0

createUserの戻り値が処理の成功、失敗に関わらずfalseになってます。

投稿2021/08/18 10:06

編集2021/08/18 10:07
hayato7

総合スコア1135

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

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

dd_

2021/08/18 10:16

ご回答ありがとうございます!
guest

0

ベストアンサー

コードを部分的に抜粋しますが、 $result が一切更新されていません。
したがって、常に false を返しています。

php

1class UserLogic 2{ 3 public static function createUser($userData) 4 { 5 $result = false; 6 # ... 7 try { 8 # ... 9 return $result; 10 } catch (\Exception $e) { 11 echo $e; 12 return $result; 13 } 14 } 15}

そもそも変数は必要ないのではないでしょうか?

php

1class UserLogic 2{ 3 public static function createUser($userData) 4 { 5 # ... 6 try { 7 # ... 8 return true; 9 } catch (\Exception $e) { 10 echo $e; 11 return false; 12 } 13 } 14}

投稿2021/08/18 10:05

mather

総合スコア6759

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

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

dd_

2021/08/18 10:18

ご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問