提交后如何保持数组和动态Checkbox保持选中状态?

时间:2019-04-23 03:03:16

标签: php zend-framework

我有一个动态复选框(可以是++),需要在用户提交后保持选中状态。

我已经尝试了一些技巧,例如在HTML的复选框代码之前使用隐藏的输入。现在,我坚持执行isset(_POST),并且复选框没有保持选中状态。

这是我的HTML:

<input type="hidden" name="hidden_name[]" id="hidden_name0">                                                                

<input type="checkbox" name ="name[]" id="name0">

<label for="name">Name</label>

--------更新-------- 在我的PHP文件中,代码如下:

$valueName = array();
        if(isset($_POST["hidden_name"]))
        {
                    foreach($_GET['hidden_name'] as $value)
                {
                    array_push($valueName,$value);
                }
        }

该代码无效:/

如何在用户选中并提交表单后使该复选框保持选中状态?我应该用PHP写什么?复选框之前,我真的需要隐藏的输入吗?

2 个答案:

答案 0 :(得分:0)

我假设您有一个包含一些复选框的表单,然后尝试检查选中了哪个复选框。这是示例代码

<form action="" method="post">
    <label for="name">Name 1</label>
    <input type="checkbox" name ="name[]" value="name1">

    <label for="name">Name 2</label>
    <input type="checkbox" name ="name[]" value="name2">

    <label for="name">Name 3</label>
    <input type="checkbox" name ="name[]" value="name3">

    <label for="name">Name 4</label>
    <input type="checkbox" name ="name[]" value="name4">


    <button type="submit" name="submit">Submit</button>
</form>

和php代码

<?php
    if(isset($_POST["submit"])){
        $valueName = array();
        foreach($_POST['name'] as $value){
        array_push($valueName,$value);
        print_r($valueName);
    }
?>

答案 1 :(得分:0)

isset可能返回false,因为提交的值为NULL。我建议在隐藏的输入字段上添加value='1'-还是要使用相应的复选框值更新该字段?

或者,您还有其他选择:

  1. 将每个动态复选框的name更改为一个标识符。

    <input type="checkbox" name="name-x" <?php echo isset( $_POST['name-x'] ) ? 'checked="checked"' : '' ?> />
    

    其中x是您的动态ID。注意,已经添加了PHP代码并使用三元运算符,可以选中是否设置了$_POST['name-x']复选框。

  2. 向复选框添加一个值。

    <input type="checkbox" name="name[]" id="name0" value="name0" />
    <input type="checkbox" name="name[]" id="name1" value="name1" />
    <input type="checkbox" name="name[]" id="name2" value="name2" />
    

    但是,您需要在PHP代码中匹配此值。

    <?php
    if ( isset( $_POST['name'] ) ) {
        $values = array();
        foreach( $_POST['name'] as $value ) {
            array_push( $values, $value );
        }
    }
    ?>
    

    然后,您必须再次修改复选框以具有嵌入式PHP。

    <input type="checkbox" name="name[]" id="name0" value="name0" <?php echo in_array( "name0", $values ) ? 'checked="checked"' : '' ?> />
    <input type="checkbox" name="name[]" id="name1" value="name1" <?php echo in_array( "name1", $values ) ? 'checked="checked"' : '' ?> />
    <input type="checkbox" name="name[]" id="name2" value="name2" <?php echo in_array( "name2", $values ) ? 'checked="checked"' : '' ?> />
    

您还可以创建一个函数来显示这些内联代码,以使其更加整洁。 HTH!