如何在复选框条件更改时使用ajax更新mysql数据库?

时间:2011-06-21 00:09:39

标签: jquery mysql ajax cakephp

我有一个文章表,在客户端显示在行中。每篇文章都有一个唯一的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 + '&amp;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 + '&amp;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);
?>

3 个答案:

答案 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);' />";