Система комментариев отображает несколько сообщений одного сообщения php. Вот код

Я написал что-то вроде

$sql = "SELECT `id`, `name`, `comment`, `time` FROM `comments` id='".$_GET['id']."'";

Но он все еще не работает, говорит undefined id, что мне делать?

<?php
require 'head.php';
require 'navbar.php';
require 'config.php';

if (isset($_COOKIE['taxi'])){
        echo '<div class = "container"  style = "margin-top: 10%;">
                <div class = "col-lg-4"></div>
                   <div class = "panel panel-default col-lg-4">
                    <div class = "panel-heading">Submit Your Comments</div>
                      <div class = "panel-body">
                        <form method = "post" action = "comment.php">
                          <div class = "form-group">
                            <label for = "exampleInputEmail1">Name</label>
                            <input type = "text" name = "name" class = "form-control" id = "exampleInputEmail1" placeholder = "name">
                          </div>
                          <div class = "form-group">
                            <label for = "exampleInputPassword1">Comment</label>
                            <textarea name = "comment" class = "form-control" rows = "3"></textarea>
                          </div>
                          <button type = "submit" class = "btn btn-primary" name = "submit">Submit</button>
                        </form>
                      </div>
                </div>
                <div class = "col-lg-4"></div>
                </div>';

        $sql = "SELECT `id`, `name`, `comment`, `time` FROM `comments`";
        $query = $con->query($sql);

        while ($row = mysqli_fetch_assoc($query))
        {
            echo "<div class='container'>";
            echo "<div class='col-lg-4'></div>";
            echo "<div class='col-lg-4' style='margin-top:5%;'>";
            echo "<p>Name: " . $row['name'] . "</p>";
            echo "<p>Comment: " . $row['comment'] . "</p>";
            echo "<p>Time: " . $row['time'] . "</p>";
            echo "</div>";
            echo "<div class='col-lg-4'></div> ";
            echo "</div>";
        }

    if (isset($_POST['submit'])){
        $name = $_POST['name'];
        $comment = $_POST['comment'];

        $sql = "INSERT INTO `comments`(`id`, `name`, `comment`, `time`) VALUES (NULL,'$name','$comment',CURRENT_TIMESTAMP)";
        $query = $con->query($sql); 


    }
}
else{
        echo "<p style='margin-top:5%; text-align:center; font-size:40px;'>Access denied to write comment, but you can see comments</p>";
        echo "<a href='login.php'><p style='text-align:center;'> Sign in to write a comment </p></a>";

        $sql = "SELECT `id`, `name`, `comment`, `time` FROM `comments`";
        $query = $con->query($sql);


        while ($row = mysqli_fetch_assoc($query))
        {
            echo "<div class='container'>";
            echo "<div class='col-lg-4'></div>";
            echo "<div class='col-lg-4' style='margin-top:5%;'>";
            echo "<p>Name: " . $row['name'] . "</p>";
            echo "<p>Comment: " . $row['comment'] . "</p>";
            echo "<p>Time: " . $row['time'] . "</p>";
            echo "</div>";
            echo "<div class='col-lg-4'></div> ";
            echo "</div>";
        }
    }
?>

С какого URL вы загружаете страницу? Вы также открыты для инъекций SQL. Параметризуйте этот запрос.

chris85 15.04.2018 18:19

Это только на localhost. Я знаю, что он открыт для инъекций.

Aidyn Ibrayev 15.04.2018 18:21

Хорошо, есть ли в URL-адресе ?id=...?

chris85 15.04.2018 18:23

не думаю.

Aidyn Ibrayev 15.04.2018 18:25

просто потому, что я не писал в WHERE ничего, он публикует несколько отдельных сообщений при перезагрузке страницы.

Aidyn Ibrayev 15.04.2018 18:26

Без ?id=$_GET пуст, поэтому вы получаете notice. Без where вы выбираете каждую строку в таблице.

chris85 15.04.2018 18:28

Вы должны написать предложение WHERE: $sql = "SELECT id, name, comment, time` FROM comments WHERE id = '". $ _ GET [' id ']."' ";` И у вас должен быть ?id=3 в вашей ссылке, чтобы идентификатор был распознан в предложении WHERE \

Ibrahim Mohamed 15.04.2018 18:34

Судя по всему, @AidynIbrayev пытается вставить новую строку, а не выбрать определенную, так зачем ему добавлять WHERE и $_GET['id'] и т. д.? Обновлено: ЛИЦЕПАЛЬМ просто прочитал строку 2 вопроса

DrRoach 15.04.2018 18:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
30
1

Ответы 1

Проблема либо в A: У вас нет столбца id в вашей базе данных, поэтому возникает ошибка, когда вы пытаетесь выбрать id с помощью этой строки:

`$sql = "SELECT `id`, `name`, `comment`, `time` FROM `comments`";`

Возможная проблема B: Столбец id установлен в качестве первичного ключа в вашей БД. Это означает, что столбец id автоматически увеличивается на 1 для каждой вставленной записи. Но когда вы вставляете новую строку, вы пытаетесь установить id на NULL:

$sql = "INSERT INTO `comments`(`id`, `name`, `comment`, `time`) VALUES (NULL,'$name','$comment',CURRENT_TIMESTAMP)";

Попробуйте изменить его на это:

$sql = "INSERT INTO `comments`(`name`, `comment`, `time`) VALUES ('$name','$comment',CURRENT_TIMESTAMP)";

Возможная проблема C (скорее всего): Вы не устанавливаете параметр $_GET['id'] при загрузке страницы. По сути, это ?id=x, который вы видите во многих URL-адресах.

Кроме того, как уже упоминали другие люди, ваш запрос является инъекционным, я знаю, вы сказали, что это только местный, но полезно с самого начала приобрести хорошие привычки.

Другие вопросы по теме