假设我有一个这样的表单,其中复选框是重复字段:
<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
问题是,无论何时提交表单,它都会将复选框的值带到数组(),因此我无法检查数组值,如:
if( !isset( $_POST['ch'] ) || empty( $_POST['ch'] ) ) {
$chb = 0;
} else {
$chb = 1;
}
我还尝试使用0
值隐藏字段,并附带array_unique()
,但似乎没有任何内容对我有效。
如何处理数组中未选中的复选框,以便它们不能为空,并且我的foreach可以循环遍历所有'em并相应地存储数据,并更正?
我想避免使用JavaScripts解决方案。
答案 0 :(得分:1)
如果您为其中的索引命名复选框,请执行以下操作:
<input type="checkbox" name="chk_<?php echo $i ?>" value="1">
然后你可以像这样循环遍历它们:
<?php
$chkBoxes = array();
foreach ($_POST as $k => $v) {
if (strpos("chk_",$k) === 0) {
$cbIndex = str_replace('chk_', '', $k);
$chkBoxes[$cbIndex] = $v;
}
}
然后,为了测试是否选中了复选框并将其发送到服务器,您可以使用:
<?php
if (isset($chkBoxes[$cbIndex]))
请记住 - 仅当选中复选框时才会发送复选框的值:Does <input type="checkbox" /> only post data if it's checked?
答案 1 :(得分:0)
在表单中添加一个隐藏字段,其中包含复选框的数量,并使用索引$i
作为数组ch[]
:
<form action="" method="post">
<input type="hidden" name="num" value="<?= $num = 3 ?>">
<?php for($i=0; $i<$num; $i++) { ?>
<input type="checkbox" name="ch[<?= $i ?>]" value="1">
<?php } ?>
<button type="submit" name="submit">submit</button>
</form>
然后:
<?php
if( isset($_POST['submit']) ) {
$chb = $_POST['ch'];
$num = $_POST['num'];
$result = array();
for($i=0; $i<$num; $i++) {
$result[$i]['isactive'] = isset($chb[$i]) ? 1 : 0;
}
var_dump($result);
}
?>
答案 2 :(得分:0)
首先,我在这个论坛中复制了很多人的想法!我只是合成了这条路!
function getall() {
$data = $this->_db->get('<table_name>', array('ID', '>=', 0));
$results = $data->results();
$rows = $data->count();
return array($results, $rows);
}
create function中的代码,用于保存网站上未显示的所有辅助选项。
$fields_Κ = array('history' => serialize(array(
'checkboxes' => Input::get('checkboxes')
)),
);
$data = $this->_db->insert('ΚΕΛΥΦΟΣ', $fields_Κ);
return true;
显示结果的php-html代码
<form method="post">
<div class="form-group">
<label for="checkboxes[]">checkboxes title</label><br>
`<?php
for ($i=0; $i<$anoigmata->getall()[1]; $i++) {
echo "
<input type='hidden' name='checkboxes[$i]' value='0' />
<input type='checkbox' id='checkboxes[$i]' name='checkboxes[$i]' value='".$anoigmata->getall()[0][$i]->ΕΜΒΑΔΟΝ."' />".$anoigmata->getall()[0][$i]->ΠΕΡΙΓΡΑΦΗ."<br>";}?>`
`</div><button type="submit" class="btn btn-success">Submit</button></form>`
***ΕΜΒΑΔΟΝ和ΠΕΡΙΓΡΑΦΗ是我正在保存的表中的行名!!!
我希望我帮了一下......!