我正在尝试创建一个按钮,允许用户使用 php 和 jquery (ajax) 收藏某些帖子。我一直在尝试使用 This answer在这里让它全部工作,但我在获取特定于要收藏的帖子的帖子 ID 时遇到了麻烦,而是它总是提供要在页面上加载的最后一个帖子的帖子 ID。这是我的代码,但我怀疑我可能只是在调整它时犯了一个错误。
我有 3 个表;用户、帖子和收藏夹。在用户中我有用户名密码和 id,在帖子中我有 id(和内容),在收藏夹中我有 id、userid 和 postid。 查询:
<script>
$(document).ready(function() {
$('.favourite').on('click', null, function() {
var _this = $(this);
var postid = _this.data('$postid');
$.ajax({
type : 'POST',
url : '/add.php',
dataType : 'json',
data : '$postid='+ postid,
complete : function(data) {
if(_this.siblings('.favourite'))
{
_this.html('<img src="add2.png" />');
}
else
{
_this.html('<img src="add1.png />');
}
}
});
});
});
</script>
主要的 PHP(index.php):
<?php
$getposts = mysql_query("SELECT * FROM Posts ORDER BY id DESC") or die(mysql_query());
while ($row = mysql_fetch_assoc($getposts))
{
$id = $row['id'];
$user = $_SESSION['user'];
$findid = mysql_query("select * from Users where username='$user'");
if ($rows = mysql_fetch_assoc($findid));
{
$userid= $rows['id'];
$postid= $id;
}
echo '<a href="#" class="favourite" data-id="' . $postid . '"><img src="add1.png" /></a>';
}
?>
(还有其他代码,与本节无关)
添加.php:
<?php
session_start();
require_once('connect.php');
$userid = $_SESSION['$id'];
$postid = $_SESSION['$postid'];
$query_favorite = "SELECT userid, postid FROM Favourites";
$favorite = mysql_query($query_favorite) or die(mysql_error());
$row_favorite = mysql_fetch_assoc($favorite);
$totalRows_favorite = mysql_num_rows($favorite);
if(in_array($_POST['id'], $row_favorite))
{
$Del="DELETE FROM Favourites WHERE userid='$userid' AND postid='$postid'";
$result = mysql_query($Del);
}
else
{
$Add = "INSERT INTO Favourites (userid, postid) VALUES ('$userid', '$postid')";
$result = mysql_query($Add);
}
?>
在此先感谢您的帮助!
最佳答案
在 main.php 中,您使用的是 data-id="' . $postid . '"
。
哪个将 postId 插入到 HTML 中,对吗?
但是在您的 Javascript 中,您正尝试使用
获取此数据元素var postid = _this.data('$postid');
数据:'$postid='+ postid,
代替
var post_id = _this.data('id');
数据:'id='+ post_id,
因为你的数据属性不是data-$postid
,而是data-id
。
add.php
中同样的错误:
$userid = $_SESSION['$id'];
$postid = $_SESSION['$postid'];
没有单引号:
$userid = $_SESSION[$id];
$postid = $_SESSION[$postid];
因为,当你对变量进行单引号时,它就是字符串“$id”, 这不在 $_SESSION 中。
并且您必须从随 AJAX 请求发送的 $_POST
数据中获取 $id
(postid)。缺少的代码是:json_decode传入POST并抓取id,然后使用它...
调试提示:
- 测试数据是否插入到 HTML 中
- 将
var_dump($_POST);
添加到add.php
以查看 AJAX 请求发布的数据。 “id”应该是它的一部分。 json_decode()
传入$_POST
获取ID- 然后在其他变量上使用它
关于php - 如何将项目/帖子添加到收藏夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34277879/