• 締切済み

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というのでやるようなのですが、、、 わからなくなったので是非教えていただけますでしょうか。 よろしくお願いいたします。

  • PHP
  • 回答数5
  • ありがとう数1

みんなの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.5

>記述しなかったのはPHP側に >if ( $mail !== $mailFix ) { >$msg = 'メールアドレスと確認用メールアドレスが一致しません。'; >exit; >です。 JavaScriptでのチェックをくぐり抜けてきたときのための記述ですから、普通にデバッグしていたら「なくても動く」部分ですね。ただしJavaScriptのチェックは絶対ではないので、php側のチェックを省いていい理由にはなりません。JavaScriptを無効にしてチェックすべきです。 一般的にはphp側のチェックが「主」でJavaScriptは「従」です。送信前にチェックする方がユーザインタフェイスとしては好ましいのでJavaScriptでのチェックを行うのはかまいませんが、phpでチェックしなくていい理由にはなりません。基本的にphp側ではJavaScriptよりも厳密にチェックすべきです。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.4

こんにちは。 >既存のメールフォームをカスタマイズしながらやってまして、 >値を取得する部分、エラーチェックの部分というのがどこの箇所かよくわかってなくてすみません。。。 うまくいったというのが確認用との比較でしたら、どこかに記述があるはずです。 メッセージ等で検索し、どこでそれが実行されているか確認してください。 全体を把握しないでカスタマイズするのは良くありません。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 >$mail = $_POST['mail']; >$mail_fix = $_POST['mail_fix']; >などと記述してますが、 >ご指示いただいたものは記述なしでも何故かうまくいきました?? >一応書いておいたほうが良いのでしょうか? 記述していないというのはどの部分でしょうか? >とりあえずうまくいってるので問題はないのですが、 >よろしければ勉強のためにアドバイスいただけると幸いです。 プログラムは曖昧な動作はしません、書いたとおりに動きます。 うまくいっていると判断する材料がわからないのでなんとも言えません。 php側の値を取得する部分、エラーチェックの部分について提示頂ければ的確なアドバイスが可能だと思います。

yoshiko_php
質問者

補足

度々ありがとうございます。 記述した部分は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タグで閉じられてます。 既存のメールフォームをカスタマイズしながらやってまして、 値を取得する部分、エラーチェックの部分というのがどこの箇所かよくわかってなくてすみません。。。 何卒よろしく御願いいたします。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 >フォームによくある、 >・メールアドレス >・メールアドレス(確認用) >のことです。 >ですので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; } のようなイメージです。 (入力値の精査等は省略していますので、現在の実装形式にあわせてください)

yoshiko_php
質問者

補足

早速のお返事ありがとうございます。 JS側に追記しましたところうまくいきました!! PHP側には $mail = $_POST['mail']; $mail_fix = $_POST['mail_fix']; などと記述してますが、 ご指示いただいたものは記述なしでも何故かうまくいきました?? 一応書いておいたほうが良いのでしょうか? とりあえずうまくいってるので問題はないのですが、 よろしければ勉強のためにアドバイスいただけると幸いです。 何卒よろしく御願いいたします。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 質問者様の言う二重チェックとはどのような動作でしょうか。 使用されたメールは利用できない 二つの入力を比較する クライアント側とサーバ側でチェックする 詳しい仕様を補足ください。

yoshiko_php
質問者

補足

投稿ありがとうございます!! 二重チェックというのは、 フォームによくある、 ・メールアドレス ・メールアドレス(確認用) のことです。 ですので2つの入力比較になるんでしょうか。。。 未記入だと「メールアドレスを入力してください」と警告文が次のページででるようになったので、 同じように一致してないと「メールアドレスが一致してません」とでるようにしたいです。 説明足らずですみません。。。 何卒よろしく御願いいたします。

関連するQ&A

  • フォームのチェックについて

    今、フォームの送信ボタンを押すとチェックする 関数を作成しております。 function restChar() { if(10000 < document.F1.ご質問内容.value.length) window.alert("ご質問内容は全角5,000字以内でお願いします"); } function check(){ var flag = 0; if(document.F1.name.value == ""){ // 「お名前」の入力をチェック flag = 1; } else if(document.F1.kana.value == ""){ // 「パスワード」の入力をチェック flag = 2; } else if(document.F1.mail.value == ""){ // 「コメント」の入力をチェック flag = 3; }      else if(document.F1.ご質問内容.value == ""){ // 「コメント」の入力をチェック flag = 4; } if(flag == 1){ window.alert('お名前を入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } if(flag == 2){ window.alert('フリガナを入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } if(flag == 3){ window.alert('メールアドレスを入力してください'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 }      if(flag == 4){ window.alert('ご質問内容を入力して下さい'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } fOBJ = document.F1.mail.value; check = /.+@.+\..+/; if (!fOBJ.match(check)){ window.alert("メールアドレスが正しくありません"); return false; // 送信を中止 } fOBJ = document.F1.ご質問内容.value.length; if(10000 < fOBJ){ window.alert("ご質問内容は全角5,000字以内でお願いします"); return false; // 送信を中止 } return true; // 送信を実行 } こんな感じです。 1-4のチェックは問題ないのですが、 アドレスと文字数のチェックは、一度は ダイアログがでますが、連続で押すと通ってしまいます。 何がわるいのでしょうか?

    • ベストアンサー
    • Java
  • メールアドレスの入力チェックをして、正しくなければ戻る方法

    今、フォームを作っているところなのですが、 各必須事項は入力されていないと戻るように設定していますが、同じ形でメールアドレスもチェックしたいのですが、その際にxxx@***.xxxという正規の形でないと引っ掛かるようにしたいのですが、どうすればよいでしょうか?お分かりの方、是非教えてください。 よろしくお願いします。 -------------------------------------------- 現在のスクリプトは以下のような感じです。 これでは、大文字などでメールアドレスを入れられてもチェックを通してしまいますので。。 function check(){ if(document.FF.お名前_漢字.value == ""){ alert("お名前_漢字を入力してください"); document.FF.お名前_漢字.focus(); return(false); } if(document.FF.住所.value == ""){ alert("住所を入力してください"); document.FF.住所.focus(); return(false); } if(document.FF.email.value == ""){ alert("メールアドレスを入力してください"); document.FF.email.focus(); return(false); } return(true); } -------------------------------------------- そして送信ボタンを押すと、このスクリプトが働くように、 onSubmit="return check()" を設定しています。

  • 一括で入力のチェックをしたいのです!

    どなたか教えてください・・・ フツー入力チェックを行う場合 <SCRIPT language="JavaScript"> <!-- function Check(){ if(document.myform.Name.value==""){ alert("名前を入力してください。"); return false; } if(document.myform.Email.value==""){ alert("Eメールアドレスを入力してください。"); return false; } if(document.myform.Email.value.indexOf("@")<=0){ alert("Eメールアドレスが正しくありません。"); return false; } if(document.myform.Comment.value==""){ alert("コメントを入力してください。"); return false; } return true; } // --> </SCRIPT> こんなカンジで各フォーム毎にチェックを行い メッセージを出したりすると思うのですが、 フォーム数が多いため、入力のチェックを 一括で行いたいのですが・・・ JavaScriptを始めて間もないため とんちんかんな質問をしている様でしたら すみません。 どなたか入力チェックを一括で出来る方法を 教えて頂けないでしょうか・・・ お願いします。

  • 入力チェックをしたいです。

    結構初心者です。 フォームに入力された内容をチェックしたいので、まず下記のように書きました。 <script Language="JavaScript"> <!-- function submitCheck(){ var flag = 0; // 設定開始(必須にする項目を設定します) if(document.insert.MatterID.value == ""){ flag = 1; } else if(document.insert.name.value == ""){ flag = 1; } else if(document.insert.Correspondencedate.value == ""){ flag = 1; } if(flag){ window.alert('必須項目に未入力があります。'); // チェックされていない場合は警告ダイアログを表示 return false; // 送信を中止 } else{ return true; // 送信を実行 } } --> </script> で、これにチェックボックスの入力チェックも含めたいのですが、ただ else if(document.insert.bld_ReceiptNo.checked){ flag = 1; } こうするだけではダメなのですね;; どうすればいいかお知恵を拝借できませんでしょうか。

  • お問い合わせフォームの送信後クリア

    はじめてお問い合わせフォームを作りました。、 送信後、その入力内容をクリアしたいのですが、 どなたか教えていただけませんでしょうか? 現在、下記のような感じで、チェック後送信としています。 function check(){ var flag = 0; if(!document.form1.mail.value.match(/.+@.+\..+/)){ flag = 1; } if(flag){ window.alert('メールアドレスが正しくありません'); return false; // 送信を中止 } else{ return true; // 送信を実行 } } <FORM name="form1" method="post" action="id?Subject=Page_enquete" onSubmit="return check()">

    • ベストアンサー
    • CSS
  • メールフォームの未入力チェック ラジオボタンの場合

    メールフォームに、」ラジオボタンでA~Eの項目があります。これを仮に”koumoku”という名前をつけたとして、最初にはどこにもチェックを入れない状態で表示したいと思います。 それで、A~Eのどれかを必ず選択してもらいたいので送信前に未入力の場合にはアラーとを出したいのですが、 if(document.mail.Koumoku.value!='checked'){ window.alert('未入力個所があります。\nご確認ください。'); return false; } にすると、チェックしてもアラーとがでてきます。 また !='chekced' を =='' にすると、チェックが無くても通ってしまいます。 どうしたら良いのでしょうか?

  • フォームで複数の関数を1つにまとめる方法

    フォームに関して、必須項目が未入力・未選択の場合に警告する JavaScriptを記述したいのですが、 複数のJavaScriptを1つにまとめるにはどうしたら良いのでしょうか。 具体的には、 【1】テキストフィールド未入力の場合に警告する 【2】メールアドレスが間違いor未入力の場合に警告する 【3】セレクトボックスが未選択の場合に警告する という3つを同じページで同時に設定する方法が分かりません。 記述した内容は下記の通りです。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【1】 <script type="text/javascript"> <!-- function check(){ var flag = 0; // 設定開始(必須にする項目を設定してください) if(document.form1.field1.value == ""){ // 「お名前」の入力をチェック flag = 1; } else if(document.form1.field2.value == ""){ // 「ご住所」の入力をチェック flag = 1; // 設定終了 if(flag){ window.alert('必須項目に未入力がありました'); // 入力漏れがあれば警告ダイアログを表示 return false; // 送信を中止 } else{ return true; // 送信を実行 } } // --> </script> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【2】 <script type="text/javascript"> <!-- function check(){ var flag = 0; // 設定開始(チェックする項目を設定してください) if(!document.form1.email.value.match(/.+@.+\..+/)){ flag = 1; } // 設定終了 if(flag){ window.alert('メールアドレスが正しくありません'); // メールアドレス以外が入力された場合は警告ダイアログを表示 return false; // 送信を中止 } else{ return true; // 送信を実行 } } // --> </script> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【3】 <script type="text/javascript"> <!-- function check(){ var flag = 0; // 設定開始(チェックする項目を設定してください) if(document.form1.select1.options[document.form1.select1.selectedIndex].value == ""){// 「地域」の入力をチェック flag = 1; } else if(document.form1.select2.options[document.form1.select2.selectedIndex].value == ""){ // 「生年月」の入力をチェック flag = 1; } else if(document.form1.select3.options[document.form1.select3.selectedIndex].value == ""){ // 「生年日」の入力をチェック flag = 1; } // 設定終了 if(flag){ window.alert('選択されていません'); // 選択されていない場合は警告ダイアログを表示 return false; // 送信を中止 } else{ return true; // 送信を実行 } } // --> </script> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【本文】 <form name="form1" onSubmit="return check()"> ■お名前:<input type="text" name="field1" size="30" style="ime-mode:active;"> ■メールアドレス:<input type="text" name="email" size="30" style="ime-mode:inactive;"> ■地域: <select name="select1"> <option value="北海道">北海道</option> <option value="青森県">青森県</option> ・ ・ </select> ■ご住所<input type="text" name="field3" size="60" style="ime-mode:active;"> ■生年月日 <select name="select2"> <option>1</option> <option>2</option> ・ ・ </select>月 <select name="select3"> <option>1</option> <option>2</option> ・ ・ </select>日 </form> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ JavaScriptの記述経験が殆ど無いため、 出来る限り詳しくご教示願いたく、 よろしくお願い致します!

  • メールフォームの入力不備をアラートで知らせる順序は?

    ホームページを作っています。 メールフォームもあるのですが、入力不備があったときアラートで知らせるようにJavascriptで書きました。名前や住所などはちゃんとアラートがでるのですが、メール入力の項目だけはうまくいきません。単体で試すとうまくいくのですが、他の項目と組み合わせると全部のアラートがでないで送信となるか、メールの項目が出ないで送信となります。 if (document.Formp.mail.value.match(/\w+@\w+/)) return true; alert("正しいメールアドレスを入力してください"); return false; をどの位置に書けばうまくいくのでしょうか?

  • アラーと表示がうまくいきません

    <SCRIPT LANGUAGE="JavaScript"> <!-- function aaa(){ if(document.a.ADD01.selectedIndex==0){ alert("カテゴリを選んで下さい。");document.a.ADD01.focus();return false; }else if(document.a.EMAIL.value=="" &&document.a.TEL.value==""){ alert("メールアドレスか電話番を入力して下さい。"); document.a.EMAIL.focus(); return false; }else{ return true;} } // --> </SCRIPT> 上記の「メールアドレスか電話番号を入力して下さい。」のアラートを「メールアドレスを入力して下さい。」に変えたいのですが(document.a.EMAIL.value=="" && document.a.TEL.value=="")のどの部分までを消していいのか分かりません。

  • 半角英数字のみの入力にエラーを返すには

    運営しているサイトに設置したコメントフォームからスパムがたくさん送信されてきます。 その対策として、「氏名のよみがな」入力欄が半角英数字のみの入力の場合にはアラートを出して投稿できないようにしたいです。 下記のようなJSを使用していますが、 if (!kana) { alert('氏名のよみがなを入力してください。'); return false; } の部分を変更して「半角英数字しか入力されていない場合、アラートを返す」ようにするには、どうしたら良いでしょうか? htmlの文字コードはShift_JISです。 よろしくお願いします。 function postComment { var name = eval('document.name.value'); var kana = eval('document.kana.value'); var email = eval('document.email.value'); var comment = eval('document.comment.value'); sum++; if (!name) { alert('氏名を入力してください。'); return false; } else { if (!kana) { alert('氏名のよみがなを入力してください。'); return false; } else { if (!email) { alert('メールアドレスを入力してください。'); return false; } else { if (!comment) { alert('コメントを入力してください。'); return false; } else { var confirm_text = '以下の内容で送信します\n' + 氏名:' + name + '\n よみがな:' + kana + '\n メール:' + email + '\n 本文:' + comment; if (!confirm(confirm_text)) { return false; } else { alert('コメントを送信しました。'); } } } } } }

専門家に質問してみよう