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でレスポンスを受け取っています。正常に動くと以下のようにスプレッドシートに送信された内容が追記されます。
以上、自分用メモです。
おしまい♥
タグ:Google
おすすめ記事
- EC-CUBE4でヘッダー等にログインユーザーの氏名や所持ポイントを表示させる
- Reactで簡易的なカレンダーを作成
- PHPでClaude APIを使ってみた。
- Next.js(App Router)で、Fetch APIを使った静的ファイル生成(SSG)でヘマした
- clipboard.writeTextでクリップボードにテキストをコピーするときはhttpsで行う
トラックバック & ピンバック
- この記事へのトラックバックURI:
- https://weblog.walk-life.me/php_gas_form/trackback/