質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • PHP

    23494questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • JavaScript

    19821questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML

    11087questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

【PHP JavaScript】google reCAPTCHA v3がうまく導入できません。

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 64

Masa-Y

score 3

自作のメールフォームに、
スパム防止のためにreCAPTCHA v3を入れてみたのですが、
うまく機能しません。
お詳しい方、ご教示いただくと大変助かります。

構造は、
index.phpでメールフォームに入力
→confirm.phpに遷移して内容確認できたら送信ボタンクリック
→「送信しました」の画面に切り替わる仕組みです。

インターネットの情報を頼りに丸一日かけて試みたのですが、
知識がまだ浅く、うまくいきません。
特にわからない箇所は、最後に分けて添付しました。
こちらをどのように組み込めばいいか教えていただきたいです。

初歩的なご質問で恐縮ですが、お力をお貸しください。

【index.php】

<?php
  define('SITE_KEY', 'サイトキー');
?>
<!DOCTYPE html>
<html lang="ja">
  <head>
    <title>タイトル1</title>
中略
    <!-- reCAPTCHA v3 -->
    <script src="https://www.google.com/recaptcha/api.js?render=<?php echo SITE_KEY; ?>"></script>
    <script>
    grecaptcha.ready(function() {
        grecaptcha.execute('<?php echo SITE_KEY; ?>', {action:'homepage'}).then(function(token) {
          var recaptchaResponse = document.getElementById('recaptchaResponse');
          recaptchaResponse.value = token;
        });
    });
    </script>
  </head>

  <body>
    <header>
中略
    </header>
    <main>
中略
      <section class="contact_form py-5">
        <div class="container" id="target_point">
          <h1 class="bolder pb-3">以下のフォームにご記入いただき、<span class="inlineblock">「送信ボタン」をクリックしてください。</h1>
          <p class="small text-dimgray text-center">※必要な場合をのぞいて、こちらから何度もメール<span class="inlineblock">することはございませんので、ご安心ください。<span class="inlineblock"></span></p>
        </div>
        <div class="contact_form_wrapper px-3">
          <form action="confirm.php" method="post">
            <div class="form_flex">
              <div class="form_titles">
                <label for="name">お名前<span class="required">必須</span></label>
              </div>
              <div>
                <input type="text" id="name"  class="flex-1" name="name" placeholder="山田太郎" required/>
              </div>
            </div>

            <div class="form_flex">
              <div class="form_titles">
                <label for="job">ご職業 <span class="required">必須</span></label>
              </div>
              <div class="job_checkboxes">
中略
              </div>
            </div>

            <div class="form_flex">
              <div class="form_titles">
                <label for="mail">メールアドレス<span class="required">必須</span></label>
              </div>
              <div>
                 <input id="mail"  class="flex-1" type="email" name="mail" placeholder="example@mail.jp" required/>
              </div>
            </div>

            <div class="form_flex">
              <div class="form_titles">
                  <label for="comment">その他</label>
              </div>
              <div>
                 <textarea id="comment"  class="flex-1" type="textarea" rows="5" name="message" placeholder="疑問点などがございましたらご記入ください"></textarea>
              </div>
            </div>

            <div class="btn_wrapper">
              <div class="submit">
                <input type="submit" name="confirm" value="入力内容を確認する" />
              </div>
              <div class="reset">
                <input type="reset" value="リセット" />
             </div>
            </div>
            <input type="hidden" name="recaptchaResponse" id="recaptchaResponse">
          </form>
        </div>
      </section>


    </main>
中略
  </body>
</html>
【confirm.php】

<?php
  $page_flag = 0;

  if( !empty($_POST['confirm']) ) {

    $page_flag = 1;

    if (isset($_POST['job']) || is_array($_POST['job'])) {
      $your_job = implode("、", $_POST["job"]);
    }


  } elseif( !empty($_POST['submit']) ) {

    $page_flag = 2;

    // 変数とタイムゾーンを初期化
    $header = null;
    $auto_reply_subject = null;
    $auto_reply_text = null;

    $admin_reply_subject = null;
    $admin_reply_text = null;

    date_default_timezone_set('Asia/Tokyo');


    /*--------- 自動メール送信 ---------*/
    // ヘッダー情報を設定
    $header = "MIME-Version: 1.0\n";
    $header .= "From: TEST <noreply@test.com>\n";
    $header .= "Reply-To: TEST <noreply@test.com>\n";

    // 件名を設定
    $auto_reply_subject = '【自動返信テスト】お問い合わせありがとうございます。';
    // 本文を設定
    $auto_reply_text = "この度は、お問い合わせ頂き誠にありがとうございます。\n下記の内容でお問い合わせを受け付けました。\n\n";
    $auto_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n";
    $auto_reply_text .= "お名前:" . $_POST['name'] . "\n";
    $auto_reply_text .= "メールアドレス:" . $_POST['mail'] . "\n";
    $auto_reply_text .= "ご職業:" . $_POST['job'] . "\n\n";
    $auto_reply_text .= "その他:" . $_POST['message'] . "\n\n";
    $auto_reply_text .= "2営業日中に担当より返信させていただきますので、しばらくお待ちください。\n";
    $auto_reply_text .= "〇〇◯事務局";

    // メール送信
    mb_send_mail( $_POST['mail'], $auto_reply_subject, $auto_reply_text, $header);


        /*--------- 運営側にお知らせ ---------*/
    // 運営側へ送るメールの件名
    $admin_reply_subject = "お問い合わせを受け付けました";

    // 本文を設定
    $admin_reply_text = "下記の内容でお問い合わせがありました。\n\n";
    $admin_reply_text .= "お問い合わせ日時:" . date("Y-m-d H:i") . "\n";
    $admin_reply_text .= "お名前:" . $_POST['name'] . "\n";
    $admin_reply_text .= "メールアドレス:" . $_POST['mail'] . "\n";
    $admin_reply_text .= "ご職業:" . $_POST['job'] . "\n\n";
    $admin_reply_text .= "その他:" . $_POST['message'] . "\n\n";

    // 運営側へメール送信
    mb_send_mail( 'XXXXX@gmail.com', $admin_reply_subject, $admin_reply_text, $header);

  }
?>



    <!DOCTYPE html>
    <html lang="ja">
    <head>
中略                  
     <title>確認ページ</title>
    </head>
    <body>
    <main>
     <section class="contact_form">

     <?php if( $page_flag === 1 ): ?>

      <div class="container">
        <h1 class="bolder pb-3">以下の内容でよろしければ、下の<span class="inlineblock">「送信する」をクリックしてください。</span></h1>
      </div>
      <div class="contact_form_wrapper px-3">
       <form class="confirm_form" action="" method="post">
中略       
      <div class="btn_wrapper">
          <p class="submit">
           <input type="submit" name="submit" value="送信する" />
         </p>
          <p class="goback">
             <button type="button" onclick=history.back() name="goback" value="もどる" />もどる</button>
          </p>
         </div>
         <input type="hidden" name="name" value="<?php echo $_POST['name']; ?>">
         <input type="hidden" name="job" value="<?php echo $your_job; ?>">
         <input type="hidden" name="mail" value="<?php echo $_POST['mail']; ?>">
         <input type="hidden" name="message" value="<?php echo $_POST['message']; ?>">
         <input type="hidden" name="recaptchaResponse" id="recaptchaResponse">
       </form>
       </div>

     <?php elseif( $page_flag === 2 ): ?>

       <div class="mail_done">
        <div class="container">
          <h1 class="bolder pb-3">送信完了しました。</h1>
          <p class="small text-dimgray text-center">2営業日以内に担当よりご連絡させて頂きますので、しばらくお待ちください。<span class="inlineblock"></span></p>
          <a class="to_top" href="index.php">トップページにもどる</a>
        </div>
       </div>

    <?php else: ?>
    <?php endif; ?>

    </section>


中略

 </body>
</html>
if (isset($_POST['recaptchaResponse']) && !empty($_POST['recaptchaResponse'])){
        $secret = '<?php echo SECRET_KEY; ?>';
        $verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['recaptchaResponse']);
        $reCAPTCHA = json_decode($verifyResponse);
        if ($reCAPTCHA->success){

        }
        else
        {
                // NG
        }
}
else
{
        // ERROR
}


イメージ説明
イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • Masa-Y

    2019/04/15 22:51

    いま出先でして、明日確認してご報告します、ありがとうございます。

    キャンセル

  • Masa-Y

    2019/04/16 07:38

    画像を追加しました。

    キャンセル

  • Masa-Y

    2019/04/17 14:46

    Uncaught Error: Invalid site key or not loaded in api.js: "サイトキー"
    とエラーが出ています。記載のサイトキーに間違いは無いので、apj.jsがロードされていないということでしょうか。

    キャンセル

まだ回答がついていません

同じタグがついた質問を見る

  • PHP

    23494questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • JavaScript

    19821questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML

    11087questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。