如何排除<;输入类型=“;隐藏的“>;来自PHP中的for each循环


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

我有一个HTML表单,如下所示:

<form action="index.php" method="post">
<input type="hidden" value="Hidden Value" name="A Hidden Value" />
<select name="dropdownOption">
  <option value="First Choice +200">First Choice</option>
  <option value="Second Choice +300">Second Choice</option>
</select>
<p><input type="checkbox" value="Rocket +100"> Rocket</p>
</form>

我循环浏览这个表单的值,如下所示:

 foreach($_POST as $key => $value) {
 }

如何从foreach循环中排除隐藏的输入?

顺便说一句,所有版本的PHP都支持输入名称中的空格吗(例如,是否有效?)在我的PHP版本中,它会自动用下划线替换空格,这很好,它对所有版本的PHP都这样做吗?

谢谢你的帮助。

php中无法区分不同类型的HTML输入字段。我的建议是在隐藏字段的名称中使用某种前缀或其他标识符。然后,您可以检查循环中字段的名称中是否存在此前缀。你可以做

if (strpos($key, 'hdn_') === false) // proceed 
  1. 避免在标识符中使用空格
  2. 如果您只想"筛选"hidden字段,请尝试以下操作:

<?php
// the not-hidden ones
$allowed_field_names = array("some_field", "another_field"); 
// Now, we're going to 'filter' the "hidden" fields
// The rest (the "allowed" ones are stored in $newPost
$newPost = array_intersect_key($_POST, array_flip($allowed_field_names));
foreach ($newPost as $key=>$value)
{
     // Do sth
}
?>

没有内置的方法可以满足您的要求。这就是"编程"发挥作用的地方
解决这个问题的一种方法是传递您在GET中隐藏元素中的内容
也就是说,将其添加到表单元素的action属性中。