Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/22: Рейтинг темы: голосов - 22, средняя оценка - 5.00
 Аватар для hitball
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110

Дерево категорий и вывод статей

11.09.2015, 14:16. Показов 5571. Ответов 88
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, здравствуйте! Очень нужна помощь!!!
Пытаюсь сделать дерево категорий.
есть 2 таблицы categories_colloring с id, id_parent, name и таблица articles_colloring c полями id,title,url_img,parent_id,date,view.

Почитав и порывшись в инете появился такой код. Но не могу понять, как выводить на отдельных страницах эти данные. Допустим на одной странице index.php - все категории с parent_id=0

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 <?
 $result2 = mysql_query("SELECT * FROM categories_colloring where parent_id=0",$db);
if (!$result2)
{
echo "<p><strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
if (mysql_num_rows($result2) > 0)
{
$myrow2 = mysql_fetch_array($result2);
do 
{
printf ("<p class='point'>
<a class='nav_link' href='view_cat.php?cat=%s'>%s</a></p>",$myrow2["id"],$myrow2["name"]);
}
while ($myrow2 = mysql_fetch_array($result2));
}
else
{
echo "<p>Информация по запросу не может быть извлечена в таблице нет записей.</p>";
exit();
}
 ?>
далее в view_cat.php я пытаюсь вывести подкатегории выбранной категории, но не получается(что уже говорить про конкретный вывод самой статьи со страницы подкатегории).

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$result = mysql_query ("SELECT `id`, `parent_id`, `name` FROM `categories_colloring`"); 
 
$cats = array();
  while($cat =  mysql_fetch_assoc($result))
        $cats[$cat['parent_id']][] =  $cat;
 
function create_tree ($cats,$parent_id){
  if(is_array($cats) and  isset($cats[$parent_id])){
    $tree = '<ul>';
    foreach($cats[$parent_id] as $cat){
       $tree .= "<li><a href='colloring.php?catid=".$cat['id']."'>".$cat['name']."</a>";
       $tree .=  create_tree ($cats,$cat['id']);
       $tree .= '</li>';         
    }
    $tree .= '</ul>';
  } 
  else return null;          
return $tree;        
} 
 
echo create_tree ($cats, 0);
?>
очень прошу помочь!

Добавлено через 26 минут
сейчас даже на странице view_cat.php?cat=1 (при переходе с colloring_index.php) выдает не только категорию 1, а и все остальные, а также подкатегории(((
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.09.2015, 14:16
Ответы с готовыми решениями:

Вывод категорий/подкатегорий статей и создание url
Привет. Существует таблица &quot;article_category&quot;, в ней следующая структура: id | name | slug | parent_id id - это уникальный айди...

Выборка нескольких статей из всех категорий
Добрый день, уважаемые форумчане! Задача у меян следующая: вывести на одной странице по пять статей из каждой категории (ограничимся...

Подгрузка всех категорий из статей
Вот такая модель у меня: public class Article { public int Id { get; set; } public string Name { get;...

88
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
11.09.2015, 15:09
Цитата Сообщение от hitball Посмотреть сообщение
подкатегории выбранной категории
Тогда зачем вы все достаете?
PHP
1
$result = mysql_query ("SELECT `id`, `name` FROM `categories_colloring` where  `parent_id` = '". $cat_id ."'");
1
 Аватар для hitball
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
11.09.2015, 15:49  [ТС]
ко мне только на ты!!!
я туда добавила? сейчас просто белый лист(
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php 
$result = mysql_query ("SELECT `id`, `name` FROM `categories_colloring` where  `parent_id` = '". $cat_id ."'");
 
$cats = array();
  while($cat =  mysql_fetch_assoc($result))
        $cats[$cat['parent_id']][] =  $cat;
 
function create_tree ($cats,$parent_id){
  if(is_array($cats) and  isset($cats[$parent_id])){
    $tree = '<ul>';
    foreach($cats[$parent_id] as $cat){
       $tree .= "<li><a href='colloring.php?catid=".$cat['id']."'>".$cat['name']."</a>";
       $tree .=  create_tree ($cats,$cat['id']);
       $tree .= '</li>';         
    }
    $tree .= '</ul>';
  } 
  else return null;          
return $tree;        
} 
 
echo create_tree ($cats, 0);
?>
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
11.09.2015, 15:56
Ну $cat_id еще создать нужно. Если у вас линк colloring.php?catid= , то следовательно
PHP
1
$cat_id = isset( $_GET['catid'] ) ? intval( $_GET['catid'] ) : 0;
Добавлено через 1 минуту
P.S. и parent_id мы уже не достаем, мы его и так знаем $cat_id
0
 Аватар для hitball
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
11.09.2015, 16:01  [ТС]
Это по этому кусочку,да? ура!!! я уже что-то понимаю)))
PHP
1
`parent_id` = '". $cat_id ."'");
а вот эту строку
PHP
1
$cat_id = isset( $_GET['catid'] ) ? intval( $_GET['catid'] ) : 0;
нужно добавлять на линию 3? у меня все равно белый лист тогда(
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
11.09.2015, 16:16
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php 
 
$cat_id = isset( $_GET['catid'] ) ? intval( $_GET['catid'] ) : 0;
$result = mysql_query ("SELECT `id`, `name` FROM `categories_colloring` where  `parent_id` = '". $cat_id ."'");
 
$cats = array();
while($cat =  mysql_fetch_assoc($result)){
        $cats[] =  $cat;
}
?>
<? if (!empty($cats) ) : ?>
<ul>
    <? foreach( $cats as $cat ) : ?>
        <li>
            <a href='colloring.php?catid="<?= $cat['id'] ?>"'><?= $cat['name'] ?></a>;
        </li>
    <? endforeach; ?>
</ul>
<? endif; ?>
1
 Аватар для hitball
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
11.09.2015, 21:35  [ТС]
что-то никак у меня не получается(
сейчас выводится просто список категорий.
при нажатии на каждой выводятся все статьи из бд. а я мечтаю, чтобы после списка категории (по щелчку на них) выводились подкатегории конкретной категории, а уже по щелчку на ссылку подкатегории выводились статьи из этой подкатегории. возможно нужно что-то менять еще и на странице вывода подкатегорий?

Добавлено через 2 часа 26 минут
crautcher, удалила двойные кавычки здесь и вроде бы вышло!!!!!
PHP
1
"<?= $cat['id'] ?>"
сейчас еще подобавляю данных в бд в разные таблицы, чтобы проверить!
спасибо вам огромное за отличную поддержку на форуме!!!

Добавлено через 4 минуты
рано я обрадовалась, получилось вывести сначала категории, потом подкатегории, а вот статьи относящиеся к этой подкатегории не выводятся, выдает все статьи из бд по всем категриям. возможно я что-то в бд неправильно сделала в частности в таблице со статьями articles_colloring. здесь необходимо ставить для связки с таблицей категории parent_id верно?

Добавлено через 20 минут
думаю ошибка все таки на этой странице collorig.php, на которую выводятся статья из подкатегории. ведь здесь ни разу не указан parent_id
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php 
include ("bd.php");
 if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
 if (!isset($cat)) {$cat = 1;}
 
 $result = mysql_query ("SELECT * FROM categories_colloring WHERE id='$cat'",$db);
 
if (!$result) 
{
echo "<p><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
} ?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>
 
<ul>   
<? 
$result77 = mysql_query ("SELECT str FROM options",$db);
$myrow77 = mysql_fetch_array ($result77);
$num  = isset($myrow77["str"])  ? $myrow77["str"]  : 10;
$near = isset($myrow77["near"]) ? $myrow77["near"] :  3;
@$page = $_GET['page'];
$result00 = mysql_query("SELECT COUNT(*) FROM articles_colloring");
$temp = mysql_fetch_array($result00);
$post = $temp[0];
$total = (($post - 1)/$num) + 1;
$total = intval($total);
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
  if($page > $total) $page = $total;
$pageline = '<strong>Страницы:&nbsp;&nbsp;';
$pp = $page-1;
$pn = $page+1;
if($page - $near > 1) $pageline .= " <a href= $srcfile?cat=$cat&page=1>1</a> ...";
for($i = $page-$near; $i <= $page+$near; $i++)
if($i >=1 && $i <= $total)
{
 if($i == $page)   $pageline .= "<b>$i</b>";
// elseif($i == $pp) $pageline .= " <a href= $srcfile?cat=$cat&page=$i > << </a> ";
// elseif($i == $pn) $pageline .= " <a href= $srcfile?cat=$cat&page=$i > >> </a> ";
 else  $pageline .= " <a href= $srcfile?cat=$cat&page=$i > $i </a> ";
}
if($page + $near < $total) $pageline .= "... <a href= $srcfile?cat=$cat&page=$total >$total</a> ";
$pageline .= '</strong>';
$pageline = $total ? "<div class=\"pstrnav\">$pageline</div>" : "";
echo $pageline;
$start = $page * $num - $num;
     $result = mysql_query("
     SELECT
         id,title,date,
         DATE_FORMAT(date, '%d.%m.%Y') AS eurodate,url_img
     FROM articles_colloring
     
     ORDER BY date DESC
     LIMIT " . ((int)$start) . " , ". ((int)$num) ."
  ",$db);
if (!$result)
{
echo "<p><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
while($myrow = mysql_fetch_array($result))
{
 
printf ("
<li>
 
<div class='read_li2'>
 
<a class='h4' href='view_colloring.php?id=%s' target='_blank'>
 
<div class='read_img2'><img class='mini_lenta2' align='left' src='../%s'></div></a>
<br><br><br><br><br><br><br><br><br><br>
 
<a class='h4' href='view_colloring.php?id=%s' target='_blank'>
<p style='text-align:center;'>%s</p>
</a>
</div>
</li>
", $myrow["id"], $myrow["url_img"], $myrow["id"],$myrow["title"] );
}
 
?>
 
</div>
</div>
</body>
</html>
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
12.09.2015, 20:29
Цитата Сообщение от hitball Посмотреть сообщение
таблицей категории parent_id верно?
в таблице со статьями нужен столбец типа id_cat(id категории)
0
 Аватар для hitball
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
12.09.2015, 22:48  [ТС]
у меня в таблице со статьями есть столбец дубликат из таблицы категорий parent_id то есть он аналогичный в обоих таблицах.
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
13.09.2015, 18:46
parent_id в таблице категорий, содержит id родительской категории. а в таблице со статьями нужен id категории(id в таблице категорий)
1
 Аватар для hitball
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
13.09.2015, 20:24  [ТС]
fanatikus, сейчас попробую!!!!

Добавлено через 1 час 33 минуты
поменяла значения в таблице со статьями по id из таблицы категорий и дала этому столбцу новое название. при выводе ничего не изменилось. видно что-таки с выводом неправильно на самой странице. код я выше на 4 сообщения приводила
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
13.09.2015, 21:11
Цитата Сообщение от hitball Посмотреть сообщение
PHP
1
$result = mysql_query(" SELECT id,title,date, DATE_FORMAT(date, '%d.%m.%Y') AS eurodate,url_img FROM articles_colloring ORDER BY date DESC LIMIT " . ((int)$start) . " , ". ((int)$num) ." ",$db);
конечно выводятся все статьи. нужно добавить условие where cat_id(или как там у вас называется столбец с id категории) ='".$cat.'"
0
 Аватар для hitball
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
13.09.2015, 21:43  [ТС]
если вот так, то не помогает(((
PHP
1
2
3
4
5
6
7
    SELECT
         id,title,date,
         DATE_FORMAT(date, '%d.%m.%Y') AS eurodate,url_img
     FROM articles_colloring 
     where `cat_id`=`".$cat."` 
     ORDER BY date DESC
     LIMIT " . ((int)$start) . " , ". ((int)$num) ."
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
13.09.2015, 21:54
Цитата Сообщение от hitball Посмотреть сообщение
то не помогает
что, все равно все статьи выводит?
0
 Аватар для hitball
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
14.09.2015, 10:51  [ТС]
да!!! где-то я накрутила(

Добавлено через 12 часов 29 минут
еще раз все перепроверила и базу тоже.
при переходе на статью с подкатегории путь создается правильный ...colloring.php?catid=6
но выводятся все статьи . сейчас страница вывода colloring.php выглядит так. вроде бы ведь все правильно?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php 
include ("bd.php");
 if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
 if (!isset($cat)) {$cat = 1;}
 $result = mysql_query ("SELECT * FROM categories_colloring WHERE id='$cat'",$db);
if (!$result) 
{
echo "<p><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
} ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
</head>
<body>
<ul>   
<? 
$result77 = mysql_query ("SELECT str FROM options",$db);
$myrow77 = mysql_fetch_array ($result77);
$num  = isset($myrow77["str"])  ? $myrow77["str"]  : 10;
$near = isset($myrow77["near"]) ? $myrow77["near"] :  3;
@$page = $_GET['page'];
$result00 = mysql_query("SELECT COUNT(*) FROM articles_colloring");
$temp = mysql_fetch_array($result00);
$post = $temp[0];
$total = (($post - 1)/$num) + 1;
$total = intval($total);
$page = intval($page);
if(empty($page) or $page < 0) $page = 1;
  if($page > $total) $page = $total;
$pageline = '<strong>Страницы:&nbsp;&nbsp;';
$pp = $page-1;
$pn = $page+1;
if($page - $near > 1) $pageline .= " <a href= $srcfile?cat=$cat&page=1>1</a> ...";
for($i = $page-$near; $i <= $page+$near; $i++)
if($i >=1 && $i <= $total)
{
 if($i == $page)   $pageline .= "<b>$i</b>";
// elseif($i == $pp) $pageline .= " <a href= $srcfile?cat=$cat&page=$i > << </a> ";
// elseif($i == $pn) $pageline .= " <a href= $srcfile?cat=$cat&page=$i > >> </a> ";
 else  $pageline .= " <a href= $srcfile?cat=$cat&page=$i > $i </a> ";
}
if($page + $near < $total) $pageline .= "... <a href= $srcfile?cat=$cat&page=$total >$total</a> ";
$pageline .= '</strong>';
$pageline = $total ? "<div class=\"pstrnav\">$pageline</div>" : "";
echo $pageline;
$start = $page * $num - $num;
     $result = mysql_query("
     SELECT
         id,title,cat_id,url_img,date,
         DATE_FORMAT(date, '%d.%m.%Y') AS eurodate,
     FROM `articles_colloring` 
     where `cat_id` = '". $cat ."'
     ORDER BY date DESC
     LIMIT " . ((int)$start) . " , ". ((int)$num) ." 
     
  ",$db);
if (!$result)
{
echo "<p><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
while($myrow = mysql_fetch_array($result))
{
 
printf ("
<li>
 
<div class='read_li2'>
 
<a class='h4' href='view_colloring.php?id=%s' target='_blank'>
 
<div class='read_img2'><img class='mini_lenta2' align='left' src='../%s'></div></a>
<br><br><br><br><br><br><br><br><br><br>
 
<a class='h4' href='view_colloring.php?id=%s' target='_blank'>
<p style='text-align:center;'>%s</p>
</a>
</div>
</li>
", $myrow["id"], $myrow["url_img"], $myrow["id"],$myrow["title"] );
}
 
?>
 
 
 
 
</div>
</div>
</body>
</html>
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
14.09.2015, 14:26
Цитата Сообщение от hitball Посмотреть сообщение
при переходе на статью с подкатегории путь создается правильный ...colloring.php?catid=6
и в скрипте
PHP
1
if (isset($_GET['cat'])) {$cat = $_GET['cat'];}
catid != cat
0
 Аватар для hitball
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
14.09.2015, 14:41  [ТС]
fanatikus, как именно здесь это вписать нужно? ведь этот кусок кода относится к таблице categories_colloring и в ней строки cat_id не существует
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
14.09.2015, 15:00
у тебя ссылка на страницу со статьями категории как выглядит? так -colloring.php?catid=6?
0
 Аватар для hitball
0 / 0 / 0
Регистрация: 06.02.2010
Сообщений: 110
14.09.2015, 15:00  [ТС]
верно
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
14.09.2015, 15:01
В адресной строке у вас cat или catid? Так как вы смотрите на
PHP
1
$_GET['cat']
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.09.2015, 15:01
Помогаю со студенческими работами здесь

Ошибка при создании категорий для статей.
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/problemn/social/libs/html1.php on line 251 ...

Дерево категорий
Добрый день. Структура таблицы id| parent_id| name 1| 0| раздел1 2| 1| раздел1.1 3| 2| ...

Конечные ID из дерево категорий
Добрый день. Такая небольшая проблема возникла. У меня есть многоуровневая дерево категорий. Пример: 1.0

Иерархичное дерево категорий
Дано иерархичное дерево категорий. Нужно зделать функцию которая будет выводить дерево в таком виде: Недвижемость -Дома --2х...

Иерархическое дерево категорий
Дано иерархичное дерево категорий. Нужно зделать функцию которая будет выводить дерево в таком виде: Недвижемость -Дома --2х...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru