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

时间:2012-06-01 17:46:53

标签: php javascript jquery mysql ajax

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

我正在使用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">

我需要对此进行设置,以便在您选中一个复选框或取消选中它时,它会更新&#34;活动&#34;数据库中的值。如何在单击时获取每个复选框的值,并将该值发送到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();

&GT;

Screenshot of what I am building

2 个答案:

答案 0 :(得分: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'];

答案 1 :(得分: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();
?>

这应该是你正在寻找的。可能会有一些轻微的语法问题,因为我正在写下这个问题,但我希望你能得到一般的想法。 : - )