PHP,MySQL和JQuery - 更新表而不刷新页面

时间:2014-01-16 22:50:10

标签: php jquery mysql

在我的网站上,我有一个“添加到收藏夹”/“从收藏夹中删除”按钮,用户可以在其收藏夹中添加/删除其他用户。

我的表格favorites有三列:

+-------+-----------+------------------+
|  id   |  id_user  | id_favorite_user |
+-------+-----------+------------------+
|   1   |     13    |       70         |
|   2   |      7    |       48         |
|   3   |     12    |       89         |
|   4   |     13    |       56         | 
|   5   |     13    |       33         | 
|  ...  |    ...    |      ...         |
+-------+-----------+------------------+

在此示例中,id为13的用户在他的收藏夹中有三个用户:70,56和33

以下是您点击添加/删除收藏夹的链接代码,我在很多页面上都有这个代码:

$my_user_id = $_SESSION['account']['id'];

//We test if the user $my_user_id has the user $id_user_here to his favorites or not. If he already has it we show a "Remove user from favorites" link, if not an "Add to favorites" link
$query = "SELECT `id` FROM `favorites` WHERE `id_user` = '$my_user_id' AND `id_favorite_user` = '$id_user_here' ";
$result = mysql_query($query) or die(mysql_error());
$row_result = mysql_fetch_assoc($result);
$totalrows_result = mysql_num_rows($result);
if ($totalrows_result == 0) { ?>
    <a href="addremovefavorites.php?type=addf&userid=<?= $id_user_here; ?>" title="Add to favorites"><img src="images/addtofavorites.gif"></a>                          
<? } else { ?>
    <a href="addremovefavorites.php?type=remf&userid=<?= $id_user_here; ?>" title="Remove from favorites"><img src="images/removefromfavorites.gif"></a>
<? } ?> 

这是我用来更新表的php脚本 - addremovefavorites.php:

<?php
//Here we connect to the database and check if the user is logged in...

$my_user_id = $_SESSION['account']['id'];

$type = testforsqlinjections($_GET['type']);
$userid = testforsqlinjections($_GET['userid']);

if ($type == "addf") {
    $query = "SELECT * FROM `favorites` WHERE id_user='$my_user_id' AND id_favorite_user='$userid' ";
    $result = mysql_query($query) or die(mysql_error());
    if (mysql_num_rows($result)<0) {
    $query = "INSERT INTO `favorites` (`id_user`, `id_favorite_user`) VALUES ('$my_user_id', '$userid')";
    $result = mysql_query($query) or die(mysql_error());
    header("location: myfavorites.php");
    }
}

if ($type == "delf") {
    $query = "DELETE FROM `favorites` WHERE `id_user` = '$my_user_id' AND `id_favorite_user` = '$userid' ";
    $result = mysql_query($query) or die(mysql_error());
    header("location: myfavorites.php");
}
?>

这就是我现在拥有的方式,它有效,但我不喜欢它。当用户点击链接添加/删除他/他的收藏夹时,他添加/删除了他,但随后他被重定向到myfavorites.php并且非常令人沮丧,因为他必须点击浏览器的“后退”按钮回到他之前看过的页面。

相反,我想在没有用户离开当前页面的情况下完成所有这些操作。我想更新表格,然后显示一条确认消息,表明用户已添加到收藏夹中/从收藏夹中删除。

我需要从哪里开始提示。我在这里查看了jQuery文档http://api.jquery.com/jQuery.ajax/,这就是我的方法:

<a href="#" onclick="javascript:clickHandler(addf, <?= $id_user_here; ?>); return false;">Add to favorites</a>
<a href="#" onclick="javascript:clickHandler(remf, <?= $id_user_here; ?>); return false;">Remove from favorites</a>

链接和:

function clickHandler(type, userid){
$.ajax({
    type: "GET",
    url: "addremovefavorites.php",
    data: 'type='+ type + '&userid=' + userid,
    .done(function( msg ) {
    alert( "This user was " + msg);
    });
});
}

用于JQuery代码。

我非常感谢你能给我关于我的剧本的任何帮助。

谢谢!

5 个答案:

答案 0 :(得分:0)

试试这个(未经测试)。更新。

function clickHandler(type, userid){
    $.ajax({
        type: "GET",
        url: "addremovefavorites.php",
        data: 'type='+ type + '&userid=' + userid,
        success: function(msg) {
            alert( "This user was " + msg);
        }
    });
}

请注意,警报中出现的任何内容 - 即var msg的内容 - 都是在addremovefavorites.php结束时回显的内容。

因此,如果addremovefavorites.php结束于:

echo 'Bob is your uncle';

那就是成功函数中var msg的内容。


然而,最好摆脱内联javascript。更清洁的代码,更易于维护。

更改这些:

<a href="#" onclick="javascript:clickHandler(addf, <?= $id_user_here; ?>); return false;">Add to favorites</a>
<a href="#" onclick="javascript:clickHandler(remf, <?= $id_user_here; ?>); return false;">Remove from favorites</a>

要:

<a href="#" id="add2fav" class="addrem">Add to favorites</a>
<a href="#" id="rem4fav" class="addrem">Remove from favorites</a>

在jQuery中:

$(document).on('click','#addrem', function() {
    var type = ( $(this).attr('id') == add2fav) ? 'add' : 'rem';
    var userid = "<?php echo $id_user_here; ?>"; //I am familiar with this syntax
    $.ajax({
        type: "GET",
        url: "addremovefavorites.php",
        data: 'type='+ type + '&userid=' + userid,
        success: function(msg) {
            alert( "This user was " + msg);
        }
    });
});

答案 1 :(得分:0)

在你的onclick属性中,javascript正在调用带有两个参数的clickhandler。每个调用中的第一个参数当前是一个变量。我认为你的意思是他们是字符串?在addfremf周围添加撇号。

答案 2 :(得分:0)

你可以用简单的ajax:

<a href="javascript:void(0);" onclick="addremove('1')" id="1" data-user="1" data-type="add">add book</a>

其中“1”表示用户标识

和js:

function addremove(id){
        var user = $(id).attr('data-user'); 
            var type = $(id).attr('data-type'); 
        $.ajax({
                url: "addremove?type=" + type + "&user=" + user + "",
                beforeSend: function() {
                        $('#status').html('process...');
                },
                success: function(data){
                        $('#status').html(data);
                }
        });
}

答案 3 :(得分:0)

@kamuken

我认为你已经在使用这段代码并且它正在运行。它没有做任何事情,然后我做了这个:

<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<script type="text/javascript">
function addremove(id){
    var user = $(id).attr('data-user');
    var type = $(id).attr('data-type');
    $.ajax({
            success: function(){
            alert('You want to ' + type + ' the user ' + user);
            }
    });
}
</script>
</head>
<body>

<a href="javascript:void(0);" onclick="addremove('54')" id="54" data-user="54" data-type="add">add book</a>

</body>

我得到:“你想未定义用户未定义”

答案 4 :(得分:0)

我做到了:)

这是我的链接代码:

if ($totalRows_recordarray == 0) { ?>
     <a href="javascript:void(0);" onclick="addremove('add_<?= $id_user_here; ?>')" id="add_<?= $id_user_here; ?>">add to favorites</a>         <? } else { ?>
     <a href="javascript:void(0);" onclick="addremove('rem_<?= $id_user_here; ?>')" id="rem_<?= $id_user_here; ?>">remove from favorites</a></a>
<? } ?>

这是JQuery代码:

<script type="text/javascript">
function addremove(id){
    var str = id;
var res = str.split("_");
    $.ajax({
    type: "GET",
    url: "addremovefavorites.php",
    data: { type: res[0], userid: res[1] }
})
.done(function( msg ) {
    alert( msg );
});
}
</script>

现在,如果不是“添加到收藏夹”,我会在添加用户之后从收藏夹链接中删除并且在我添加他之后“从收藏夹中删除”链接。有什么想法吗?

谢谢大家的帮助。