<?php
// htmlspecialchars関数ラッパー
function h($input) {
return htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
}
// フィルタ定義
$filter = array(
'scalar' => array(
'filter' => FILTER_UNSAFE_RAW,
'flags' => FILTER_REQUIRE_SCALAR,
),
'array' => array(
'filter' => FILTER_UNSAFE_RAW,
'flags' => FILTER_FORCE_ARRAY,
),
);
// $_POSTの要素を安全にシンボルテーブルにインポート
extract(filter_input_array(INPUT_POST, array(
// スカラー値を要求(文字列で無かった場合FALSE、存在しない場合NULLになる)
'new_code' => $filter['scalar'],
'new_kbn_code' => $filter['scalar'],
'submit_add' => $filter['scalar'],
// 配列を強制(存在しない場合NULLになる)
'code' => $filter['array'],
'kbn_code' => $filter['array'],
'submit_update' => $filter['array'],
'submit_delete' => $filter['array'],
)));
// 変数初期化
$messages = array();
$stmt_table = new PDOStatement;
try {
// データベース接続設定
$dsn = 'mysql:dbname=hogehoge;host=127.0.0.1;charset=utf8';
$user = 'root';
$pass = 'abcdefg';
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ,
);
// データベースに接続
$pdo = new PDO($dsn, $user, $pass, $options);
// 新規追加($submit_addがNULLでないかチェック)
if ($submit_add !== null) {
try {
$sql = 'INSERT INTO kekka(code, kbn_code) VALUES (?, ?)';
$stmt = $pdo->prepare($sql);
$stmt->execute(array($new_code, $new_kbn_code));
$messages[] = '新規追加しました';
} catch (Exception $e) {
$messages[] = $e->getMessage();
}
}
// 変更($submit_updateが中身を持つ配列であるかチェック)
elseif ($submit_update) {
try {
$id = key($submit_update);
// キーに一致する文字列が$code,$kbn_codeの要素中に無ければ不正なリクエスト
if (
!isset($code[$id], $kbn_code[$id]) ||
!is_string($code[$id]) ||
!is_string($kbn_code[$id])
) {
throw new RuntimeException('不正なリクエストです。');
}
$sql = 'UPDATE kekka SET code = ?, kbn_code = ? WHERE id = ?';
$stmt = $pdo->prepare($sql);
$stmt->execute(array($code[$id], $kbn_code[$id], $id));
$messages[] = $stmt->rowCount() ? '変更しました' : '変更対象が見つかりませんでした';
} catch (Exception $e) {
$messages[] = $e->getMessage();
}
}
// 削除($submit_deleteが中身を持つ配列であるかチェック)
elseif ($submit_delete) {
try {
$id = key($submit_delete);
// キーに一致する文字列が$code,$kbn_codeの要素中に無ければ不正なリクエスト
if (
!isset($code[$id], $kbn_code[$id]) ||
!is_string($code[$id]) ||
!is_string($kbn_code[$id])
) {
throw new RuntimeException('不正なリクエストです。');
}
$sql = 'DELETE FROM kekka WHERE id = ?';
$stmt = $pdo->prepare($sql);
$stmt->execute(array($code[$id], $kbn_code[$id], $id));
$messages[] = $stmt->rowCount() ? '削除しました' : '削除対象が見つかりませんでした';
} catch (Exception $e) {
$messages[] = $e->getMessage();
}
}
// データ取得
$stmt_table = $pdo->query('SELECT * FROM kekka ORDER BY id');
} catch (Exception $e) {
$messages[] = $e->getMessage();
}
// ヘッダー送信
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html>
<head>
<title>テスト</title>
<style>
table {
border-collapse: collapse;
border: 1px;
width: 100%;
}
tr.top {
background-color: #eee8aa;
font-size: 75%;
}
td {
padding: 0px;
}
table,tr,td {
border-color: #666666;
}
</style>
</head>
<body>
<?php if ($messages): ?>
<ul>
<?php foreach ($messages as $message): ?>
<li><?=h($message)?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<h1>データ一覧</h1>
<form action="" method="post">
<table>
<tr class="top">
<td>項目名(リスト)</td>
<td>コード:数字4桁</td>
<td>ボタン</td>
</tr>
<?php foreach ($stmt_table as $row): ?>
<tr>
<td>
</td>
<?php endforeach; ?>