考え、感じる、Web制作。

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

DB操作 newsfeed制作4

DB操作 newsfeed制作4

引き続きログインページの編集を進める。今回はセッションデータの生成~ニュースリストページにログインするところまで進める。

コード記述 login.php

前回はpasswordをDBから取り出し表示させるところまで進めた。最後に書いたecho'$result';は不要なので削除し、下記を追記していく。

DB異常時のリダイレクト

何らかの問題でDBから値が取得できない場合、ログイン画面(index.php)にリダイレクトさせる。

if(!$result){
  header(ROOT_URL.'index.php');
  exit;
}
セッション開始~データ格納

$resultを格納し、リンク先でエラーチェックを容易にする。

session_start();
session_regenerate_id(true);
$_SESSION['login']['success']=$result;
二度目のpassword_hash

パスワードの堅牢性を向上させるため、再びpassword_hashをかける。こうすることでログインするたびにDBに格納されるハッシュ値が変わるため、万が一の場合に情報漏洩の度合いを低減できる。

$new_pw=password_hash('root',PASSWORD_DEFAULT);
新hash値格納

新たに生成したhash値をDBに格納する。

$sql="UPDATE news_login SET news_login_pw=:new_pw WHERE news_login_id=:news_login_id;";
$stmt=$dbh->prepare($sql);$stmt->bindParam(':news_login_id',$news_login_id);
$stmt->bindParam(':new_pw',$new_pw);
$r=$stmt->execute();
ニュースリストページに遷移

$rに値がある場合、処理が成功しているのでページ遷移させる。そうでない場合はエラーとし、処理を止める。

if($r){
  header(ROOT_URL.'news_list.php');
  exit;
}
print'システムエラーが発生しました。';

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

リンク先であるニュースリストのページを記述する。

セッションデータ受取~データ異常時のリダイレクト

login.phpで$resultを受け渡しているので、それをif文で判定させる。

require_once dirname(__FILE__).'/init.php';
session_start();
session_regenerate_id(true);
if(!isset($_SESSION['login']['success'])||!$_SESSION['login']['success']){
  header(ROOT_URL.'index.php');
  exit;
}
DBからデータ取得

5件を上限とし、DBからデータを取得する。

$dbh="";
try{
  $dbh=new PDO(DB_CONNECT,DB_USER,DB_PASS);
}catch(Exception $e){
  //echo $e->getMessage();
  exit('システムエラーが発生しました');
}
$sql="SELECT news_id,news_headline,news_date FROM news limit 5;";
$stmt=$dbh->query($sql);

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

取得したデータの書き出し。修正ボタンと削除ボタンを作っておく。これは後日使う。

<table>
<tr><th>No.</th><th>title</th><th>date time</th><th>update</th><th>delete</th></tr>
<?php
foreach($stmt as $row){
  print'<tr><td>'.h($row['news_id']).'</th>';
  print'<td id="article"><a href="news.php?news_id=';
  print $row['news_id'];
  print'">';
  print h($row['news_headline']);
  print'</a></td><td id="datetime"><span class="gry">';
  print h($row['news_date']);
  print'</span></td>';
  print'<td><a href="news_update_entry.php?news_id=';
  print h($row['news_id']);
  print'">修正';
  print'</a>';
  print'</td><td><a href="news_delete_confirm.php?news_id=';
  print h($row['news_id']);
  print'">削除';
  print'</a>';
  print"</td></tr>\n";
}
?>
</table>

今回はここまでとする。