考え、感じる、Web制作。

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

DB操作 newsfeed制作6

DB操作 newsfeed制作6

今回は削除を実際に処理するnews_delete_fin.phpの記述を学習する。

コード記述

news_delete_confirm.phpで確定した削除対象を実際に削除する。このファイルは削除だけのために存在し、ブラウザ上で表示させるものはない。処理が終わり次第、news_list.phpに戻す。

セッション開始~url直打ちリダイレクト

今回のリダイレクト条件は、ログインに成功していない場合と削除データのセッションがない場合とした。

require_once dirname(__FILE__).'/session.php';
if(!isset($_SESSION['login']['success'])||!$_SESSION['delete_data']['news_id']){
  header(ROOT_URL.'index.php');
  exit;
}

セッションデータを変数に格納~セッションデータ削除

$news_idにセッションデータを格納し、すぐさま不要となったセッションデータを消す。
$news_id=$_SESSION['delete_data']['news_id'];
  $_SESSION['delete_data']=array();
  unset($_SESSION['delete_data']);
DB接続~削除処理

$sql='DELETE FROM news WHERE news_id=:news_id;';が実際の削除処理となる。

$dbh="";
try{
  $dbh=new PDO(DB_CONNECT,DB_USER,DB_PASS);
}catch(Exception $e){
  //echo $e->getMessage();エラーメッセージを捕まえて表示させる
  exit('ランタイムエラーが発生しました');
}
$sql='DELETE FROM news WHERE news_id=:news_id;';
$stmt=$dbh->prepare($sql);
$stmt->bindparam('news_id',$news_id);
$r=$stmt->execute();
後処理

削除処理が成功した場合にはnews_list.phpに、失敗している場合はindex.phpに戻す。

if($r){
  header(ROOT_URL.'news_list.php');
  exit;
}
header('ROOT_URL.index.php');

感想

削除処理はSELECTと違い、指定IDを誤ると取り返しのつかない事になる。テストを重ね、誤った処理を走らせないよう厳重な注意が必要となる。一方、この処理を理解すれば、その他のUPDATEやINSERTもほぼ同様の処理であり、応用が利く。DBを開いて直接編集するリスクを考慮すると、このような処理を実装することは有意義であり、管理面、作業性の面で重要である。