Есть еще вот такой кривой вариант. Как раз до третьей вложенности PHP: <?php function get_link($parent_id) { $rarr="—"; //$line="»"; $query = "SELECT * FROM menu WHERE page='$parent_id' and shw='1' order by page asc"; $result = mysql_query($query); while ($row = mysql_fetch_array($result)) { if ($_GET["page"]==$row['id'] OR $row['id']==$parent_id/* OR $row['page']==$_GET["page"]*/) { if ($_GET["page"]=='1') { echo ""; } else { if ($parent_id) { echo "<span class='link'> ".$rarr." <a href=/index.php?page=".$parent_id.">".$row['parent_name']."</a></span><span class='link'> ".$rarr." <a href=/index.php?page=".$row['id'].">".$row['name']."</a></span>"; } else { echo "<span class='link'> ".$rarr." <a href=/index.php?page=".$row['id'].">".$row['name']."</a></span>"; } } } get_link($row['id']); } } ?>
А теперь вопрос, начиная с какой ссылки меню, ты строишь дерево? С корня (Главная) или с конца ветви? Кстати, рекомендую http://dev.mysql.com/tech-resources/art ... -data.html там ты узнаешь что твой способ хранения это не рекурсия
Тогда как ты надеешься извлечь ветку? У тебя есть два варианта 1. рекурсивно извлекать меню с конца (работает для произвольной вложенности) 2. Зная глубину вложенности, извлечь всю ветку 1м запросом при помощи JOIN (ограничение 60 с чем-то уровней вложенности)
Уже подсказали - извлекай с конца. Т.е. сначала текущую страницу, затем ее родителя, затем родителя родителя и так пока не дойдешь до Главной. Пунктов меню естественно.
Сделал иначе, если кому-то нужно, то вот рабочий скрипт PHP: <?function get_crumbs($this_cat_id, $flarn, $keep_cat_id) { $rarr="—"; $link_to_page=$_SERVER['PHP_SELF']; if (!isset($this_cat_id)) { $this_cat_id =$_GET["page"]; //echo "Главная >> "; } $sql = "SELECT id, page, name from menu "; $sql .="where id = $this_cat_id"; $show_crumb_trail = mysql_query($sql); //echo('['.mysql_errno().'] ['.mysql_error().']'); exit; $num_crumbs = mysql_num_rows($show_crumb_trail); if ($num_crumbs > 0) { list($cat_id, $cat_parent, $cat_name) = mysql_fetch_row($show_crumb_trail); $cat_id_array[$flarn] = $cat_id; $cat_parent_id_array[$flarn] = $cat_parent; $cat_name_array[$flarn] = $cat_name; if ($cat_id_array[$flarn] > 0) { mysql_free_result($show_crumb_trail); $next = $flarn+1; if ($flarn == 0 ) { //echo "Главная >> "; } get_crumbs($cat_parent_id_array[$flarn], $next, $keep_cat_id); //if ($keep_cat_id==$cat_id_array[$flarn]) { echo $cat_name_array[$flarn]; } else { if ($cat_parent==0) { echo "<a href=/".$cat_id.".htm>$cat_name_array[$flarn]</a>"; } else { echo " $rarr <a href=/".$cat_id.".htm>$cat_name_array[$flarn]</a>"; } } } } //}?> забыл добавить вывод скрипта. вставить туда где должны быть хлебные крошки вот это: PHP: <?get_crumbs($_REQUEST['cat_id'], "0", $_REQUEST['cat_id']);?>
В начале файла со скриптом вставь свой файл подключения к базе пример: PHP: <? include ("db.php");?> где db.php подключение к базе данных Забыл, еще проверь в строке 10 этого скрипта PHP: $sql = "SELECT id, page, name from menu "; , что бы from menu было изменено на твое название таблицы
да, да. я изменил. смотрите где у меня ошибка, очень подоже что программа не сможет соедин с базой, хотя у меня другие элементы выводятся из базы. PHP: <?php include("block/bd.php"); if (isset($_GET['cat'])) {$cat = $_GET['cat']; } if (!isset($cat)) {$cat = 1;} if (!preg_match("|^[\d]+$|", $cat)) { exit ("<p>Неверный формат запроса! Проверьте URL!"); } $result = mysql_query("SELECT * FROM categories WHERE id='$cat'",$db); if (!$result) { echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору admin@<br> <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 HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title><?php echo $myrow["meta_d"];?></title> <link href="style.css" rel="stylesheet" type="text/css"> <link href="style2.css" rel="stylesheet" type="text/css"> <link rel="icon" href="http://localhost/engelz.ru/favicon.ico" type="image/x-icon"> <link rel="shortcut icon" href="http://localhost/engelz.ru/favicon.ico" type="image/x-icon"> <meta name="keywords" content="<?php echo $myrow["meta_k"];?>"> <meta name="description" content="<?php echo $myrow["meta_d"];?>"> <script type="text/javascript" src="js/swfobject.js"></script> </head> <body> <?php function get_crumbs($this_cat_id, $flarn, $keep_cat_id) { $rarr="—"; $link_to_page=$_SERVER['PHP_SELF']; if (!isset($this_cat_id)) { $this_cat_id =$_GET["page"]; } $sql = "SELECT id, page, title FROM categories"; $sql ="where id = $this_cat_id"; $show_crumb_trail = mysql_query($sql); //echo('['.mysql_errno().'] ['.mysql_error().']'); exit; $num_crumbs = mysql_num_rows($show_crumb_trail); if ($num_crumbs > 0) { list($cat_id, $cat_parent, $cat_name) = mysql_fetch_row($show_crumb_trail); $cat_id_array[$flarn] = $cat_id; $cat_parent_id_array[$flarn] = $cat_parent; $cat_name_array[$flarn] = $cat_name; if ($cat_id_array[$flarn] > 0) { mysql_free_result($show_crumb_trail); $next = $flarn+1; if ($flarn == 0 ) { //echo "Главная >> "; } get_crumbs($cat_parent_id_array[$flarn], $next, $keep_cat_id); //if ($keep_cat_id==$cat_id_array[$flarn]) { echo $cat_name_array[$flarn]; } else { if ($cat_parent==0) { echo "<a href=/".$cat_id.".htm>$cat_name_array[$flarn]</a>"; } else { echo " $rarr <a href=/".$cat_id.".htm>$cat_name_array[$flarn]</a>"; } } } } //}?> <?php $php_thoughts = $myrow['title']; include("block/header.php"); ?> <table valign="top" width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <?php include("block/left_td.php"); ?> </td> <td valign="top"><table width="98%" border="0" align="center" cellpadding="0" cellspacing="0" class="main_table"> <tr> <td valign="top"> <?php get_crumbs($_REQUEST['cat_id'], "0", $_REQUEST['cat_id']);?> <?php echo $myrow["text"]; $result77 = mysql_query("SELECT str FROM options", $db); $myrow77 = mysql_fetch_array($result77); $num = $myrow77["str"]; // Извлекаем из URL текущую страницу @$page = $_GET['page']; // Определяем общее число сообщений в базе данных $result00 = mysql_query("SELECT COUNT(*) FROM data WHERE cat='$cat'"); $temp = mysql_fetch_array($result00); $posts = $temp[0]; // Находим общее число страниц $total = (($posts - 1) / $num) + 1; $total = intval($total); // Определяем начало сообщений для текущей страницы $page = intval($page); // Если значение $page меньше единицы или отрицательно // переходим на первую страницу // А если слишком большое, то переходим на последнюю if(empty($page) or $page < 0) $page = 1; if($page > $total) $page = $total; // Вычисляем начиная с какого номера // следует выводить сообщения $start = $page * $num - $num; // Выбираем $num сообщений начиная с номера $start $result1 = mysql_query("SELECT id,title,description,date,author,mini_img,view FROM data WHERE cat='$cat' ORDER BY id LIMIT $start, $num",$db); if (!$result1) { echo "<p>Запрос на выборку данных из базы не прошел.</strong></p>"; exit(mysql_error()); } if (mysql_num_rows($result1) > 0) { $myrow1 = mysql_fetch_array($result1); do { printf ("<div class='content3'> <a href='lesson.php?id=%s'><img src='%s' class='mini_img' align='left' alt='*'></a> <p class='h4'><a href='lesson.php?id=%s'>%s</a></p> <p class='comment'>Добавил: %s<br>Сложность: %s</p><br clear='left'> <div class='description'>%s</div> <div class='info'> <div class='raiting_star'> <div class='raiting'> <div class='raiting_blank'></div> <div class='raiting_hover'></div> <div id='im'></div></div> <span class='comment'>Создан: %s</span> <span class='comment'>Просмотров: %s</span></div></div><br>",$myrow1["id"],$myrow1["mini_img"],$myrow1["id"],$myrow1["title"],$myrow1["author"],$myrow1["slog"],$myrow1["description"],$myrow1["img"],$myrow1["view"],$myrow1["date"]); } while ($myrow1 = mysql_fetch_array($result1)); ?> <br> <?php // Проверяем нужны ли стрелки назад if ($page != 1) $pervpage = '<a href=categories.php?cat='.$cat.'&page=1></a> <a href=categories.php?cat='.$cat.'&page='. ($page - 1) .'></a> '; // Проверяем нужны ли стрелки вперед if ($page != $total) $nextpage = ' <a href=categories.php?cat='.$cat.'&page='. ($page + 1) .'></a> | <a href=categories.php?cat='.$cat.'&page=' .$total. '>Последняя</a>'; // Находим две ближайшие станицы с обоих краев, если они есть if($page - 5 > 0) $page5left = ' <a href=categories.php?cat='.$cat.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | '; if($page - 4 > 0) $page4left = ' <a href=categories.php?cat='.$cat.'&page='. ($page - 4) .'>'. ($page - 4) .'</a> | '; if($page - 3 > 0) $page3left = ' <a href=categories.php?cat='.$cat.'&page='. ($page - 3) .'>'. ($page - 3) .'</a> | '; if($page - 2 > 0) $page2left = ' <a href=categories.php?cat='.$cat.'&page='. ($page - 2) .'>'. ($page - 2) .'</a> | '; if($page - 1 > 0) $page1left = ' <a href=categories.php?cat='.$cat.'&page='. ($page - 1) .'>'. ($page - 1) .'</a> | '; if($page + 5 <= $total) $page5right = ' | <a href=categories.php?cat='.$cat.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>'; if($page + 4 <= $total) $page4right = ' | <a href=categories.php?cat='.$cat.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>'; if($page + 3 <= $total) $page3right = ' | <a href=categories.php?cat='.$cat.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>'; if($page + 2 <= $total) $page2right = ' | <a href=categories.php?cat='.$cat.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>'; if($page + 1 <= $total) $page1right = ' | <a href=categories.php?cat='.$cat.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>'; // Вывод меню если страниц больше одной if ($total > 1) { Error_Reporting(E_ALL & ~E_NOTICE); echo "<div class=\"pstrnav\">"; echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage; echo "</div>"; } } ?> </td> </tr> </table> </td> <?php include("block/right_td.php"); ?> </td> </tr> </table> <?php include("block/footer.php"); ?> </body> </html>
вот такая ошибка выдает: Код (Text): Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in S:\home\localhost\www\engelz.com\categories.php on line 54 [/code]
попробуй вот так PHP: $sql = "SELECT id, page, title FROM [b]`categories`[/b]"; $sql ="where id = $this_cat_id"; если не поможет, то в строке 54 напиши вот так PHP: [b]@[/b]mysql_num_rows
в таблице categories есть строки(данные)??? в твоем посте это 54 строка. найди эту строку PHP: $num_crumbs = mysql_num_rows($show_crumb_trail); и поставь @ перед myscl_num_rows PHP: $num_crumbs = @mysql_num_rows($show_crumb_trail); это избавит от ошибки, но не решит проблему