【发布时间】:2015-06-14 05:17:34
【问题描述】:
假设我有一个这样的表单,其中复选框是重复字段:
<form action="" method="post">
<?php for($i=0; $i<3; $i++) { ?>
<input type="checkbox" name="ch[]" value="1">
<?php } ?>
<button type="submit" name="submit">submit</button>
</form>
我在使用 WordPress 并使用自定义元框来处理它。所以我在元框的回调函数中声明了表单,并在另一个与save_post 和new_to_publish 动作挂钩挂钩的保存函数中接收值。
那么发生了什么:当我点击按钮时,metabox 回调提交了表单,并且挂钩函数接收了它。 (可以在add_meta_box() WordPress Codex 看到)假设我的保存函数包含:
<?php
if( isset($_POST['submit']) ) {
$chb = $_POST['ch'];
$result = array();
foreach ($chb as $cb) {
$result[] = array( 'isactive' => $cb );
}
var_dump($result);
}
?>
这表明,复选框在未选中时不会返回任何值。我考虑了这里提到的所有服务器端解决方案:Post the checkboxes that are unchecked
问题是,每当提交表单时,它都会将复选框的值传递给 array(),所以我无法检查数组值,例如:
if( !isset( $_POST['ch'] ) || empty( $_POST['ch'] ) ) {
$chb = 0;
} else {
$chb = 1;
}
我还尝试了带有 0 值的隐藏字段,伴随着 array_unique(),但似乎没有什么对我有用。
如何处理数组中未选中的复选框,使它们不能为空,并且我的 foreach 可以循环遍历所有这些复选框并相应地存储数据,并且正确?
我想避免使用 JavaScript 解决方案。
【问题讨论】:
-
@Fred-ii- 就这样吧。这不是问题。它正在提交表单,我拥有价值。我刚刚制作了表格,以最大限度地减少核心问题。
-
@Marty 我已经提到过我还尝试了带有
0值的隐藏字段,并附有array_unique(),但对我来说似乎没有任何效果。 有两个同名字段它将出现六个同名字段,array_unique()采用 1-1-1 组合并输出 1-0-1。 :( -
@Fred-ii- 请不要接受它。即使缺少
type,我仍然拥有价值。我检查了有无。 -
@MayeenulIslam 是的,我的错 :) 如果您以名称输出数组索引,则可以使用该解决方案,例如
name="ch[0]".