Jump to content
  • 0

Меню навигации с помощью php


Fynfastik
 Share

Question

Ситуация: сайт разбит на блоки, левая часть сайта должна содержать меню навигации.

Меню навигации я написал посредством HTML и CSS.

Вот меню:

<td width="197px" align="right" valign="top"> 
<table width="197px" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><a href='view_cat.php?cat=%s' class="levmpt"></a></td>
</tr>
<tr>
<td>
<ul>
<li><a href="#">Фотография</a>
<ul>
<li><a href="#">Новичку</a></li>
<li><a href="#">Любителю</a></li>
</ul>
</li>
<li><a href="#">Фототехника</a>
<ul>
<li><a href="#">Новинки</a></li>
<li><a href="#">Настройки</a></li>
</ul>
</li>
<li><a href="#" class='brd'>Фотолитература</a></li>
</ul>
</td>
</tr>
</table>

Вопрос: как сделать так, чтобы каждому разделу меню была присвоена ссылка на категории из БД, при переходе по этой ссылке открывался файл view_cat.php?cat=%s. ? %s - соответствовал номеру категории из БД.

Link to comment
Share on other sites

25 answers to this question

Recommended Posts

  • 0

<ul>
$result = mysql_query ("SELECT * FROM `table`");
while ($menu = mysql_fetch_array($result))
{
echo "
<li><a href=/"view_cat.php?cat=".$menu['id']."/" class=/"levmpt/">".$menu['title']."</a></li>";
}
</ul>

а уже в файле view_cat.php:

$id=$_GET['id'];
if(isset($_GET['id']))
{
...запрос к бд на вывод контента...
}

Edited by rus
Link to comment
Share on other sites

  • 0

$id=$_GET['id'];
if(isset($_GET['id']))
{
...запрос к бд на вывод контента...
}

rus, вот именно так? а обработать $_GET['id'] не надо? или уже инъекции не страшны?

вот он таким код и сделает а потом все спрашивают почему столько говнокода...

Edited by vvsh
Link to comment
Share on other sites

  • 0
rus, вот именно так? а обработать $_GET['id'] не надо? или уже инъекции не страшны?

вот он таким код и сделает а потом все спрашивают почему столько говнокода...

Обработать id? Инъекции? Для начала стоит узнать, каким именно способом данные запрашиваются из базы, а потом уже кричать про инъекции.

Link to comment
Share on other sites

  • 0

получилось следующее

<?
$result2 = mysql_query ("SELECT * FROM categories", $db);

if (!$result2)
{
echo "<p>Запрос на вывод данных не прошел. <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows ($result2)>0)
{
$myrow2 = mysql_fetch_array ($result2);

do
{
printf
("<ul>
<li><a href='view_cat.php?cat=%s'>%s</a></li>
</ul>", $myrow2 ["id"], $myrow2 ["title"]);
}
while ($myrow2 = mysql_fetch_array ($result2));

}
else
{
echo "<p>Информация не может быть извлечена, так как записей с таким <strong>page</strong> нет</p>";
exit ();
}
?>

теперь все идет сплошняком.. мне нужно сделать меню, с выезжающими подпунктами. не могу понять как. наверное нужна еще одна таблица в БД? или как? что можете посоветовать?

Edited by Fynfastik
Link to comment
Share on other sites

  • 0
Обработать id? Инъекции? Для начала стоит узнать, каким именно способом данные запрашиваются из базы, а потом уже кричать про инъекции.

А что он просто так его проверяет на наличие?

теперь все идет сплошняком.. мне нужно сделать меню, с выезжающими подпунктами. не могу понять как. наверное нужна еще одна таблица в БД? или как? что можете посоветовать?

Почитайте про древовидную структуру.

Link to comment
Share on other sites

  • 0
rus, вот именно так? а обработать $_GET['id'] не надо? или уже инъекции не страшны?

вот он таким код и сделает а потом все спрашивают почему столько говнокода...

говнокод - это код, где много лишнего и порой ненужного.

насчет обработки... кхм, а разве была задача что бы код еще и защищенный был?

или мне тут надо распинаться и писать для всех супер-мега-крутой код и что бы он работал, и что бы чистенький, и защищенный от всего, да? на халяву... от блин!

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

Link to comment
Share on other sites

  • 0

блин, так я в этой древовидной структуре ничего и не понял.. Можно попросить вас "разжевать" что тут и зачем нужно?

<?php 
include( "dbopen.php" );

function ShowTree($ParentID, $lvl) {

global $link;
global $lvl;
$lvl++;

$sSQL="SELECT id,title,pid FROM catalogue WHERE pid=".$ParentID." ORDER BY title";
$result=mysql_query($sSQL, $link);

if (mysql_num_rows($result) > 0) {
echo("<UL>\n");
while ( $row = mysql_fetch_array($result) ) {
$ID1 = $row["id"];
echo("<LI>\n");
echo("<A HREF=\""."?ID=".$ID1."\">".$row["title"]."</A>"." \n");
ShowTree($ID1, $lvl);
$lvl--;
}
echo("</UL>\n");
}

}

ShowTree(0, 0);

mysql_close($link);

?>

Link to comment
Share on other sites

  • 0
говнокод - это код, где много лишнего и порой ненужного.

насчет обработки... кхм, а разве была задача что бы код еще и защищенный был?

или мне тут надо распинаться и писать для всех супер-мега-крутой код и что бы он работал, и что бы чистенький, и защищенный от всего, да? на халяву... от блин!

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

Ну хоть предупреждай что код сырой.

Нельзя? blink.gif
блин, так я в этой древовидной структуре ничего и не понял.. Можно попросить вас "разжевать" что тут и зачем нужно?

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

Link to comment
Share on other sites

  • 0

мне кажется, что на том ресурсе речь идет немножко о другом..

У меня есть БД mysql, есть таблица которая содержит "title (название)","id (порядковый номер)","pid (главной группы)","ppid (номер второстепенной группы)", "pppid (номер подгруппы второстепенной группы)".

Получается все должно выглядеть вот так:

id pid ppid pppid title

1) 1 0 0 Фрукты

2) 1 1 0 Яблоки

3) 1 1 1 Гнилые

4) 1 1 2 Свежие

5) 1 2 0 Груши

6) 1 2 1 Нарезанные

7) 1 2 2 Целые

8) 1 3 0 Мандарины

9) 2 0 0 Овощи

10) 2 1 0 Вкусные

11) 2 1 1 Огурцы

12) 2 1 2 Помидоры

13) 2 1 3 Перцы

14) 2 2 0 Невкусные

15) 2 2 1 Тыква

16) 2 2 2 Баклажан

17) 2 2 3 Фасоль

18) 2 2 4 Горох

19) 2 2 5 Морковь

20) 2 2 6 Репа

21) 2 3 0 Ягоды

или

1. Фрукты

1.1. Яблоки

1.1.1. Гнилые

1.1.2. Свежие

1.2. Груши

1.2.1. Нарезанные

1.2.2. Целые

1.3. Мандарины

2. Овощи

2.1. Вкусные

2.1.1. Огурцы

2.1.2. Помидоры

2.1.3. Перцы

2.2. Невкусные

2.2.1. Тыква

2.2.2. Баклажан

2.2.3. Фасоль

2.2.4. Горох

2.2.5. Морковь

2.2.6. Репа

2.3. Ягоды

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

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

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

Link to comment
Share on other sites

  • 0

Fynfastik

у вас неправильный метод.

а если когданибудь вам понадобиться третий подпункт потом 4 5 6 ... 10, вы будете каждый раз поле создавать.

легче сделать такую таблицу

id|name|parentID

1|Страницы|0

2|Блог|1

3|Комментарии|2

4|Настройки|3

5|Форум|1

6|Настройки|6

в итоге получиться

1. Страницы

1.1. Блог

1.1.1. Комментарии

1.1.1.1. Настройки

1.2. Форум

1.2.1. Настройки

и всё куда проще.

правда есть свои минусы если будет 10 подпунктов то удаление всего займет больше времени.

Link to comment
Share on other sites

  • 0

Т. е. должно получиться так?

id pid title

1) 0 Фрукты

2) 1 Яблоки

3) 2 Гнилые

4) 2 Свежие

5) 1 Груши

6) 2 Нарезанные

7) 2 Целые

8) 1 Мандарины

9) 0 Овощи

10) 1 Вкусные

11) 2 Огурцы

12) 2 Помидоры

13) 2 Перцы

14) 1 Невкусные

15) 2 Тыква

16) 2 Баклажан

17) 2 Фасоль

18) 2 Горох

19) 2 Морковь

20) 2 Репа

21) 1 Ягоды

что реализует такой список:

1. Фрукты

1.1. Яблоки

1.1.1. Гнилые

1.1.2. Свежие

1.2. Груши

1.2.1. Нарезанные

1.2.2. Целые

1.3. Мандарины

2. Овощи

2.1. Вкусные

2.1.1. Огурцы

2.1.2. Помидоры

2.1.3. Перцы

2.2. Невкусные

2.2.1. Тыква

2.2.2. Баклажан

2.2.3. Фасоль

2.2.4. Горох

2.2.5. Морковь

2.2.6. Репа

2.3. Ягоды

с которым можно работать. так?

А выводить его только через функцию tree_print ?

Edited by Fynfastik
Link to comment
Share on other sites

  • 0

Получается что этот список я создаю сам в файле php, а мне нужно чтобы таблица с пунктами выводилась из БД и каждый ее пункт, столбец, строка... вставал на свое место в списке.

Может у кого-то есть подобный пример кода? хочется рассмотреть на конкретном примере.

Link to comment
Share on other sites

  • 0

у меня получилось вот что:

<?
$result2 = mysql_query ("SELECT * FROM categories", $db);

if (!$result2)
{
echo "<p>Запрос на вывод данных не прошел. <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows ($result2)>0)
{
$myrow2 = mysql_fetch_array ($result2);

do
{
printf
("<ul>
<li><a href='view_cat.php?cat=%s'>%s</a></li>
</ul>", $myrow2 ["id"], $myrow2 ["title"]);
}
while ($myrow2 = mysql_fetch_array ($result2));

}
else
{
echo "<p>Информация не может быть извлечена, так как записей с таким <strong>page</strong> нет</p>";
exit ();
}
?>

с этим что-то можно сделать, чтобы получился раскрывающийся список, а не сплошной текст?

Link to comment
Share on other sites

  • 0
у меня получилось вот что:

Пока у вас ничего не получилось.

с этим что-то можно сделать, чтобы получился раскрывающийся список, а не сплошной текст?

В "Принципе", можно сделать все! А вам учить массивы надо. :)

Link to comment
Share on other sites

  • 0

Fynfastik делается это так. например:

echo "<ul>";
function menu($pid) {
$a = mysql_query("SELECT * FROM `categories` WHERE `pid` = '".$pid."'");

while($row = mysql_fetch_array($a)){
echo "<li><a href='view_cat.php?cat=".$row['id']."'>".$row['title']."</a></li>";

menu($row['id']);
}
}
echo "</ul>";

если я нигде не ошибся должно работать. а чтобы было не просто в столбик а с отступами нужно подсчитать этот отступ. а лучше заносить его в таблицу при создании. там 1 2 3. при 1 будет нулевой при 2 например 20px и т.д.

Edited by vvsh
Link to comment
Share on other sites

  • 0

У меня получилось создать список!

<?
function ShowTree ($pid) {
$result3 = mysql_query("SELECT `id`, `pid`, `title` FROM `Photograf` WHERE `pid` = $pid ORDER BY `title`");
if (!$result3)
{
echo "<p>Запрос на вывод данных не прошел. <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result3) > 0)
{
echo '<ul>';
while ($row = mysql_fetch_array($result3))
{
echo '<li><a href="view_cat.php?cat='.$row['id'].'">'.$row['title'].'</a></li>';
ShowTree ($row['id']);
}
echo '</ul>';
}
}

ShowTree (0);
?>

только получилось вот что:

00fc95724eaf.png

А хочу что бы было так:

ecde1fd562d9.png

Т.е. категории должны выезжать в бок..

CSS есть, но как сделать так чтобы он работал в php, да еще и правильно?

если что css здесь с коментариями:

<style>
UL
{
width: 183px; /* Ширина меню */
list-style: none; /* Для списка убираем маркеры */
margin:0;
margin-left:14px; /* Нет отступов вокруг */
padding: 0; /* Убираем поля вокруг текста */
font-family: Tahoma, sans-serif; /* Рубленый шрифт для текста меню */
font-size: 10pt; /* Размер названий в пункте меню */
}

LI UL
{
list-style: none; /* Для списка убираем маркеры */
position: absolute; /* Подменю позиционируются абсолютно */
display: none; /* Скрываем подменю */
margin-left: 183px; /* Сдвигаем подменю вправо */
margin-top: -2.2em; /* Сдвигаем подменю вверх */
}

li A
{
text-align:center;
display: block; /* Ссылка как блочный элемент */
padding: 6px; /* Поля вокруг надписи */
text-decoration: none; /* Подчеркивание у ссылок убираем */
color: #333; /* Цвет текста */
border: 1px solid #FFF; /* Рамка вокруг пунктов меню */
background-color: #EEE; /* Цвет фона */
border-bottom: none; /* Границу снизу не проводим */
}

li A:hover {
color: #fff; /* Цвет текста активного пункта */
background-color: #2C70AA ; /* Цвет фона активного пункта */
}

LI:hover UL
{
display: block; /* При выделении пункта курсором мыши отображается подменю */
}
.brd
{
border-bottom: 1px solid #ccc; /* Линия снизу */
}
.levmpt
{
margin:0;
margin-left: 14px;
display: block;
width: 183px;
height: 40px;
overflow: hidden;
background-image:url(img/lev_menu/phot.jpg);
background-repeat: no-repeat;
}
.levmps
{
margin:0;
margin-left: 14px;
display: block;
width: 183px;
height: 40px;
overflow: hidden;
background-image:url(img/lev_menu/phos.jpg);
background-repeat: no-repeat;
}
</style>

Edited by Fynfastik
Link to comment
Share on other sites

  • 0

Вывод из PHP должен содержать нечто вроде echo '<html>'; и другие необходимые для формирования страницы теги. Или лучше обращение к шаблону, где эти теги уже сформированы в готовый макет.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy