[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с выводом инфы из базы в цикл
dreny
привет всем! нужна Ваша помощь
Пытаюсь сделать менюшку в виде дерева, нажимаешь на основной раздел и открываются подразделы.
менюшку нашёл сделал, решил сделать так, чтобы все данные этого меню хранились в базе и с помощью цикла выводились в форму. С горем пополам сделал так, чтобы выводился основной раздел менюшки, но вот в чем проблема, вставляю в цикл основного раздела, цикл, который выводит подраздел меню, а он не срабатывает.
Профи подскажите пожалуйста что нужно сделать. вот сам код:



$query_cat_menu_col = mysql_query("SELECT * FROM config");
$num_cat2 = mysql_fetch_array($query_cat_menu_col);
$num_cat = $num_cat2["cat_menu_col"];
$query_menu_cat = mysql_query("SELECT * FROM catalogs");
$menu_cat = mysql_fetch_array($query_menu_cat);
for($f='0';$f < $num_cat;$f++){
$i = $f+1;
$query_cat = mysql_query("SELECT * FROM catalogs WHERE title_cat = '$i'");
$title_cat = mysql_fetch_array($query_cat);
printf("<div id='menutitle' onclick='SwitchMenu(\"sub%s\")'>%s</div>",$i, $title_cat["title_name"]);
for($r='0';$r < 10;$r++){
$d = $r+1;
$query_cat_subtitle = mysql_query("SELECT * FROM catalogs WHERE subtitle_cat = '$d'");
$subtitle_cat = mysql_fetch_array($query_cat_subtitle);
printf("<span class='coolmenu' id='sub%s'>
- <a href='%s'>%s</a><br>
</span>"
,$i,$subtitle_cat["ssilka"],$subtitle_cat["subtitle_name"]);
}
}




 ! 

М
Как то так.
Bezdna




Спустя 9 минут, 7 секунд (28.12.2009 - 18:24) vagrand написал(а):
Код отформатируй и заключи в теги [php][/php]

Спустя 25 минут, 8 секунд (28.12.2009 - 18:50) dreny написал(а):
Это то понятно, я просто кусок кода вставил, как раз тот цикл, который выводит эту менюшку.



<?php
//вывод из базы количество основных разделов меню
$query_cat_menu_col = mysql_query("SELECT * FROM config");
$num_cat2 = mysql_fetch_array($query_cat_menu_col);
$num_cat = $num_cat2["cat_menu_col"];
$query_menu_cat = mysql_query("SELECT * FROM catalogs");
$menu_cat = mysql_fetch_array($query_menu_cat);
//цикл вывода основного раздела меню
for($f='0';$f < $num_cat;$f++){
$i = $f+1;
$query_cat = mysql_query("SELECT * FROM catalogs WHERE title_cat = '$i'");
$title_cat = mysql_fetch_array($query_cat);
printf("<div id='menutitle' onclick='SwitchMenu(\"sub%s\")'>%s</div>",$i,
$title_cat["title_name"]);
//цикл вывода подраздела меню
for($r='0';$r < 10;$r++){
$d = $r+1;
$query_cat_subtitle = mysql_query("SELECT * FROM catalogs WHERE subtitle_cat = '$d'");
$subtitle_cat = mysql_fetch_array($query_cat_subtitle);
printf("<span class='coolmenu' id='sub%s'>
- <a href='%s'>%s</a><br>
</span>"
,$i,$subtitle_cat["ssilka"],$subtitle_cat["subtitle_name"]);
}
}


проблема в том, что в таблицу в столбце subtitle_cat занесен номер основного раздела, т.е. если основной номер раздела title_cat (музыка) = 1, то номер подраздела subtitle_cat(поп, рэп, класика) также = 1. и вот задача, чтобы выбрав основной раздел, он выбрал из столбца subtitle_cat все пункты подраздела с числом = 1, и только потом переходил к основному разделу, который = 2 и т.д.

Спустя 8 минут, 42 секунды (28.12.2009 - 18:58) vagrand написал(а):
Хмм, ожидаемой реакции сервера не последовало ©

Я имел ввиду не теги <?php ?>, а BBCode теги [php][/php] которые юзаются на этом форуме для форматирования PHP кода.

Спустя 10 минут, 36 секунд (28.12.2009 - 19:09) dreny написал(а):
Я на форумах почти ноль, поэтому извеняйте, не часто я за советом в инет вылажу, в основном пытаюсь сам...

$query_cat_menu_col = mysql_query("SELECT * FROM config");
$num_cat2 = mysql_fetch_array($query_cat_menu_col);
$num_cat = $num_cat2["cat_menu_col"];
$query_menu_cat = mysql_query("SELECT * FROM catalogs");
$menu_cat = mysql_fetch_array($query_menu_cat);
//цикл вывода основного раздела меню
for($f='0';$f < $num_cat;$f++){
$i = $f+1;
$query_cat = mysql_query("SELECT * FROM catalogs WHERE title_cat = '$i'");
$title_cat = mysql_fetch_array($query_cat);
printf("<div id='menutitle' onclick='SwitchMenu(\"sub%s\")'>%s</div>",$i,
$title_cat["title_name"]);
//цикл вывода подраздела меню
for($r='0';$r < 10;$r++){
$d = $r+1;
$query_cat_subtitle = mysql_query("SELECT * FROM catalogs WHERE subtitle_cat = '$d'");
$subtitle_cat = mysql_fetch_array($query_cat_subtitle);
printf("<span class='coolmenu' id='sub%s'>
- <a href='%s'>%s</a><br>
</span>"
,$i,$subtitle_cat["ssilka"],$subtitle_cat["subtitle_name"]);
}
}


Спустя 3 минуты, 46 секунд (28.12.2009 - 19:13) vagrand написал(а):
Нужно сделать следующее:


$query_menu_cat = mysql_query("SELECT * FROM catalogs");
while ($menu_cat = mysql_fetch_assoc($query_menu_cat)) {
$query_cat = mysql_query("SELECT * FROM catalogs WHERE title_cat = " . $menu_cat['title_cat ']);
while ($cat = mysql_fetch_assoc($query_cat)) {

}
}


Спустя 14 часов, 2 минуты, 11 секунд (29.12.2009 - 09:15) dreny написал(а):
Спасибо большое, на основе Вашей подсказки сделал следующее:

<?php
$i='1';
$query_menu_cat = mysql_query("SELECT * FROM catalogs ");
while ($menu_cat = mysql_fetch_assoc($query_menu_cat)) {
if ($menu_cat['title_cat'] == $i){
printf("<div id='menutitle' onclick='SwitchMenu(\"sub%s\")' class = 'menutitle''>(%s): %s</div>",$i,$i, $menu_cat["title_name"]);
$query_cat = mysql_query("SELECT * FROM catalogs");
printf("<span class = 'submenutitle' id='sub%s'>",$i);
while ($cat = mysql_fetch_assoc($query_cat)) {
if ($cat["subtitle_cat"] == $i){
printf("<li> <a href='%s'>%s</a><br>",$cat["ssilka"],$cat["subtitle_name"]);
}
}

echo "</span>";
$i++;
}
}

?>

И всё получилось. идёт сначало выборка 1 основного раздела меню, потом циклом выбирает подразделы и выбирает 2 основной раздел меню.
Спасибо ещё раз за подсказку.

Спустя 2 часа, 4 минуты, 17 секунд (29.12.2009 - 11:19) sergeiss написал(а):
Если честно - то хрень полная!

Ты делаешь запрос "цикл в цикле", да еще и выбираешь НА КАЖДОЙ ИТЕРАЦИИ (!) все данные

Это то, что у тебя сделано, и это НЕПРАВИЛЬНО!!!
$query_menu_cat = mysql_query("SELECT * FROM catalogs ");
while ($menu_cat = mysql_fetch_assoc($query_menu_cat))
{
....
$query_cat = mysql_query("SELECT * FROM catalogs");
....

while ($cat = mysql_fetch_assoc($query_cat)) { ..... }
}


Такой подход - самое фиговое, что только можно придумать. Грузишь БД максимально НЕэффективно.

Надо делать выборку из БД одним запросом, и потом в одном цикле всё выводить.

Спустя 5 часов, 45 минут, 58 секунд (29.12.2009 - 17:05) dreny написал(а):
Цитата
Если честно - то хрень полная!

Ты делаешь запрос "цикл в цикле", да еще и выбираешь НА КАЖДОЙ ИТЕРАЦИИ (!) все данные

Это то, что у тебя сделано, и это НЕПРАВИЛЬНО!!!

$query_menu_cat = mysql_query("SELECT * FROM catalogs ");
while ($menu_cat = mysql_fetch_assoc($query_menu_cat)) {
....
        $query_cat = mysql_query("SELECT * FROM catalogs");
....
 
          while ($cat = mysql_fetch_assoc($query_cat)) {
..... 
          }
}



Такой подход - самое фиговое, что только можно придумать. Грузишь БД максимально НЕэффективно.

Надо делать выборку из БД одним запросом, и потом в одном цикле всё выводить.

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

$query_menu_cat = mysql_query("SELECT title_cat, title_name FROM catalogs ");
while ($menu_cat = mysql_fetch_assoc($query_menu_cat)) {
....
$query_cat = mysql_query("SELECT subtitle_cat, subtitle_name, ssilka FROM catalogs");
....

while ($cat = mysql_fetch_assoc($query_cat)) {
.....
}
}


Так правильно будет?
А то что использован цикл в цикле это нормально?

Спустя 13 минут, 42 секунды (29.12.2009 - 17:19) sergeiss написал(а):
Тут ненормально именно всё smile.gif

И то, что все столбцы выбираются, и то, что каждый раз в цикле все данные выбираются заново. Причем, те же данные, что только что были выбраны!!!

Это как если бы ты разговаривал с человеком примерно так:
- Скажите, как Вас зовут?
- Василий-ибн-сам-себе-программер.
- А скажите, Вася, а какое у вас хобби?
- (отвечает)
- А скажите, как Вас зовут?
- Василий-ибн-сам-себе-программер.
- А скажите, Василий, что вы думаете о нынешней погоде?
- (отвечает)
- А скажите, как Вас зовут?
- Василий-ибн-сам-себе-программер.
- Скажите, ибн-сам-себе-хрензнаеткто, а сколько часов в день вы проводите за компом?
- (отвечает)
- А скажите, как Вас зовут?
- Василий-ибн-сам-себе-программер.
- Какое интересное имя! Я никогда его не слышал раньше! А скажите, Василий....

Спустя 17 минут, 22 секунды (29.12.2009 - 17:36) dreny написал(а):
Понятно, будем дорабатывать, ещё такой вопрос:
хочу создать дирректорию.
в файле config.php прописываю
define ('DIR', 'http://'.$_SERVER['HTTP_HOST'].'/dir/');

А в в другом add_dir.php
$add_dir = mkdir(DIR.$add_dir_title_cat,0700);

Подскажите пожалуйста как правильно соединить DIR c $add_dir_title_cat чтобы заработало.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.