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

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

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

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

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

1回答

2937閲覧

PHPでログイン機能がうまく動かないです。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

PHP

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

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

0クリップ

投稿2020/07/18 05:42

編集2020/07/18 05:49

実現したい事

PHPの学習の一環でログイン機能を作っており、その実装がしたいです。
メールアドレスとパスワードを使ってログインする機能の実装を試みています。(パスワードのハッシュ化は行っていません。)

問題

ログインページから、メールアドレスとパスワードを入力してログインボタンを押しても本来行くはずのマイページに行きません。

状況
・データベースには登録済み仮ユーザーの値が入っている
・マイページのphp上(mypage.php)のエラーページへのリダイレクトは機能している

このような状況なので、データベースのデータと入力されたデータの照合に何か問題があると感じているのですが、原因がわかりません。

もしわかる方がいらっしゃいましたら、ご教授いただけると幸いです。

コード

mypagephp

1<?php 2 mb_internal_encoding("utf8"); 3 session_start(); 4 5 if (empty($_SESSION['id'])) { 6 try { 7 $pdo = new PDO ("mysql:dbname:XXXXX;host:XXXXXX;", "XXXXX", "XXXX"); 8 }catch (PDOException $e){ 9 die("<p>申し訳ございません。現在サーバーが混み合っており一時的にアクセスができません。 10 <br> 11 しばらくたってから再度ログインしてください。</p> 12 <a href='http://localhost/login_mypage/login.php'>ログイン画面へ</a>" 13 ); 14 } 15 16 $stmt = $pdo -> prepare("select * from login_mypage where mail = ? and password = ?"); 17 18 $stmt -> bindValue(1, $_POST['mail']); 19 $stmt -> bindValue(2, $_POST['password']); 20 21 $stmt -> execute(); 22 $pdo = NULL; 23 24 while ($row = $stmt -> fetch()){ 25 $_SESSION['id'] = $row['id']; 26 $_SESSION['name'] = $row['name']; 27 $_SESSION['mail'] = $row['mail']; 28 $_SESSION['password'] = $row['password']; 29 $_SESSION['picture'] = $row['picture']; 30 $_SESSION['comments'] = $row['comments']; 31 } 32 33 // 値がなければエラー画面にリダイレクト 34 if (empty($_SESSION['id'])){ 35 header("Location:login_error.php"); 36 } 37 38 // ログイン保持にチェックがあれば、セッションに代入 39 if (!empty($_POST['login_keep'])){ 40 $_SESSION['login_keep'] = $_POST['login_keep']; 41 } 42 } 43 44 // ログインしていてログイン情報保持のセッションがある場合は、Cookieを作成 45 if (!empty($_SESSION['id']) && !empty($_SESSION['login_keep'])) { 46 setcookie('mail', $_SESSION['mail'], time()+60*60*24*7); 47 setcookie('password', $_SESSION['password'], time()+60*60*24*7); 48 setcookie('login_keep', $_SESSION['loginkeep'], time()+60*60*24*7); 49 // ログインキープのセッションがなければCookie削除 50 }else if (empty($_SESSION['login_keep'])){ 51 setcookie('mail', time()-1); 52 setcookie('password', time()-1); 53 setcookie('login_keep', time()-1); 54 } 55 56?>

ログイン画面のコード

ログイン画面のフォームのコードです。

loginphp

1<form action="mypage.php" method="post"> 2 <div class="form_contents"> 3 <div class="mail"> 4 <label>メールアドレス</label> 5 <br> 6 <input type="text" class="formbox" size="40" value="<?php if (isset($_SESSION['mail'])) { 7 echo $_SESSION['mail']; 8 } ?>" name="mail"> 9 </div> 10 <div class="password"> 11 <label>パスワード</label> 12 <br> 13 <input type="password" class="formbox" size="40" value="<?php if (isset($_SESSION['password'])) { 14 echo $_SESSION['password']; 15 } ?>" name="password"> 16 </div> 17 <div class="checkbox"> 18 <label><input type="checkbox" size="40" value="login_keep" name="login_keep" <?php if (isset($_COOKIE['login_keep'])) { 19 echo "checked='checked'"; 20 } ?> >ログイン状態を保持する</label> 21 </div> 22 <div class="login_button"> 23 <input type="submit" class="submit_button" size="35" value="ログイン"> 24 </div> 25 </div> 26 </form> 27

試したこと

mypage.phpの最初のif文がおかしいかなと思い、

if (isset($_POST['mail'])) {・・・ ```に変更してみましたが、機能せずでした。 また、ここteratailで似たような質問を参考にしましたが、どれもうまくいかずでしたので、質問させていただきました。 お手数をおかけいたしますが、何卒お力添えいただけると幸いです。

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

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

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

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

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

kai0310

2020/07/18 05:46

ログインボタンとなるものが見当たりません。該当部分のコードをご提示ください。 formタグの部分など
退会済みユーザー

退会済みユーザー

2020/07/18 05:47

申し訳ございません。 直ちに追加いたします。 ご指摘いただき有難うございます!
m.ts10806

2020/07/18 07:25

ひとつ前の質問、解決しないまま放置ですか…
退会済みユーザー

退会済みユーザー

2020/07/18 07:57

m.ts10806さん、 前回の質問にお答えいただき有難うございます。 放置ではなく、前回のモノは個人で自主的にやっているもので、こちらが提出課題として挙げられたのでこちらを先に対応したいと考えているためです。 放置しているように感じさせてしまい、大変申し訳ございません。 こちらの問題が解決し、登録内容の編集機能等の実装などの課題を終えてから、前回の自主的に取り組んでいたものに取り組んでいきたいと考えております。何卒よろしくお願い致します。
guest

回答1

0

login.phpのログインボタンのnameタグに「login」を追加し、mypage.phpの初めのif文を

if (isset($_POST['login']))

に変更すると解決しました。

投稿2020/07/18 08:26

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問