在我的网站上,我有一个“添加到收藏夹”/“从收藏夹中删除”按钮,用户可以在其收藏夹中添加/删除其他用户。
我的表格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代码。
我非常感谢你能给我关于我的剧本的任何帮助。
谢谢!
答案 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。每个调用中的第一个参数当前是一个变量。我认为你的意思是他们是字符串?在addf
和remf
周围添加撇号。
答案 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>
现在,如果不是“添加到收藏夹”,我会在添加用户之后从收藏夹链接中删除并且在我添加他之后“从收藏夹中删除”链接。有什么想法吗?
谢谢大家的帮助。