我正在尝试使用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>
作为第一个选项,但它仍会在该字段下发送一些数据。
有解决方法吗?
答案 0 :(得分:1)
HTML表单将发送已填充或设置的任何内容。空值与任何其他值一样好。
您可以使用javascript检查某些字段是否未填写。
但是,您无法阻止用户的浏览器发送任何数据。这是他们的浏览器,他们可以发送任何愿望。例如,通过禁用JS。
您无法阻止用户发送无效数据,但您可以 在服务器端验证它。在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”,您可以输入选择菜单的默认选项值。