За последние 24 часа нас посетили 17849 программистов и 1704 робота. Сейчас ищут 962 программиста ...

Function возвращает массив, подскажите что я не так делаю.

Тема в разделе "PHP и базы данных", создана пользователем EvilScorpion, 3 дек 2016.

  1. EvilScorpion

    EvilScorpion Новичок

    С нами с:
    15 окт 2016
    Сообщения:
    44
    Симпатии:
    1
    Короче понятно что но, то то я не понял как решить.
    var_dump($cat)
    array(24) { [0]=> array(3) { ["id"]=> string(1) "1" ["parent_id"]=> string(1) "1" ["name"]=> string(20) "Рестораныaa" } [1]=> array(3) { ["id"]=> string(1) "2" ["parent_id"]=> string(1) "2" ["name"]=> string(18) ........
    view_cat.php
    PHP:
    1. require_once __DIR__ . '/../functions/database.php';
    2. function cat_getAll()
    3. {        getConnectSql();
    4.         global $mysqli;
    5.  
    6.         $res = $mysqli->query("SELECT * FROM `categories`")  or die(mysqli_error($res));
    7.             $articles = array();
    8.             while($row = $res->fetch_assoc())
    9.             {
    10.                 $articles[] = $row;
    11.             }
    12.             return $articles;
    13. }
    index.php

    PHP:
    1. require_once __DIR__ . '/models/view_cat.php';
    2. $cat = cat_getAll();
    3. var_dump($cat);
    4. echo $cat;
    5. include __DIR__ . '/views/header.php';
    предупреждение: Warning: Invalid argument supplied for foreach() in... views\header.php on line 59
    header.php
    PHP:
    1.     <?php if (isset($cat) && is_array($cat) && !empty($cat)) : ?>
    2.                           <?php foreach ($cats as $cat ): ?>
    3.                             <li><a href="/cat.php?id=<?php echo $cat['id']; ?>"><?php echo $cat['name']; ?></a></li>
    4.                          <?php endforeach; ?>
    5.                        <?php endif; ?>
    6.  
     
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @EvilScorpion, проверяете $cat, а в foreach $cats.
    --- Добавлено ---
    Проверок как-то маловато. Можно было бы пожёстче :D:
    PHP:
    1. <?php
    2. if (isset($cat) && is_array($cat) && !empty($cat) && !is_null($cat) && count($cat) > 0 /* и т.д.*/ ) :
    3.  
    4. endif;
     
    denis01 нравится это.
  3. EvilScorpion

    EvilScorpion Новичок

    С нами с:
    15 окт 2016
    Сообщения:
    44
    Симпатии:
    1
    И шо толку проблема не решается
     
  4. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Хотелось бы понять, как вы её решать пробовали. Имя переменной исправили? Покажите, как сейчас выглядит запись цикла.
     
    #4 Deonis, 3 дек 2016
    Последнее редактирование: 3 дек 2016
  5. EvilScorpion

    EvilScorpion Новичок

    С нами с:
    15 окт 2016
    Сообщения:
    44
    Симпатии:
    1
    PHP:
    1.         <h2>Категории</h2>
    2.                             <?php if (isset($cat) && is_array($cat) && !empty($cat) && !is_null($cat) && count($cat)) :?>
    3.                         <nav class="c_menu">
    4.                    
    5.                           <?php foreach ($cat as $myCat ): ?>
    6.                             <li><a href="/cat.php?id=<?php echo $myCat['id']; ?>"><?php echo $myCat['name']; ?></a></li>
    7.                          <?php endforeach; ?>
    8.                        
    9.                         </nav>
    10.                         <?php endif; ?>

    Сделал так, вроде заработало. нормально надеюсь.
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @EvilScorpion, по поводу цикла - да, а вот по поводу проверки... в общем, я был уверен, что вы поймёте, что это прикол.
    Посмотрите на свою функцию. Что она может возвращать? Всегда массив, пусть даже пустой и естественно, что он всегда будет существовать. Из этого можно сделать вывод, что isset и is_array абсолютно бесполезны. Проверки на "пустоту" (empty) будет достаточно с головой, да и она не особо нужна, т.к. в случае пустого массива, в цикле просто ничего не выведется.
     
    EvilScorpion нравится это.