- 締切済み
phpでメール2重チェック機能をする方法
現在メールフォームを作成してまして、 どうしてもメールの2重チェックがうまくいかずご質問させていただきました。 (ちなみにphp勉強中で初心者です) 現在php内で入力したものがjsのチェック機能と連動して、 入力エラーを表示させるようにしました。 メールアドレス部分は、 //メールアドレス入力チェック if(document.mailform.mail.value==""){ window.alert('メールアドレスを入力してください'); return false; // 送信を中止 } //メールアドレス入力チェック if(document.mailform.mail_fix.value==""){ window.alert('確認用メールアドレスを入力してください'); return false; // 送信を中止 } // PCメールアドレスチェック if(document.mailform.mail.value != "" ){ if (!document.mailform.mail.value.match(/^[A-Za-z0-9.-]+[\w-]+@[\w\.-]+\.\w{2,}$/)){ window.alert('メールアドレスをご確認ください'); document.mailform.mail.focus(); return false; // 送信を中止 } ここまで作成し、入力エラーまではでるようになりました。 ただ2重チェックがうまくいかず困っています。。。 ifelseというのでやるようなのですが、、、 わからなくなったので是非教えていただけますでしょうか。 よろしくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- agunuz
- ベストアンサー率65% (288/438)
>記述しなかったのはPHP側に >if ( $mail !== $mailFix ) { >$msg = 'メールアドレスと確認用メールアドレスが一致しません。'; >exit; >です。 JavaScriptでのチェックをくぐり抜けてきたときのための記述ですから、普通にデバッグしていたら「なくても動く」部分ですね。ただしJavaScriptのチェックは絶対ではないので、php側のチェックを省いていい理由にはなりません。JavaScriptを無効にしてチェックすべきです。 一般的にはphp側のチェックが「主」でJavaScriptは「従」です。送信前にチェックする方がユーザインタフェイスとしては好ましいのでJavaScriptでのチェックを行うのはかまいませんが、phpでチェックしなくていい理由にはなりません。基本的にphp側ではJavaScriptよりも厳密にチェックすべきです。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 >既存のメールフォームをカスタマイズしながらやってまして、 >値を取得する部分、エラーチェックの部分というのがどこの箇所かよくわかってなくてすみません。。。 うまくいったというのが確認用との比較でしたら、どこかに記述があるはずです。 メッセージ等で検索し、どこでそれが実行されているか確認してください。 全体を把握しないでカスタマイズするのは良くありません。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 >$mail = $_POST['mail']; >$mail_fix = $_POST['mail_fix']; >などと記述してますが、 >ご指示いただいたものは記述なしでも何故かうまくいきました?? >一応書いておいたほうが良いのでしょうか? 記述していないというのはどの部分でしょうか? >とりあえずうまくいってるので問題はないのですが、 >よろしければ勉強のためにアドバイスいただけると幸いです。 プログラムは曖昧な動作はしません、書いたとおりに動きます。 うまくいっていると判断する材料がわからないのでなんとも言えません。 php側の値を取得する部分、エラーチェックの部分について提示頂ければ的確なアドバイスが可能だと思います。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 >フォームによくある、 >・メールアドレス >・メールアドレス(確認用) >のことです。 >ですので2つの入力比較になるんでしょうか。。。 それであれば、メール形式のチェックの後に if ( document.mailform.mail.value !== document.mailform.mail_fix.value ) { window.alert('メールアドレスと確認用メールアドレスが一致しません。'); return false; // 送信を中止 } とすれば、JavaScript上でのチェックは行えます。 php側はどのように書いてるかわかりませんが、 >未記入だと「メールアドレスを入力してください」と警告文が次のページででるようになったので、 >同じように一致してないと「メールアドレスが一致してません」とでるようにしたいです。 未記入だと「メールアドレスを入力してください」としている部分と同様にして、判定の条件を変えれば良いです。 $mail = $_POST['mail']; $mailFix = $_POST['mail_fix']; if ( $mail !== $mailFix ) { $msg = 'メールアドレスと確認用メールアドレスが一致しません。'; exit; } のようなイメージです。 (入力値の精査等は省略していますので、現在の実装形式にあわせてください)
補足
早速のお返事ありがとうございます。 JS側に追記しましたところうまくいきました!! PHP側には $mail = $_POST['mail']; $mail_fix = $_POST['mail_fix']; などと記述してますが、 ご指示いただいたものは記述なしでも何故かうまくいきました?? 一応書いておいたほうが良いのでしょうか? とりあえずうまくいってるので問題はないのですが、 よろしければ勉強のためにアドバイスいただけると幸いです。 何卒よろしく御願いいたします。
- LancerVII
- ベストアンサー率51% (1060/2054)
こんにちは。 質問者様の言う二重チェックとはどのような動作でしょうか。 使用されたメールは利用できない 二つの入力を比較する クライアント側とサーバ側でチェックする 詳しい仕様を補足ください。
補足
投稿ありがとうございます!! 二重チェックというのは、 フォームによくある、 ・メールアドレス ・メールアドレス(確認用) のことです。 ですので2つの入力比較になるんでしょうか。。。 未記入だと「メールアドレスを入力してください」と警告文が次のページででるようになったので、 同じように一致してないと「メールアドレスが一致してません」とでるようにしたいです。 説明足らずですみません。。。 何卒よろしく御願いいたします。
補足
度々ありがとうございます。 記述した部分はjs側に if ( document.mailform.mail.value !== document.mailform.mail_fix.value ) { window.alert('メールアドレスと確認用メールアドレスが一致しません。'); return false; // 送信を中止 } 記述しなかったのはPHP側に if ( $mail !== $mailFix ) { $msg = 'メールアドレスと確認用メールアドレスが一致しません。'; exit; です。 PHP側ですが、フォーム入力ページ、確認ページ(この内容でよろしいですかというページ)と、送信完了ページが、1つのファイル内にあります。 ■以下の記述からはじまりまして、 <? $form = $_GET['form']; session_cache_limiter('private'); //エンコーディングの設定 mb_language('ja'); mb_internal_encoding('EUC-JP'); ?> フォームの前には以下のように記述しました。 <form name="mailform" action="entry.php" method="post" onSubmit="return Mcheck()" class="long"> ■フォーム入力ページのあと(</body></html>で閉じたあと) $mail = $_POST[mail]; $mail_fix = $_POST[mail_fix]; if ($_POST['○○_form'] == 1){ ?> というのがあり、その下にフォーム内が以下の記述にかわったものがございます。 <dl> <dt>メール<span class="red">*</span></dt> <dd><?=$mail?></dd> </dl> <dl> <dt>メールアドレス(確認用)<span class="red">*</span></dt> <dd><?=$mail_fix?></dd> </dl> その後以下のようなものがあり、 <input name="mail" type="hidden" value="<?=$mail?>"/> <input name="mail_fix" type="hidden" value="<?=$mail_fix?>"/> ■そのあと(また</body></html>で閉じたあと) (完了ページ) $mail = $_POST[mail]; $mail_fix = $_POST[mail_fix]; if ($_POST['○○_form'] == 1){ ?> をまた記述となりbodyタグで閉じられてます。 既存のメールフォームをカスタマイズしながらやってまして、 値を取得する部分、エラーチェックの部分というのがどこの箇所かよくわかってなくてすみません。。。 何卒よろしく御願いいたします。