【问题标题】:remembering state of checkbox from database从数据库中记住复选框的状态
【发布时间】:2018-02-12 21:46:56
【问题描述】:

我目前有一个简单的复选框,当单击和取消单击时,它会将状态保存到数据库中。刷新页面时,我是否也可以加载/记住该状态?如果最后一个状态是选中的,刷新页面后它会显示为选中状态。

我不想使用本地存储。我想直接访问数据库。

<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>


<script>
$(document).ready(function(e) {

$("[name='checkboxtest']").change(function(){
    if( $("[name='checkboxtest']").prop('checked') ){checkboxstatus = '1';}
    else{checkboxstatus = '0';}
$.ajax({
        type: "POST",
        url: "checkbox.php",
        data: {checkboxstatus: checkboxstatus},
        })
});//end change
});//end ready
</script>





<?php 
if($row['checkboxstatus'] == 1) { 
    echo "<td><input type = 'checkbox' class='complete' checked='checked' name ='checkboxtest' value= '1'/></td>";
} else {
    echo "<td><input type = 'checkbox' class='incomplete' name ='checkboxtest' value= '0'/></td>";
}
?>

<?php
$lock = $_POST['checkboxstatus'];

$host = "localhost";
$user = "user";
$password = "password";
$dbname = "dbname";

$conn = mysqli_connect($host,$user,$password,$dbname);
if (mysqli_connect_errno()) {echo "No connection" . mysqli_connect_error();}

$stmt = mysqli_prepare($conn, "UPDATE table
           SET column = ?
           WHERE row = ?");
mysqli_stmt_bind_param($stmt, 'ds', $lock, 'row');
mysqli_stmt_execute($stmt);
?>

【问题讨论】:

  • 你想要的都可以。您的代码的哪一部分不起作用?

标签: javascript php jquery ajax mysqli


【解决方案1】:

您将复选框的nameclass 混淆了。

如果您通过$_POST['checkboxstatus'] 在PHP 中访问它,则需要将name 属性设置为checkboxstatus= 符号周围还有一些不必要的字符串连接和额外空格,我已在此处删除:

if($row['checkboxstatus'] == 1) { 
    echo "<td><input type='checkbox' class='complete' checked='checked' name='checkboxtest' value='1'/></td>";
} else {
    echo "<td><input type='checkbox' class='incomplete' name='checkboxtest' value='0'/></td>";
}

另外,你应该使用 mysqli 的绑定参数。您当前的查询对 SQL 注入开放。

$stmt = mysqli_prepare($conn, "UPDATE table
           SET column = ?
           WHERE row = ?");
mysqli_stmt_bind_param($stmt, 'ds', $lock, 'row');
mysqli_stmt_execute($stmt);

【讨论】:

  • 谢谢你,特别是SQL注入的提示。我进行了更改,并且它像以前一样工作。我仍在试图弄清楚如何在页面刷新时保持复选框状态。如果数据库中的复选框设置为 1,则将框显示为已标记。如果该复选框在数据库中设置为 0,则将该框显示为未标记。
  • $row['checkboxstatus'] 来自哪里?这应该来自数据库。
  • 我添加了一个获取“$row['checkboxstatus']”值的 require_once 文件。感谢帮助。慢慢学习。已接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2013-09-30
  • 2014-06-27
  • 2022-12-03
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
相关资源
最近更新 更多