复选框插入mysql并检查是否已选中

时间:2017-10-17 06:48:01

标签: php mysql checkbox

在我在这个网站上搜索这个解决方案之后,我找不到任何东西。这是基本的PHP代码,仅用于测试。

的index.php

    <input type="checkbox" name="chk" id="chk" value="1" />
<button type="button" name="" id="submit">TEST</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>  
 $(document).ready(function(){  
      $('#submit').click(function(){  
           var check = $('#chk').val();  

                $.ajax({  
                     url:"qry.php",  
                     method:"POST",  
                     data: {check:check},  
                     success:function(data)  
                     {  
                          //alert(data);  
                          window.location.reload();

                     }
                });   

      });   
 });  
 </script> 

qry.php

<?php  

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "check";

// Create connection
$connect = new mysqli($servername, $username, $password, $dbname);

// Check connection
if ($connect->connect_error) {
    die("Connection failed: " . $connect->connect_error);
} 

if($_REQUEST['chk'] == true){
    $stok = '1';
}
elseif ($_REQUEST['chk'] == false) {
    $stok = '0';
}
      $query = "INSERT INTO test(checked) VALUES('$stok')";  
      $result = mysqli_query($connect, $query);  
        if ($result === TRUE) {
            echo "Zahtev je uspešno poslat!";

        } else {
            echo "Error: " . $query . "<br>" . $connect->error;
        }   

 ?>  

如何将复选框选中true或false设置为mysql,然后在html中回显?它总是在mysql boolen中设置为0。

<input type="hidden" name="chk" id="chk" value="1" <?php if ($checked == '1') {echo 'checked';} else {} ?>/>

我尝试了这个网站上的所有内容,但没有任何效果。

3 个答案:

答案 0 :(得分:0)

您将值写入check,但请从$_REQUEST['chk']读取。那不会奏效。将其更改为$_REQUEST['check']

您正在使用val()获取复选框的状态,您应该使用checked

此外,您可能对SQL注入开放,开始使用预准备语句。

答案 1 :(得分:0)

在发送AJAX请求时添加另一行。

发送复选框的值时,请发送10

它将减少我们在PHP端的工作。

所以,代码应该是:

var check = $('#chk').is(":checked");  
check = (check) ? 1 : 0;

最终代码应为:

<input type="checkbox" name="chk" id="chk" value="1" />
<button type="button" name="" id="submit">TEST</button>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>  
$(document).ready(function(){  
$('#submit').click(function(){  
 var check = $('#chk').val();  
 check = (check) ? 1 : 0;
 $.ajax({  
  url:"qry.php",  
  method:"POST",  
  data: {check:check},  
  success:function(data) {  
   //alert(data);  
   window.location.reload();
  }
 });
});   
});
</script>

和PHP:

<?php  
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "check";
// Create connection
$connect = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($connect->connect_error) {
 die("Connection failed: " . $connect->connect_error);
} 
$stok = $_REQUEST['chk'];
$query = "INSERT INTO test(checked) VALUES('$stok')";  
$result = mysqli_query($connect, $query);  
if ($result === TRUE) {
 echo "Zahtev je uspešno poslat!";
}
else {
 echo "Error: " . $query . "<br>" . $connect->error;
}
?>

答案 2 :(得分:0)

试试这个Jquery。这将摆脱你所拥有的永远有价值的问题。这个代码的作用是当你点击&#34;提交&#34;按钮检查复选框的状态。如果选中该复选框,则代码将采用选中的复选框值并在ajax函数中发送该值,如果未选中,则将分配值0并使用ajax发送。

执行此操作将减少必须由后端PHP完成的工作。我还对您的PHP代码进行了一些更改。

&#13;
&#13;
$(document).ready(function() {
  $(document).on('click', '#submit', function() {
    if ($("#chk").is(":checked")) {
    var chk = $('#chk').val();
    }else{
     chk = 0;
    }
    $.ajax({
        url: "qry.php",
        method: "POST",
        data: {
          check: chk
        },
        success: function(data) {
          //alert(data);  
          window.location.reload();

        }
      });
  });
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="checkbox" name="chk" id="chk" value="1" />
<button type="button" name="" id="submit">TEST</button>
&#13;
&#13;
&#13;

您会看到我插入数据的方式与您的方式略有不同。我使用mysqli_准备好的语句,这使得SQL注入很难做到。

$query = $connect -> prepare("INSERT INTO test(checked) VALUES (?)";  
      $query -> bind_param("i", $_REQUEST['check']);
        if ($query -> execute()) {
            echo "Zahtev je uspešno poslat!";
        } else {
            echo "Error: " . $query . "<br>" . $connect->error;
        }

jsFiddle如果你想测试它。