php - 如何将项目/帖子添加到收藏夹

标签 php jquery mysql ajax database

我正在尝试创建一个按钮,允许用户使用 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 中,您正尝试使用

获取此数据元素
  1. var postid = _this.data('$postid');
  2. 数据:'$postid='+ postid,

代替

  1. var post_id = _this.data('id');
  2. 数据:'id='+ post_id,

因为你的数据属性不是data-$postid,而是data-id

add.php 中同样的错误:

  1. $userid = $_SESSION['$id'];
  2. $postid = $_SESSION['$postid'];

没有单引号:

  1. $userid = $_SESSION[$id];
  2. $postid = $_SESSION[$postid];

因为,当你对变量进行单引号时,它就是字符串“$id”, 这不在 $_SESSION 中。

并且您必须从随 AJAX 请求发送的 $_POST 数据中获取 $id(postid)。缺少的代码是:json_decode传入POST并抓取id,然后使用它...


调试提示:

  1. 测试数据是否插入到 HTML 中
  2. var_dump($_POST); 添加到 add.php 以查看 AJAX 请求发布的数据。 “id”应该是它的一部分。
  3. json_decode() 传入$_POST获取ID
  4. 然后在其他变量上使用它

关于php - 如何将项目/帖子添加到收藏夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34277879/

相关文章:

php - Mysql ssl连接与真正的连接给出错误

php - 表 MYSQL (PhpMyadmin) 中的内连接最大值?

javascript - jquery 查找功能不起作用

MySQL:从具有相同列名的连接表中选择非空值

mysql - 哪个 NoSql 用于存储数十亿个整数对数据?

php - 在 codeigniter 中调用数据库日期函数

php - 我需要关闭 prestashop 中的数据库 session 吗

javascript - WP + ACF 如何在前端产品页面检索数据

jquery - 如何根据 jquery 中的值获取文本框名称

jquery - 使用 jQuery 获取 native 屏幕分辨率