Advertisement
Guest User

Untitled

a guest
May 25th, 2014
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.03 KB | None | 0 0
  1. <?php
  2.  
  3. /* HTML特殊文字のエスケープ関数 */
  4. function h($str) {
  5.     return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
  6. }
  7.  
  8. /* $_POSTで受け取る項目の定義 */
  9. $params = array(
  10.     // アクション
  11.     'update', 'delete',
  12.     // テキスト
  13.     'uid', 'sid', 'name', 'email', 'passwd',
  14. );
  15.  
  16. /* $_POSTをローカル変数に展開 */
  17. foreach ($params as $v) {
  18.     $$v = (string)filter_input(INPUT_POST, $v);
  19. }
  20.  
  21. /* データベース関連の処理 */
  22. try {
  23.    
  24.     // データベースに接続
  25.     $pdo = new PDO(
  26.         'mysql:host=●●;dbname=●●;charset=utf8',
  27.         'ユーザー名',
  28.         'パスワード',
  29.         array(
  30.             // SQLエラー時にも例外をスローさせる
  31.             PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  32.             // PDOではなくMySQLの純正プリペアドステートメントを利用する
  33.             PDO::ATTR_EMULATE_PREPARES => false,
  34.         )
  35.     );
  36.    
  37.     // 更新時
  38.     if ($update) {
  39.         $stmt = $pdo->prepare('UPDATE `date` SET uid=?, name=?, email=?, passwd=? WHERE sid=?');
  40.         $stmt->execute(array($uid, $name, $email, $passwd, $sid));
  41.         if (!$stmt->rowCount()) {
  42.             throw new RuntimeException('対象が見つかりませんでした', 404); // 404 Not Found
  43.         }
  44.     }
  45.    
  46.     // 削除時
  47.     elseif ($delete) {
  48.         $stmt = $pdo->prepare('DELETE FROM `date` WHERE sid=?');
  49.         $stmt->execute(array($sid));
  50.         if (!$stmt->rowCount()) {
  51.             throw new RuntimeException('対象が見つかりませんでした', 404); // 404 Not Found
  52.         }
  53.     }
  54.    
  55.     // アクション未指定
  56.     else {
  57.         throw new RuntimeException('アクションが指定されていません', 400); // 400 Bad Request
  58.     }
  59.    
  60.     // リダイレクト
  61.     //   $_SERVER['HTTP_HOST'] や $_SERVER['PHP_SELF'] は
  62.     //   ユーザー側が任意の値を指定できたり、そもそも未定義だったりするのでエラーが発生するリスクあり。
  63.     //   それでもこの書き方をしたいのであれば念のため「@」でエラーを抑制。
  64.     @header('Location: ' . $url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/リダイレクト先のファイル名');
  65.    
  66.     // うまく遷移しないときのためのメッセージ
  67.     header('Content-Type: text/html; charset=utf-8');
  68.     $msg = sprintf('<a href="%1$s">%1$s</a>にリダイレクトしています...', h($url));
  69.    
  70. } catch (PDOException $e) {
  71.    
  72.     // エラーメッセージ
  73.     header('Content-Type: text/html; charset=utf-8', true, 500); // 500 Internal Server Error
  74.     $msg = 'エラー: ' . h($e->getMessage());
  75.  
  76. } catch (RuntimeException $e) {
  77.    
  78.     // エラーメッセージ
  79.     header('Content-Type: text/html; charset=utf-8', true, $e->getCode());
  80.     $msg = 'エラー: ' . h($e->getMessage());
  81.    
  82. }
  83.  
  84. ?>
  85. <!DOCTYPE html>
  86. <html>
  87.   <head>
  88.     <title>...</title>
  89.   </head>
  90.   <body>
  91.      <p><?=$msg?></p>
  92.   </body>
  93. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement