使用GET方法发送空数据

时间:2011-04-03 07:26:37

标签: php html forms select option

我正在尝试使用php / sql创建一个非常原始的搜索功能。 基本上,我使用GET方法在/search.php.

中的几个字段上提交表单查询

因此查询将以下列形式传输:

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

但是,我已经编写了clothes.php脚本,因此无需为了成功的查询而填写所有字段。

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

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

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

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

有解决方法吗?

5 个答案:

答案 0 :(得分:1)

  1. HTML表单将发送已填充或设置的任何内容。空值与任何其他值一样好。

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

  3. 但是,您无法阻止用户的浏览器发送任何数据。这是他们的浏览器,他们可以发送任何愿望。例如,通过禁用JS。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

您无法阻止用户向您发送数据,尤其不会像示例中那样阻止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']值为空,不为空。

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

答案 4 :(得分:0)

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

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

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