[ create a new paste ] login | about

Link: http://codepad.org/eJ9SO136    [ raw code | fork ]

PHP, pasted on Sep 14:
<?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_var_array($_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();
$data = array();
$detail = array();

try {
    
    // データベース接続設定
    $dsn = 'mysql:dbname=test;host=127.0.0.1;charset=utf8';
    $user = 'root';
    $pass = '';
    $options = array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    );
    
    // データベースに接続
    $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();
        }
    }
    
    // データ取得
    $data = $pdo->query('SELECT * FROM kekka ORDER BY id')->fetchAll();
    $detail = $pdo->query('SELECT * FROM code_hyo ORDER BY kbn_code')->fetchAll();
    
    
} 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;
        width: 100%;
      }
      tr.top {
        text-align: center;
        background-color: #eee8aa;
        font-size: 75%;
      }
      td {
        padding: 0px;
      }
      table,tr,td {
        border: solid 1px #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 ($data as $row): ?>
        <tr>
          <td>
<?php if ($detail): ?>
            <select name="kbn_code[<?=h($row['id'])?>]">
<?php foreach ($detail as $d): ?>
<?php $selected = $row['kbn_code'] === $d['kbn_code'] ? ' selected' : ''; ?>
              <option value="<?=h($d['kbn_code'])?>"<?=$selected?>><?=h($d['kbn_name'])?></option>
<?php endforeach; ?>
            </select>
<?php endif; ?>
          </td>
          <td>
            <input type="text" name="code[<?=h($row['id'])?>]" value="<?=h($row['code'])?>" size="10">
          </td>
          <td>
            <input type="submit" name="submit_update[<?=h($row['id'])?>]" value="変更">
            <input type="submit" name="submit_delete[<?=h($row['id'])?>]" value="削除">
          </td>
        </tr>
<?php endforeach; ?>
        <tr>
          <td>
<?php if ($detail): ?>
            <select name="new_kbn_code">
<?php foreach ($detail as $d): ?>
              <option value="<?=h($d['kbn_code'])?>"><?=h($d['kbn_name'])?></option>
<?php endforeach; ?>
            </select>
<?php endif; ?>
          </td>
          <td>
            <input type="text" name="new_code" value="" size="15">
          </td>
          <td>
            <input type="submit" name="submit_add" value="追加">
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>


Create a new paste based on this one


Comments: