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

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

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

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

PHP

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

Q&A

0回答

467閲覧

PHPログインフォーム作成

noele

総合スコア3

phpMyAdmin

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

PHP

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

0グッド

0クリップ

投稿2023/01/21 08:07

前提

ここに質問の内容を詳しく書いてください。
(例)
PHPでログイン機能を作成しているのですが、mypaseの画面に移行できず困っています。

実現したいこと

ここに実現したいことを箇条書きで書いてください。
mypase画面への移行。

発生している問題・エラーメッセージ

エラーメッセージは出ずにlogin_form.phpからパスワード、メールアドレスを入力してlogin.phpに移動(完了画面)からmypaseに移動クリックを押したらlogin_form.phpに戻ってしまう。一応考えられるmypage.php,
login_form.php,
login.php,
function.php のコードを貼らせていただきましたので原因がわかる方がいましたら教えていただけたら幸いです。

エラーメッセージ

該当のソースコード

ソースコード mypage.php <?php session_start(); require_once '../portFerio/UserLogic.php'; require_once '../user/function.php'; // ログインしてるか判定して、していなかったら新規登録画面にかえす $result = UserLogic::checkLogin(); echo '8'; if (!$result){ $_SESSION['login_err'] = 'ユーザーを登録してログインしてください'; header('Location: signup.php'); return; } $Login_user = $_SESSION['Login_user']; echo '16'; ?> <!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> <h2>マイページ</h2> <p>ログインユーザー<?php echo h($Login_user['name']) ?></p> <p>メールアドレス<?php echo h($Login_user['email']) ?></p> <form action="Logout.php" method="POST"> <input type="submit" name="logout" value="ログアウト"> </form> <a href="./login.php">ログアウト</a> </body> </html> ```ここに言語を入力 コード login_form.php <?php session_start(); require_once '../portFerio/UserLogic.php'; $result = UserLogic::checkLogin(); if($result){ header('Location: mypage.php'); return; } $err = $_SESSION; //セッション初期化 $_SESSION = array(); session_destroy(); ?> <!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> <h2>ログインフォーム</h2> <?php if (isset($err['msg'])) : ?> <p><?php echo $err['msg']; ?></p> <?php endif; ?> <form action="login.php" method="POST"> <p> <label for="email">メールアドレス</label> <input type="email" name="email"> <?php if (isset($err['email'])) : ?> <p><?php echo $err['email']; ?></p> <?php endif; ?> </p> <p> <label for="password">パスワード</label> <input type="password" name="password"> <?php if (isset($err['password'])) : ?> <p><?php echo $err['password']; ?></p> <?php endif; ?> </p> <p> <input type="submit" value="ログイン"> </p> </form> <a href="signup.php">新規登録はこちら</a> </body> </html> ```ここに言語を入力 コード login.php <?php session_start(); require_once '../portFerio/UserLogic.php'; $result = UserLogic::checkLogin(); if($result) { header('Location: mypage.php'); return; } //エラーメッセージ $err = []; //バリレーション if(!$email= filter_input(INPUT_POST, 'email')){ $err['email'] = 'メールアドレスを記入してください'; } echo '14'; if(!$password = filter_input(INPUT_POST, 'password')){ $err['password'] = 'パスワードを記入してください'; } if(count($err) > 0) { // エラーがあった場合は戻す $_SESSION = $err; header('Location: login_form.php'); return; } // ログイン成功時の処理 $result =UserLogic::login($email,$password); //ログイン失敗時の処理 if (!$result) { header('Location: login_form.php'); return; } echo '33'; ?> <!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> <h2>ログイン完了</h2> <p>ログインしました</p> <a href="./mypage.php">マイページへ</a> </body> </html> ```ここに言語を入力 コード function.php <?php require_once '../user/dbconnect.php'; class UserLogic { /** * ユーザを登録する * @param array $userData * @return bool $result */ public static function createUser($userData) { $result = false; $sql = 'INSERT INTO users (name, email, password) VALUES (?, ?, ?)'; // ユーザデータを配列に入れる $arr = []; $arr[] = $userData['username']; $arr[] = $userData['email']; $arr[] = password_hash($userData['password'], PASSWORD_DEFAULT); try { $stmt = connect()->prepare($sql); $result = $stmt->execute($arr); return $result; } catch(\Exception $e) { return $result; } } /** *ログイン処理 * @param string $email * @param string $password * @return bool $result */ public static function login($email,$password) { // 結果 $result = false; // ユーザーをemailから検索して取得する $user = self::getUserByEmail($email); if (!$user) { $_SESSION['msg'] = 'emailが一致しません'; return $result; } // パスワードの照会 if(password_verify($password,$user['password'])){ //ログイン成功 session_regenerate_id(true); $_SESSION['login_user'] =$user; $result = true; return $result; } $_SESSION['msg'] = 'パスワードが一致しません'; return $result; } /** *emailから ユーザを取得する *@param string $email *@return array|bool $user|false */ public static function getUserByEmail($email) { // SQLの準備 //SQLの実行 //SQLの結果を返す $sql = 'SELECT * FROM users WHERE email = ?'; // emailを配列に入れる $arr = []; $arr[] = $email; try { $stmt = connect()->prepare($sql); $stmt->execute($arr); // sqlの結果を返す $user = $stmt->fetch(); return $user; } catch(\Exception $e) { return false; } } /** *ログインチェック * @param void * @return bool $result */ public static function checkLogin() { $result = false; //セッションにログインユーザーが入っていなかったらfalse if(isset($_SESSION['Login_user']) && $_SESSION['Login_user']['id'] > 0){ return $result =true; } return $result; } /** * ログアウト処理 */ public static function logout() { $_SESSION = array(); session_destroy(); } }

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

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

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

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

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

yuma.inaura

2023/01/21 09:57

コードはファイル単位とかで区切って書いておきませんか?
m.ts10806

2023/01/21 20:52

何を参考に作られたのでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問