Подгрузка меню сайта с mssql

183
07 сентября 2017, 19:10

Добрый день, проблема в следующем, имеется БД MSSQL с полями: id(tinyint), tittle(ntext), parent_id (tinyint) id поле-это автоинкремент tittle - это описание поля parent_id - идентификатор родительского эллмента меню (меню многоуровневое) значение поля parent_id указывает, на родительский эллемент меню (id), например если parent_id = 4 значит этот эллеменет должен идти за эллементом с id=4 (многоуровневый массив)

что я хочу,хочу я что-бы меню подгружалось с БД, собственно вот листинг:

config.php

     <?php

    ////////////////////////// НАСТРОЙКА СОЕДИНЕНИЯ С БД/////////////////////////
    $serverName = "isuo-db.chtpz.ru,1433";
    $connectionInfo = array( "Database"=>"doc", "UID"=>"doc", "PWD"=>"isuodoc");
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
    if( $conn ) {  
    }else{
         echo "Соединение не удалось, ошибка:";
         die( print_r( sqlsrv_errors(), true));
    }

    function get_cat() {
        global $conn;
        //запрос к базе данных
        $sql = "SELECT * FROM dbo.menu_user";
        $result = sqlsrv_query( $conn, $sql );
            if(!$result) {
            return NULL;
             sqlsrv_errors();   
        }
        $arr_cat = array();
        if(sqlsrv_num_rows($result) != 0) {
            //В цикле формируем массив
            for($i = 0; $i < sqlsrv_num_rows($result);$i++) {
                $row = sqlsrv_fetch_array($result,sqlsrv_ASSOC);
                 print_r($row);
                //Формируем массив, где ключами являются адишники на родительские категории
                if(empty($arr_cat[$row['parent_id']])) {
                    $arr_cat[$row['parent_id']] = array();
                }
                $arr_cat[$row['parent_id']][] = $row;
            }
            //возвращаем массив
            print_r($row);
            return $arr_cat;
        }
    }

//////// ФОРМИРОВАНИЕ БЛОКА МЕНЮ ДЛЯ ПОЛЬЗОВАТЕЛЯ///////////////////////////


//вывод каталога с помощью рекурсии
function view_cat($arr,$parent_id = 0) {

    //Условия выхода из рекурсии
    if(empty($arr[$parent_id])) {
        return;
    }
    echo '<ul>';
    //перебираем в цикле массив и выводим на экран
    for($i = 0; $i < count($arr[$parent_id]);$i++) {
        echo '<li><a href="?category_id='.$arr[$parent_id][$i]['id'].
                    '&parent_id='.$parent_id.'">'
                    .$arr[$parent_id][$i]['title'].'</a>';
        //рекурсия - проверяем нет ли дочерних категорий
        view_cat($arr,$arr[$parent_id][$i]['id']);
        echo '</li>';
    }
    echo '</ul>';
}?>

вызываю функцию c index.php:

view_cat($result);

но почему-то не видит переменную:

PHP Notice:  Undefined variable: result in **C:\inetpub\wwwroot\stackoverflow\nw\modules\menu.php on line 32**

если просто вызваю функцию get_cat() то ничего не выдает, хотя по идее должен сформировать массив

при распечатке массива

$result = get_cat(); print_r($result);

тоже ничего не выдает

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

В целом структура такая: index.php

<?php
header("Content-Type:text/html;charset=utf8");
?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <link href="css/bootstrap-grid.css" rel="stylesheet">
    <link href="css/mainstyle.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">
    <link href="css/media.css" rel="stylesheet">
    <script src="js/jquery.min.js"></script>


    </head>
    <body>
    <header>
    <img src="img/logo.jpg" class="logo_img">
    </header>

    <div class="container">
        <div class="row">
            <div class="col-md-2 no-float">

            <nav>
     <?php

    include_once 'modules\menu.php';
    get_cat();


     ?>
     </nav>
            </div>
            <div class="col-md-10 no-float">

    <h1>Заголовок</h1>
TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT
    TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT
    TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT
    TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT
    TEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXTTEXT
            </div>
        </div>
    </div>

    </body>


    </html>

menu.php

<?php


 session_start();

 if ( isset( $_GET['l']) )
 {
     $_SESSION['levelacc'] = $_GET['l'];;
 }

 else {
     echo "Error enter";
 }

 $dostup=$_SESSION['levelacc'];
 switch ($dostup) {
case "user":

//вывод меню 
include 'core\config.php';
get_cat();
echo '<div style="width:300px;float:left; padding:10px; border:1px solid #074776">';


echo '</div>';


    break;


case "spec":
echo "MENU FOR SPEC";
    break;


case "oper":
  include 'modules\modlvl\l3.php';
    break;
}




?>
Answer 1

Пробуйте такую функцию:

function get_cat() {
    global $conn;
    $sql = "SELECT * FROM dbo.menu_user";
    $result = sqlsrv_query($conn, $sql);
    if (false === $result) {
        die( print_r(sqlsrv_errors(), true));
    }
    //var_dump(sqlsrv_num_rows($result));
    $arr_cat = array();
    while($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) {
        $arr_cat[(int) $row['parent_id']][] = $row; 
    }
    return $arr_cat;
}
READ ALSO
Oшибка: &#39;pobj&#39; was not declared in this scope [требует правки]

Oшибка: 'pobj' was not declared in this scope [требует правки]

Разбираю пример из учебника и столкнулся сразу же с ошибкой

196
Способ представления знаковых целых в C++

Способ представления знаковых целых в C++

В стандарте языка указано, что для для представления целочисленных типов (integral types) допускается использовать один из трёх способов:

301
Как собрать OpenSSL под MinGW-w64 в Windows?

Как собрать OpenSSL под MinGW-w64 в Windows?

Пробовал несколько найденных в сети инструкций - результат всегда одинаковый:

499
Перегрузка конструктора. Ошибка multiple definition of `Tile::Tile()&#39; и других реализаций

Перегрузка конструктора. Ошибка multiple definition of `Tile::Tile()' и других реализаций

Что не так с реализацией, почему пишет "множественное определение" всех методов за классом? Пишу в QtCreator

250