考え、感じる、Web制作。

Web制作の学習や情報についての記事が中心です。

DB操作 newsfeed制作3

ログインページ追加

newsfeedにログインページを設置する。

仕様

ログイン画面からユーザID,passwordを入力、成功すればnewsfeedのindex.phpが表示される。今回はログインページ用のindex.phpを別フォルダに作り、そのテスト用ファイルlogin.phpを作る。

手順

  1. newsfeedのフォルダ下にフォルダ名loginを作る。
  2. index.php,logoin.phpを作る。
  3. newsfeedのフォルダからinit.phpコピーアンドペースト、ROOT_URLのパスを修正。
  4. DB:newsfeedの下にtable:news_loginを3カラムで作る。
  5. 各カラムの設定は下記のとおり。
    1. カラム名:news_login_code/型:int/インデックス:Primary/A_I:checked
    2. カラム名:news_login_id/型:varchar/長さ:16/照合順序:utf8_general_ci
    3. カラム名:news_login_pw/型:varchar/長さ:255/照合順序:utf8_general_ci

index.phpコード記述

ログインページはとりあえずフォームだけ記述。

<form action="login.php" method="POST">
<p><label for="loginid">Login ID</label><input type="text" name="loginid" id="loginid"></p>
<p><label for="loginpassword">Password</label><input type="text" name="loginpassword" id="loginpassword"></p>
<input type="submit" value="submit">
</form>

login.phpコード記述(前半)

$news_pwにindex.phpから受け取ったpasswordを格納するまでの記述。前回news.phpとほぼ同様のコードとなる。

require_once dirname(__FILE__).'/init.php';
if(!isset($_POST['loginid'])||!isset($_POST['loginpassword'])){
  header(ROOT_URL.'index.php');
  exit;
}
$news_login_id=$_POST['loginid'];
$news_login_password=$_POST['loginpassword'];

$news_pw=password_hash($news_login_password,PASSWORD_DEFAULT);
password_hash

変数をhash化(暗号化)する。MD5sha1などに比べ堅牢である。php5.5以降の機能なので、サーバの仕様を確認する必要がある点に注意。PASSWORD_DEFAULTを指定すると、password_hashがバージョンアップすると自動更新される。

login.phpコード記述(後半)

DBから値を取り出し、テスト用に表示させるまでを記述。こちらも前回news.phpとほぼ同様のコードとなる。

$dbh="";
try{
  $dbh=new PDO(DB_CONNECT,DB_USER,DB_PASS);
}catch(Exception $e){
  //echo $e->getMessage();エラーメッセージを捕まえて表示させる
  exit('ランタイムエラーが発生しました');
}
$sql="SELECT news_login_pw FROM news_login WHERE news_login_id=:news_login_id;";
$stmt=$dbh->prepare($sql);
$stmt->bindParam(':news_login_id',$news_login_id);
$stmt->execute();
$row=$stmt->fetch(PDO::FETCH_ASSOC);
if(false===$row){
  header('ROOT_URL.index.php');
  exit;
}
$news_login_pw=$row['news_login_pw'];

***password_verify
password_verifyにより入力値とDBに格納されていた値を比較できる。php5.5以降の機能であり、実装にはサーバ仕様を確認すること。
$result=password_verify($news_login_password,$news_login_pw);
echo$result;

今回はここまで。