【问题标题】:sending null data using GET method使用 GET 方法发送空数据
【发布时间】:2011-07-28 13:05:35
【问题描述】:

我正在尝试使用 php/sql 创建一个非常原始的搜索功能。 基本上,我使用 GET 方法在/search.php. 中的几个字段上提交表单查询

所以查询会以如下形式传输:

clothes.php?type=sometype&color=somecolor&mat=somemat&pat=somepattern&uprc=price&brand=brand

但是,我已经编写了clothing.php 脚本,这样就不必为成功的查询填写所有字段。

clothes.php?type=sometype 将返回指定类型的衣服。

对于search.php 中的所有字段,我使用 (select) 和 (option) 列出每个字段下的可用选项。

问题是,在 /search.php 中,如果特定字段为空,我想阻止 search.php 发送表单数据。

我尝试在每个下拉框中创建<select name="type"><option value = ""></option>...</select> 作为第一个选项,但它仍然在该字段下发送一些数据。

有解决办法吗?

【问题讨论】:

  • 这个字段发送的“一些数据”是什么?有例子吗?
  • search.php 忽略任何空字符串值可以更好地解决问题。没有什么比这更可靠的方法可以防止提交空字符串了。

标签: php html forms select option


【解决方案1】:
  1. HTML 表单将发送已填写或设置的任何内容。空值和其他任何值一样好。

  2. 您可以使用 javascript 检查某些字段是否未填写。

  3. 但是,您不能阻止用户的浏览器发送任何数据。这是他们的浏览器,他们可以随意发送任何内容。例如通过禁用 JS。

  4. 您无法阻止用户发送无效数据,但您可以并且应该在服务器端对其进行验证。在clothing.php 中,您可以检查空字段并显示一些错误而不是搜索结果

【讨论】:

    【解决方案2】:

    使用纯 HTML 可以做的最好的事情是为空值提交空字符串 (""),例如foo=&bar=baznull 是不可能的,HTTP 没有 null 值的概念。如果要从此查询字符串中删除空的foo,则必须在提交表单时在客户端上使用 Javascript。由于总是有没有 Javascript 的客户端,总会有你收到一个空的foo 的情况,所以无论如何你都需要做好准备。

    如果您无论如何都坚持使用“干净”的 URL,您可以在服务器上重定向并过滤掉空参数。例如。通过 POST 提交搜索表单,然后使用非空参数构建一个 GET URL 并重定向到它。不过,这会产生额外 HTTP 请求的开销。

    【讨论】:

      【解决方案3】:

      我认为没有办法阻止 HTML 表单为空表单字段发送空数据项,除非在 javascript 中挂钩提交事件并手动创建表单发布。

      【讨论】:

        【解决方案4】:

        您无法阻止用户向您发送数据,尤其是您的示例中的 GET 数据。

        您可以尝试将onclick 处理程序添加到您的提交按钮或其他东西,但您的用户可能禁用了 JavaScript。即使他们启用了 JavaScript,也无法阻止某人转到他们的地址栏并手动输入 www.example.com/file.php?var=value。该死,即使您将方法从 GET 更改为 POST,仍然 有方法可以在不使用页面的情况下提交数据。

        您真正能做的就是检查该字段是否有值,如果有,则将用户重定向回您的搜索页面,并显示错误提示他们重试。

        if (!isset($_GET['field']) || empty($_GET['field])) {
          // regenerate page with error
        }
        

        您的标题也不准确。您永远不会从表单中获得空数据。就 PHP 而言,变量要么包含,要么不包含。如果它被包括在内,那么最糟糕的是它可能是空白的。例如,www.example.com/file.php?field 会导致 $_GET['field'] 值为空,而不是 null。

        有些类型——比如单选按钮和复选框——如果它们为空就不会发送值,但 PHP 根本不会为它们创建 $_GET 值。他们只会通过isset() 检查失败,而不是拥有null 值。

        【讨论】:

          【解决方案5】:

          您必须使用这样的 PHP 条件语句:

          if($_GET['field_name'] != NULL) {
               // do sql stuff here 
          } 
          else {
               echo "Please select a field"; 
          }
          

          如果我有“NULL”,您可以输入选择菜单的默认选项值。

          【讨论】:

            猜你喜欢
            • 2012-05-11
            • 1970-01-01
            • 1970-01-01
            • 2020-05-21
            • 2015-06-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多