Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用GET方法发送空数据_Php_Html_Forms_Select_Option - Fatal编程技术网

Php 使用GET方法发送空数据

Php 使用GET方法发送空数据,php,html,forms,select,option,Php,Html,Forms,Select,Option,我正在尝试使用php/sql创建一个非常原始的搜索函数。 基本上,我使用GET方法在/search.php中的几个字段上提交表单查询 因此,查询将以以下形式传输: clothes.php?type=sometype&color=somecolor&mat=somemat&pat=somepattern&uprc=price&brand=brand 但是,我已经编写了costs.php脚本,这样就不必为成功的查询填充所有字段 Cloth.php?type=

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

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

clothes.php?type=sometype&color=somecolor&mat=somemat&pat=somepattern&uprc=price&brand=brand
但是,我已经编写了costs.php脚本,这样就不必为成功的查询填充所有字段

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

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

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

我试着创造。。。作为每个下拉框中的第一个选项,但它仍会在该字段下发送一些数据

有解决办法吗

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

您可以使用javascript检查某些字段是否未填充

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

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


我不认为有什么方法可以阻止HTML表单发送空表单字段的空数据项,除非在javascript中钩住提交事件并手动创建表单post。

使用纯HTML最好的方法是为空值提交空字符串,例如foo=&bar=baz。无论哪种方式都不可能为null,HTTP没有null值的概念。如果您想从这个查询字符串中删除空的foo,那么在提交表单时,您必须在客户端使用Javascript。因为总是有没有Javascript的客户端,所以总会有收到空foo的情况,所以无论如何都需要做好准备


如果您坚持使用干净的URL,那么您可以在服务器上重定向并过滤掉空参数。例如,通过POST提交搜索表单,然后使用非空参数构建GET URL并重定向到该URL。不过,这会增加额外HTTP请求的开销。

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

您可以尝试将onclick处理程序添加到submit按钮或其他内容中,但您的用户可以禁用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?字段会导致$_GET['field']值为空,而不是null


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

您必须使用如下PHP条件语句:

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

如果我为空,您可以输入选择菜单的默认选项值。

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