【问题标题】:Google Form validation with url query带有 url 查询的 Google 表单验证
【发布时间】:2021-12-06 19:25:33
【问题描述】:

很抱歉我的措辞不够准确,但我对 HTML/js/app 脚本并不是很熟悉。

我们每个月都与大量客户合作,并与他们一起组织活动。我们的每个客户都有一个唯一的代码,这是参加我们的活动所必需的。

我们非常依赖 Google 表单来让客户预订他们的位置。在表单上,​​我们要求提供他们的代码,但我们没有任何形式的验证。

最近,我们获得了使用 URL 查询的数据库 API 的访问权限(例如,www.mydatabase.com/q=CODE)。如果“CODE”有效,则返回非空 JSON 值。

我正在寻找一种将谷歌表单validation feature 与 URL 查询一起使用的方法。 我想在我们的表单中有一个初始部分,我们的客户需要输入他们的代码。如果有效,则向他们显示表格的其余部分,否则他们无法继续进行。

我在这里查看了 Google 支持,但找不到使用查询进行验证的方法。 我错过了什么吗?

如果没有办法做到这一点,那么最容易访问和最直接的路径是什么?

我们使用 google Forms 是因为它很方便,而且我是我小组中唯一的程序员,所以我想让我的同事尽可能轻松地完成工作,而无需他们编写任何代码。 理想的做法是在 google 表单上有一个一键式插件,它会自动生成该部分(或 HTML 页面)。

编辑:更具体的问题

【问题讨论】:

  • 我不完全理解你的问题,但我猜你会想看看 UrlFetchApp。 developers.google.com/apps-script/reference/url-fetch/…
  • 这个验证段落在谷歌表单中会是什么样子,更重要的是它有什么作用? AFAIK 谷歌表单无法生成查询并获取该查询的结果并对其执行任何操作。在构建表单之前必须完成的所有事情

标签: javascript html google-apps-script google-forms


【解决方案1】:

替代解决方法[已更新]

  • 正如 Cooper 在 cmets 中提到的,Google 表单不可能在用户被引导到实际的 Google 表单之前运行网站检查/查询,具体取决于检查。
  • 审核时,URL 验证仅检查输入的文本值是否为正确的 URL 格式,例如https://example.com & 看来你无能为力了。

也许您可以尝试使用Web app、Apps Script 函数和HTML redirection 组合使用的更新解决方法

它是如何工作的?

您需要使用将首先运行 input.html 网页的 Apps 脚本创建一个网络应用 URL。该网页将要求用户输入CODE 以通过您的URL www.mydatabase.com/q=CODE 完成您的数据库查询。然后,该脚本将决定输入 CODE 的完整数据库 URL 是否返回非空 JSON 值,用户被路由到 Google 表单。如果没有,则不会发生任何事情,用户将收到一条显示Code is not valid 的浏览器警报。

注意:我还想提醒您,这只是一种解决方法,它有一个限制,因为用户仍然可以复制实际的 Google 表单链接,因为这只是 URL 的重定向。

脚本代码

function checkSite(c){
  try{
    var response = UrlFetchApp.fetch("www.mydatabase.com/q="+c); //to complete your database query. Just edit this with your actual URL
    var data = JSON.parse(response.getContentText());
    if(Object.keys(data).length > 0){
      return true; //if URL returns JSON value
    }
    return false; //if URL returns empty JSON value
  }catch(e){
    return false;
  }
}

function passCode(code){
  return checkSite(code);
}

function doGet(e) {
  return HtmlService.createHtmlOutputFromFile('input');
}

input.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script> 
      function passData(){
        var code = document.getElementById("inputCode").value; //<-- PASS THIS DATA TO GOOGLE SCRIPT (The .gs file)
        google.script.run.withSuccessHandler(onSuccess).passCode(code);
      }

      function onSuccess(result) {
        route(result);
      }

      function route(result) {
        if(result == true){
          alert("Routing to Google Form");
          window.location.href="https://YOUR_GOOGLE_FORMS_LINK";  
        }
        alert("Code is invalid");
      }

      </script>
  </head>
  <body>
    <div align="center">
        <label for="code">Input Code:</label>
        <input type="text" id="inputCode" name="inputCode"><br><br>
        <button onclick='passData()' id="btnContinue">Continue</button>
    </div>
  </body>
</html>

样本结果

  • input.html 网页如下所示

  • 如果 URL 查询中的 CODE 返回非空 JSON 值,用户会收到一条显示 Routing to Google Form 的浏览器警报,然后用户最终会被路由到 Google 表单

  • 否则,用户会收到显示 Code is invalid 的浏览器警报,并且它永远不会将用户路由到 Google 表单

【讨论】:

  • 表格的网址可以复制并发送给任何人。不建议使用。 > “通过默默无闻的安全旨在通过故意隐藏或隐藏其安全漏洞来保护系统。”
  • 谢谢!这似乎是一个很好的解决方法。但是是否可以让 HTML 页面向用户询问唯一代码并进行检查?而且我的同事不知道怎么用appscript,所以可以用插件生成true.html吗?哪里需要指定表单链接,它会自动输出正确的true.html?
  • HTML 文件只是一个简单的页面,如果您需要连接到第三方数据库或任何服务来执行该过程,让页面要求用户提供唯一代码会非常复杂.此外,将true.html 作为附加组件生成是没有意义的,因为它只是一个简单的网页。您需要在 true.html 文件上指定表单链接(只需将两行替换为 https://GOOGLE_DOCS FORM_URL 与实际 Google 表单的实际 https:// 链接)。在示例脚本中,如果满足条件,doGet(e) 将输出true.html
  • 我已经更新了我的答案。在查看您分享的文章时,URL 验证仅检查输入的文本值是否为正确的 URL 格式,例如https://example.com & 看来你无能为力了。
  • 不客气。是的,我认为使用这个 html 作为插件是不可能的。
猜你喜欢
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2010-10-19
相关资源
最近更新 更多