Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /* HTML特殊文字のエスケープ関数 */
- function h($str) {
- return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
- }
- /* $_POSTで受け取る項目の定義 */
- $params = array(
- // アクション
- 'update', 'delete',
- // テキスト
- 'uid', 'sid', 'name', 'email', 'passwd',
- );
- /* $_POSTをローカル変数に展開 */
- foreach ($params as $v) {
- $$v = (string)filter_input(INPUT_POST, $v);
- }
- /* データベース関連の処理 */
- try {
- // データベースに接続
- $pdo = new PDO(
- 'mysql:host=●●;dbname=●●;charset=utf8',
- 'ユーザー名',
- 'パスワード',
- array(
- // SQLエラー時にも例外をスローさせる
- PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
- // PDOではなくMySQLの純正プリペアドステートメントを利用する
- PDO::ATTR_EMULATE_PREPARES => false,
- )
- );
- // 更新時
- if ($update) {
- $stmt = $pdo->prepare('UPDATE `date` SET uid=?, name=?, email=?, passwd=? WHERE sid=?');
- $stmt->execute(array($uid, $name, $email, $passwd, $sid));
- if (!$stmt->rowCount()) {
- throw new RuntimeException('対象が見つかりませんでした', 404); // 404 Not Found
- }
- }
- // 削除時
- elseif ($delete) {
- $stmt = $pdo->prepare('DELETE FROM `date` WHERE sid=?');
- $stmt->execute(array($sid));
- if (!$stmt->rowCount()) {
- throw new RuntimeException('対象が見つかりませんでした', 404); // 404 Not Found
- }
- }
- // アクション未指定
- else {
- throw new RuntimeException('アクションが指定されていません', 400); // 400 Bad Request
- }
- // リダイレクト
- // $_SERVER['HTTP_HOST'] や $_SERVER['PHP_SELF'] は
- // ユーザー側が任意の値を指定できたり、そもそも未定義だったりするのでエラーが発生するリスクあり。
- // それでもこの書き方をしたいのであれば念のため「@」でエラーを抑制。
- @header('Location: ' . $url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/リダイレクト先のファイル名');
- // うまく遷移しないときのためのメッセージ
- header('Content-Type: text/html; charset=utf-8');
- $msg = sprintf('<a href="%1$s">%1$s</a>にリダイレクトしています...', h($url));
- } catch (PDOException $e) {
- // エラーメッセージ
- header('Content-Type: text/html; charset=utf-8', true, 500); // 500 Internal Server Error
- $msg = 'エラー: ' . h($e->getMessage());
- } catch (RuntimeException $e) {
- // エラーメッセージ
- header('Content-Type: text/html; charset=utf-8', true, $e->getCode());
- $msg = 'エラー: ' . h($e->getMessage());
- }
- ?>
- <!DOCTYPE html>
- <html>
- <head>
- <title>...</title>
- </head>
- <body>
- <p><?=$msg?></p>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement