我的表单中有 3 个(我不知道有多少可以更改。仅 3 个示例)复选框,我想在发布时使用 php 检测未选中的复选框。我怎样才能做到这一点?
user1845004
问问题
13677 次
3 回答
12
仅提交选中的复选框。因此,任何未提交的复选框都未选中。
于 2012-11-24T16:07:46.543 回答
11
秋葵是对的。但是,有一种解决方法,如下所示:
<form action="" method="post">
<input type="hidden" name="checkbox" value="0">
<input type="checkbox" name="checkbox" value="1">
<input type="submit">
</form>
换句话说:例如,有一个与复选框同名的隐藏字段和一个表示未选中状态的值0
。然而,重要的是让隐藏字段位于表单中的复选框之前。否则,如果复选框被选中,隐藏字段的值将在发布到后端时覆盖复选框值。
跟踪这一点的另一种方法是在后端有一个可能的复选框列表(例如,甚至用该列表填充后端的表单)。像下面这样的东西应该给你一个想法:
<?php
$checkboxes = array(
array( 'label' => 'checkbox 1 label', 'unchecked' => '0', 'checked' => '1' ),
array( 'label' => 'checkbox 2 label', 'unchecked' => '0', 'checked' => '1' ),
array( 'label' => 'checkbox 3 label', 'unchecked' => '0', 'checked' => '1' )
);
if( strtolower( $_SERVER[ 'REQUEST_METHOD' ] ) == 'post' )
{
foreach( $checkboxes as $key => $checkbox )
{
if( isset( $_POST[ 'checkbox' ][ $key ] ) && $_POST[ 'checkbox' ][ $key ] == $checkbox[ 'checked' ] )
{
echo $checkbox[ 'label' ] . ' is checked, so we use value: ' . $checkbox[ 'checked' ] . '<br>';
}
else
{
echo $checkbox[ 'label' ] . ' is not checked, so we use value: ' . $checkbox[ 'unchecked' ] . '<br>';
}
}
}
?>
<html>
<body>
<form action="" method="post">
<?php foreach( $checkboxes as $key => $checkbox ): ?>
<label><input type="checkbox" name="checkbox[<?php echo $key; ?>]" value="<?php echo $checkbox[ 'checked' ]; ?>"><?php echo $checkbox[ 'label' ]; ?></label><br>
<?php endforeach; ?>
<input type="submit">
</form>
</body>
</html>
...选中一两个复选框,然后单击提交按钮,看看会发生什么。
于 2012-11-24T16:15:16.303 回答
0
您可以使用以下函数完全在 PHP 中执行此检查:
function cbToBool($cb = true) {
if (isset($cb)) {
return true;
} else {
return false;
}
}
像这样使用它
$_POST["blocked"] = cbToBool($_POST["blocked"]);
于 2020-09-17T12:37:28.663 回答