//tips
//php理解
ログイン画面を設定していく。この際には入力された、コードとパスが正しいかの認証を行う。認証は入力情報がデータベースに存在するかの確認をすれば良い。selectとwhereでデータを探し、情報を取得できれば認証完了、返ってこなければ失敗とする。
まずはシンプルな認証画面の作成。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ログイン</title>
</head>
<body>
スタッフログイン<br/>
<form method="post" action="staff_login_check.php">
スタッフコード<br/>
<input type="text" name="code"><br/>
パスワード<br/>
<input type="password" name="pass"><br/>
<br/>
<input type="submit" value="ログイン"><br/>
</form>
</body>
</html>
これで入力画面を作れたので、スタッフが存在するのかのチェック機能を実装する。
存在する場合は、次の画面へ、存在しなければ「スタッフコードかパスワードが間違っています。」と表示する。
<?php
try
{
$staff_code=$_POST['code'];
$staff_pass=$_POST['pass'];
$staff_code=htmlspecialchars($staff_code,ENT_QUOTES,'UTF-8');
$staff_pass=htmlspecialchars($staff_pass,ENT_QUOTES,'UTF-8');
$staff_pass=md5($staff_pass);
$dsn='mysql:dbname=shop;host=localhost;charset=utf8';
$user='root';
$password='';
$dbh=new PDO($dsn,$user,$password);
$dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$sql='SELECT name FROM mst_staff WHERE code =? AND password =?';
$stmt=$dbh->prepare($sql);
$data[]=$staff_code;
$data[]=$staff_pass;
$stmt->execute($data);
$dbh=null;
$rec=$stmt->fetch(PDO::FETCH_ASSOC);
if($rec==false)
{
print'スタッフコードかパスワードが間違っています<br/';
print'<a href="staff_login.php">戻る</a>';
}else{
header('Location:staff_top.php');
exit();
}
}catch(Exception $e){
print'ただいま障害により大変ご迷惑をおかけします';
}
?>
ログイントップ画面へ遷移させるのでそちらを作成。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ログイン</title>
</head>
<body>
ショップ管理トップメニュー<br/>
<br/>
<a href="../staff/staff_list.php">スタッフ管理</a><br/>
<br/>
<a href="../product/pro_list.php">商品管理</a><br/>
</body>
</html>
ログインを実行してみるが失敗。正しいパスワードを入れて実行しているがエラーになる現象が発生。
いろいろ調べていると参考文献の方にも問題があることが分かってきた。
https://teratail.com/questions/292230
後ほどログイン部分は重要なので下記を参考に修正を行う。
https://qiita.com/ShibuyaKosuke/items/f114ffccf441edb2b745
https://qiita.com/ryo-futebol/items/5fb635199acc2fcbd3ff
https://qiita.com/rana_kualu/items/3ef57485be1103362f56
https://www.php.net/manual/ja/class.exception.php
一旦は今の内容で進めるためにデバッグ確認を進めていく。データベースから内容を検索するという仕組みは作動するはずなので。
var_dump($変数);を使用して確かめていく。
遷移しているとphp文がそのままブラウザに表示されるようになったがこれはlocalhostにアクセスして開いていないため読み込めていなかった。
http://localhost/staff_login/staff_login_check.php
コード:aa パスワード:aaのスタッフをデバッグで確認すると、
var_dump($staff_pass);
var_dump($staff_code);
string(32) "4124bc0a9335c27f086f24ba207a4912"
string(2) "aa"
となり、データベースに格納されている下記と等しくなっている。
4124bc0a9335c27f086f24ba207a4912
問題点を探していたらcodeの方は1~順番につく数字を採用していたので、3,aaと入力しなければならなかった。nameの内容を記入していたのでログインできなかったことに気がついた。こちらで解決。
ここからセッションの仕組みを組み込みログインしなければ情報を見られなくするようにする。現在はログイン後のページURLを他の人に渡しても入れてしまう。
session_start();でパソコンのクッキー領域にセッションidを保存させ、サーバーにも同じものを保存させる。それにより、個人情報を取り扱うことができるようになる。
$_SESSION[‘~’]を使用することで個人情報を保存しておくことができる。