2

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

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

<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; ?>">

对于 ID 为 5 的条目,它将如下所示..

<input type="checkbox" class="active" name="active5" id="active5" checked="checked" value="5">

我需要进行设置,以便当您选中或取消选中它时,它会更新数据库中的“活动”值。如何在单击时获取每个复选框的值,并将该值发送到 MySQL 数据库。如果我name事先知道复选框,我可以很容易地做到这一点,但由于name部分是从数据库生成的,我不确定如何编写代码来确定哪个条目获得活动值。

这是我的 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');

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 ..

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

?>

我正在构建的屏幕截图

4

2 回答 2

1

这是错误的:

var active = $('#active').attr('value');

您需要检查单击的元素,并且必须检查它是否被检查(除非您使用它来传递 ID,否则该值并不重要):

var active = $(this).is(':checked');    // the checkbox is checked (boolean)

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

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'];
于 2012-06-01T17:49:27.183 回答
1

您可以向输入添加一个类并将值设置为 id:

<input class="active" type="checkbox" name="active5" id="active5" value="5" checked="checked">

然后,更改您的 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();
?>

这应该是您正在寻找的。可能有一些小的语法问题,因为我是在脑海中写下这个,但我希望你能得到大致的想法。:-)

于 2012-06-01T17:53:34.983 回答