1

Тема: Вывод юзеров древовидно

Дело такое:
-
Логинимся:

<?php
include_once('include/config.php');
include_once('include/function.php');
$id_user = $_POST['id_user'];
$password = md5($_POST['password']);
$select = mysql_query("SELECT * FROM ntvusers WHERE id_user = '$id_user'")or die(mysql_error());
$ds = mysql_fetch_assoc($select);
echo "<br />";
if($id_user == $ds['id_user'] && $password == $ds['password']){
    //Если галочка стоит запоминаем юзера
      if($_POST['sess'] == "on"){
           $_SESSION['id'] = $ds['id_user'];
           $_COOKIE['id'] = $_SESSION['id'];
           //Перекидываем Юзера на главную
           ?>
            <script>document.location.href="index.php";</script>
           <?php
    }else{
          $_SESSION['id'] = $ds['id_user'];
           ?>
            <script>document.location.href="index.php";</script>
           <?php
     }
}else{echo exit('Введённые Вами данные не действительны');}
?>

В config.php лежит связь с MySQL её описывать нет смысла

После чего сам index.php:

<?php include_once('include/config.php');?>
<?php include_once('include/function.php');?>
<?php
  if (!$_SESSION['id']) {
?>
<?php include_once('tmp/index.tpl');
}else{
      $id = $_SESSION['id'];
      $select = mysql_query("SELECT * FROM ntvusers WHERE id_user='$id'");
      $row = mysql_fetch_assoc($select);
      include_once('tmp/reg_index.tpl');
       if($_POST['del']){delete_acc($_SESSION['id']);
           ?>
           <?php
           exit;
       } 
else{ echo "";}
}
?>

А далее вывод tmp/reg_index.tpl как html страницу с деревом юзеров:

<head>

        <title> Ваш номер входа  <?=$row['id_user'];?>, Ваше имя <?=$row['name'];?></title>

        <style type="text/css">
    .treeview { padding: 0; clear: both; font-family: Arial, sans-serif; width: 100%; }
    .treeview * { font-size: 100.1%; }
    .treeview ul
    {
        overflow: hidden; width: 100%; margin: 0; padding: 0 0 1.5em 0;
        list-style-type: none;
    }
    .treeview ul ul { overflow: visible; width: auto; margin: 0 0 0 0; padding: 0 0 0 0.75em; }
    /* класс для ul после которых нет li в родительских ветках */
    .treeview ul.l { border-left: 1px solid; margin-left: -1px; }
    .treeview li.cl ul { display: none; }
    .treeview li { margin: 0; padding: 0; }
    .treeview li li { margin: 0 0 0 0.5em; border-left: 1px dotted; padding: 0; }
    .treeview li div { position: relative; height: 1.5em; min-height: 16px; //height: 1.3em; }
    .treeview li li div { border-bottom: 1px dotted; }
    .treeview li p
    {
        position: absolute; z-index: 1; top: 0.8em; //top: 0.65em; left: 1.75em;
        width: 100%; margin: 0; border-bottom: 1px dashed; padding: 0;
    }
    .treeview a { padding: 0.1em 0.2em; white-space: nowrap; //height: 1px; }
    .treeview img.i
    {
        border-right: 2px solid; border-bottom: 0.5em solid;
        margin-bottom: -0.5em; vertical-align: middle;
    }
    .treeview a.sc
    {
        position: absolute; top: 0.06em;
        margin-left: -1em; padding: 0; text-decoration: none;
    }

    /* colors */
    .treeview li p,
    .treeview img.i,
    .treeview .sc
    { background: #fafafa; }
    .treeview ul.l,
    .treeview li p,
    .treeview img.i
    { border-color: #000000; }
    .treeview ul li li,
    .treeview ul li li div
    { border-color: #000000; }
    .treeview a,
    .treeview a.sc,
    .treeview a.sc:hover
    { color: #000000; }
    .treeview a:hover
    { color: #cc0000; }
</style>
<script type="text/javascript">
    function UnHide( eThis ){
        if( eThis.innerHTML.charCodeAt(0) == 9658 ){
            eThis.innerHTML = '&#9660;'
            eThis.parentNode.parentNode.parentNode.className = '';
        }else{
            eThis.innerHTML = '&#9658;'
            eThis.parentNode.parentNode.parentNode.className = 'cl';
        }
        return false;
    }
</script>
</head>


<body>
<div width="1800" border="2" align="left" class="treeview"> <!-- Начало Дерева -->
    <ul>
        <li>
    <div><p><a href="#" class="sc" onclick="return UnHide(this)">&#9660;</a> <B><font color="red" >Лидер группы</font></B>: № <?=$row['id_user'];?> : <?=$row['name'];?>;</p></div>
        <ul><li><div><p><a href="#" class="sc" onclick="return UnHide(this)">&#9660;</a>№ и Имя того кто по ветке в право</p></div> <!--Правая ветка-->
            <ul><li><div><p><a href="#" class="sc" onclick="return UnHide(this)">&#9660;</a>№ и Имя того кто по ветке в право  </p></div> <!--Правая ветка-->
                    </ul> <!--Конец правых веток  следующая будет под верхней-->

    <li><div><p><a href="#" class="sc" onclick="return UnHide(this)">&#9660;</a>№ и Имя того кто по ветке вниз</p></div> <!--Нижняя ветка-->
        <ul><li><div><p><a href="#" class="sc" onclick="return UnHide(this)">&#9660;</a>№ и Имя того кто по ветке в право </p></div> <!--Правая ветка-->
</ul>
        <ul><li><div><p><a href="#" class="sc" onclick="return UnHide(this)">&#9660;</a>№ и Имя того кто по ветке в право</p></div> <!--Правая ветка-->
                </li>
            </ul>
            </li>
    </ul>
</div> 

    </body>
</html>

В PMA такие ячейки: id_user , name , n_jr (это номер младшего юзера), ну и password (который нужен только для входа)
Задача у меня такова:
При входе юзера по id например 8, дерево должно выстроится по номерам младших так, чтобы №8 был лидером (он уже в "корне" (вверху) дерева),
а все младшие в иерархию один под одним опираясь на n_jr.
Если есть у кого то младший, то он уйдет вниз-вправо (согласно скрипта дерева в reg_index.tpl) и так сколько бы их небыло в PMA.

К примеру: id_user , name , n_jr
8, Федя, 15
15, Вася, 24,25
   24, Ваня, 27, 31, 40
     27, Коля, 30
     31, Галя, 35
     40, Люба, 44
   25, Лёша, 49
...итд...

Уважаемые Гурру, помогите с задачей, googlить не выручает.
Вожусь и ничего сам (я новичек) придумать не могу, оч надеюсь на Вашу отзывчиврсть...

2

Re: Вывод юзеров древовидно

Staff93 сказал:

В PMA такие ячейки: id_user , name , n_jr (это номер младшего юзера)

Обычно хранится идентификатор родителя, а не дочерние. В этом случае дерево строится рекурсивно исходи из поиска по родительскому идентификатору.

SELECT * FROM table WHERE parent_id = 8;

3 (изменено: Staff93, 2014-10-10 00:45:37)

Re: Вывод юзеров древовидно

Да, вроде верно, переименуем столбец в PMA из n_jr на parent_id , идея ясна, только от этой перемены не меняется задача,
в запросе выводятся все кто имеет в parent_id = 8 , а что дальше?
Haunt, если можно подправте мною представленный код, чтобы условие заработало, пожалуйста...
Что-то подобное тут, но я не "въеду" как прилепить к моему коду...

4

Re: Вывод юзеров древовидно

Пробуйте разобраться. Примерно должно выглядеть так.

function parent($parent_id) {
  $sql = 'SELECT * FROM table WHERE parent_id =' . $parent_id;
  ...
  foreach ($rows as $row) {
    print $row['id_user'];
    parent($row['parent_id']); // Рекурсия
  }
}