Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Посоветуйте как проще реализовать админку для меню!?
 
 автор: Erema   (21.09.2009 в 16:26)   письмо автору
 
 

Необходимо сделать админку для меню! Меня раскрывающегося типа имеет три уровня вложенности, меню на jQuery!
Задача стоит следующая: Реализовать систему администрирования меню для изменения текущих пунктов и подпунктов и создание новых пунктов и подпунктов
Вот код меню:

<div id="menu_cot_ha_ha">
    <h1>Каталог</h1>
    <ul id="my-menu" class="sample-menu">
    
    <li><a href="#0">+ Брюки</a>
        <ul>
            <li><a href="#0">+ Брюки Весна-Осень</a>
                <ul>
                    <li><a href="view_cat.php?cat=vojm">Весна - Осень женские модели</a></li>
                    <li><a href="view_cat.php?cat=vomm">Весна - Осень молодёжные модели</a></li>
                   </ul>
            </li>
            
            <li><a href="#0">+ Брюки Зима</a>
                <ul>
                    <li><a href="view_cat.php?cat=bzjm">Зима женские модели</a></li>
                    <li><a href="view_cat.php?cat=bzmm">Зима молодёжные модели</a></li>
                   </ul>
            </li>
            <li><a href="#0">+ Брюки Лето</a>
                <ul>
                    <li><a href="view_cat.php?cat=bljm">Лето женские модели</a></li>
                    <li><a href="view_cat.php?cat=blmm">Лето молодёжные модели</a></li>
                   </ul>
            </li>
        </ul>
    </li>
    
    <li><a href="#0">+ Трикотаж</a>
                <ul>
            <li><a href="view_cat.php?cat=tbg">Блузы, Джемперы</a></li>
            <li><a href="view_cat.php?cat=tv">Водолазки</a></li>
            <li><a href="view_cat.php?cat=tpts">Платья,  Туники, Сарафаны</a></li>
            <li><a href="view_cat.php?cat=ttmf">Топы. Майки, Футболки</a></li>
            <li><a href="view_cat.php?cat=tlub">Лосины, юбки, брюки</a></li>
        </ul>

    </li>
    
    <li><a href="view_cat.php?cat=b">+ Блузы</a></li>
    
    
    </ul>
    </div>

  Ответить  
 
 автор: cheops   (21.09.2009 в 16:36)   письмо автору
 
   для: Erema   (21.09.2009 в 16:26)
 

Пункты меню будут храниться в базе данных? Структура таблицы готова или именно это вызывает сложность?

  Ответить  
 
 автор: Erema   (21.09.2009 в 20:14)   письмо автору
 
   для: cheops   (21.09.2009 в 16:36)
 

А как лучше их хранить? Ну наверное в базе данных. Я вот и хочу посоветоваться с чего начать как верно построить структуру таблицы?
Да собственно волнует вопрос на счет таблицы.
И еще не понимаю каки образом у меня будит формироваться ссылка ведь сейчас то у меня четко прописаны ссылки.
К примеру:
<li><a href="view_cat.php?cat=tbg">Блузы, Джемперы</a></li>

тоеcть к "cat" присваивается tbg для того чтобы по данной категории вывести циклом фотографии.
При нажатии на данную ссылку в файле "view_cat.php" срабатывает вот это:

<?php
        $result 
mysql_query ("SELECT * FROM catalog_img WHERE cat='$cat' ORDER BY id DESC LIMIT $start$num",$db);
        
$myrow mysql_fetch_array ($result);
        do{
        
printf 
        
("
         <span id='box_gallery'>
         <a href='%s' class='highslide' onclick='return hs.expand(this)'>
         <img src='%s' class='img_size' alt='изображение'>
         <span id='ar'><p>Артикул %s</p></span>
         </a>
         </span>"
,
        
$myrow["img"], $myrow["img_small"], $myrow["art"]);
        }
        while(
$myrow mysql_fetch_array ($result)); 

?>

Заранее благодарен!)

  Ответить  
 
 автор: serjinio   (21.09.2009 в 21:53)   письмо автору
 
   для: Erema   (21.09.2009 в 20:14)
 

id p_id title
1 0 Трикотаж
2 1Блузы
3 1 Джемперы
4 1 Водолазки
5 1 Платья
а вообще у вас хаос в структуре..........4 таблицы:

x( времена года )
id_x   title
1       Лето
2       Весна
3       Зима

y ( М ,Ж ,ОНО :) )
id_y  title
1     женские модели
2     молодёжные модели
3     детские
4     для всех!

z ( сам Товар.....)
id_z    title
1       Брюки
2       Блузы
3       Джемперы
4       Водолазки
5       Платья
6       Туники
7       Сарафаны

xxx(таблица связи)
id_x    id_y   id_z 
1        2       7     //  Лето /молодёжные модели/Сарафаны
3        1       3     //  Зима/женские модели/Джемперы


Кроме того надо предусмотреть размеры ,цвет и материал ..но это чуть другая структура...

  Ответить  
 
 автор: Erema   (22.09.2009 в 10:23)   письмо автору
 
   для: serjinio   (21.09.2009 в 21:53)
 

Икак при такой структуре выводить меню средствами php?

  Ответить  
 
 автор: Erema   (22.09.2009 в 13:29)   письмо автору
 
   для: Erema   (22.09.2009 в 10:23)
 

Для примера создал точно такую же структуру!


x( времена года ) 
id_x   title 
1       Лето 
2       Весна 
3       Зима 

y ( М ,Ж ,ОНО :) ) 
id_y  title 
1     женские модели 
2     молодёжные модели 
3     детские 
4     для всех! 

z ( сам Товар.....) 
id_z    title 
1       Брюки 
2       Блузы 
3       Джемперы 
4       Водолазки 
5       Платья 
6       Туники 
7       Сарафаны 

xxx(таблица связи) 
id_x    id_y   id_z  
1        2       7     //  Лето /молодёжные модели/Сарафаны 
3        1       3     //  Зима/женские модели/Джемперы


Удалось вывести в цикле заголовки (title) только из таблички "X"
Как не пытался другие пункты либо не выводятся либо выводятся не так как должны.
Вот код:

<div id="menu_cot_ha_ha">
<h1>Каталог</h1>
    <ul id="my-menu" class="sample-menu">
    <?php


    $result 
mysql_query ("SELECT * FROM x");
    
$myrow mysql_fetch_array ($result);
    
    do{
        
printf 
        
("<li><a href='#0'>+ %s</a>
            
         </li>"
,
        
$myrow["title"]);
        }
    while(
$myrow mysql_fetch_array ($result));
    
    
?> 
      
    </ul>
</div>

  Ответить  
 
 автор: psychomc   (22.09.2009 в 13:56)   письмо автору
 
   для: Erema   (22.09.2009 в 13:29)
 

кстати лучше использовать while вместо do while

  Ответить  
 
 автор: Erema   (22.09.2009 в 14:01)   письмо автору
 
   для: psychomc   (22.09.2009 в 13:56)
 

А каким образом мне выводить подпункты?

  Ответить  
 
 автор: cheops   (22.09.2009 в 14:44)   письмо автору
 
   для: Erema   (22.09.2009 в 14:01)
 

Можно поступить примерно так
<div id="menu_cot_ha_ha"> 
<h1>Каталог</h1> 
    <ul id="my-menu" class="sample-menu"> 
    <?php 


    $result 
mysql_query ("SELECT * FROM x"); 
     
    while(
$myrow mysql_fetch_array ($result))
    {
      echo 
"<li><a href='#0'>+ {$myrow['title']}</a>"
      
// Извлекаем подпункты
      
$query "SELECT * FROM y
                WHERE id_y IN (SELECT id_y FROM xxx
                               WHERE id_x = 
{$myrow[id_x]})";
      
$sub mysql_query($query);
      if(!
$sub) exit("Ошибка извлечения подразделов");
      if(
mysql_num_rows($sub))
      {
        echo 
"<ul>";
        while(
$subrow mysql_fetch_array($sub))
        {
          echo 
"<li>{$subrow[title]}</li>";
        }
        echo 
"</ul>";
      }
      echo 
"</li>";
    } 
     
    
?>  
       
    </ul> 
</div>

  Ответить  
 
 автор: Erema   (22.09.2009 в 15:04)   письмо автору
 
   для: cheops   (22.09.2009 в 14:44)
 

Спасибо сейчас попробую=)

  Ответить  
 
 автор: cheops   (22.09.2009 в 15:11)   письмо автору
 
   для: Erema   (22.09.2009 в 15:04)
 

А как сейчас скрипт выглядит, там $query нигде не выводится?

>и еще хотел уточнить про табличку "xxx" там у поля " id_x" какой тип поля должен был и нужно
>ли у него ставить "авто инкремент" и первичный ключ?
Нет, в таблице связи не стоит - проблем будет больше, а пользы никакой.

  Ответить  
 
 автор: Erema   (22.09.2009 в 15:53)   письмо автору
 
   для: cheops   (22.09.2009 в 15:11)
 

Начну с того что напишу новую структуру таблиц:

level_1 ( таблица №1 ) (Уровень _1)
id_x   title  
1       Брюки   
2       Трикотаж  
3       Блузы  

level_2 ( таблица №2 ) (Уровень _2)
id_y  title  
1      Брюки Весна-Осень  
2      Брюки Зима  
3      Брюки Лето  
4      Блузы, Джемперы
5      Водолазки
6      Платья, Туники, Сарафаны
7      Топы. Майки, Футболки
8      Лосины, юбки, брюки  

level_3 ( таблица №3 ) (Уровень _3)
id_z    title  
1        Весна - Осень женские модели 
2        Весна - Осень молодёжные модели  
3        Зима женские модели  
4        Зима молодёжные модели  
5        Лето женские модели  
6        Лето молодёжные модели  


svaz ( таблица №4 ) (таблица связи)  
id_x    id_y   id_z   
1        1       1     // Брюки - Брюки Весна/Осень - Весна - Осень женские модели
1        1       2     // Брюки - Брюки Весна/Осень - Весна - Осень молодёжные модели
1        2       3     // Брюки - Брюки Зима - Зима женские модели
1        2       4     // Брюки - Брюки Зима - Зима молодёжные модели
1        3       5     // Брюки - Брюки Лето - Лето женские модели
1        3       6     // Брюки - Брюки Лето - Лето молодёжные модели
2        4       -     // Трикотаж - Блузы, Джемперы
2        5       -     // Трикотаж - Водолазки
2        6       -     // Трикотаж - Платья, Туники, Сарафаны
2        7       -     // Трикотаж - Топы. Майки, Футболки
2        8       -     // Трикотаж - Лосины, юбки, брюки
3        -       -     //  Блузы


А вот так теперь выглядит php:

    <div id="menu_cot_ha_ha">  
<h1>Каталог</h1>  
    <ul id="my-menu" class="sample-menu">  
    <?php  
    $result 
mysql_query ("SELECT * FROM level_1");  
    while(
$myrow mysql_fetch_array ($result)) 
    { 
          echo 
"<li><a href='#0'>+ {$myrow['title']}</a>";  
                          
// Извлекаем подпункты 
                          
                          
$query "SELECT * FROM level_2 
                                    WHERE id_y IN (SELECT id_y FROM svaz 
                                    WHERE id_x = 
{$myrow[id_x]} 
                                                   )"
;
                                    
                          
$sub mysql_query($query); 
                          if(!
$sub) exit("Ошибка извлечения подразделов"); 
                          
                          if(
mysql_num_rows($sub)) 
                          { 
                            echo 
"<ul>"
                            while(
$subrow mysql_fetch_array($sub)) 
                            { 
                              echo 
"<li>{$subrow[title]}</li>"
                            } 
                            echo 
"</ul>"
                          } 
          echo 
"</li>"
    }
    
?>   
        
    </ul>  
</div>


Работает но не так как нужно! Вот скрин как работает меню при вышенаписанном php скрипте:
http://www.corona-jeans.ru/2.gif

А тут скрин меню в развернутом виде при html версии меню:
http://www.corona-jeans.ru/1.gif

html код меню:

<div id="menu_cot_ha_ha">
    <h1>Каталог</h1>
    <ul id="my-menu" class="sample-menu">
    
    <li><a href="#0">+ Брюки</a>
        <ul>
            <li><a href="#0">+ Брюки Весна-Осень</a>
                <ul>
                    <li><a href="view_cat.php?cat=vojm">Весна - Осень женские модели</a></li>
                    <li><a href="view_cat.php?cat=vomm">Весна - Осень молодёжные модели</a></li>
                   </ul>
            </li>
            
            <li><a href="#0">+ Брюки Зима</a>
                <ul>
                    <li><a href="view_cat.php?cat=bzjm">Зима женские модели</a></li>
                    <li><a href="view_cat.php?cat=bzmm">Зима молодёжные модели</a></li>
                   </ul>
            </li>
            <li><a href="#0">+ Брюки Лето</a>
                <ul>
                    <li><a href="view_cat.php?cat=bljm">Лето женские модели</a></li>
                    <li><a href="view_cat.php?cat=blmm">Лето молодёжные модели</a></li>
                   </ul>
            </li>
        </ul>
    </li>
    
    <li><a href="#0">+ Трикотаж</a>
         <ul>
            <li><a href="view_cat.php?cat=tbg">Блузы, Джемперы</a></li>
            <li><a href="view_cat.php?cat=tv">Водолазки</a></li>
            <li><a href="view_cat.php?cat=tpts">Платья,  Туники, Сарафаны</a></li>
            <li><a href="view_cat.php?cat=ttmf">Топы. Майки, Футболки</a></li>
            <li><a href="view_cat.php?cat=tlub">Лосины, юбки, брюки</a></li>
        </ul>

    </li>
    
    <li><a href="view_cat.php?cat=b">+ Блузы</a></li>
    
    
    </ul>
    </div>

  Ответить  
 
 автор: cheops   (22.09.2009 в 16:11)   письмо автору
 
   для: Erema   (22.09.2009 в 15:53)
 

Вообще зря, как мне кажется, используете три таблицы для каждого из уровня вложений - обычно используют для пунктов меню любого уровня одну таблицу, вводя в неё дополнительное поле, которое указывате на родительский каталог.

  Ответить  
 
 автор: Erema   (22.09.2009 в 16:13)   письмо автору
 
   для: cheops   (22.09.2009 в 16:11)
 

Можете пример привести!?

  Ответить  
 
 автор: cheops   (22.09.2009 в 16:30)   письмо автору
 
   для: Erema   (22.09.2009 в 16:13)
 

Обсуждение такой таблицы вы сможете найти в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=701.

  Ответить  
 
 автор: Erema   (22.09.2009 в 16:11)   письмо автору
 
   для: Erema   (22.09.2009 в 15:53)
 

Поправил скрипт!

<div id="menu_cot_ha_ha">  
<h1>Каталог</h1>  
    <ul id="my-menu" class="sample-menu">  
    <?php  
    $result 
mysql_query ("SELECT * FROM level_1");  
    while(
$myrow mysql_fetch_array ($result)) 
    { 
          echo 
"<li><a href='#0'>+ {$myrow['title']}</a>";  
                          
// Извлекаем подпункты 
                          
                          
$query "SELECT * FROM level_2 
                                    WHERE id_y IN (SELECT id_y FROM svaz 
                                    WHERE id_x = 
{$myrow[id_x]} 
                                                   )"
;
                                    
                          
$sub mysql_query($query); 
                          if(!
$sub) exit("Ошибка извлечения подразделов"); 
                          
                          if(
mysql_num_rows($sub)) 
                          { 
                            echo 
"<ul>"
                            while(
$subrow mysql_fetch_array($sub)) 
                            { 
                              echo 
"<li><a href='#0'>{$subrow[title]}</a></li>"
                            } 
                            echo 
"</ul>"
                          } 
          echo 
"</li>"
    }
    
?>   
        
    </ul>  
</div>


теперь ссылки второго уровня вложенности выглядят как должны выглядеть.
Попробую сам вывести пункты третьего уровня !=)

  Ответить  
 
 автор: Erema   (22.09.2009 в 16:48)   письмо автору
 
   для: Erema   (22.09.2009 в 16:11)
 

Я наверно останусь на прежнем варианте с четырьмя таблицами.
Только вот ссылки третьего уровня почему то вывести не могу(
Вот что понаделал:

<div id="menu_cot_ha_ha">  
<h1>Каталог</h1>  
    <ul id="my-menu" class="sample-menu">  
    <?php  
    $result 
mysql_query ("SELECT * FROM level_1");  
    while(
$myrow mysql_fetch_array ($result)) 
    { 
          echo 
"<li><a href='#0'>+ {$myrow['title']}</a>";  
                          
                          
// Извлекаем подпункты 
                          
$query "SELECT * FROM level_2 
                                    WHERE id_y IN (SELECT id_y FROM svaz 
                                    WHERE id_x = 
{$myrow[id_x]}
                                    )"
;
                                    
                          
$sub mysql_query($query); 
                          if(!
$sub) exit("Ошибка извлечения подразделов");
                          
                          
                          
                          
$query3 "SELECT * FROM level_3 
                                    WHERE id_y IN (SELECT id_y FROM svaz 
                                    WHERE id_z = 
{$myrow[id_z]}
                                    )"
;
                                    
                          
$sub3 mysql_query($query3); 
                          if(!
$sub3) exit("Ошибка извлечения подразделов");
                          

                          
                          if(
mysql_num_rows($sub)) 
                          { 
                            echo 
"<ul>"
                            while(
$subrow mysql_fetch_array($sub)) 
                                { 
                                  echo 
"<li><a href='#0'>{$subrow[title]}</a>";
                                  if(
mysql_num_rows($sub3)) 
                                      { 
                                        echo 
"<ul>";
                                        while(
$subrow3 mysql_fetch_array($sub3)) 
                                        {
                                        echo 
"<li><a href='#0'>{$subrow[title]}</a></li>";
                                        }
                                        echo 
"</li>";
                                    }
                                  echo 
"</li>";
                                } 
                            echo 
"</ul>"
                          } 
          echo 
"</li>"
    }
    
?>   
        
    </ul>  
</div>

  Ответить  
 
 автор: Erema   (22.09.2009 в 17:14)   письмо автору
 
   для: Erema   (22.09.2009 в 16:48)
 

Я наверно Вам уже надоел но всеже вот вот код при котором выводятся тункты третьего уровня только они все в куче в пункте "Брюки Весна-Осень"
вот скрин http://www.corona-jeans.ru/3.gif
А вот код

<div id="menu_cot_ha_ha">  
<h1>Каталог</h1>  
    <ul id="my-menu" class="sample-menu">  
    <?php  
    $result 
mysql_query ("SELECT * FROM level_1");  
    while(
$myrow mysql_fetch_array ($result)) 
    { 
          echo 
"<li><a href='#0'>+ {$myrow['title']}</a>";  
                          
                          
// Извлекаем подпункты 
                          
$query "SELECT * FROM level_2 
                                    WHERE id_y IN (SELECT id_y FROM svaz 
                                    WHERE id_x = 
{$myrow[id_x]}
                                    )"
;
                                    
                          
$sub mysql_query($query); 
                          if(!
$sub) exit("Ошибка извлечения подразделов");
                          
                          
                          
$query3 "SELECT * FROM level_3 
                                    WHERE id_z IN (SELECT id_z FROM svaz 
                                    WHERE id_x = 
{$myrow[id_x]}
                                    )"
;
                                    
                          
$sub3 mysql_query($query3); 
                          if(!
$sub3) exit("Ошибка извлечения подразделов");
                          
                          
                          if(
mysql_num_rows($sub)) 
                          { 
                            echo 
"<ul>"
                            while(
$subrow mysql_fetch_array($sub)) 
                                { 
                                  echo 
"<li><a href='#0'>{$subrow[title]}</a>";
                                      
                                    if(
mysql_num_rows($sub3)) 
                                      { 
                                    echo 
"<ul>";
                                    while(
$subrow mysql_fetch_array($sub3)) 
                                        { 
                                        echo 
"<li><a href='#0'>{$subrow[title]}</a></li>";
                                        }
                                      echo 
"</ul>";
                                    }
                                  echo 
"</li>";
                                } 
                            echo 
"</ul>"
                          } 
          echo 
"</li>"
    }
    
?>   
        
    </ul>  
</div>

  Ответить  
 
 автор: cheops   (22.09.2009 в 17:15)   письмо автору
 
   для: Erema   (22.09.2009 в 16:48)
 

При такой компоновке $query3 должен быть располжен внутри цикла
while($subrow = mysql_fetch_array($sub)) 

и при его формировании должен использоваться массив $subrow вместо $myrow.

  Ответить  
 
 автор: Erema   (22.09.2009 в 17:25)   письмо автору
 
   для: cheops   (22.09.2009 в 17:15)
 

Все равно почему-то не выходит(

  Ответить  
 
 автор: cheops   (22.09.2009 в 17:32)   письмо автору
 
   для: Erema   (22.09.2009 в 17:25)
 

Попробуйте следующий вариант
<div id="menu_cot_ha_ha">   
<h1>Каталог</h1>   
    <ul id="my-menu" class="sample-menu">   
    <?php   
    $result 
mysql_query ("SELECT * FROM level_1");   
    while(
$myrow mysql_fetch_array ($result))  
    {  
      echo 
"<li><a href='#0'>+ {$myrow['title']}</a>";   
                           
      
// Извлекаем подпункты  
      
$query "SELECT * FROM level_2  
                WHERE id_y IN (SELECT id_y FROM svaz  
                WHERE id_x = 
{$myrow[id_x]} 
                )"

                 
      
$sub mysql_query($query);  
      if(!
$sub) exit("Ошибка извлечения подразделов"); 
     
      if(
mysql_num_rows($sub))  
      {  
        echo 
"<ul>";  
        while(
$subrow mysql_fetch_array($sub))  
        {  
          echo 
"<li><a href='#0'>{$subrow[title]}</a>"
          
$query3 "SELECT * FROM level_3  
                    WHERE id_z IN (SELECT id_z FROM svaz  
                    WHERE id_у = 
{$subrow[id_у]} 
                    )"

                     
          
$sub3 mysql_query($query3);  
          if(!
$sub3) exit("Ошибка извлечения подразделов"); 
          if(
mysql_num_rows($sub3))
          {  
            echo 
"<ul>"
            while(
$subsubrow mysql_fetch_array($sub3))  
            {  
              echo 
"<li><a href='#0'>{$subsubrow[title]}</a></li>"
            } 
            echo 
"</ul>"
          } 
          echo 
"</li>"
        }  
        echo 
"</ul>";  
      }  
      echo 
"</li>";  
    } 
    
?>    
    </ul>   
</div>

  Ответить  
 
 автор: Erema   (22.09.2009 в 17:37)   письмо автору
 
   для: cheops   (22.09.2009 в 17:32)
 

Блин "Ошибка извлечения подразделов"

  Ответить  
 
 автор: cheops   (22.09.2009 в 17:40)   письмо автору
 
   для: Erema   (22.09.2009 в 17:37)
 

Строки вида
exit("Ошибка извлечения подразделов");

исправьте на
exit("Ошибка извлечения подразделов - ".mysql_error());

что теперь выводит?

  Ответить  
 
 автор: Erema   (22.09.2009 в 17:43)   письмо автору
 
   для: cheops   (22.09.2009 в 17:40)
 

"Ошибка извлечения подразделов - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 4"

  Ответить  
 
 автор: cheops   (22.09.2009 в 17:48)   письмо автору
 
   для: Erema   (22.09.2009 в 17:43)
 

Исправьте
if(!$sub) exit("Ошибка извлечения подразделов - ".mysql_error()); 

на
if(!$sub) exit("Ошибка извлечения подразделов - ".mysql_error()." ".$query); 

а
 if(!$sub3) exit("Ошибка извлечения подразделов - ".mysql_error());

на
 if(!$sub3) exit("Ошибка извлечения подразделов - ".mysql_error()." ".$query);

  Ответить  
 
 автор: Erema   (22.09.2009 в 17:58)   письмо автору
 
   для: cheops   (22.09.2009 в 17:48)
 

"Ошибка извлечения подразделов - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 4 SELECT * FROM level_2 WHERE id_y IN (SELECT id_y FROM svaz WHERE id_x = 1 )"

Вот код:

<div id="menu_cot_ha_ha">    
<h1>Каталог</h1>    
    <ul id="my-menu" class="sample-menu">    
    <?php    
    $result 
mysql_query ("SELECT * FROM level_1");    
    while(
$myrow mysql_fetch_array ($result))   
    {   
      echo 
"<li><a href='#0'>+ {$myrow['title']}</a>";    
                            
      
// Извлекаем подпункты   
      
$query "SELECT * FROM level_2   
                WHERE id_y IN (SELECT id_y FROM svaz   
                WHERE id_x = 
{$myrow[id_x]}  
                )"
;  
                  
      
$sub mysql_query($query);   
      if(!
$sub) exit("Ошибка извлечения подразделов - ".mysql_error()." ".$query); 
      
      if(
mysql_num_rows($sub))   
      {   
        echo 
"<ul>";   
        while(
$subrow mysql_fetch_array($sub))   
        {   
          echo 
"<li><a href='#0'>{$subrow[title]}</a>";  
          
$query3 "SELECT * FROM level_3   
                    WHERE id_z IN (SELECT id_z FROM svaz   
                    WHERE id_у = 
{$subrow[id_у]}  
                    )"
;  
                      
          
$sub3 mysql_query($query3);   
          if(!
$sub3) exit("Ошибка извлечения подразделов - ".mysql_error()." ".$query); 
          if(
mysql_num_rows($sub3)) 
          {   
            echo 
"<ul>";  
            while(
$subsubrow mysql_fetch_array($sub3))   
            {   
              echo 
"<li><a href='#0'>{$subsubrow[title]}</a></li>";  
            }  
            echo 
"</ul>";  
          }  
          echo 
"</li>";  
        }   
        echo 
"</ul>";   
      }   
      echo 
"</li>";   
    }  
    
?>     
    </ul>    
</div>

  Ответить  
 
 автор: cheops   (22.09.2009 в 18:09)   письмо автору
 
   для: Erema   (22.09.2009 в 17:58)
 

Хм... странно, а у вас версия MySQL какая?

  Ответить  
 
 автор: Erema   (22.09.2009 в 18:12)   письмо автору
 
   для: cheops   (22.09.2009 в 18:09)
 

Apache 2 + SSL, PHP 5, MySQL 5,

А может еще есть какие то варианты решения этой проблемы?

  Ответить  
 
 автор: cheops   (22.09.2009 в 18:13)   письмо автору
 
   для: Erema   (22.09.2009 в 18:12)
 

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

  Ответить  
 
 автор: Erema   (22.09.2009 в 18:21)   письмо автору
 
   для: cheops   (22.09.2009 в 18:13)
 

Что такое дамп таблиц?

  Ответить  
 
 автор: cheops   (22.09.2009 в 18:23)   письмо автору
 
   для: Erema   (22.09.2009 в 18:21)
 

Посмотрите в конце темы http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=68186 - это текстовый файл с SQL-инструкциями, выполнение которого приводит к восстановлению базы данных.

  Ответить  
 
 автор: Erema   (22.09.2009 в 18:36)   письмо автору
 
   для: cheops   (22.09.2009 в 18:23)
 

-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Сен 22 2009 г., 14:35
-- Версия сервера: 5.0.45
-- Версия PHP: 5.2.4
--
-- БД: `coronaj_corona`
--

-- --------------------------------------------------------

--
-- Структура таблицы `level_1`
--

CREATE TABLE `level_1` (
`id_x` int(3) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
PRIMARY KEY (`id_x`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;

--
-- Дамп данных таблицы `level_1`
--

INSERT INTO `level_1` VALUES (1, 'Брюки');
INSERT INTO `level_1` VALUES (2, 'Трикотаж');
INSERT INTO `level_1` VALUES (3, 'Блузы');


-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Сен 22 2009 г., 14:35
-- Версия сервера: 5.0.45
-- Версия PHP: 5.2.4
--
-- БД: `coronaj_corona`
--

-- --------------------------------------------------------

--
-- Структура таблицы `level_2`
--

CREATE TABLE `level_2` (
`id_y` int(3) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
PRIMARY KEY (`id_y`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=9 ;

--
-- Дамп данных таблицы `level_2`
--

INSERT INTO `level_2` VALUES (1, 'Брюки Весна-Осень');
INSERT INTO `level_2` VALUES (2, 'Брюки Зима');
INSERT INTO `level_2` VALUES (3, 'Брюки Лето');
INSERT INTO `level_2` VALUES (4, 'Блузы, Джемперы');
INSERT INTO `level_2` VALUES (5, 'Водолазки');
INSERT INTO `level_2` VALUES (6, 'Платья, Туники, Сарафаны');
INSERT INTO `level_2` VALUES (7, 'Топы. Майки, Футболки');
INSERT INTO `level_2` VALUES (8, 'Лосины, юбки, брюки');


-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Сен 22 2009 г., 14:35
-- Версия сервера: 5.0.45
-- Версия PHP: 5.2.4
--
-- БД: `coronaj_corona`
--

-- --------------------------------------------------------

--
-- Структура таблицы `level_3`
--

CREATE TABLE `level_3` (
`id_z` int(3) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
PRIMARY KEY (`id_z`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;

--
-- Дамп данных таблицы `level_3`
--

INSERT INTO `level_3` VALUES (1, 'Весна - Осень женские модели');
INSERT INTO `level_3` VALUES (2, 'Весна - Осень молодёжные модели');
INSERT INTO `level_3` VALUES (3, 'Зима женские модели');
INSERT INTO `level_3` VALUES (4, 'Зима молодёжные модели');
INSERT INTO `level_3` VALUES (5, 'Лето женские модели');
INSERT INTO `level_3` VALUES (6, 'Лето молодёжные модели');



-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Сен 22 2009 г., 14:36
-- Версия сервера: 5.0.45
-- Версия PHP: 5.2.4
--
-- БД: `coronaj_corona`
--

-- --------------------------------------------------------

--
-- Структура таблицы `svaz`
--

CREATE TABLE `svaz` (
`id_x` int(3) NOT NULL,
`id_y` int(3) NOT NULL,
`id_z` int(3) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

--
-- Дамп данных таблицы `svaz`
--

INSERT INTO `svaz` VALUES (1, 1, 1);
INSERT INTO `svaz` VALUES (1, 1, 2);
INSERT INTO `svaz` VALUES (1, 2, 3);
INSERT INTO `svaz` VALUES (1, 2, 4);
INSERT INTO `svaz` VALUES (1, 3, 5);
INSERT INTO `svaz` VALUES (1, 3, 6);
INSERT INTO `svaz` VALUES (2, 4, 0);
INSERT INTO `svaz` VALUES (2, 5, 0);
INSERT INTO `svaz` VALUES (2, 6, 0);
INSERT INTO `svaz` VALUES (2, 7, 0);
INSERT INTO `svaz` VALUES (2, 8, 0);
INSERT INTO `svaz` VALUES (3, 0, 0);

  Ответить  
 
 автор: cheops   (22.09.2009 в 19:04)   письмо автору
 
   для: Erema   (22.09.2009 в 18:36)
 

Вот отлаженный вариант
<h1>Каталог</h1>     
    <ul id="my-menu" class="sample-menu">     
    <?php     
    $result 
mysql_query ("SELECT * FROM level_1");     
    if(
mysql_num_rows($result))
    while(
$myrow mysql_fetch_array ($result))    
    {    
      echo 
"<li><a href='#0'>+ {$myrow['title']}</a>";     
                             
      
// Извлекаем подпункты    
      
$query "SELECT * FROM level_2    
                WHERE id_y IN (SELECT id_y FROM svaz    
                WHERE id_x = 
{$myrow[id_x]})";
                   
      
$sub mysql_query($query);    
      if(!
$sub) exit("Ошибка извлечения подразделов - ".mysql_error()." ".$query);  
       
      if(
mysql_num_rows($sub))    
      {    
        echo 
"<ul>";    
        while(
$subrow mysql_fetch_array($sub))    
        {    
          echo 
"<li><a href='#0'>{$subrow[title]}</a>";   
          
$query3 "SELECT * FROM level_3    
                    WHERE id_z IN (SELECT id_z FROM svaz    
                                   WHERE id_y = 
{$subrow[id_y]} )";   
                       
          
$sub3 mysql_query($query3);    
          if(!
$sub3) exit("Ошибка извлечения подразделов - ".mysql_error()." ".$query3);  
          if(
mysql_num_rows($sub3))  
          {    
            echo 
"<ul>";   
            while(
$subsubrow mysql_fetch_array($sub3))    
            {    
              echo 
"<li><a href='#0'>{$subsubrow[title]}</a></li>";   
            }   
            echo 
"</ul>";   
          }   
          echo 
"</li>";   
        }    
        echo 
"</ul>";    
      }    
      echo 
"</li>";    
    }   
    
?>      
    </ul>     
</div>

  Ответить  
 
 автор: Erema   (22.09.2009 в 19:10)   письмо автору
 
   для: cheops   (22.09.2009 в 19:04)
 

Большое спасибо за помощь!
Теперь буду решать проблему со ссылками и реализовывать админку =)

  Ответить  
 
 автор: Erema   (23.09.2009 в 14:59)   письмо автору
 
   для: Erema   (22.09.2009 в 19:10)
 

Вотзникли проблемы при добавлении данных в табличку "svaz" которая служит для связи пунктов!
Сделал так что можно добавить ссылки первого уровня и второго. тоесть в табличи "level_1" и "level_2"
Для связи пунктов нужно в табличку "svaz" добавить id конкретной записи из таблички "level_1" и id конкретной записи из таблички "level_2"
Вот код формы:

<?php

$linck_put 
'view_cat.php?cat=';
$linck_cat date ("U");
$linck "$linck_put"$linck_cat";

$linck_put2 'view_cat.php?cat=';
$linck_cat2 date ("U");
$linck2 "$linck_put2"$linck_cat2";


    echo 
"<form method='post' name='add_punkt_menu' action='add_punkts_menu_obrab.php'>";
    
    echo 
"<br><p class='admin_z'>Заголовок пункта первого уровня:</p>";
    echo 
"<input type='text' maxlength='100' value='' name='zag_l_1' id='zag_l_1' class='razm_text_form_admin'/>";
    echo 
"<p class='admin_z'><input  type='checkbox' id='fl' name='fl' value='fl'> Установите флажок если пункт будит содержать подпункт второго уровня!";
    echo 
"</p>";
    
        echo 
"<br><p class='admin_z'>Заголовок пункта второго уровня:</p>";
        echo 
"<input type='text' maxlength='100' value='' name='zag_l_2' id='zag_l_2' class='razm_text_form_admin'/>";
        echo 
"<p class='admin_z'><input  type='checkbox' id='fl2' name='fl2' value='fl2'> Установите флажок если пункт будит содержать подпункт третьего уровня!";
        echo 
"</p>";

    echo 
"<input type='hidden' value='$linck' name='linck_l_1' id='linck_l_1'/>";
    echo 
"<input type='hidden' value='$linck_cat' name='linck_cat' id='linck_cat'/>";

    
        echo 
"<input type='hidden' value='$linck2' name='linck_l_2' id='linck_l_2'/>";
        echo 
"<input type='hidden' value='$linck_cat2' name='linck_cat2' id='linck_cat2'/>";
        
        
        

    
    echo 
"<input class='button2'  type='submit' name='submit' id='submit' value='Добавить'>";
    echo 
"</form>";

?>


А вот обработчика:

<?php 

include("block/bd.php");
if (isset (
$_POST['zag_l_1']))    {$zag_l_1 $_POST['zag_l_1'];         if ($zag_l_1=='') {unset($zag_l_1);}  }
    if (isset (
$_POST['zag_l_2']))    {$zag_l_2 $_POST['zag_l_2'];         if ($zag_l_2=='') {unset($zag_l_2);}  }

if (isset (
$_POST['linck_l_1']))  {$linck_l_1 $_POST['linck_l_1'];     if ($linck_l_1=='') {unset($linck_l_1);}  }
if (isset (
$_POST['linck_cat']))  {$linck_cat $_POST['linck_cat'];     if ($linck_cat=='') {unset($linck_cat);}  }

    if (isset (
$_POST['linck_l_2']))  {$linck_l_2 $_POST['linck_l_2'];     if ($linck_l_2=='') {unset($linck_l_2);}  }
    if (isset (
$_POST['linck_cat2']))  {$linck_cat2 $_POST['linck_cat2'];     if ($linck_cat2=='') {unset($linck_cat2);}  }

if (isset (
$_POST['fl']))  {$fl $_POST['fl'];     if ($fl=='') {unset($fl);}  }
    if (isset (
$_POST['fl2']))  {$fl2 $_POST['fl2'];     if ($fl2=='') {unset($fl2);}  }
    
?>
.
.
.
.
.
<?php
if (isset($fl))
{
    
$fl '';
    
$linck_l_1 "$fl";
    
        if (isset(
$zag_l_1))
                    {
                        
$result mysql_query ("
                                                INSERT INTO level_1 (title, linck) 
                                                VALUES ('
$zag_l_1', '$linck_l_1')
                                                "
);
                    }
        
        if ( isset(
$linck_cat) )
                    {
                        
$result2 mysql_query ("
                                                INSERT INTO category (cat) 
                                                VALUES ('
$linck_cat')
                                                "
);
                    }
                    
        if (isset(
$zag_l_2))
                    {
                        
$result3 mysql_query ("
                                                INSERT INTO level_2 (title, linck) 
                                                VALUES ('
$zag_l_2', '$linck_l_2')
                                                "
);
                    }
        
        if ( isset(
$linck_cat2) )
                    {
                        
$result4 mysql_query ("
                                                INSERT INTO category (cat) 
                                                VALUES ('
$linck_cat2')
                                                "
);
                    }
                    

        
                    
            echo 
"
            <html>
            <head>
            <meta http-equiv='Refresh' content='0; URL=add_punkts_menu.php'>
            </head>
            </html>
            "
;
            exit();
}

else{
    if (isset(
$zag_l_1))
                {
                    
$result mysql_query ("
                                            INSERT INTO level_1 (title, linck) 
                                            VALUES ('
$zag_l_1', '$linck_l_1')
                                            "
);
                }
    
    if ( isset(
$linck_cat) )
                {
                    
$result2 mysql_query ("
                                            INSERT INTO category (cat) 
                                            VALUES ('
$linck_cat')
                                            "
);
                }
        echo 
"
        <html>
        <head>
        <meta http-equiv='Refresh' content='0; URL=add_punkts_menu.php'>
        </head>
        </html>
        "
;
        exit();
}
?>

  Ответить  
 
 автор: Trianon   (23.09.2009 в 15:04)   письмо автору
 
   для: Erema   (23.09.2009 в 14:59)
 

>Вотзникли проблемы при добавлении данных в табличку "svaz" которая служит для связи пунктов!

В чем именно сложности?

  Ответить  
 
 автор: cheops   (23.09.2009 в 15:07)   письмо автору
 
   для: Erema   (23.09.2009 в 14:59)
 

Не понятно в чем проблема - что работает не так?

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

  Ответить  
 
 автор: Erema   (23.09.2009 в 15:26)   письмо автору
 
   для: cheops   (23.09.2009 в 15:07)
 

Проблема в том что у меня не получается вытащить id конкретноых записей в обработчик и вставить эти id в табличку связи

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования