cfFormMailerの確認画面での戻るボタン

質問全般・改善要望
返信する
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

cfFormMailerの確認画面での戻るボタン

投稿記事 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ボタンと同じ)という現象が起こっています。
このあたり、何かご存じの方おられますか?
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

cfFormMailerの確認画面での戻るボタン

投稿記事 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()) {
に修正すると良いように思います。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
tktools
メンバー
メンバー
記事: 18
登録日時: 2020年8月17日(月) 09:13

cfFormMailerの確認画面での戻るボタン

投稿記事 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()) {
とすることで同等になると思います。
noka
メンバー
メンバー
記事: 94
登録日時: 2013年6月19日(水) 10:02

cfFormMailerの確認画面での戻るボタン

投稿記事 by noka »

こんにちは。

私の認識では、公式・作者・yamaさんを比較して、最もきちんとメンテナンスされているのは、yamaさんのフォークリポジトリ
https://github.com/yama/cfFormMailer
かなと思っています。

ご指摘の件、私も気づいて、github上でyamaさんにPRしてました・・・。
別件のバリデーションの不具合修正も入っていますので、今更ながら共有しておきます・・・。
https://github.com/yama/cfFormMailer/pu ... s%3Aclosed

とりいそぎ
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

cfFormMailerの確認画面での戻るボタン

投稿記事 by yama »

すみません、確認が遅くなりました。

https://github.com/yama/cfFormMailer/pull/2/files
よく把握できてないですが、上記のコミットで修正されてますでしょうか?
返信する