実現したいこと
HTMLで作成されているフォームから受け取ったPOSTデータをPHPファイルに送り、そのPHPファイルでユーザーにPOST内容の確認メールを送信した後、データをGASに送りgoogleスプレットシートにも出力される仕組みを作りたい。
前提
表題の通りです。ただし会社のサーバーの関係上、composerを使用したりgoogle cloud platformを使用することができません。
HTMLフォーム → ユーザーへメールを送る機能を実装したPHPファイル → googleスプレットにPOSTデータの内容を出力(GAS言語)
の流れでデータを送りたい所存です。
ユーザーへPOSTデータを使用した確認メールを送る機能はすでにPHPファイルに実装されています。
発生している問題・エラーメッセージ
コードは一通り実装したが、googleスプレットシートに出力がこない。
該当のソースコード
HTMLフォーム
1<form action="./mail.php" method="post" enctype="multipart/form-data" id="myform"> 2 <div class="l-main-form__bg"> 3 <table class="p-main-form--survey"> 4 <tbody class="p-main-form__tbody"> 5 <tr class="p-main-form__tr--survey"> 6 <th class="p-main-form__th--survey"><span class="--blue">必須</span>お名前</th> 7 <td class="p-main-form__td--survey"> 8 <input type="text" name="お名前" class="--input" placeholder="例:鈴木太郎" autocomplete="name"> 9 </td> 10 </tr> 11 <tr class="p-main-form__tr--survey"> 12 <th class="p-main-form__th--survey --sp-block"><span class="--blue">必須</span>生年月日</th> 13 <td class="p-main-form__td--survey"> 14 <input type="text" name="生年月日" class="--input js-retype" placeholder="例:19921201 ※1992/12/1生まれの場合" autocomplete="tel"> 15 <p id="previous_input2" class="c-previous_alert js-retype-alert"></p> 16 </td> 17 </tr> 18 〜〜〜〜〜〜〜〜 一部省略 〜〜〜〜〜〜〜〜 19 <!-- 選択エリア1 --> 20 21 <!-- 選択エリア2 --> 22 <tr class="p-main-form__tr--survey"> 23 <th class="p-main-form__th--survey --adjust"><span class="--blue">必須</span>下記項目の中で特に興味があるものを2つお選びください。</th> 24 <td class="p-main-form__td--survey"> 25 <input type="checkbox" name="Q2" id="c-select-about1" class="c-previous-radio js-count2-checkbox" onclick="limitCheckboxSelection(this)" value="ホワイトニング材・照射器の漂白効果の実証体験"> 26 <label for="c-select-about1">ホワイトニング材・照射器の漂白効果の実証体験</label><br><br> 27 <input type="checkbox" name="Q2" id="c-select-about2" class="c-previous-radio js-count2-checkbox" onclick="limitCheckboxSelection(this)" value="ホワイトニングで予防歯科強化"> 28 <label for="c-select-about2">ホワイトニングで予防歯科強化</label><br><br> 29 <input type="checkbox" name="Q2" id="c-select-about3" class="c-previous-radio js-count2-checkbox" onclick="limitCheckboxSelection(this)" value="ホワイトニングで自費増収"> 30 <label for="c-select-about3">ホワイトニングで自費増収</label><br><br> 31 <input type="checkbox" name="Q2" id="c-select-about4" class="c-previous-radio js-count2-checkbox" onclick="limitCheckboxSelection(this)" value="オフィスとホームホワイトニングの使い分け知識"> 32 <label for="c-select-about4">オフィスとホームホワイトニングの使い分け知識</label><br><br> 33 <input type="checkbox" name="Q2" id="c-select-about5" class="c-previous-radio js-count2-checkbox" onclick="limitCheckboxSelection(this)" value="難症例の術式選択や処置方法、知覚過敏を抑制する診断のコツ"> 34 <label for="c-select-about5">難症例の術式選択や処置方法、知覚過敏を抑制する診断のコツ</label> 35 </td> 36 </tr> 37 <!-- //選択エリア2 --> 38 〜〜〜〜〜〜〜〜 一部省略 〜〜〜〜〜〜〜〜 39 <!-- 入力エリア--> 40 <tr class="p-main-form__tr--survey"> 41 <th class="p-main-form__th--survey --adjust"> 42 <span class="--blue">必須</span> 43 <p class="c-form-survey--text"> 44 セミナーの参加目的をできる限り詳細に教えてください。<br class="u-db"> 45 (当日の講義内容の参考にさせていただきます。)<span class="--white --adjust">50文字以上</span> 46 </p> 47 </th> 48 <td class="p-main-form__td--survey"> 49 <textarea name="input_area" rows="4" cols="50" class="c-form-survey--textarea js-textarea" placeholder="〇〇〇〇〇〇〇〇〇●〇〇〇〇〇〇〇〇〇●〇〇〇〇〇〇〇〇〇●〇〇〇〇〇〇〇〇〇●〇〇〇〇〇〇〇〇〇●"></textarea> 50 <p id="previous_input_textarea" class="c-previous_alert js-retype-alert"></p> 51 </td> 52 </tr> 53 <!-- //入力エリア--> 54 </tbody> 55 </table> 56 </div> 57 <div class="privacy-box__parent--wrap"> 58 <div class="privacy-box__parent"> 59 <p class="c-previous-text">回答のコピーが指定したアドレスにメールで送信されます。</p> 60 </div> 61 <p id="previous_alert" class="c-previous_alert"></p> 62 <div class="submit_box-wrap"> 63 <input type="submit" value="送信する" class="c-previous-submit" onclick="checkForm(event)"> 64 </div> 65 </div> 66 </form>
mail.php
1<?php 2メールを送る関数() 3setSheet(); 4function setSheet(){ 5 // GASのURLにPOSTデータを送信 6 $postData = array('input_data' => json_encode($_POST)); 7 $content = http_build_query($postData, '', '&'); 8 9 $options = array( 10 'http' => array( 11 'header' => 'Content-type: application/x-www-form-urlencoded', 12 'method' => 'POST', 13 'content' => $content 14 ) 15 ); 16 17 $context = stream_context_create($options); 18 $result = file_get_contents("GASをデプロイした後に発行されるURLを指定", false, $context); 19} 20?>
GAS
1function doPost(e) { 2 var inputJSON = e.parameter.input_data; 3 var inputData = JSON.parse(inputJSON); 4 5 // データの利用例 6 var tmp1 = inputData['お名前']; 7 var tmp2 = inputData['生年月日']; 8 var tmp3 = inputData['電話番号']; 9 var tmp4 = inputData['Email']; 10 var tmp5 = inputData['勤務区分']; 11 var tmp6 = inputData['1回目セミナー']; 12 var tmp7 = inputData['Q1']; 13 var tmp8 = inputData['Q2']; 14 var tmp9 = inputData['Q3']; 15 var tmp10 = inputData['Q4']; 16 var tmp11 = inputData['Q5']; 17 var tmp12 = inputData['input_area']; 18 19 // スプレッドシートへのデータ出力処理 20 var spreadsheet = SpreadsheetApp.openByUrl("スプレットーシートのURLを指定"); 21 var sheet = spreadsheet.getSheetByName("該当シートの名前"); 22 var row = sheet.getLastRow() + 1; 23 sheet.appendRow([ 24 tmp1, 25 tmp2, 26 tmp3, 27 tmp4, 28 tmp5, 29 tmp6, 30 tmp7, 31 tmp8, 32 tmp9, 33 tmp10, 34 tmp11, 35 tmp12 36 ]); 37} 38
試したこと
PHPまでの処理まうまくいっており、ユーザーへ確認メールも届いています。
しかしスプレットシート側に出力がきません。
お恥ずかしながらGASのデバック方法がよくわからずdoPost()をテストする方法を
https://prtn-life.com/blog/gas-log-gcp
を参考にしながらやろうとしたのですが、テスト関数にどのような内容を入れて良いかわからず手が止まってしましました。
補足情報(FW/ツールのバージョンなど)
GASのデプロイは「ウェブアプリ」として実行。
GASへの理想の出力としてはフォームで入力された各10種類のname属性の値がスプレットシートの1フィールドに1個ずつ入ることです。そして、type="checkbox"などのフォームで複数選択されていた場合はその全ての値が1フィールドの中に出力される状態が最終目標です。
※ こちら複数サイトでマルチポストしている内容ですが、他サイトで仮に回答が得られた場合はすべてのサイトで回答結果を追記いたしますので、何卒ご理解の程よろしくお願いいたします。
teratail.com/questions/i18lo1u46bw74j
qiita.com/bugright/questions/14f7c9edb6043f1362e8
マルチポストしている先の URLはこちらですべてとなります。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。