2017-10-17 152 views
0

在我搜索这个网站上的这个解决方案后,我没有发现。这里是基本的PHP代码,仅供测试。复选框插入在mysql中,并检查是否选中

的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; 
     } 

?> 

如何设置选中复选框真或假到MySQL,然后在HTML中如果有回声?它在mysql中总是被设置为0。

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

我尝试了一切从这个网站,没有任何作品。

+0

您想要将复选框值添加到数据库,然后将其回显到“HTML”,稍后是您想要执行的操作吗? – Sand

+0

你可以在mysql中使用enum'true','false'作为复选框字段 –

回答

0

试试这个Jquery。这将摆脱你遇到的总是价值1的问题。这段代码所做的是当你点击“提交”按钮时,它会检查你的复选框的状态。如果选中该复选框,则代码将采用选中的复选框值并在未检查的情况下将其发送到ajax函数中,然后将赋值0并使用ajax发送。

这样做会减少工作必须由后端PHP完成。我也对PHP代码做了一些更改。

$(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(); 
 

 
     } 
 
     }); 
 
    }); 
 
})
<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>

你会看到我在插入数据的方式是从你做的方式略有不同。我正在使用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如果你想测试它。

+0

点击没有任何反应,查询不受支持 – NickCaves

+0

您是否收到任何错误?您是否检查了浏览器中的开发人员工具网络选项卡,以查看查询是否已提交。 – Sand

+0

我没有得到任何错误,只是我的数据库没有得到一些值或阿贾克斯实时窗口不工作。 https://i.imgur.com/xOtyQ9u.png – NickCaves

0

您将值写入check,但是从$_REQUEST['chk']读回。这是行不通的。将其更改为$_REQUEST['check']

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

此外,您可能打开SQL注入,开始使用准备好的语句。

+0

我犯了一个错误,但是当我改为'$ _REQUEST ['check']'现在它总是值1,选中或取消选中 – NickCaves

+0

应该是因为你只是检查值而不管元素的状态如何。 – Sand

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; 
} 
?> 
+0

不起作用。价值永远是0. – NickCaves

+0

它在我的工作结束。请尝试执行整个代码。 – Pupil

+0

在你的最终代码中应该是这样的'var check =('#chk')。is(“:checked”);检查=(检查)? 1:0;'not this'var check =('#chk')。val();检查=(检查)? 1:0;'。 – Sand

相关问题