Всем добрый вечер, помогите решите проблему, есть БД, в ней есть таблица cats, в ней 4 поля: id, parrent_id, title, desc, как на php и mysql сделать вывод подкатегорий и проверку на существования их, в поле parrent_id по умолчанию NULL, а если стоит > 1, то это подкатегория! Заранее спасибо!
PHP: function tree_cat_menu($parent_id = null) { $result = mysql_query("SELECT id, parent_id, title FROM cats WHERE parent_id='$parent_id'"); if(mysqli_num_rows($result) > 0) { echo '<ul>'; while($myrow = mysqli_fetch_array($result)) { echo '<li><a href="category.php?id='.$myrow['id'].'">'.$myrow['title'].'</a></li>'; tree_cat_menu($myrow['id']); } echo '</ul>'; } } } Не знаю заработает или нет. Попробуй.
Я не волшебник, я не могу читать твои мысли. Какие ошибки выдаёт? Как ты функцию в файл запилил? Какой исходный код?
Вот: PHP: <?php require_once("../modules/left_nav.php"); ?> <div class="center_content"> <div class="bread"> <a href="{url}">Главная</a> / ... </div> <h2>...</h2> <?php //$res1 = mysql_query("SELECT * FROM cats WHERE root=$id ORDER BY title") or die (mysql_error()); function tree_cat_menu($parent_id = null) { $result = mysql_query("SELECT id, parent_id, title FROM cats WHERE parent_id='$parent_id'"); if(mysql_num_rows($result) > 0) { echo '<ul>'; while($myrow = mysql_fetch_array($result)) { echo '<li><a href="works_all.php?id='.$myrow['id'].'">'.$myrow['title'].'</a></li>'; tree_cat_menu($myrow['id']); } echo '</ul>'; } } ?> </div> А по логом нет, никаких ошибок не выдаёт!
Наверное потому что нужно вызвать функцию показа категорий. Где тебе нужны категории напиши: PHP: tree_cat_menu();
Вот тут фор Всё равно, код теперь такой: Не выводятся PHP: <?php require_once("../modules/left_nav.php"); ?> <div class="center_content"> <div class="bread"> <a href="{url}">Главная</a> / ... </div> <h2>...</h2> <?php function tree_cat_menu($parent_id = null) { $result = mysql_query("SELECT id, parent_id, title FROM cats WHERE parent_id='$parent_id'"); if(mysql_num_rows($result) > 0) { echo '<ul>'; while($myrow = mysql_fetch_array($result)) { echo '<li><a href="works_all.php?id='.$myrow['id'].'">'.$myrow['title'].'</a></li>'; tree_cat_menu($myrow['id']); } echo '</ul>'; } } tree_cat_menu(); ?> </div> --- Добавлено --- Вот тут формируются ссылки основных категорий (На главной), всё верно тут???: PHP: <div class="leftside"> <h3>Категории изделий</h3> <ul> <li><a class="active" href="<?=$url?>">Главная</a></li> <?php //Вывод категорий $res = mysql_query("SELECT * FROM cats WHERE parent_id IS NULL ORDER BY title") or die (mysql_error()); while($row = mysql_fetch_array($res)){ $id = $row['id']; $title = $row['title']; ?> <!--Вывод ссылок--> <li><a href="<?=$url?>/pages/works_all.php?id=<?=$id?>"><?=$title?></a></li> <?php } ?> </ul> </div>
Ты писал есть поле parrent_id а я в sql написал parent_id, правь. Код (Text): $result = mysql_query("SELECT id, parrent_id, title FROM cats WHERE parrent_id='$parent_id'"); Но лучше изменить название в таблице.
Появилась ошибка: Код (Text): Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in Z:\home\localhost\www\pages\works_all.php on line 70 Для справки, в базе есть записи уже 70 строка: PHP: if(mysql_num_rows($result) > 0) --- Добавлено --- По факту, мне нужно вывести ТОЛЬКО подкатегории!
Уже лучше. А где именно ошибка поможет узнать: PHP: $result = mysql_query(Запрос) || die(mysql_error());
Эта же ошибка: Код (Text): Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in Z:\home\localhost\www\pages\works_all.php on line 70
Так к базе ведь не подключились PHP: // Где то $db = mysql_connect("localhost", "mysql_user", "mysql_password"); // В функции mysql_query(Запрос, $db);
Чтобы не гадать, лучше выложи код на хостинг (есть бесплатные), настрой базу и дай доступ тут, может кто посмотрит.
Плохая реализация рекурсии с выгрузкой внутри функции. Выгружайте все данные заранее, а в рекурсии оперируйте уже массивами. Иначе рано или поздно mysql под 400%
Вот весь код PHP: <?php error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); //Подключение файлов настроек require_once("../engine/mysql.php"); require_once("../engine/config.php"); //Настройка вывода лучших изделий require_once("../modules/rb.php"); ?> <!doctype html> <html lang="en" class="no-js"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="keywords" content="<?=$metategs?>"/> <title><?=$title?> - ...</title> <link href="http://www.google-analytics.com/" rel="dns-prefetch"><!-- dns prefetch --> <!-- meta --> <!-- icons --> <link href="<?=$tpl_f?>favicon.ico" rel="shortcut icon"> <!-- css + javascript --> <link rel="stylesheet" href="<?=$tpl_f?>style.css" media="all"> <!--[if lt IE 9]> <script type="text/javascript" src="<?=$tpl_f?>js/html5shiv.js"></script> <script type="text/javascript" src="<?=$tpl_f?>js/selectivizr.js"></script> <script type="text/javascript" src="<?=$tpl_f?>js/respond.js"></script> <![endif]--> <script type="text/javascript" src="///cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js"></script> </head> <body> <!-- wrapper --> <div class="wrapper"> <header > <div class="logo"> <img src="<?=$tpl_f?>img/logo.png" alt="" title=""> </div><!-- /logo --> <div class="contact"> <p class="tel"> ... </p> <p class="mail">...</p> </div> <nav class="nav" role="navigation"> <ul class="headnav"> <li><a href="<?=$url?>">Главная</a></li> <li><a href="<?=$url?>/news">Новости</a></li> <li><a href="<?=$url?>/articles">Статьи</a></li> <li><a href="<?=$url?>/cus">Обратная связь</a></li> <li><a href="<?=$url?>/gb">Отзывы</a></li> <li><a href="<?=$url?>/about">О компании</a></li> <li><a href="<?=$url?>/contacts">Контактные данные</a></li> </ul> <input placeholder="Search..." type="text"> </nav><!-- /nav --> </header><!-- /header --> <section class="main_content"> <?php require_once("../modules/left_nav.php"); ?> <div class="center_content"> <div class="bread"> <a href="{url}">Главная</a> / ... </div> <h2>...</h2> <?php function tree_cat_menu($parrent_id = null) { $result = mysql_query("SELECT `id`, `parrent_id`, `title` FROM `cats` WHERE `parrent_id`='$parrent_id'") || die(mysql_error()); if(mysql_num_rows($result) > 0) { while($myrow = mysql_fetch_array($result)) { echo '<li><a href="works_all.php?id='.$myrow['id'].'">'.$myrow['title'].'</a></li>'; tree_cat_menu($myrow['id']); } } } tree_cat_menu(); ?> </div> <?php $result = mysql_query("SELECT * FROM lr ORDER BY id DESC") or die (mysql_error()); if(mysql_num_rows($result) > 0 ) { while($data2 = mysql_fetch_array($result)){ $lr_id = $data2['id']; $lr_name = $data2['name']; $lr_foto = $data2['foto']; $lr_text = $data2['text']; ?> <div class="rightside"><h3>Лучшие изделия</h3> <ul><li> <li><a href=''><?=$lr_name?></a> <img src='<?=$lr_foto?>' alt=''> <p><?=$lr_text?></p> </li> </li></ul></div> <?php } } else { echo "<div class='rightside'><h3>Лучшие изделия</h3> <ul><li> В данный момент лучших работ нет! </li></ul></div>"; } ?> <?php require_once("../modules/stats.php"); ?> </section><!-- /section --> <?php require_once("../modules/footer.php"); ?>
Во-первых, совершенно не обязательно выкладывать всю верстку целиком. Нужен только код. А во-вторых, ошибка в том, что функция tree_cat_menu хочет на вход id родительской категории. А вы его оставляете равным NULL, поэтому формируется неверный запрос