前提・実現したいこと
PHP工房のメールフォームを使い、各雇用形態(正社員、パート、派遣)のフォームページを3つ作り、
完了メールのタイトルに回答したフォームの雇用形態名を取得し出力しようとしているのですが、うまくいきません。
ご教示いただけると幸いです。
よろしくお願いいたします。
該当のソースコード
fullTime.php, part.php, temp.php
php
1// 各雇用形態(正社員、パート、派遣)フォームページ 2<?php 3session_start (); 4$url = $_SERVER['REQUEST_URI']; 5$tmp = explode("/", $url); 6$term_slug = end($tmp); 7$_SESSION["job_type"] = $term_slug; 8?>
mail.php
php
1session_start(); 2 3// フォームページで取得した値を条件分岐 4if($_SESSION['job_type'] === "fullTime.php") { 5 $chk_hopetype = "正社員"; 6} elseif ($_SESSION['job_type'] === "part.php") { 7 $chk_hopetype = "パート"; 8} elseif ($_SESSION['job_type'] === "temp.php") { 9 $chk_hopetype = "派遣"; 10} else { 11 $chk_hopetype = "取得できていない"; 12} 13$test = $_SESSION['job_type']; 14var_dump($test);
試したこと
各雇用形態のフォームページでは、URLのファイル名を取得しセッションに格納しました。
格納した値を、mail.phpで条件分岐し出力分けをしたのですがNullで返ってきてしまい、かつ「ページ遷移が不正です」と画面上に表示されてしまいます。
下記はmail.php内の「ページ遷移が不正です」を表示させている実装部分です。
php
1if(($confirmDsp == 0 || $sendmail == 1) && $empty_flag != 1){ 2 3 //トークンチェック(CSRF対策)※確認画面がONの場合のみ実施 4 if($useToken == 1 && $confirmDsp == 0){ 5 if(empty($_SESSION['mailform_token']) || ($_SESSION['mailform_token'] !== $_POST['mailform_token'])){ 6 exit('ページ遷移が不正です'); 7 } 8 if(isset($_SESSION['mailform_token'])) unset($_SESSION['mailform_token']);//トークン破棄 9 if(isset($_POST['mailform_token'])) unset($_POST['mailform_token']);//トークン破棄 10 } 11 12 //差出人に届くメールをセット 13 if($remail == 1) { 14 $userBody = mailToUser($_POST,$dsp_name,$remail_text,$mailFooterDsp,$mailSignature,$encode); 15 $reheader = userHeader($refrom_name,$from,$encode); 16 $re_subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($re_subject,"JIS",$encode))."?="; 17 } 18 //管理者宛に届くメールをセット 19 $adminBody = mailToAdmin($_POST,$subject,$mailFooterDsp,$mailSignature,$encode,$confirmDsp); 20 $header = adminHeader($userMail,$post_mail,$BccMail,$to); 21 $subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($subject,"JIS",$encode))."?="; 22 23 //-fオプションによるエンベロープFrom(Return-Path)の設定(safe_modeがOFFの場合かつ上記設定がONの場合のみ実施) 24 if($use_envelope == 0){ 25 mail($to,$subject,$adminBody,$header); 26 if($remail == 1 && !empty($post_mail)) mail($post_mail,$re_subject,$userBody,$reheader); 27 }else{ 28 mail($to,$subject,$adminBody,$header,'-f'.$from); 29 if($remail == 1 && !empty($post_mail)) mail($post_mail,$re_subject,$userBody,$reheader,'-f'.$from); 30 } 31}
また、「ページ遷移が不正です」が表示される原因となる、mailform_tokenについて記載がある箇所が下記になります。
各雇用形態のフォームページにCSRF対策として、下記のコードを記載しております。
php
1<?php 2//CSRF対策用 3session_name('PHPMAILFORMSYSTEM'); 4session_start(); 5$token = sha1(uniqid(mt_rand(), true)); 6$_SESSION['mailform_token'] = $token; 7$html = '<input type="hidden" name="mailform_token" value="'.$token.'" />'; 8?>
mail.phpの方にトークンをセットするために下記のコードを記載しております。
php
1//確認画面の入力内容出力用関数 2function confirmOutput($arr){ 3global $hankaku,$hankaku_array,$useToken,$confirmDsp,$replaceStr; 4$html = ''; 5foreach($arr as $key => $val) { 6$out = ''; 7if(is_array($val)){ 8foreach($val as $key02 => $item){ 9//連結項目の処理 10if(is_array($item)){ 11$out .= connect2val($item); 12}else{ 13$out .= $item . ', '; 14} 15} 16$out = rtrim($out,', '); 17 18}else{ $out = $val; }//チェックボックス(配列)追記ここまで 19if(get_magic_quotes_gpc()) { $out = stripslashes($out); } 20$out = nl2br(h($out));//※追記 改行コードを<br>タグに変換 21$key = h($key); 22$out = str_replace($replaceStr['before'], $replaceStr['after'], $out);//機種依存文字の置換処理 23 24//全角→半角変換 25if($hankaku == 1){ 26$out = zenkaku2hankaku($key,$out,$hankaku_array); 27} 28if($key != 'type'){ 29$html .= "<tr><th>".$key."</th><td>".$out; 30$html .= '<input type="hidden" name="'.$key.'" value="'.str_replace(array("<br />","<br>"),"",$out).'" />'; 31$html .= "</td></tr>\n"; 32} 33} 34//トークンをセット 35if($useToken == 1 && $confirmDsp == 1){ 36$token = sha1(uniqid(mt_rand(), true)); 37$_SESSION['mailform_token'] = $token; 38$html .= '<input type="hidden" name="mailform_token" value="'.$token.'" />'; 39} 40 41return $html; 42}
回答1件
あなたの回答
tips
プレビュー