单击动态创建的复选框时,是否通过AJAX/PHP更新MySQL中的值?

单击动态创建的复选框时,是否通过AJAX/PHP更新MySQL中的值?,php,javascript,jquery,mysql,ajax,Php,Javascript,Jquery,Mysql,Ajax,我正在为我正在处理的项目创建一个管理面板。它将在一个表中列出一组条目,每行都有一个复选框。此复选框将用于激活网站上显示的条目 我正在使用MySQL数据库中的数据设置复选框的id和name。例如 <input type="checkbox" class="active" name="active<?php echo $id; ?>" id="active<?php echo $id; ?>" <?php if ($active == 1): ?>check

我正在为我正在处理的项目创建一个管理面板。它将在一个表中列出一组条目,每行都有一个复选框。此复选框将用于激活网站上显示的条目

我正在使用MySQL数据库中的数据设置复选框的
id
name
。例如

<input type="checkbox" class="active" name="active<?php echo $id; ?>" id="active<?php echo $id; ?>" <?php if ($active == 1): ?>checked="checked"<?php endif; ?> value="<?php echo $id; ?>">
这是PHP..

$("input.active").click(function() {
// store the values from the form checkbox box, then send via ajax below
var check_active = $(this).is(':checked') ? 1 : 0;
var check_id = $(this).attr('value');

console.log(check_active);
console.log(check_id);

    $.ajax({
        type: "POST",
        url: "http://nowfoods.marketspacecom.com/nextstep/ajax.php",
        data: {id: check_id, active: check_active},
        success: function(){
            $('form#submit').hide(function(){$('div.success').fadeIn();});

        }
    });
return true;
});
<?php

include("dbinfo.inc.php");
mysql_connect($server,$username,$password);
@mysql_select_db($database) or die( "Unable to select database"); 

// CLIENT INFORMATION
$active = mysql_real_escape_string($_POST['active']);
$id = mysql_real_escape_string($_POST['id']);

$addEntry = "UPDATE entries SET active = '$active' WHERE id = '$id'";
mysql_query($addEntry) or die(mysql_error());


mysql_close();
这是错误的:

var active = $('#active').attr('value');
您需要检查单击的元素,并且必须检查它是否被选中(除非您使用它来传递ID,否则该值实际上并不重要):

可以将其设置为整数值,如:

var active = $(this).is(':checked') ? 1 : 0;
它的缩写是:

if ($(this).is(':checked')) {
  var active = 1;
} else {
  var active = 0;
}
在php中,您需要正确处理用户输入:

$active = (int) $_POST['active'];
编辑:似乎您在编辑的代码中有一个不应该存在的空格,当您设置:

...
data: {"active=": check_active, "id": check_id},
...
此外,由于这两个值都是整数/应该是整数,因此使用字符串函数对它们进行转义对于数据库没有实际用途,您应该测试整数或至少将它们转换为整数:

// CLIENT INFORMATION
$active = (int) $_POST['active'];
$id = (int) $_POST['id'];

您可以向输入中添加一个类,并将值改为id:

然后,更改jQuery:

$("input.active").click(function() {
// store the values from the form checkbox box, then send via ajax below
var check_active = $(this).is(':checked') ? 1 : 0;
var check_id = $(this).attr('value');

    $.ajax({
        type: "POST",
        url: "http://nowfoods.marketspacecom.com/nextstep/ajax.php",
        data: {id: check_id, active: check_active}
        success: function(){
            $('form#submit').hide(function(){$('div.success').fadeIn();});

        }
    });
return true;
});
至于PHP:

<?php

include("dbinfo.inc.php");
mysql_connect($server,$username,$password);
@mysql_select_db($database) or die( "Unable to select database"); 

// CLIENT INFORMATION
$active        = mysql_real_escape_string($_POST['active']);
$id = mysql_real_escape_string($_POST['id']);

// WHERE id=16 is just for testing purposes. Need to dynamically find which checkbox was checked and use that info to tell the query which ID to update. 
$addEntry  = "UPDATE entries SET active = '$active' WHERE id = '$id'";
mysql_query($addEntry) or die(mysql_error());

mysql_close();
?>

请不要再使用古老的mysql_*函数,社区已经开始了弃用过程。改用mysqli或PDO!!您可以接受SQL注入!看看这个。这使用了文本框,并不是您想要做的,但它仍然涉及通过ajax根据输入查询数据库。也许这会让事情变得明朗一点。好的,我已经试过了,但是当我点击一个复选框时,该框不会变为选中或取消选中,数据库中的值也不会更新。我认为数据库中的值没有被更新,因为复选框没有改变。不确定是什么导致了这种情况。另外,jQuery部分是否写在
$(document).ready()中?
返回true修复了复选框未更新的问题,但我的数据库中的活动值未更新。它仍然未更新数据库中的活动值。如果我手动将$id设置为16,那么无论单击哪个复选框,16的活动值都将更改。似乎在查询或PHP的
部分出错了。检查数据是否正确到达(使用Firebug)。另外,请重新检查我给出的代码-可能存在一些小的语法问题。我怀疑查询本身是否有问题,因为您说过当您硬编码id时它会工作,所以我怀疑AJAX部分在某个地方出了问题。
$("input.active").click(function() {
// store the values from the form checkbox box, then send via ajax below
var check_active = $(this).is(':checked') ? 1 : 0;
var check_id = $(this).attr('value');

    $.ajax({
        type: "POST",
        url: "http://nowfoods.marketspacecom.com/nextstep/ajax.php",
        data: {id: check_id, active: check_active}
        success: function(){
            $('form#submit').hide(function(){$('div.success').fadeIn();});

        }
    });
return true;
});
<?php

include("dbinfo.inc.php");
mysql_connect($server,$username,$password);
@mysql_select_db($database) or die( "Unable to select database"); 

// CLIENT INFORMATION
$active        = mysql_real_escape_string($_POST['active']);
$id = mysql_real_escape_string($_POST['id']);

// WHERE id=16 is just for testing purposes. Need to dynamically find which checkbox was checked and use that info to tell the query which ID to update. 
$addEntry  = "UPDATE entries SET active = '$active' WHERE id = '$id'";
mysql_query($addEntry) or die(mysql_error());

mysql_close();
?>