お問い合わせフォームの送信内容をスプレッドシートで管理したいということがあったので、実装を試してみます。
スプレッドシートの設定
まずはスプレッドシートの設定ですが、基本的には以前投稿したPHPからスプレッドシートに書き込むと同じです。
スプレッドシートを新規で作成して、1行目にお問い合わせで使用する項目名を追加します。
今回は「名前」「メールアドレス」「本文」の3つを追加しました。
上部メニューから 拡張機能 > Apps Script を選択します。
コード内容を以下のように変更します。
function doPost(e) {
// POSTした内容を取得
var name = e.parameter.name;
var mail = e.parameter.mail;
var body = e.parameter.body;
// スプレッドシートへの書き込み
var spread = SpreadsheetApp.getActiveSpreadsheet();
var lastRow = spread.getSheets()[0].getLastRow();
spread.getSheets()[0].getRange((lastRow + 1), 1).setValue(name);
spread.getSheets()[0].getRange((lastRow + 1), 2).setValue(mail);
spread.getSheets()[0].getRange((lastRow + 1), 3).setValue(body);
// returnの設定
var jsonData = {
name: name,
mail: mail,
body: body,
result: 'ok'
}
return ContentService.createTextOutput(JSON.stringify(jsonData))
.setMimeType(ContentService.MimeType.JSON);
}
右上の デプロイ > 新しいデプロイ を選択します。
種類の選択でウェブアプリを選択して、アクセスできるユーザーを全員にしてデプロイを行います。
デプロイ完了後、ウェブアプリのURLをコピーしておきます。
お問い合わせフォームの実装
お問い合わせフォームを作成します。
今回は動作確認用に簡単に作成しているだけなので、バリデーションなど細かい点は特に考慮していません。
<?php
if(count($_POST)){
$url = 'ウェブアプリのURL';
$data = array(
'name' => $_POST['name'],
'mail' => $_POST['mail'],
'body' => $_POST['body'],
);
$context = array(
'http' => array(
'method' => 'POST',
'header' => implode("\r\n", array('Content-Type: application/x-www-form-urlencoded',)),
'content' => http_build_query($data)
)
);
$response_json = file_get_contents($url, false, stream_context_create($context));
$response_data = json_decode($response_json);
var_dump($response_data);
}
?>
<form action="./" method="post">
<input type="text" name="name" placeholder="名前">
<input type="email" name="mail" placeholder="メールアドレス">
<textarea name="body" placeholder="本文"></textarea>
<button type="submit">送信</button>
</form>
フォーム送信後に、先ほどのウェブアプリから返ってきた値をvar_dump()で出力しています。
実際に試してみると、以下のように出力されるのが確認できました。
object(stdClass)#1 (4) { ["name"]=> string(6) "ほし" ["mail"]=> string(19) "example@example.com" ["body"]=> string(32) "本文です テストテスト" ["result"]=> string(2) "ok" }
スプレッドシートにも同じ内容が追加されました。





コメントが承認されるまで時間がかかります。