GoogleのreCaptcha V3をフォームメールに設置しました。
こちらのページに掲載のコードを参考にしました。
<head>〜</head>内に ### 下記のソースを組み込み<form>〜</form>内に下記のソースを入力しました。<script src="https://www.google.com/recaptcha/api.js?render=サイトキーを記述する"></script> <script> grecaptcha.ready(function () { grecaptcha.execute("サイトキーを記述する", {action: "sent"}).then(function(token) { var recaptchaResponse = document.getElementById("recaptchaResponse"); recaptchaResponse.value = token; }); }); </script>
<input type="hidden" name="recaptchaResponse" id="recaptchaResponse">
そして、submitボタンを押した先のメール送信のphpの頭に下記のソースを記載しました。
<?php if (isset($_POST["recaptchaResponse"]) && !empty($_POST["recaptchaResponse"])) { $secret = "シークレットキーを記述する"; $verifyResponse = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$_POST["recaptchaResponse"]); $reCAPTCHA = json_decode($verifyResponse); if ($reCAPTCHA->success) { echo "認証成功"; } else { echo "認証エラー"; } } else { echo "エラーエラー"; } ?>
これでメールフォーム自体は認証成功が表示され送信できるのですが、
メールの『確認画面』、『設置者に届くメール』、『投稿者へ届く自動返信のメール』
いずれにも
03AERD8XohUkp6-PTfuRdnOOFvVvDmpArpvKOj1Oa9PqkLn_AK2yXFDNtqE8J2ipM6sJaArWX3heC97yT-aP-aGBgPYv4ATW8XuDMDqpnXr1SHICKykWpHV・・・
上記のようなレスポンスコードが表示されてしまうのですが、
これを表示させないようにする事は出来ませんでしょうか。
よろしくお願いいたします。
◆追記です
メールフォームのプログラムです。
(こちらのプログラムを利用させていただいています。)
検討ちがいの箇所でしたらすみません。
//送信メールにPOSTデータをセットする関数 function postToMail($arr){ global $hankaku,$hankaku_array; $resArray = ''; foreach($arr as $key => $val) { $out = ''; if(is_array($val)){ foreach($val as $key02 => $item){ //連結項目の処理 if(is_array($item)){ $out .= connect2val($item); }else{ $out .= $item . ', '; } } $out = rtrim($out,', '); }else{ $out = $val; }//チェックボックス(配列)追記ここまで if(get_magic_quotes_gpc()) { $out = stripslashes($out); } //全角→半角変換 if($hankaku == 1){ $out = zenkaku2hankaku($key,$out,$hankaku_array); } if($out != "confirm_submit" && $key != "httpReferer") { $resArray .= "【 ".h($key)." 】 ".h($out)."\n"; } } return $resArray; } //確認画面の入力内容出力用関数 function confirmOutput($arr){ global $hankaku,$hankaku_array,$useToken,$confirmDsp,$replaceStr; $html = ''; foreach($arr as $key => $val) { $out = ''; if(is_array($val)){ foreach($val as $key02 => $item){ //連結項目の処理 if(is_array($item)){ $out .= connect2val($item); }else{ $out .= $item . ', '; } } $out = rtrim($out,', '); }else{ $out = $val; }//チェックボックス(配列)追記ここまで if(get_magic_quotes_gpc()) { $out = stripslashes($out); } $out = nl2br(h($out));//※追記 改行コードを<br>タグに変換 $key = h($key); $out = str_replace($replaceStr['before'], $replaceStr['after'], $out);//機種依存文字の置換処理 //全角→半角変換 if($hankaku == 1){ $out = zenkaku2hankaku($key,$out,$hankaku_array); } $html .= "<tr><th>".$key."</th><td>".$out; $html .= '<input type="hidden" name="'.$key.'" value="'.str_replace(array("<br />","<br>"),"",$out).'" />'; $html .= "</td></tr>\n"; } //トークンをセット if($useToken == 1 && $confirmDsp == 1){ $token = sha1(uniqid(mt_rand(), true)); $_SESSION['mailform_token'] = $token; $html .= '<input type="hidden" name="mailform_token" value="'.$token.'" />'; } return $html; }
表示される原因が、 $_POST["recaptchaResponse"] が増えたことだと仮定して、フォームメールのコードが不明ですが、 $_POST で送られてきたデータをすべて表示したり、メールの本文に記載するようなプログラムなのでしょうか?
ご投稿ありがとうございます。
はい、そうです。
$_POSTのデータを自動で書き出すタイプのphpフォームメールです。
(フォームメール自体のコードがなくて申し訳ありません。)
自分でも$_POST["recaptchaResponse"]なので引っ張られて
表示されているのではないかとは思っていたのですが、
この部分だけを、メール本文等に表示されないようにしたいと考えています。
よろしくお願いいたします。
なるべく現象再現できるコードを提示してください。
つまみすぎると仮説たてるのも難しいです
失礼しました。
【入力後、送信前の確認画面のソースです】
<div id="formWrap">
<?php if($empty_flag == 1){ ?>
<div align="center">
<h4>入力にエラーがあります。下記をご確認の上「戻る」ボタンにて修正をお願い致します。</h4>
<?php echo $errm; ?><br /><br /><input type="button" value=" 前画面に戻る " onClick="history.back()">
</div>
<?php }else{ ?>
<h3>確認画面</h3>
<p align="center">以下の内容で間違いがなければ、「送信する」ボタンを押してください。</p>
<form action="<?php echo h($_SERVER['SCRIPT_NAME']); ?>" method="POST">
<table class="formTable">
<?php echo confirmOutput($_POST);//入力内容を表示?>
</table>
<p align="center"><input type="hidden" name="mail_set" value="confirm_submit">
<input type="submit" value=" 送信する ">
<input type="button" value="前画面に戻る" onClick="history.back()"></p>
</form>
【管理者へ届くメールのプログラム部です】
//管理者宛に届くメールをセット
$adminBody = mailToAdmin($_POST,$subject,$mailFooterDsp,$mailSignature,$encode,$confirmDsp);
$header = adminHeader($userMail,$post_mail,$BccMail,$to);
$subject = "=?iso-2022-jp?B?".base64_encode(mb_convert_encoding($subject,"JIS",$encode))."?=";
全体では大分長いので部分的に書きましたが、これだけでは不十分でしょうか?
よろしくお願いいたします。
(入れ違いになりましたが...)
コード等は、コメント欄では見にくいので、質問を編集して質問本文に追記してください。
コードは見やすいように <code> タグで囲う等をお願いします。 ( https://teratail.com/help/question-tips#questionTips3-5-1 参照 )
また、コードの中身ですが、$_POST のデータを実際に処理している部分を質問に追記してください。
コメントに書かれた部分では、 mailToAdmin に $_POST をわたしていることしかわかりません。
コードの追記を致しました。phpを全くわかっていない初心者で申し訳ありませんがなにとぞよろしくお願いいたします。