なので、使うときは考慮してね。
<?php
$act = isset($_POST['act']) ? $_POST['act'] : 'init';
$data = isset($_POST['data']) ? $_POST['data'] : '';
$ticket = '';
session_start();
// 初期化処理
if ($act == 'init') {
$act = 'check';
}
// チェック処理
else if (($act == 'check') || ($act == 'regist')) {
if (チェック処理正常) {
$act = 'regist';
$ticket = time();
$_SESSION['ticket'] = $ticket;
}
// 登録処理
else {
// 2重ポスト時
if (empty($_SESSION['ticket'])) {
// 2重ポストされたときの処理
}
// 不正なポスト時
else if ($ticket != $_SESSION['ticket']) {
// 不正な処理
}
// 正常なポスト時
else {
// 先にチケットを空にする
unset($_SESSION['ticket']);
// 登録処理
if (登録処理正常) {
header("Location: 登録完了ページのURL", true, 303);
exit();
}
else {
}
}
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>sample</title>
<meta name="keywords" content="">
<meta name="description" content="">
</head>
<body>
<form method="post">
<input type="text" name="data" value="<?php echo $data ?>">
<input type="submit" value="<?php echo $caption ?>">
<input type="hidden" name="ticket" value="<?php echo $ticket ?>">
<input type="hidden" name="act" value="<?php echo $act ?>">
</form>
</body>
</html>