使用php检查复选框的值

使用php检查复选框的值,php,jquery,Php,Jquery,我想在php中检查复选框的值。选择或不选择。我在某种程度上尝试 JQuery <script type="text/javascript"> $(document).ready(function(){ $("#save").click(function(){ var checkBox = $("#boxV").is(':checked'); $.ajax({ url: "htt

我想在
php
中检查复选框的值。选择或不选择。我在某种程度上尝试

JQuery

<script type="text/javascript">

    $(document).ready(function(){
        $("#save").click(function(){
            var checkBox = $("#boxV").is(':checked');

            $.ajax({
                url: "http://localhost/testing/test.php",
                type:"POST",
                async:true,
                data:{
                    "done":1,
                    "checkBox" : checkBox
                },
                success: function(data){
                        $('#result').append(data);
                }   
            });
        });
    });



 </script>

$(文档).ready(函数(){
$(“#保存”)。单击(函数(){
var checkBox=$(“#boxV”).is(':checked');
$.ajax({
url:“http://localhost/testing/test.php",
类型:“POST”,
async:true,
数据:{
“完成”:1,
“复选框”:复选框
},
成功:功能(数据){
$(“#结果”)。追加(数据);
}   
});
});
});
PHP

<?php
    if(!isset($_POST['checkBox'])){
        echo ('0');
    }else{
        echo ('1');
    }
    ?>

HTML

 <li><input type="checkbox" id = "boxV" > Check</li><br>
  • 检查


  • 问题是
    结果
    div在两次(已选择,未选择)中都填充了
    1
    。有什么问题吗?

    您可以有条件地传递
    复选框
    变量,如下所述:

    $(document).ready(function(){
            $("#save").click(function(){
                var checkBox = $("#boxV").is(':checked');
                if(checkBox) {
                    var data = {
                       'done': 1,
                       'checkBox': checkBox 
                    };
                }else{
                     var data = {
                       'done': 1,                       
                     };
                }
                $.ajax({
                    url: "http://localhost/testing/test.php",
                    type:"POST",
                    async:true,
                    data:data,
                    success: function(data){
                         $('#result').append(data);
                    }   
                });
            });
        });
    

    您的$\u POST['checkBox']将始终设置为0或1。因此,您的PHP应该如下所示-

        <?php
        if(isset($_POST['checkBox']) && $_POST['checkBox'] === '1'){
            echo ('1');
        }else{
            echo ('0');
        }
        ?>
    

    在PHP中,
    isset
    函数测试数组是否包含元素,而不是值是否为
    true
    。由于您正在设置:

    data:{
        "done":1,
        "checkBox" : …
    }
    
    isset
    将始终返回true

    您通常不会以正常的形式看到这种行为,因为浏览器会以不同的方式执行此操作:如果未选中该复选框,则浏览器将完全忽略它。然而,由于您使用的是Ajax,因此您正在实现自己的行为,即始终包含它

    在PHP中,可以使用以下测试:

    if(isset($_POST['checkBox']) && $_POST['checkBox']) {
        //  checked
    }
    else {
        //  unchecked
    }
    
    请注意,我已将测试更改为阳性。如果你真的想要一个消极的:

    if(!isset($_POST['checkBox']) || !$_POST['checkBox']) {
        //  unchecked
    }
    else {
        //  checked
    }
    
    或者,您可以重写JavaScript逻辑,使其仅在值为true时包含复选框

     $(document).ready(function(){
        $("#save").click(function(){
    
        var chkVal =  $('input[name$=chkBox]:checked').val();
        var checkBox;
         if(typeof(chkVal) != 'undefined'){
            checkBox = 1;
         }else{
            checkBox = 0;
         }
    
         $.ajax({
                url: "http://localhost/testing/test.php",
                type:"POST",
                async:true,
                data:{
                    "done":1,
                    "checkBox" : checkBox
                },
                success: function(data){
                        $('#result').append(data);
                }   
            });
        });
    });
    
    PHP代码

    <? php
      if($_POST['checkBox'] != 1){
        echo ('0');
      }else{
         echo ('1');
      } 
    ?>
    
    
    
    HTML

    检查
    isset函数检查变量是否已设置,但不检查变量的值。若变量的值为false(0),则会设置变量,因为变量有一个值。不管是真是假。您每次都在ajax中发送“checkBox”,因此每次调用时都会设置变量。为此,你必须使用这个

    if($_POST['checkBox']) {
       //true
    }
    


    当您通过
    复选框时
    表示其始终已设置。因此,您必须添加另一个条件来检查或不通过它set@SatpalHTML是added@AhmedGinani我该如何做?可能重复的尝试此操作并使用字段集添加一个值检查:
    if(isset($\u POST['checkBox'])&&$\u POST['checkBox']){/*Checked*/}否则{/*Not Checked*/}
    ;为什么要否决投票?这也是解决办法。一个问题只能用一个解决方案来解决不是强制性的。@Edwin-我已经描述了我的更改,但仅供参考,否决投票意味着此信息未被完全使用,请参见此处
    if($_POST['checkBox']) {
       //true
    }
    
    if($_POST['checkBox'] === true){
    //true
    }