前提
WordPressでサイトを作成中です。
プラグインを使わず、自作でメールフォームを作成しようとしています。
入力画面→確認画面→サンクスページ
としたいです。
確認画面からサンクスページの遷移の段階で、$_POST['token']がNULLになって不正アクセスと認識され、困っています。
実現したいこと
- [ ] 入力画面から確認画面への遷移段階で、データを保持したい
- [ ] 確認画面から戻るボタンを押した時に、データを保持した状態でフォーム部分に戻りたい
- 確認画面から送信ボタンを押してThanksページに飛んだ時に、お問い合わせ内容がメールで届くようにしたい
発生している問題・エラーメッセージ
- サンクスページへ遷移段階で、トークンがNULLになって不正アクセスとされています。
サンクスページにて、以下で変数を確認したところ、$_SESSIONは取れてるのですが、$_POSTがNULLでした。
var_dump($_SESSION['key']);
var_dump($_POST['token']);
該当のソースコード
### confirm.php
PHP
1<?php 2session_start(); 3//クリックジャッキングへの対策 4header('X-Frame-Options: DENY'); 5//フォームを経ずにこのページに直接アクセスした場合は拒否する 6if(!isset($_POST['token'])) { 7 echo '不正なアクセスの可能性があります'; 8 exit; 9} 10 11//フォームに入力された値のエスケープ処理 12function e($str) { 13 return htmlspecialchars($str, ENT_QUOTES|ENT_HTML5, 'UTF-8'); 14} 15 16//入力内容を$_SESSIONに格納する 17$_SESSION['contact-name'] = e($_POST['contact-name']); 18$_SESSION['contact-mail'] = e($_POST['contact-mail']); 19$_SESSION['contact-tel'] = e($_POST['contact-tel']); 20$_SESSION['contact-affiliation'] = e($_POST['contact-affiliation']); 21$_SESSION['contact-about'] = e($_POST['contact-about']); 22$_SESSION['contact-detail'] = e($_POST['contact-detail']); 23?> 24 25<table> 26 〜〜〜〜〜〜〜〜中略〜〜〜〜〜〜〜〜 27 </table> 28 29<form action="thanks" method="post"> 30 <div class="confirm-btn"> 31 <!-- 入力フォームから送られてきたトークンを次のページに引き継ぐ --> 32 <input type="hidden" name="token" value="<?= $_POST['token'] ?>"> 33 <a href="#" onclick="window.history.back(); return false;"><span>戻る</span></a> 34 <button type="submit" value="送信"><span>送信</span></button> 35 </div> 36</form>
### thanks.php
PHP
1<?php 2session_start(); 3 4//クリックジャッキングへの対策 5header('X-Frame-Options: DENY'); 6 7//フォームを経ずにこのページに直接アクセスした場合は拒否する 8if(!isset($_POST['token'])) { 9 echo '不正なアクセスの可能性があります'; 10 exit; 11} 12 13//キーとトークンが一致したら管理者に入力内容がメールで送られる 14if($_SESSION['key'] === $_POST['token']) { 15 $name = $_SESSION['contact-name']; 16 $mail = $_SESSION['contact-mail']; 17 $tel = $_SESSION['contact-tel']; 18 $affiliation = $_SESSION['contact-affiliation']; 19 $contact_about = $_SESSION['contact-about']; 20 $contact_detail = $_SESSION['contact-detail']; 21 22 〜〜〜〜〜〜〜〜中略〜〜〜〜〜〜〜〜 23} 24?> 25<h2>CONTACT<span>送信完了</span></h2> 26 27 <h3>送信いたしました</h3> 28 29 <p class="thanks-txt"> 30 送信完了 31 </p> 32 33 <div class="return-btn"> 34 <a href="<?php echo esc_url( home_url( '/' ) ); ?>"><span>トップページへ戻る</span></a> 35 </div>
回答1件
あなたの回答
tips
プレビュー