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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

Q&A

1回答

1729閲覧

自動ログイン機能を実装したいです

turtle410

総合スコア13

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

0グッド

0クリップ

投稿2021/02/21 07:18

前提・実現したいこと

次回以降に自動でログインできる「自動ログイン機能」を追加したいです。
プログラムの機能として実装するとなった時、一般的によく使われている手法がありましたら教えていただきたいです。

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

エラーメッセージ

該当のソースコード

PHP

1<?php 2//ログインページ 3session_start(); //クッキーにセッションIDという合言葉を記憶して、サーバーも同じ合言葉を記憶する。 4unset($_SESSION['customer']); //顧客情報を配列$_SESSIONの添え字customerに格納する 5//同名のユーザーが既にログインしている場合はログアウトにする。 6//セッションデータから既に存在する顧客情報を削除する。(unset関数) 7 8$login = ''; //ブラウザで開いたときにNotice: Undefined indexが表示されないように初期化しておく 9$pass = ''; 10$msg = ''; //エラーメッセージ 11 12$host = 'localhost'; //ホスト名 13$username = '44580'; //ユーザー名 14$password = '44580'; //パスワード 15$dbname = '44580'; //データベース名 16$charset = 'utf8'; 17$dsn = 'mysql:dbname='.$dbname.';host='.$host.';charset='.$charset; 18 19//下から飛んできたログインとパスワードをそれぞれ定義する 20if ($_SERVER['REQUEST_METHOD'] === 'POST') { //下からpostで飛んでくるチェックする。 21 if (isset($_POST['login']) === TRUE) { 22 $login = filter_input(INPUT_POST, 'login', FILTER_SANITIZE_FULL_SPECIAL_CHARS); 23//バリデーション処理 24 //FILTER_SANITIZE_FULL_SPECIAL_CHARSはhtmlspecialchars() に ENT_QUOTES を指定してコール 25するのと同じ 26 //$login = htmlspecialchars($_POST['login'], ENT_QUOTES, 'UTF-8'); 27 } 28 if (isset($_POST['password']) === TRUE) { 29 $pass = filter_input(INPUT_POST, 'password', FILTER_SANITIZE_FULL_SPECIAL_CHARS); 30 //$pass = htmlspecialchars($_POST['password'], ENT_QUOTES, 'UTF-8'); 31 } 32 33 try { 34 $dbh = new PDO($dsn, $username, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4')); 35 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 36 $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 37 $sql = 'SELECT id, name, login, password 38 FROM customer 39 WHERE login = ? and password = ?'; 40 $stmt = $dbh->prepare($sql); 41 $stmt->bindValue(1, $login, PDO::PARAM_STR); 42 $stmt->bindValue(2, $pass, PDO::PARAM_STR); //文字列はSTRにかえる 43 $stmt->execute([$login, $pass]); 44 45 foreach ($stmt as $row) { //$rowにはデータベースから取得した顧客テーブルの行が格納されている。 46 //var_dump($stmt); 47 $_SESSION['customer'] = ['id'=>$row['id'], 48 'name'=>$row['name'], 49 'login'=>$row['login'], 50 'password'=>$row['password']]; 51 } 52 53 } catch (PDOException $e) { 54 echo '接続できませんでした。理由:'.$e->getMessage(); 55 } 56 if (isset($_SESSION['customer']) === TRUE ) { 57 header("location: ./product.php"); //ログインに成功した場合のみ商品一覧(管理画面)ページに移動できるようにする。 58 exit(); //リダイレクト後は何もさせないようにexitを記述する。 59 //echo 'いらっしゃいませ、' . $_SESSION['customer']['name'] . 'さん。'; 60 } else if ($login === '' || $pass === '') { //ユーザー名 パスワードのどちらかが入力されていないときの処理 61 $msg = 'ログインする際は、ログイン名とパスワードを入力してください。'; 62 //ログインに失敗したらログイン専用ページに遷移する。 63 } else { 64 $msg = 'ログイン名またはパスワードが違います。'; 65 //ログインに失敗したらログイン専用ページに遷移する。 66 } 67} 68//コメントはHTML側ではなく、PHP側に書いておくこと 69 70// ログインページ 71// 「ユーザ名」「パスワード」を入力する項目を表示する。 72// 「ログイン」ボタンをクリックした場合、「ユーザ名」と「パスワード」が登録されているユーザ情報と一致したとき、 73// 「商品一覧ページ」に遷移する。 74// 「ログイン」ボタンをクリックした場合、「ユーザ名」と「パスワード」が登録されているユーザ情報と一致しない、 75// エラーメッセージを表示して、ログインすることができない。 76?> 77<!DOCTYPE html> 78<html lang="ja"> 79 <head> 80 <meta charset="UTF-8"> 81 <title>ログイン専用画面</title> 82 </head> 83 <body> 84 <form method="post"> 85 <h1>ログイン画面</h1> 86 <p class="form-item"> 87 <label>ユーザー名: <input type="text" name="login"></label> 88 </p> 89 <p class="form-item"> 90 <label>パスワード: <input type="password" name="password"></label> 91 </p> 92 <!--<p>--> 93 <!-- <label><input type="checkbox" id="save" name="save" value="on" />次回からは自動的にログインする</label>--> 94 <!--</p>--> 95 <p class="login"> 96 <input type="submit" value="ログイン"> 97 </p> 98 <form> 99 <div class="button"> 100 <a href="membership_registration.php">新規登録フォームはこちらから!</a> 101 </div> 102 </form> 103 </form> 104 <h1 style="color:#f00;"><?php echo $msg; ?></h1> 105 <div class="back"> 106 <a href="login.php">戻る</a> 107 </div> 108 </body> 109</html> 110 111

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

タイトルに関して回答すると、session を使用する方法が一般的です。

コードはひどいので見るのをやめました。。。
古めの情報をつぎはぎしているようなので、新しめの教材を選び、体系的に学習する事をオススメします。

投稿2021/02/21 07:58

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問