我的表单中有3个(我不知道有多少可以更改。只有3个例子)复选框,我希望在发布时检测未经检查的复选框。我怎么能这样做?
答案 0 :(得分:8)
Only checked checkboxes are submitted.因此,未提交任何未提交的复选框。
答案 1 :(得分:5)
Gumbo is right。然而,有一个解决方法,具体如下:
<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>
...选中一个或两个复选框,然后点击提交按钮,看看会发生什么。
答案 2 :(得分:0)
您可以使用以下功能完全在PHP中进行此检查:
function cbToBool($cb = true) {
if (isset($cb)) {
return true;
} else {
return false;
}
}
像这样使用它
$_POST["blocked"] = cbToBool($_POST["blocked"]);