ページ 11

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'; 
の下には

コード: 全て選択

break;
が入っているので処理は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
よく把握できてないですが、上記のコミットで修正されてますでしょうか?