首页 > 解决方案 > 带有数组的空 url 参数未使用 PHP empty() 函数标记为空

问题描述

我有一个简单的 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”的目的。'目的'值已正确添加到 URL,'城市' 字段的值为“”。

生成的 URL 如下所示:mysite.com/estates/?city%5B%5D=&purpose%5B%5D=1

现在问题出在此示例中的“城市”字段上。因为我使用“城市”的默认选项,值为“”,所以它被添加到 URL 但没有值。

但是,当我在我的帖子页面上进行 PHP 检查并建立搜索查询时,empty($GET["city"])没有返回 true,并且我的查询无法正常工作。

我尝试了很多东西,包括$GET["city"] == ""array_key_exists('city', $_GET)我的 PHP 代码总是说它$GET["city"]不是空的,应该添加到我的搜索查询中,这会导致查询结果错误。

我是否遗漏了什么,或者是否有另一种方法来检查是否为此参数设置了值?

当我这样做时print_r($_GET['city']),我得到以下回报:

Array ( [0] => )

标签: phpwordpressget

解决方案


Html:一个好的做法是有一个默认值被禁用 <option disabled selected value> -- select an option -- </option> 默认选择选项为空白 *不希望传递空值。

我通常如何处理这个:

  • 使用 html disabled 选定值
  • isset($_GET[.etc.])然后使用
  • 清理和修剪您的输入
  • 检查它是否是有效的选项in_array()或其他方法,然后
  • 允许它到达您的数据库

行为可能因您的喜好而异。例如,如果没有您想通知用户的值,则查找所有内容或两者兼而有之。考虑一下,有人从 url 传递了一个参数,一个不存在的城市。那你想要发生什么?


推荐阅读