PHPのPDOでMySQLデータベースのデータを削除する(投稿の削除)

前回の続き。jQueryを使い、削除ボタン押下で処理(delete.php)が走るようにした。

成果物:index.html -> item.php (詳細ページに削除ボタンを追加)

メモ

  • データベースのテーブルに削除フラグを追加。カラムにstatus(‘active’または’deleted’)を追加
  • Screen Shot 2013-02-06 at 22.40.14
  • 削除ボタンにdata-id属性を定義し、JavaScript側から値を参照している($.data(‘id’)の箇所)
  • <form action="edit.php" action="get">
    	<input type="hidden" name="id" value=%d />
    	<input type="text" name="updelkey" id="updelkey" size="20" placeholder="編集・削除キー(4桁数字)" />
    	<input type="submit" value="編集" />
    	<input type="button" id="btn_delete" data-id="%d" value="削除" />
    </form>
    
    $('#btn_delete').click(function() {
    	if (confirm("削除しますか?")) {
    		$.post('./delete.php',
    			{
    				id: $(this).data('id'),
    				updelkey: $('#updelkey').val()
    			},
    			function(data) {
    				if (data.result == 'success') {
    					// index.htmlにジャンプ
    					location.href = "./index.html";
    				}
    				else {
    					alert(data.message);
    				}
    			},
    			'json'
    		);
    	}
    });
    

ソースコード
item.php

<!DOCTYPE HTML>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>スマホキャプチャーギャラリー</title>
</head>
<body>
	<a href="index.html">Home</a> | <a href="upload.html">アップロード</a> | <a href="ranking.html">人気順</a>  | <a href="latest.html">新着順</a>

<?php
	require_once('config.php');
	require_once('function.php');

	$dbh = connect_db();

	$id = $_GET['id'];
	// アクセスカウンタをインクリメント
	$sql = sprintf("update mobile_capture_showcase set counter=counter+1 where id=%d", $id);
	$dbh->query($sql);

	// 該当IDの画像情報を表示
	$sql = sprintf("select * from mobile_capture_showcase where id=%d", $id);
	foreach ($dbh->query($sql) as $item) {
		$path = "./images/" . $item['filename'];
		echo sprintf(
			'<table>
				<tr>
				<td>
					<img src="%s" alt="image" width="320" />
				</td>
				<td>
					<table>
						<tr>
							<td>名前:%s</td>
						</tr>
						<tr>
							<td>投稿時刻:%s</td>
						</tr>
						<tr>
							<td>OS:%s</td>
						</tr>
						<tr>
							<td>アクセス数:%s</td>
						</tr>
						<tr>
							<td>コメント:%s</td>
						</tr>
						<tr>
							<td><form action="edit.php" action="get">
								<input type="hidden" name="id" value=%d />
								<input type="text" name="updelkey" id="updelkey" size="20" placeholder="編集・削除キー(4桁数字)" /><input type="submit" value="編集" /><input type="button" id="btn_delete" data-id="%d" value="削除" />
							</form></td>
						</tr>
					</table>
				</td>
				</tr>
			</table>',
			$path,
			$item['name'], $item['time'], $item['os'], $item['counter'],
			h($item['comment']),
			$id,
			$id);
	}

	$dbh = null;
?>
	<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
	<script type="text/javascript">
	$(document).ready(function() {
		$('#btn_delete').click(function() {
			if (confirm("削除しますか?")) {
				$.post('./delete.php',
					{
						id: $(this).data('id'),
						updelkey: $('#updelkey').val()
					},
					function(data) {
						if (data.result == 'success') {
							// index.htmlにジャンプ
							location.href = "./index.html";
						}
						else {
							alert(data.message);
						}
					},
					'json'
				);
			}
		});
	});
	</script>
</body>
</html>

delete.php

<?php
	require_once('config.php');
	require_once('function.php');

	// 編集・削除キーのチェック
	// 一致しない場合、キーが誤っている旨を表示する
	if (check_updelkey($_POST['id'], $_POST['updelkey']) == false) {
		//echo "編集・削除キーが誤っています";
		echo json_encode(array("result"=>"fail", "message"=>"編集・削除キーが誤っています"));
		//exit;
	}
	else {
	// 削除フラグの更新
	$dbh = connect_db();

	$statement = $dbh->prepare("update mobile_capture_showcase set status='deleted' where id=:id");
	$statement->bindParam(":id", $_POST['id']);
	$statement->execute();

	$dbh = null;
	echo json_encode(array("result"=>"success", "message"=>""));
	}
?>

参考サイト

パーフェクトPHP (PERFECT SERIES 3)
小川 雄大 柄沢 聡太郎 橋口 誠
技術評論社
売り上げランキング: 24,082

関連エントリー

  1. jQuery.ajaxでPHPプログラムに処理要求を出す
  2. ページング機能を実装する
  3. PHPのPDOでMySQLデータベースのデータを取得する3(指定キーワードを含むデータのみを取得する)
  4. jQuery.ajaxでPHPプログラムに処理要求を出したい
  5. PhoneGapお試し(iOS)
This entry was posted in 未分類 and tagged , , , . Bookmark the permalink.