Получить комментарии по идентификатору страницы

Здравствуйте я создал базу данных, которая хранит информацию, отправленную формой на моей странице.
Структура базы данных такова :

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

Поэтому, когда я иду на определенную страницу моего веб-сайта, например http://miostio.com/page.php?id=15
здесь я могу поместить комментарий с помощью формы, которая отправляет информацию, которую вы можете увидеть в моей базе данных.

Теперь в моей базе данных хранится идентификатор страницы, в которую я вложил комментарии ,но когда я пытаюсь увидеть комментарий на этой странице с помощью функции : getComments($conn);, здесь отображаются все комментарии, сохраненные в базе данных, а не только комментарии с идентификатором страницы.

Я хочу, чтобы отображаемые комментарии соответствовали идентификатору страницы, в page with id(15) отображать комментарий страницы с идентификатором(15), в page with id(10) отображать комментарий страницы с идентификатором(10) искл …

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 код, который содержит функцию, вызываемую формой

                        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 ответа

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

    ID always = = = id

    Вы должны дать реальное удостоверение личности там…

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

    Рассмотрит возможность защиты от SQL-инъекции, как это:

    "SELECT * FROM comments WHERE id = " . (int)$id . "ORDER BY cid DESC"
    
  2. У вас есть по крайней мере две ошибки (я еще не знаю, все ли в порядке и работает):

    1-й: ваш оператор sql не включает переменную, которую вы ищете, он просто говорит «если 1=1». Поэтому измените его на:

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

    2-й: у вас еще нет $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>";
       }
    }