【问题标题】:Empty url parameter with array not marked empty with PHP empty() function带有未使用 PHP empty() 函数标记为空的数组的空 url 参数
【发布时间】:2021-11-01 02:39:20
【问题描述】:

我有一个简单的 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=&amp;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] => )

【问题讨论】:

    标签: php wordpress get


    【解决方案1】:

    Html:一个好的做法是禁用默认值 &lt;option disabled selected value&gt; -- select an option -- &lt;/option&gt; default select option as blank *最好不要传递空值。

    我通常如何处理这个问题:

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

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

    【讨论】:

    • 这里要强调的重要一点是他正在使用变量 after 修剪和消毒。部分清理应该是对 $_GET 存储值的 URL 解码。这与修剪配对很可能会产生一个空字符串,它将在 empty() 中传递 true。这里最重要的是你正在使用不干净的变量并使用它们,这很危险。我们清理的部分原因不仅是安全性,也是为了标准化结果,并使其以可用的方式使用。
    • 感谢 billybadass 的建议,这个解决方案效果很好。我还添加了数据的卫生和修整以提高安全性。现在一切正常,非常感谢!
    猜你喜欢
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    相关资源
    最近更新 更多