Данные не найдены, когда данные должны быть – база данных MYSQL

Вопрос или проблема

Мои данные MYSQL не отображаются. Показано только else выражение.

<!DOCTYPE html>
<html lang="ru">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Документ</title>
</head>

<body>
  <?php
  include 'includes/database.php';
  $sql = "select * from post";
  $result = $mysqli->query(query: $sql);
  while ($row = $result->fetch_assoc()) {
    if ($row['id'] == $_GET['id']) {
      ?>
      <div class="blog-post-card">
        <div>
          <div>
            <p class="blog-post-title"><?php echo $row['title']; ?></p>
            <p class="blog-post-date"><?php echo $row['created_at']; ?></p>
            <p class="blog-post-excerpt"><?php echo $row['short_text']; ?></p>
            <?php echo '<a href="/../view-posts.php?id=' . $row['post_id'] . '" class="blog-post-link">Читать далее</a>'; ?>
          </div>
        </div>
      </div>
      <?php
    } else {
      echo ("записи не найдены");
    }

  }
  $mysqli->close();
  ?>
</body>

</html>

Я проверил код в отдельном файле в той же папке, и он работает. В моей базе данных есть один пост, и он отображается корректно в другом файле. Я не знаю, почему данные не отображаются. Дайте знать, если мне нужно включить какие-либо другие файлы.

Ответ или решение

Ваша проблема с отображением данных в MySQL может быть связана с несколькими ошибками в вашем коде. Давайте рассмотрим шаги решения и предложим исправления.

  1. Ошибка в запросе: Убедитесь, что ваш SQL-запрос возвращает данные. У вас есть ошибка в синтаксисе запроса query: $sql, который нужно исправить на просто $sql.

  2. Проверка переменной $_GET['id']: Вам необходимо убедиться, что переменная $_GET['id'] действительно передаётся и имеет значение, которое существует в вашей базе данных. Добавьте отладочный код, чтобы проверить, что именно передается.

  3. Структура циклов: Ваша текущая логика с проверкой условий внутри цикла while может привести к тому, что сообщение "no entries found" будет выводиться слишком много раз, если данные не соответствуют. Лучше будет выполнить проверку после завершения цикла.

  4. Вывод данных: Вам также может понадобиться обрабатывать случаи, когда данные отсутствуют, сразу после выполнения запроса.

Вот исправленный вариант вашего кода:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <?php
  include 'includes/database.php';

  // Убедитесь, что id передается через GET
  if (isset($_GET['id'])) {
      $id = intval($_GET['id']); // Приведение к целому числу для безопасности

      $sql = "SELECT * FROM post WHERE id = $id";
      $result = $mysqli->query($sql);

      // Проверка, вернул ли запрос результаты
      if ($result->num_rows > 0) {
          // Вывод данных
          while ($row = $result->fetch_assoc()) {
              ?>
              <div class="blog-post-card">
                  <div>
                      <div>
                          <p class="blog-post-title"><?php echo htmlspecialchars($row['title']); ?></p>
                          <p class="blog-post-date"><?php echo htmlspecialchars($row['created_at']); ?></p>
                          <p class="blog-post-excerpt"><?php echo htmlspecialchars($row['short_text']); ?></p>
                          <?php echo '<a href="/../view-posts.php?id=' . htmlspecialchars($row['post_id']) . '" class="blog-post-link">Fortsätt läs</a>'; ?>
                      </div>
                  </div>
              </div>
              <?php
          }
      } else {
          echo "Запись не найдена.";
      }
  } else {
      echo "ID не передан.";
  }

  $mysqli->close();
  ?>
</body>

</html>

Важные моменты:

  • SQL-Injection: Вы должны всегда обрабатывать и валидировать входящие данные из $_GET. Я использовал intval() для ограничений.
  • htmlspecialchars: Чтобы предотвратить XSS (межсайтовый скриптинг), используйте htmlspecialchars() при выводе данных, полученных от пользователя или базы данных.
  • Отладка: Если у вас еще будут возникать проблемы, попробуйте добавлять временные echo-выражения, чтобы понять, где происходит сбой.

Следуя этим советам и исправлениям, вы должны быть в состоянии заставить свой код корректно отображать данные из MySQL.

Оцените материал
Добавить комментарий

Капча загружается...