PHPのリロード対策

February 1, 2008,
tags: php リロード対策


このエントリーをはてなブックマークに追加

DBに書き込み処理したり、画像を投稿させたりいろいろとリロードされては困る場合が多いと思います。
そんなときは、ここの対策をするといいと思います。

いちおここにも書いておきます
##まずは確認画面での処理


<form action="complete.php" method="post">
<input name="ticket" type="hidden" value="<?= htmlspecialchars($_SESSION['ticket']), ENT_QUOTES); ?>" />

<input name="submit_button" value="完了画面へ遷移" type="submit" />

</form>

確認画面でチケットを発行し、セッションに保存。

``` if (isset($_POST[‘submit_button’], $_SESSION[‘ticket’], $_POST[‘ticket’]) && $_SESSION[‘ticket’] === $_POST[‘ticket’]) {

unset($_SESSION[‘ticket’]);

if (!$form->validation()) {

// 不正な値が入っていた場合は例外処理

header(“Location: http://{$_SERVER[‘HTTP_HOST’]}/top.php”);

exit;

}

// 1回しか行わない処理

$db->insert($form);

$mail->send();

}

// 登録完了画面出力

$tpl->display();```

このように、確認画面で発行されたチケットは一度使い切ってしまえば2度処理される事なくリロード対策となるわけ。

たしかに、便利。
ただ、これをクラス化してもいいと思う。

てか、Smarty側でもうちょっといじれそうな気がする。
その辺はまたいじってみよう。

理想としてはSmartyのテンプレート読み込みに行った時点でIDを発行させてセッションに食わせて、フォームのポスト先でセッション使ったチェックをするってのが理想か。

簡単そうだな。
Ethna使うとリロード対策も簡単にできるから便利だよなぁ。

comments powered by Disqus