Тема: Вопрос от новичка... (срочный)

Давно приходилось работать с MySQL, тут решил помоч компании с сайтом сделаном в основном на perle.
Все новинки товаров + новости и т.д. добавляются и редактируются через  PhP MyAdmin.

Вот собственно и возник вопрос в процессе работа (сам пытался решить, потратил 4 часа без результативно).

сайт - www.decotec.ru (ссылку дал не в рекламных целях, а чтобы можно было понять "в живую" суть проблемы).
Там идет перечень продукции по принципу раскрывающегося меню.
В MyAdmine стоит 2 лвл (включая нулевой).
0 лвл - заглавное (основное) меню выбора (производитель)
1 лвл - второстипенное меню ("модель")
2 лвл - изображение

Так вот, по подобию предыдущих всей  продукции идет следующим образом:
сначало вставляется нулевое название (которому присваивается ID и Parent + нулейвой лвл)
потом создается новый раздел , вложенный в предыдущий (ID берется любое, а Parent берется из ID основного + 1 лвл)
получается "папка с вложенной в неё еще одной"
Дальше создается еще 1 раздел - который и является картинкой (ID берется любое,а Parent берется из ID второго раздела + 2 лвл и + ссылка на изображение, путь...)
Потом если необходимо отобрахзить сразу несколько изображений 3-ее действие повторяется, где меняется только ID и ссылка на изображение.
И все работает!

Когда же я начал повторять все те же шаги... у меня не отображается картинка после третьего шага. Отображение картинки идет только если убрать 2-ой лвл (3-ее действие) и вставить картинку на втором действии... И все бы замечательно, но мне нужна не 1 картинка, а несколько... а добиться их размещения во второй папке можно только если сделать 3-ий лвл + 3-ее действие. В противном случае он создает еще 1 раздел с другой картинкой.

ПОМОГИТЕ ПОЖАЛУЙСТА!

2

Re: Вопрос от новичка... (срочный)

kocmocivan
Было бы проще если вы покажете структуру таблицы и используемые для выборки данных запросы.

3 (изменено: kocmocivan, 2009-07-09 08:44:30)

Re: Вопрос от новичка... (срочный)

http://www.imageup.ru/img40/1_thumb160327.jpg
http://www.imageup.ru/img40/7_thumb160333.jpg
http://www.imageup.ru/img40/3_thumb160329.jpg
http://www.imageup.ru/img40/4_thumb160330.jpg
http://www.imageup.ru/img40/5_thumb160331.jpg
http://www.imageup.ru/img40/6_thumb160332.jpg

4

Re: Вопрос от новичка... (срочный)

В скрипте, который отвечает за вывод страницы, надо смотреть SQL запрос и условие вывода. Возможно, строк должно быть более двух, или еще что-то. Надо смотреть в скрипте. В БД проблем нет.

5

Re: Вопрос от новичка... (срочный)

А примерно как выглядит этот скрипт? сам сайт написал на perl (а я его не знаю...).
Можно немного подробнее что именно мне надо найти (для чайников) как говорится...
ПЛИИИЗЗЗЗЗ!!!!

6

Re: Вопрос от новичка... (срочный)

kocmocivan
Я не могу ответить на вопрос - "как выглядит этот скрипт?".
Надо найти формирование SQL запроса и посмотреть каким образом это делается. Ищите SELECT.

7

Re: Вопрос от новичка... (срочный)

if ($data{fid} == 0)
    {
        my $outp = $outf = $outpc = $outfc = "";

    if ($lvl<3) #if not last level
    {
######### categories listing
        my $query = "select * from $ptb where parent='$data{catalog}' order by title";
        my $sth = $dbh->prepare($query);
        $sth->execute;
        while (@R = $sth->fetchrow_array)
        {
        $outp  .= &format1("list",$prod_list,$R[0],$data{fid},$R[2]);
        }
        $sth->finish;
   
######### firm listing
#        my $query = "select * from $ftb as f join $fprtb as p join $ptb as c where f.id=p.firm_id and c.parent='$data{catalog}' and c.id=p.item_id order by firm_name";
        my $query = "select * from $ftb";
        my $sth = $dbh->prepare($query);
        $sth->execute;
        my $fname = "";
        while (@R = $sth->fetchrow_array)
        {
        if ($fname !~ /$R[1]/)
        {
            $fname .= "#".$R[1]."#";
            $outf .= &format1("listf",$firm_list,$data{catalog},$R[0],$R[1]);
        }   
        }
        $sth->finish;
    }

ЭТО ?
Файл называется admcatalog.pm  в папке admin

8

Re: Вопрос от новичка... (срочный)

kocmocivan
Смотрите вывод данных в функции format1(). Вероятно, для вывода необходимо наличие более одной записи на parent.

9

Re: Вопрос от новичка... (срочный)

Hanut сказал:

kocmocivan
Смотрите вывод данных в функции format1(). Вероятно, для вывода необходимо наличие более одной записи на parent.

Hanut извените, я наверное уже "достал"...

Есть два вопроса:
1)почему то теперь после ввода логина и пасса чтобы войти в админку идет ошибка (как я понял 500)Internal Server Error
Как это можно исправить?
2)я нашел файл который отвечает за подкачку в "каталог" - catalog.pm
Боюсь копировать все дабы не показаться флудильшиком...

######### categories listing
        my $query = "select * from $ptb where parent='$data{catalog}' order by title";
        my $sth = $dbh->prepare($query);
        $sth->execute;
        while (@R = $sth->fetchrow_array)
        {
        $outp  .= &format1("list",$prod_list,$R[0],$data{fid},$R[2]);
        }
        $sth->finish;
   
######### firm listing

#        my $query = "select * from $ftb order by firm_name";
        my $query = "select * from $ftb as f join $fprtb as p join $ptb as c where f.id=p.firm_id and c.parent='$data{catalog}' and c.id=p.item_id order by firm_name";
        my $sth = $dbh->prepare($query);
        $sth->execute;
        #print $query,"\n\n";
        my $fname = "";
        while (@R = $sth->fetchrow_array)
        {
        if ($fname !~ /$R[1]/)
        {
            $fname .= "#".$R[1]."#";
            $outf .= &format1("listf",$firm_list,$data{catalog},$R[0],$R[1]);
        }   
        }
        $sth->finish;

###########################

if ($lvl<2) #if not last level
    {
        my $query = "select distinct c.id,c.title from $ptb as c join $fprtb as f where c.parent='$data{catalog}' and f.firm_id='$data{fid}' and c.id=f.item_id order by c.title";
        my $sth = $dbh->prepare($query);
        $sth->execute;
        while (@R = $sth->fetchrow_array)
        {
        $outp .= &format1("list",$prod_list,$R[0],$data{fid},$R[1]);
        }
        $sth->finish;
       
        my $query = "select firm_name from $ftb where id='$data{fid}'";
        my $sth = $dbh->prepare($query);
        $sth->execute;
        $R = $sth->fetchrow;
        $outf .= &format1("listf2",$firm_list,$data{catalog},$data{fid},$R);
        $sth->finish;       
        $outfc .= &format2("captf",$firm_capt,$data{fid});
        $outpc .= &format2("capt",$prod_capt,$data{catalog});
    }

Это 3 вырезки из кода - где встречается "format1("

И одна которая как я понимаю и отвечает за 2 лвл...
elsif ($lvl == 2) #last level
    {
        my $query = "select * from $ptb as c join $ftb as f join $fprtb as p where c.parent='$data{catalog}' and c.id=p.item_id and f.id=p.firm_id  order by f.firm_name, c.title";
        my $sth = $dbh->prepare($query);
        $sth->execute;
        my $cnt = 0;
        my $i=0;
        while (@R = $sth->fetchrow_array)
        {
        $tmp = &format3(0,$prod_list1,$R[0],$data{fid},$R[2],$R[5],$R[6],$R[7]);
        $cnt++;
        $i++;
        if ($cnt == 2) {$outp .= qq~<tr class="tcol1">$tmp1 $tmp</tr>~; $tmp1 = ""; $cnt = 0;}
        else {$tmp1 .= $tmp;}
        
        
#        $outp .= &format3($cnt,$prod_list1,$R[0],$data{fid},$R[2],$R[5],$R[6],$R[7]);
#        $cnt++;
#        if ($cnt == 2)
#        {
#            $outp = qq~ <tr> $outp </tr>;
#        }
#        $cnt = ($cnt == 2) ? 0 : $cnt;
        }
        $sth->finish;
        if ($i % 2) {$outp .= qq~<tr class="tcol1">$tmp<td>&nbsp\;</td><td>&nbsp\;</td></tr>~; }
    }

Что примерно тут не так????

10

Re: Вопрос от новичка... (срочный)

kocmocivan сказал:

1)почему то теперь после ввода логина и пасса чтобы войти в админку идет ошибка (как я понял 500)Internal Server Error
Как это можно исправить?

Вероятно при редактировании скриптов была допущена ошибка. Описание ошибки можно посмотреть в журнале ошибок Apache.

kocmocivan сказал:

2)я нашел файл который отвечает за подкачку в "каталог" - catalog.pm

my $query = "select * from $ptb as c join $ftb as f join $fprtb as p where c.parent='$data{catalog}' and c.id=p.item_id and f.id=p.firm_id  order by f.firm_name, c.title";
Обратите внимание на эту строку и то, как в ней объединены три таблицы. Как я понимаю, побъединение происходит еще и с таблицей производителя, в которой тоже должна быть соответствующая запись.

11

Re: Вопрос от новичка... (срочный)

Еще у меня остается 1 вопрос.
ЗА ЧТО ОТВЕЧАЮТ ДРУГИЕ ПОДМЕНЮ В MYADMIN???? не понимаююю......
Скрины ниже...
http://pic.ipicture.ru/uploads/090710/XHDRZWPpK6.jpg
http://pic.ipicture.ru/uploads/090710/cTO8BmWSSs.jpg
http://pic.ipicture.ru/uploads/090710/6OCHrIIW6X.jpg
http://pic.ipicture.ru/uploads/090710/7xI63bWlyG.jpg

12

Re: Вопрос от новичка... (срочный)

Вроде как последняя выписка из файла - error.log
##
"my" variable $query masks earlier declaration in same scope at ../cgi-bin/lib/catalog.pm line 82.
"my" variable $sth masks earlier declaration in same scope at ../cgi-bin/lib/catalog.pm line 83.
"my" variable $query masks earlier declaration in same scope at ../cgi-bin/lib/catalog.pm line 160.
"my" variable $sth masks earlier declaration in same scope at ../cgi-bin/lib/catalog.pm line 161.
Use of uninitialized value in substitution (s///) at ../cgi-bin/lib/SysFunc.pm line 28.
Use of uninitialized value in substitution (s///) at ../cgi-bin/lib/SysFunc.pm line 29.
Use of uninitialized value in concatenation (.) or string at ../cgi-bin/lib/SysFunc.pm line 30.
Use of uninitialized value in concatenation (.) or string at ../cgi-bin/lib/SysFunc.pm line 44.
Use of uninitialized value in pattern match (m//) at ../cgi-bin/lib/data.pm line 7.
Use of uninitialized value in pattern match (m//) at index.cgi line 17.
Use of uninitialized value in pattern match (m//) at index.cgi line 23.
Use of uninitialized value in concatenation (.) or string at index.cgi line 23.
Argument "" isn't numeric in numeric eq (==) at ../cgi-bin/lib/catalog.pm line 48.
Use of uninitialized value in concatenation (.) or string at ../cgi-bin/lib/catalog.pm line 211.
Use of uninitialized value in numeric gt (>) at ../cgi-bin/lib/catalog.pm line 216.
Use of uninitialized value in concatenation (.) or string at ../cgi-bin/lib/catalog.pm line 271.
Use of uninitialized value in substitution (s///) at ../cgi-bin/lib/SysFunc.pm line 60.
Use of uninitialized value in substitution (s///) at ../cgi-bin/lib/SysFunc.pm line 61.
Use of uninitialized value in concatenation (.) or string at ../cgi-bin/lib/SysFunc.pm line 63.
Use of uninitialized value in concatenation (.) or string at ../cgi-bin/lib/SysFunc.pm line 69.
[Sat Jul  4 22:45:01 2009] [error] [client 87.228.0.201] File does not exist: /www/docs/wwwdecotec/www/favicon.ico
##

13

Re: Вопрос от новичка... (срочный)

Hanut СПАСИБО ТЕБЕ! САМ ДОГАДАЛСЯ КАК СДЕЛАТЬ А ТЫ НАВЕЛ НА МЫСЛЬ smile
Остался только 1 неразрешимый вопрос - как сделать так чтобы заработала АДМИНКА...

14

Re: Вопрос от новичка... (срочный)

Про подменю я вопроса не понял. Очевидно, что это какие-то таблицы, но я о них ничего не могу знать.

Странный error.log.

Админка на этом сервере раньше работала? Если да, то надо проверять куда вносились изменения, если нет, то надо смотреть различия в настройках серверов.