javascript 单击动态创建的复选框时,通过 AJAX/PHP 更新 MySQL 中的值?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10855000/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Update value in MySQL via AJAX/PHP when a dynamically created checkbox is clicked?
提问by Dustin
I am creating an admin panel for a project that I am working on. It will list a bunch of entries in a table and each row will have a checkbox in it. This checkbox will be used to activate an entry to be displayed on the website.
我正在为我正在处理的项目创建一个管理面板。它会在表格中列出一堆条目,每行都会有一个复选框。此复选框将用于激活要显示在网站上的条目。
I am setting the id
and name
of the checkbox with data from the MySQL database. For example..
我设置的id
,并name
从MySQL数据库数据的复选框。例如..
<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; ?>">
For the entry with ID of 5 it will look like this..
对于 ID 为 5 的条目,它看起来像这样..
<input type="checkbox" class="active" name="active5" id="active5" checked="checked" value="5">
I need to set this up so that when you check a box or uncheck it that it updates the "active" value in the database. How do I grab the value of each checkbox, when clicked, and send that value to the MySQL database. I can do this easily if I know the checkboxes name
beforehand, but since the name
is partly generated from the database I'm not sure how to write the code to determine which entry gets the active value.
我需要进行设置,以便在您选中或取消选中某个框时,它会更新数据库中的“活动”值。单击时如何获取每个复选框的值,并将该值发送到 MySQL 数据库。如果我name
事先知道复选框,我可以很容易地做到这一点,但由于name
部分是从数据库生成的,我不确定如何编写代码来确定哪个条目获得活动值。
Here is my jQuery..
这是我的 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;
});
Here is the PHP..
这是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();
?>
?>
采纳答案by Pateman
You could add a class to the input and set the value to the id instead:
您可以向输入添加一个类并将值设置为 id:
<input class="active" type="checkbox" name="active5" id="active5" value="5" checked="checked">
<input class="active" type="checkbox" name="active5" id="active5" value="5" checked="checked">
Then, change your jQuery:
然后,更改您的 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;
});
As for PHP:
至于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();
?>
This should be what you're looking for. There may be some minor syntax issues, because I'm writing this off the top of my head, but I hope you get the general idea. :-)
这应该是你要找的。可能有一些小的语法问题,因为我正在写这篇文章,但我希望你能大致了解。:-)
回答by jeroen
This is wrong:
这是错误的:
var active = $('#active').attr('value');
You need to check the clicked element and you have to check whether it is checked or not (the value doesn't really matter that much unless you use it to pass the ID):
您需要检查被点击的元素,并且必须检查它是否被选中(除非您使用它来传递 ID,否则该值并不重要):
var active = $(this).is(':checked'); // the checkbox is checked (boolean)
You can set it to an integer value like:
您可以将其设置为整数值,例如:
var active = $(this).is(':checked') ? 1 : 0;
Which is short for:
简称:
if ($(this).is(':checked')) {
var active = 1;
} else {
var active = 0;
}
And in php you need process you user input correctly:
在 php 中,您需要正确处理用户输入:
$active = (int) $_POST['active'];
Edit:It seems you have a space that should not be there in your edited code, does it work when you set:
编辑:您编辑的代码中似乎有一个不应该存在的空间,当您设置时它是否有效:
...
data: {"active=": check_active, "id": check_id},
...
Also, as both values are integers / should be integers, there is no real use escaping them for the database using a string function, you should test for integers or at the very least cast them to integers:
此外,由于两个值都是整数/应该是整数,因此使用字符串函数将它们转义到数据库没有实际用途,您应该测试整数或至少将它们转换为整数:
// CLIENT INFORMATION
$active = (int) $_POST['active'];
$id = (int) $_POST['id'];