ページ 1 / 1
cfFormMailerの確認画面での戻るボタン
Posted: 2020年12月03日(木) 15:01
by kazuike
cfFormMailerの確認画面では、
コード: 全て選択
<button type="submit" name="return" class="btn btn_reset" value="入力ページへ戻る">入力ページへ戻る</button>
のような「name="return"」のsubmitボタンで入力画面に戻る仕様のはずですが、
最新のcfFormMailer(バージョンがよくわからないのですが、class.cfFormMailer.inc.phpは1.6です)では、
この戻るボタンでも、普通に送信されてしまう(「name="send"」のsubmitボタンと同じ)という現象が起こっています。
このあたり、何かご存じの方おられますか?
cfFormMailerの確認画面での戻るボタン
Posted: 2020年12月03日(木) 15:32
by kazuike
おそらく、「assets/snippets/cfFormMailer/bootstrap.php」のバグのようです。
以下のコードで、「$pageType = 'return';」と判定したにもかかわらず、
そのまま下の送信の処理に進んでしまっています。
コード: 全て選択
if ($_POST['_mode'] === 'conf') {
$pageType = ($mf->validate()) ? 'conf' : 'error';
} elseif ($_POST['_mode'] === 'send') {
if ($_POST['return']) {
if (!$mf->validate()) {
return $mf->raiseError('未知のエラーです');
}
$pageType = 'return';
}
if ($mf->validate()) {
if ($mf->isMultiple()) return $mf->raiseError('すでに送信しています');
if (!$mf->isValidToken()) return $mf->raiseError('画面遷移が正常に行われませんでした');
if (!$mf->sendMail()) return $mf->raiseError($mf->getError());
$mf->storeDataInSession();
$mf->storeDB();
$pageType = 'comp';
} else {
$pageType = 'error';
}
} else {
$pageType = 'input';
}
とりあえず、
コード: 全て選択
if ($mf->validate()) {
を
コード: 全て選択
elseif ($mf->validate()) {
に修正すると良いように思います。
cfFormMailerの確認画面での戻るボタン
Posted: 2020年12月07日(月) 10:09
by tktools
木下です。
github で公開されているコードを確認してみましたが
以前のバージョンではActionをswitch caseで判別していて下記のようになっています。
コード: 全て選択
/**
* Action
*/
switch($_POST['_mode']) {
case 'conf':
$pageType = ($mf->validate()) ? 'conf' : 'error';
break;
case 'send':
if ($_POST['return']) {
if (!$mf->validate()) {
return $mf->raiseError('未知のエラーです');
}
$pageType = 'return';
break;
}
if ($mf->validate()) {
if ($mf->isMultiple()) return $mf->raiseError('すでに送信しています');
if (!$mf->isValidToken()) return $mf->raiseError('画面遷移が正常に行われませんでした');
if (!$mf->sendMail()) return $mf->raiseError($mf->getError());
$mf->storeDataInSession();
$mf->storeDB();
$pageType = 'comp';
}
else {
$pageType = 'error';
}
break;
default:
$pageType = 'input';
}
コード: 全て選択
$pageType = 'return';
の下には
が入っているので処理はswitch文の最後まで飛んでいるので
提案されているように
コード: 全て選択
elseif ($mf->validate()) {
とすることで同等になると思います。
cfFormMailerの確認画面での戻るボタン
Posted: 2020年12月08日(火) 13:11
by noka
こんにちは。
私の認識では、公式・作者・yamaさんを比較して、最もきちんとメンテナンスされているのは、yamaさんのフォークリポジトリ
https://github.com/yama/cfFormMailer
かなと思っています。
ご指摘の件、私も気づいて、github上でyamaさんにPRしてました・・・。
別件のバリデーションの不具合修正も入っていますので、今更ながら共有しておきます・・・。
https://github.com/yama/cfFormMailer/pu ... s%3Aclosed
とりいそぎ
cfFormMailerの確認画面での戻るボタン
Posted: 2021年4月25日(日) 12:29
by yama
すみません、確認が遅くなりました。
https://github.com/yama/cfFormMailer/pull/2/files
よく把握できてないですが、上記のコミットで修正されてますでしょうか?