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>
今回はここまでとする。