PHPとGASを使ってフォームの内容をGoogleスプレッドシートに書き込む

2024/10/18 (金) - 09:00 JavaScriptPHP&CMS

PHPとGASを使って、HTMLの入力フォームから送信した内容を任意のGoogleスプレッドシートに反映させてみるとです。今回はかなり簡易的に実装した例ですので、エラー判定やデータチェックなどの処理は省略しています。

まずフォームのHTMLを用意します。今回は簡易的に名前、メールアドレス、性別という項目としました。name属性を忘れずに。

<form action="" method="post">
 <p>名前:<input type="text" name="name" placeholder="姓 名"></p>
 <p>メールアドレス:<input type="email" name="mail" placeholder="hoge@example.com"></p>
 <p>性別:<select name="sex">
  <option value="女性">女性</option>
  <option value="男性">男性</option>
  <option value="その他">その他</option>
  <option value="未回答">未回答</option>
 </select></p>
 <p><input type="submit" name="submit" value="送信する"></p>
</form>

次に、対象となるスプレッドシートを用意します。こちらも名前、メールアドレス、性別で項目を作ります。そのスプレッドシートを開いた状態で、メニューから[拡張機能]→[Apps Script]を選択します。コード入力欄が表示されるので以下のようにコードを入力します。

function doPost(e) {
 const spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
 const getLastRow = spreadSheet.getSheets()[0].getLastRow(); //最後の行を取得
 let getName,getMail,getSex;
 let res;
 if(e){
  //POSTデータを取得
  getName = e.parameter.name;
  getMail = e.parameter.mail;
  getSex = e.parameter.sex;
  //行を追加してセルに書き込む
  spreadSheet.getSheets()[0].getRange((getLastRow + 1), 1).setValue(getName);
  spreadSheet.getSheets()[0].getRange((getLastRow + 1), 2).setValue(getMail);
  spreadSheet.getSheets()[0].getRange((getLastRow + 1), 3).setValue(getSex);
  res = JSON.stringify({result: 'Success'});
 }else{
  res = JSON.stringify({result: 'Error'});
 }
 return ContentService.createTextOutput(res).setMimeType(ContentService.MimeType.JSON);
}

今回使うdoPostは、POSTパラメータのデータを処理するときに使う関数です。要となるのはスプレッドシートの行数を取得し、最後の行の次にPHPから受け取った値をセルごとで書き込むところです。POSTデータを取得するには、e.parameter.input要素のname属性としてパラメータ取得します。最後に正常に処理されたかをJSON形式で返します。

上記をのコードを書き込んだら、スクリプトをデプロイします。ヘッダーの[デプロイ]ボタンから、[新しいデプロイ]を選択し任意の名前をつけます。

歯車マークから[ウェブアプリ]を選択し、[アクセスできるユーザー]を[全員]にして、[デプロイ]ボタンを押下します。正常にデプロイできると完了画面が表示されるので、発行された[ウェブアプリURL]を控えておきます(例:https://script.google.com/macros/s/*****/exec

最後にPHPでHTMLのフォームから送信されたパラメータをGoogleスプレッドシートに連携するコードを記述します。ウェブアプリURLには前段で発行したウェブアプリURLを記入します。input要素から取得した値をPOSTパラメータを処理して受け取り、ウェブアプリURLに連携します。

<?php
$urlGS = 'ウェブアプリURL'; //先ほど控えたウェブアプリURL
if($_POST){
 $getData = array(
  'name' => htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8'),
  'mail' => htmlspecialchars($_POST['mail'], ENT_QUOTES, 'UTF-8'),
  'sex' => htmlspecialchars($_POST['sex'], ENT_QUOTES, 'UTF-8')
 );
 $setData = array(
  'http' => array(
   'method'  => 'POST',
   'content' => http_build_query($getData)
  )
 );
 $resData = file_get_contents($urlGS, false, stream_context_create($setData));
 if(json_decode($resData)->result === 'Success'){
  echo '<p>正常に送信できました</p>';
 }else{
  echo '<p>正常に送信できませんでした</p>'; 
 }
}
?>

処理が正常に行われたかはJSONでレスポンスを受け取っています。正常に動くと以下のようにスプレッドシートに送信された内容が追記されます。

以上、自分用メモです。

おしまい

タグ:

記事をシェアする

  • facebookでシェアする
  • twitter(X)でシェアする
  • LINEでシェアする
  • はてなブックマークでシェアする
  • Threadsでシェアする
  • Pocketでシェアする
  • Pinterestでシェアする

おすすめ記事

トラックバック & ピンバック

この記事へのトラックバックURI
https://weblog.walk-life.me/php_gas_form/trackback/

コメント

コメントは下記からどうぞ

ページの先頭へ