【问题标题】:How do I exclude hidden field from PHP foreach loop如何从 PHP foreach 循环中排除隐藏字段
【发布时间】:2012-10-30 16:32:17
【问题描述】:

我有一个简单的表单,它使用 foreach($_POST as $key=>$value) 将数据插入数据库我在表单上有一个隐藏字段

<input name="isset" type="hidden" value="true" />

我使用 if(isset($_POST['isset'])) {

我正在尝试解决如何从循环中排除隐藏字段...?

我看过这篇文章,但不明白我会在哪里使用 if (strpos($key, 'hdn_') == false) // 继续

How to exclude <input type="hidden"> from a for each loop in PHP

任何指导将不胜感激......

【问题讨论】:

  • 如果你真的这样做foreach($_POST as $key=&gt;$value)我相信你的网站会有很大的安全漏洞。这只是一个非常糟糕的做法。
  • @AlvinWong 感谢您的帮助...将寻找替代方案

标签: php


【解决方案1】:

如果您知道要排除的键的确切名称,array_diff_key 是一个方便的选择:

$keysToRemove = array('isset'); // you can add as many as you want
$values = array_diff_key($_POST, array_flip($keysToRemove));

foreach ($values as $k => $v) { ... }

但是,由于$values 旨在进入数据库,您应该使用允许密钥的白名单,而不是黑名单。你可以通过array_intersect_key做到这一点:

$keysToKeep = array('field1', 'field2', 'field3'); // as many as you want
$values = array_intersect_key($_POST, array_flip($keysToKeep));

foreach ($values as $k => $v) { ... }

【讨论】:

  • 感谢您的帮助这是我一直在寻找的答案.. 使用 foreach 循环插入数据是否会给网站带来安全风险...?
  • @Ledgemonkey:这取决于你如何使用数据。
【解决方案2】:

在foreach内部:

foreach ($_POST as $key => $value) {
    if ($key != 'isset') {
        //code here
    }
}

(我从你的问题中得到的)

或者从您的数组中,您可以unset() 具有“isset”数组键的元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2012-03-16
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多