お問い合わせフォームの送信内容をスプレッドシートで管理したいということがあったので、実装を試してみます。
スプレッドシートの設定
まずはスプレッドシートの設定ですが、基本的には以前投稿した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" }
スプレッドシートにも同じ内容が追加されました。
コメントが承認されるまで時間がかかります。