带有数组的空 url 参数未使用 PHP empty() 函数标记为空
Empty url parameter with array not marked empty with PHP empty() function
我有一个简单的 GET 表单,用户可以提交该表单以在我的 WordPress 网站上搜索帖子(房地产)。
我的 HTML 搜索表单看起来有点像这样:
<form method="get" action="estates">
<select name="city[]" multiple>
<option value="">Select an option</option>
<option value="city-1">City 1</option>
<option value="city-2">City 2</option>
</select>
<select name="purpose[]" multiple>
<option value="1">For sale</option>
<option value="2">For rent</option>
</select>
<input type="submit" value="Search">
</form>
假设用户没有为城市选择其他选项,而是选择了值为“1”的目的。
'purpose' 值已正确添加到 URL,'city' 字段的值为“”。
生成的 URL 将如下所示:mysite.com/estates/?city%5B%5D=&purpose%5B%5D=1
现在问题出在本例中的 'city' 字段上。因为我为 'city' 使用默认选项,值为“”,它被添加到 URL 但没有值。
但是,当我在我的帖子页面上进行 PHP 检查并建立搜索查询时,empty($GET["city"])
不是 return,我的查询不起作用正确。
我尝试了很多方法,包括 $GET["city"] == ""
和 array_key_exists('city', $_GET)
,但我的 PHP 代码总是说 $GET["city"]
不为空,应该添加到我的搜索查询中,然后导致错误的查询结果。
我是不是遗漏了什么,或者是否有其他方法可以检查是否为此参数设置了值?
当我执行 print_r($_GET['city'])
时,我得到以下 return:
Array ( [0] => )
Html:一个好的做法是有一个禁用的默认值
<option disabled selected value> -- select an option -- </option>
default select option as blank
*最好不要传递空值。
我通常如何处理这个问题:
- 使用html禁用的选定值
- 使用
isset($_GET[.etc.])
然后
- 清理并trim你的输入
- 检查它是否是一个有效的选项
in_array()
或其他方法然后
- 允许它到达您的数据库
行为可以根据您的喜好而有所不同。例如,如果没有您想要通知用户的值,则查找所有内容或两者等等。考虑一下,有人传递了一个来自 url 的参数,一个不存在的城市。你希望发生什么?
我有一个简单的 GET 表单,用户可以提交该表单以在我的 WordPress 网站上搜索帖子(房地产)。
我的 HTML 搜索表单看起来有点像这样:
<form method="get" action="estates">
<select name="city[]" multiple>
<option value="">Select an option</option>
<option value="city-1">City 1</option>
<option value="city-2">City 2</option>
</select>
<select name="purpose[]" multiple>
<option value="1">For sale</option>
<option value="2">For rent</option>
</select>
<input type="submit" value="Search">
</form>
假设用户没有为城市选择其他选项,而是选择了值为“1”的目的。 'purpose' 值已正确添加到 URL,'city' 字段的值为“”。
生成的 URL 将如下所示:mysite.com/estates/?city%5B%5D=&purpose%5B%5D=1
现在问题出在本例中的 'city' 字段上。因为我为 'city' 使用默认选项,值为“”,它被添加到 URL 但没有值。
但是,当我在我的帖子页面上进行 PHP 检查并建立搜索查询时,empty($GET["city"])
不是 return,我的查询不起作用正确。
我尝试了很多方法,包括 $GET["city"] == ""
和 array_key_exists('city', $_GET)
,但我的 PHP 代码总是说 $GET["city"]
不为空,应该添加到我的搜索查询中,然后导致错误的查询结果。
我是不是遗漏了什么,或者是否有其他方法可以检查是否为此参数设置了值?
当我执行 print_r($_GET['city'])
时,我得到以下 return:
Array ( [0] => )
Html:一个好的做法是有一个禁用的默认值
<option disabled selected value> -- select an option -- </option>
default select option as blank
*最好不要传递空值。
我通常如何处理这个问题:
- 使用html禁用的选定值
- 使用
isset($_GET[.etc.])
然后 - 清理并trim你的输入
- 检查它是否是一个有效的选项
in_array()
或其他方法然后 - 允许它到达您的数据库
行为可以根据您的喜好而有所不同。例如,如果没有您想要通知用户的值,则查找所有内容或两者等等。考虑一下,有人传递了一个来自 url 的参数,一个不存在的城市。你希望发生什么?