GASを使用して、
HTML上のフォームから入力した内容をスプレッドシートに記録したいと思い、
以下のようなものを(見よう見まねで)作りました。
function doGet() { let template = HtmlService.createTemplateFromFile('index'); return template.evaluate(); } function doPost(postdata) { let title = String(postdata.parameters.title); let content = String(postdata.parameters.content); let sheet = SpreadsheetApp.getActiveSheet(); sheet.appendRow([title, content]); let template = HtmlService.createTemplateFromFile('index'); return template.evaluate(); }
html
1<!DOCTYPE html> 2<html> 3 <head> 4 <base target="_top"> 5 </head> 6 <body> 7 <div class="main"> 8 <form method="post" action="公開用URL"> 9 <input type="text" name="title" required="required" /> 10 <textarea name="content" required="required"></textarea> 11 <input type="submit" value="送信する" /> 12 </form> 13 </div> 14 </body> 15</html>
幸い、フォームの内容を問題なくスプレッドシートに残すことができ、
それ自体は満足しているのですが、
ひとつ、
「リロードをすると、同じ内容のものがふたたび送信されてしまう」
という二重送信の悩みがあります。
POSTの内容が残ってしまっているからだということは何となく分かるのですが、
プログラミングの知識が乏しく、
どのように解決したらよいのか分かりません。
二重送信を防ぐための、なにか良いアイデアはございますでしょうか?
希望としては、
同一フォームから連続してデータを入力したいので、
送信後にサンクスページ等へ遷移するのではなく、
同じページに戻りたいと考えています(少なくとも見た目的には)。
もし解決策がありそうでしたら、
ご教示いただけますと幸いでございます。
何卒よろしくお願い申し上げます。
【追記】
-
「ユーザーに直接スプレッドシートを触ってもらいたくない」という理由で、スプレッドシート以外(フォームなど)の送信方法を探しています。
-
「データ入力だけでなく、入力データの表示等、複数の操作を行いたい」、また「見栄えや仕様感的に、HTML+CSSでページを作りたい」ため、できればGoogleフォームを使用しない方法を探しています。
回答2件
あなたの回答
tips
プレビュー