带有重复输入名称的PHP POST

时间:2017-02-17 09:36:59

标签: php html

我有像这样的复选框输入:

<input type="checkbox" name="service_options[]" value="it_maintenance" />

然后当我发布表单时,这段代码:

foreach($_POST["service_options"] as $so) {
    if($so) {
        echo 'yes';
    } else {
        echo 'no';
    }
}

它在检查复选框时工作正常并且它回显“是”但如果未选中复选框,则“否”不会显示

5 个答案:

答案 0 :(得分:1)

复选框仅在启用时发布。解决这个问题的通常方法是包含一个带有FALSE值的隐藏输入。表单将发布最后输入的值,因此请确保将隐藏位置放在复选框之前:

<input type="hidden" name="service_options[1]" value="no" />
<input type="checkbox name="service_options[1]" value="yes" />

这样每条记录将始终出现在帖子中。确保实际命名每个复选框/隐藏对,因为它们必须具有相同的名称才能生效。

答案 1 :(得分:0)

为此,不必破坏数组,只需检查数组:

$check = $_POST["service_options"];

if($check) {
       echo 'yes';
  } else {
       echo 'no';
  }

希望,它会对你有帮助。

答案 2 :(得分:0)

参考Prateek Verma上面的评论

  

它没有显示,因为当你没有$_POST["service_options"]中的值时,它将如何实现foreach()   条件?

要解决此问题,您需要先检查是否选中了复选框,然后检查是否已选中,然后启动循环。否则显示no

<?php
    if (isset($_POST['submit'])) {
        if (isset($_POST['service_options'])) {
            foreach ($_POST["service_options"] as $so) {
            }
            if ($so) {
                echo 'yes';
            }
        } else {
            echo 'no';
        }
    }
    ?>
    <form method="post">
    <input type="checkbox" name="service_options[]" value="it_maintenance" />
        <button type="submit" name="submit">ad</button>
    </form>

更新:

从你的评论下面我的回答说明:

  

我基本上想知道用户是否取消选中该框   已经检查,如果他们已经检查了盒子,如果不是   已经检查过了

我已经做了另一种非常快速和简单的方法,当我选中/取消选中复选框时,我使用了ajax来做你想要做的事情我们将ajax发送到php脚本并且它会给我们带来结果,现在当用户检查我们会在取消选中时看到yes,我们会收到no作为回复。

html side。

<script  src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>

<form method="post">
<input type="checkbox" name="service_options[]" value="it_maintenance" id="sevices" />

</form>

<div id="response"></div>
<script type="text/javascript">

    $('document').ready(function(){

        $('#sevices').click(function(){

               var formData = $('form').serialize();
                    $.ajax({

                        type : 'post',
                        data : formData,
                        url  : 'checkbox.php',
                        dataType : 'json',
                        encode : true,
                        success : function(data){
                            if(data == "yes"){
                                //its check print back
                                $('#response').html(data);
                            }else{

                                //not checked print still

                                $('#response').html(data);

                            }
                        },
                    });

        });

        });
</script>

服务器端:checkbox.php

<?php

    if (isset($_POST['service_options'])) {
        foreach ($_POST["service_options"] as $so) {
        }
        if ($so) {
            $message =  'yes';
        }
    } else {
        $message =  'no';
    }

    echo json_encode($message);

?>

希望这有帮助

答案 3 :(得分:0)

我猜你有几个复选框,如下:

<input type="checkbox" name="service_options[]" value="it_maintenance" />
<input type="checkbox" name="service_options[]" value="foo" />
<input type="checkbox" name="service_options[]" value="bar" />

首先,您需要检查是否没有选中它们,然后您需要检查每个值:

<?php
$possible_values = array('it_maintenance', 'foo', 'bar');
if (!isset($_POST['service_options'])) {
    echo 'None selected';
} else {
    foreach ($possible_values as $val) {
        if (in_array($val, $_POST['service_options'])) {
            echo $val . ' selected';
        } else {
            echo $val . ' not selected';
        }
    }
};
?>

答案 4 :(得分:-2)

如果取消选中您的复选框,则POST上将不会显示该复选框

如果您仍想检查POST上是否存在复选框,您也可以使用:

foreach($_POST["service_options"] as $so) {
    if(isset($so)) {
        echo 'yes';
    } else {
        echo 'no';
    } 
}