お問い合わせフォームの送信内容をスプレッドシートに追加する

お問い合わせフォームの送信内容をスプレッドシートで管理したいということがあったので、実装を試してみます。

スプレッドシートの設定

まずはスプレッドシートの設定ですが、基本的には以前投稿した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" }

スプレッドシートにも同じ内容が追加されました。

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


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

2022年5月
1234567
891011121314
15161718192021
22232425262728
293031