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

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

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

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

Q&A

1回答

5711閲覧

reCaptchaのレスポンスコードが確認画面やメールに表示されてしまう

salsolhal

総合スコア8

PHP

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

0グッド

0クリップ

投稿2020/03/19 09:08

編集2020/03/19 10:12

GoogleのreCaptcha V3をフォームメールに設置しました。

こちらのページに掲載のコードを参考にしました。

<head>〜</head>内に ### 下記のソースを組み込み
<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>
<form>〜</form>内に下記のソースを入力しました。
<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; }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2020/03/19 09:25 編集

表示される原因が、 $_POST["recaptchaResponse"] が増えたことだと仮定して、フォームメールのコードが不明ですが、 $_POST で送られてきたデータをすべて表示したり、メールの本文に記載するようなプログラムなのでしょうか?
salsolhal

2020/03/19 09:30

ご投稿ありがとうございます。 はい、そうです。 $_POSTのデータを自動で書き出すタイプのphpフォームメールです。 (フォームメール自体のコードがなくて申し訳ありません。) 自分でも$_POST["recaptchaResponse"]なので引っ張られて 表示されているのではないかとは思っていたのですが、 この部分だけを、メール本文等に表示されないようにしたいと考えています。 よろしくお願いいたします。
m.ts10806

2020/03/19 09:34

なるべく現象再現できるコードを提示してください。 つまみすぎると仮説たてるのも難しいです
salsolhal

2020/03/19 09:45

失礼しました。 【入力後、送信前の確認画面のソースです】 <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))."?="; 全体では大分長いので部分的に書きましたが、これだけでは不十分でしょうか? よろしくお願いいたします。
CHERRY

2020/03/19 10:05 編集

(入れ違いになりましたが...) コード等は、コメント欄では見にくいので、質問を編集して質問本文に追記してください。 コードは見やすいように <code> タグで囲う等をお願いします。 ( https://teratail.com/help/question-tips#questionTips3-5-1 参照 ) また、コードの中身ですが、$_POST のデータを実際に処理している部分を質問に追記してください。 コメントに書かれた部分では、 mailToAdmin に $_POST をわたしていることしかわかりません。
salsolhal

2020/03/19 10:13

コードの追記を致しました。phpを全くわかっていない初心者で申し訳ありませんがなにとぞよろしくお願いいたします。
guest

回答1

0

$_POSTのデータを自動で書き出すタイプのphpフォームメールです。

(フォームメール自体のコードがなくて申し訳ありません。)

自分でも$_POST["recaptchaResponse"]なので引っ張られて

表示されているのではないかとは思っていたのですが、
この部分だけを、メール本文等に表示されないようにしたいと考えています。

とりあえず、 $_POST["recaptchaResponse"] を表示やメールで送信しないような PHP コードにする必要があると思います。

フォームメールのコードが不明なので、入門書籍によくある $_POST を foreach で回しているフォームメールのプログラムと仮定して...

foreach の繰り返しの中で、 if 文でキーが一致した際に処理をスキップする感じでしょうか。

foreach ($_POST as $key => $value) { if $key == "recaptchaResponse" { continue; } // 表示やメールの処理 }

まあ、$_POST を直接参照するのは、あんまりよろしくないので、本来は、filter_input あたりを使うのがおすすめですが...

投稿2020/03/19 09:49

編集2020/03/19 09:51
CHERRY

総合スコア25218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

salsolhal

2020/03/23 00:51

ご回答ありがとうございます。 メールフォームのコードの追記を致しました。 phpを全くわかっていない初心者で申し訳ありません。 なにとぞよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問