Почему не отображаются данные с БД?

У меня есть такой код:

<?php
function get_post() {
    global $link; 
    $sql = "SELECT * FROM projects WHERE categoty = 'top' ORDER BY id desc";    
    $result = mysqli_query($link, $sql);
    $posts = mysqli_fetch_all($result, MYSQLI_ASSOC);
    return $posts;
}


Сначала была ошибка
Call to undefined function mysqli_fetch_all()


Я поискала информацию и сменила на
while ($posts = $result->fetch_assoc()) {
$results_array[] = $posts;
}


На странице где выводятся данные из БД у меня есть такой код:
<?php
$posts = get_post();
?>

<?php foreach ($posts as $post) : ?>
   <div class="portfolio_project wow fadeInUp">
           <a href="/project.php?post_id=<?= $post['id'] ?>">
                       <h1><?php echo $post['title'] ?></h1>
            </a>
     </div>
<?php endforeach; ?>


После того как я поправил код в первом файле, у меня появилась новая ошибка
Invalid argument supplied for foreach()


Поискав информацию я изменила на:

<?php if (is_array($posts) || is_object($posts)){
    foreach ($posts as $post)
    { ?>
          <div class="portfolio_project wow fadeInUp">
             <a href="/project.php?post_id=<?= $post['id'] ?>">
                    <h1><?php echo $post['title'] ?></h1>
             </a>
            </div>
<?php }} ?>


Ошибку перестало выбивать, но и перестало выводить данные из БД
Хотя если я подключаюсь к локальной базе данных, все отлично работает
  • Вопрос задан
  • 155 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
function get_post() {    
    global $link;
    
    $sql = "SELECT * FROM projects WHERE categoty = 'top' ORDER BY id desc"; 
    
    $result = mysqli_query($link, $sql);
   
    $posts = array(); // <---- инициализируем posts как пустой массив
    while ($row = $result->fetch_assoc()) {
        $posts[] = $row; // <---- наполняем массив данными из бд
    }
        
    return $posts;
}


На странице вывода достаточно будет этого варианта Вашего кода
<?php
$posts = get_post();
?>

<?php foreach ($posts as $post) : ?>
   <div class="portfolio_project wow fadeInUp">
           <a href="/project.php?post_id=<?= $post['id'] ?>">
                       <h1><?php echo $post['title'] ?></h1>
            </a>
     </div>
<?php endforeach; ?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
JaxAdam
@JaxAdam
Junior Full-Stack Developer
У вас переменная $posts = NULL
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы