检查默认状态时如何记住复选框状态?

时间:2014-05-09 17:31:59

标签: php checkbox

我有一个带有复选框的表单。

复选框有三个“状态”:

  1. 已选中为默认值。
  2. 未经用户检查。
  3. 由用户再次检查
  4. 我该怎么做?如果我使用!isset(),我可以取消选中该复选框,但它无法区分用户是否取消选中,或者是否将其视为默认选项。

    我想在提交时出现表单错误时使用它来重新填充表单输入的最后一个值。

    取消选中复选框的默认状态时,很容易。我可以这样做:

    if (isset($_POST['checkbox'])) echo ' checked'; //check box has been checked
    

2 个答案:

答案 0 :(得分:3)

提交后保持表单状态的最简洁方法是使用数组来存储输入值。首先设置默认值,然后如果表单已提交,则使用提交的内容覆盖默认值。在HTML表单中,始终从表单数组中输出值。

// create the array (for both viewing the form and maintaining the submitted values)
$form = array(
    'myCheckbox' => true // default to checked
    'firstName' => '',
)

// was the form submitted?
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    // overwrite the form array
    $form['myCheckbox'] = isset($_POST['myCheckbox']);
    $form['firstName'] = $_POST['firstName'];

    // at this point do any validation, if it fails, let the form show
}

现在为表格:

<form method="post">
    <input type="checkbox" name="myCheckbox" value="1" <?php echo $form['myCheckbox'] ? 'checked' : '' ?> />
    <input type="text" name="firstName" value="<?php echo htmlspecialchars($form['firstName']); ?>" />
</form>

在上文中,我添加了一个文本输入firstName来说明所有表单输入都应由数组管理。

答案 1 :(得分:0)

您可以使用隐藏输入的javascript来告知单击复选框的次数

<form action="">
<input id="bike" type="checkbox" name="vehicle" value="Bike" checked onchange="document.getElementById('bike-state').value=parseInt(document.getElementById('bike-state').value)+1">I have a bike
<input type="hidden" id="bike-state" name="count" value="0">
</form>

现在在服务器端,如果$ _POST ['bike-state']是奇数,那么它是未选中的,如果它是偶数且大于0则取消选中然后重新检查,否则如果仍为0则默认选中它