【问题标题】:PHP Like/Unlike button with jquery带有jquery的PHP Like/Unlike按钮
【发布时间】:2017-03-02 02:46:39
【问题描述】:

我正在关注 youtube 上的一个教程,为我的状态系统制作一个简单的喜欢/不喜欢按钮,我完成了大部分工作,但它不会更新我的喜欢,也不会在数据库中插入喜欢,请帮我说怎么了,我试了这么多..

获取状态的函数:

 function getStatus($conn) {
       $sql = "SELECT * FROM status ORDER BY sid DESC";
       $query = mysqli_query($conn, $sql);
       while ($row = $query->fetch_assoc()) {
           echo "<div class='post'>".$row['message']."<br>";

                $result = mysqli_query($conn, "SELECT * FROM status_like WHERE uid=1 and sid=".$row['sid']."");
                if (mysqli_num_rows($result) == 1) {
                    echo "<span><a href='' class='unlike' id='".$row['sid']."'>unlike</a></span>";
                } else {
                    echo "<span><a href='' class='like' id='".$row['sid']."'>like</a></span></div>";
                }
                }


       }

jQuery 代码

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
          <script type="text/javascript">
            $(document).ready(function(){
                $('.like').click(function(){
                    var sid = $(this).attr('id');
                    $.ajax({
                        url: 'test.php',
                        type: 'post',
                        async: false,
                        data: {
                            'liked': 1,
                            'sid': sid

                        },
                        success:function(){

                        }
                    });
                });
            });
          </script>

以及我认为问题所在的最后一个 php 代码:

if (isset($_POST['liked'])) {
        $sid = $_POST['sid'];
        $sql = "SELECT * FROM status WHERE sid=$sid";
        $query = mysqli_query($conn, $sql);
        $row = mysqli_fetch_array($query);
        $n = $row['likes'];
        $uid = 1;

        $sql2 = "UPDATE status SET likes=$n+1 WHERE sid=$sid";
        $sql3 = "INSERT INTO status_like (uid, sid, username) VALUES (1, '$sid', '$uid')";
        mysqli_query($conn, $sql2);
        mysqli_query($conn, $sql3);
        exit();


    }

【问题讨论】:

  • 在点击功能中设置警报..并在 if (isset($_POST['liked'])) { } 中回显并告诉我
  • 好吧,我添加了 alert('test');在点击功能内,当我点击“喜欢按钮”时我会收到警报,但我仍然不明白在哪里放置回声。 @vSugumar
  • 如果在里面。另外在问题代码和代码网络选项卡中打开错误报告并单击响应
  • 警告:使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了严重的SQL injection bug切勿$_POST$_GET任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
  • @tadman 你能帮我解释一下吗?我在哪里做了坏事?我该怎么做? :)

标签: php jquery


【解决方案1】:
if (isset($_POST['liked'])) {
        $sid = $_POST['sid'];
        $sql = "SELECT * FROM status WHERE sid=$sid";
        $query = mysqli_query($conn, $sql);
        $row = mysqli_fetch_array($query);
        //$n = $row['likes']; // your code            
        $n = (int) $row['likes']; // try like this.. might be likes in string so convert to int
        $uid = 1;

        //$sql2 = "UPDATE status SET likes=$n+1 WHERE sid=$sid"; // Your code

        // Do like this `status` in query because status is reserved keyword of MySql for more details you could visit this link https://dev.mysql.com/doc/refman/5.7/en/keywords.html
        $sql2 = "UPDATE `status` SET likes=$n+1 WHERE sid=$sid";
        $sql3 = "INSERT INTO status_like (uid, sid, username) VALUES (1, '$sid', '$uid')";
        mysqli_query($conn, $sql2);
        mysqli_query($conn, $sql3);
        exit();


    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多