前回の続き。jQueryを使い、削除ボタン押下で処理(delete.php)が走るようにした。
成果物:index.html -> item.php (詳細ページに削除ボタンを追加)
メモ
- データベースのテーブルに削除フラグを追加。カラムにstatus(‘active’または’deleted’)を追加

- 削除ボタンに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の基礎(応用編) (全12回) – ドットインストール
- お問合せ管理システムを作ろう (全21回) – プログラミングならドットインストール
- PHP: PDO – Manual
- jQueryでHTML5の独自データ属性(data Attributes)を扱う | webOpixel
パーフェクトPHP (PERFECT SERIES 3)
posted with amazlet at 13.01.30
小川 雄大 柄沢 聡太郎 橋口 誠
技術評論社
売り上げランキング: 24,082
技術評論社
売り上げランキング: 24,082
関連エントリー
