按页面ID获取评论

时间:2016-12-30 22:10:30

标签: php

您好我已经创建了一个数据库,用于存储表单在我的页面上发送的信息。 数据库的结构如下:

cid(comment id)    uid(value='Anonymous')   id(of the page)   date     message(text of the message)

所以,当我访问我网站的特定页面时,例如http://miostio.com/page.php?id=15 在这里,我可以通过一个表单发表评论,该表单发送您可以在我的数据库中看到的信息。

现在在我的数据库中存储了我已经把评论放在其中的页面的id,但是当我尝试通过函数看到该页面中的评论时:getComments($ conn); ,这里显示保存在数据库中的所有注释,而不仅仅是带有页面id的注释。

我希望显示的评论对应于页面的id,在id为(15)的页面中显示id为(15)的页面的评论,在id为(10)的页面中显示页面的评论id(10)exc ...

PHP - >发送数据的表单

echo "<form method='POST' action='".setComments($conn)."'>
                <input type='hidden' name='id' value='".$row['id']."'>
                <input type='hidden' name='uid' value='Anonymous'>
                <input type='hidden' name='date' value='".date('Y-m-d H:i:s')."'>
                <textarea name='message'></textarea><br>
                <button name='commentSubmit' type='submit' class='comm-btn'>Comment</button>
                </form>";

                getComments($conn);

其他PHP CODE,包含由表单

调用的函数
                        function setComments($conn) {
                    if (isset($_POST['commentSubmit'])){
                        $uid = $_POST['uid'];
                        $date = $_POST['date'];
                        $message = $_POST['message'];
                        $id = $_POST['id'];

                        $sql = "INSERT INTO comments (uid, date, message, id) VALUES ('$uid', '$date', '$message', '$id')";
                        $result = $conn->query($sql);
                    }
                }

                    function getComments ($conn) {
                        $sql = "SELECT * FROM comments WHERE id = id ORDER BY cid DESC";
                        $result = $conn->query($sql);
                        while($row = $result->fetch_assoc()) {
                            echo "<div class='comment-box'><p>";
                                echo $row['uid']."<br>";
                                echo $row['date']."<br>";
                                echo nl2br($row['message']);
                            echo "</p></div>";
                        }
                    }

2 个答案:

答案 0 :(得分:0)

"SELECT * FROM comments WHERE id = id ORDER BY cid DESC"

id始终=== id

你需要在那里给出真正的身份......

"SELECT * FROM comments WHERE id = $id ORDER BY cid DESC"

会考虑像这样保护它免受sql注入:

"SELECT * FROM comments WHERE id = " . (int)$id . "ORDER BY cid DESC"

答案 1 :(得分:0)

你至少犯了两个错误(我还不知道其余的是否合适并且有效):

1st:你的sql语句不包含你正在使用的变量,只是说有点'如果1 = 1'。所以改成它:

$sql = "SELECT * FROM comments WHERE id = $id ORDER BY cid DESC"

第二名:你还没有该功能的$ id。 所以包括:

function getComments ($conn) {
   $id = intval($_POST['id']); // cast to int for security
   $sql = "SELECT * FROM comments WHERE id = $id ORDER BY cid DESC";
   $result = $conn->query($sql);
   while($row = $result->fetch_assoc()) {
       echo "<div class='comment-box'><p>";
       echo $row['uid']."<br>";
       echo $row['date']."<br>";
       echo nl2br($row['message']);
       echo "</p></div>";
   }
}