我有一个文章表,在客户端显示在行中。每篇文章都有一个唯一的ID,并包含一个复选框,用于指示是否将此文章选为收藏夹。如果它是收藏夹,则已选中复选框。如果没有,则取消选中。现在我需要js或jquery和ajax来更新数据库中的表,如果复选框条件更改特定于每一行。另一个挑战是我在cakePHP MVC环境中工作。
<script type="text/javascript" src="jquery-1.2.1.min.js"></script>
<script type="text/javascript">
function checkbox_click (id, favorite)
{
// see if checkbox is checked
if(favorite==1)
{
$.ajax({
type:'POST',
url:'check_favorite.php', // this external php file isn't connecting to mysql db
data:'id= ' + id + '&favorite=1',
});
}// if
// the checkbox was unchecked
else
{
$.ajax({
type:'POST',
url:'check_favorite.php', // this external php file isn't connecting to mysql db
data:'id= ' + id + '&favorite=0',
});
}//else
}
</script>
- html--这是一个foreach循环。
echo "<input type='checkbox' id='$rowid;' name='favorite' checked='checked' onclick='checkbox_click('id','favorite',this();' />";
else
echo "<input type='checkbox' id='$rowid;' name='favorite' onclick='checkbox_click('id','favorite',this.checked);' />";
- 由ajax调用的php文件 -
<?php
//Database Variables - with the variables entered it doesn't connect
$dbhost = 'localhost'; // usually localhost
$dbuser = 'username'; // database username
$dbpass = 'password'; // database password
//Establish connection to MySQL database
$con = @mysql_connect($dbhost, $dbuser, $dbpass);
if (!$con)
die('Unable to connect.' . mysql_error());
mysql_select_db('devcake', $con);
// Get the variables.
$query = "UPDATE mytable SET favorite=".$_POST['favorite'] . "
WHERE id=".$_POST['id'] . ";";
mysql_query($query);
mysql_close($con);
?>
答案 0 :(得分:5)
这是我使用的代码(感谢塞缪尔)
$('input[name=favorite]').live("click",function(){
var id = $(this).attr('id');
if($(this).attr('checked')) {
var favorite = 1;
} else {
var favorite = 0;
}
$.ajax({
type:'GET',
url:'favorites.php',
data:'id= ' + id + '&favorite='+favorite
});
//console.log('id: ' + id + ' Publico: '+publico + 'Value: '+value);
});
答案 1 :(得分:1)
这是一种愚蠢的行为!
首先,让我们加强html。默认情况下,复选框在选中时会发送值“on”(除非您在输入标记中指定了value
,否则您没有)。继续完全删除onClick事件,因为我们将使用jQuery来简化操作并更好地将您的行为与演示文稿分开。
其次,让我们正确设置你的php文件。如果您实际上没有修改用户名和密码,那么它们的值可能实际上是
$dbhost='localhost';
$dbuser='root';
$dbpass='';
一旦该连接正常,我们需要修复我们处理发布数据的方式。我喜欢这样做的方法是将它拉出到单独的变量中,这样,如果出现问题,我可以做一个print variable;
并看看它有什么价值(如果有的话)。
在php文件中获取发布数据并查询它的更好方法如下:
$id=$_POST['id'];
$favorite=$_POST['favorite'];
$query="UPDATE mytable SET favorite='$favorite' WHERE id='$id'";
这样做会将收藏列的值更改为“打开”或“”。因此,转到您实际输出复选框的位置,并插入一些php以检查是否已在数据库中检查该框。像这样。
echo "<input type='checkbox' id='$rowid;' name='favorite'";
if(//check in database if 'favorite' column is set to 'on'){
print "checked='checked'";
}
echo "/>";
请注意缺少onClick事件。我们将用jquery处理它。
$('input[name=favorite]').click(function(){
//if a checkbox with name 'favorite' is clicked, do the following.
//grab the id from the clicked box
var id=$(this).attr('id');
//grab the value from the checkbox (remember, if it is checked it will be 'on', else ''
var favorite=$(this).val();
//setup the ajax call
$.ajax({
type:'POST',
url:'check_favorite.php',
data:'id= ' + id + '&favorite='+favorite
});
}
});
有。呼。我认为应该照顾其中的一些,如果不是很多的话。
答案 2 :(得分:0)
将您的echo语句更改为以下内容并尝试一下,让我知道这是怎么回事:
echo "<input type='checkbox' id='$rowid;' name='favorite' checked='checked' onclick='checkbox_click('$rowid','favorite',this();' />";
else
echo "<input type='checkbox' id='$rowid;' name='favorite' onclick='checkbox_click('$rowid','favorite',this.checked);' />";