Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с выполнением условия. Оператор if. На своей машине работает, а на... 
:(
    Опции темы
Кнером
Дата 3.6.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Нужно чтобы выбранный пункт меню изменял свой цвет.
Из адреса получаю название ссылки, пункта меню.
В текстовом файле хранится адрес, название ссылки и другое.
Последовательно произвожу сравнение. Если совпадает, то
изменяется цвет.

Проблема в том, что на своей машине все работает.
А вот когда заливаю на хостинг, не работает.

Вывожу значение переменных на страницу, все верно.
Должно работать. Но...

Код

sub show_top_menu
{
  $top_menu="temp/top_menu.txt";
  $link_top_menu="link/link_top_menu.txt";

  controll();

  $t_dir = "";
  $t_file = "";

  ($t_dir,$t_file)=split(/\=/,$query);

  chomp($t_file);

  $null = "";

  open (LINK_TOP_MENU, "$link_top_menu");
  foreach $link_top_menu (<LINK_TOP_MENU>)
  {
    ($null,$test_link)=split(/\=/,$link_top_menu);
    ($text,$link)=split(/\:/,$link_top_menu);

    chomp($test_link);
    #chomp($link);

    #print "11 $test_link - $link<br>"; ###################
    print "[$t_file] - [$test_link]";

    if ($t_file eq $test_link)
    {
      print "<td class=buttonsel style='border-right: 1px solid #8E9EA8;'>$text</td>";
    }
    else
    {
      print "<td class=button style='border-right: 1px solid #8E9EA8;'><a href=$link>$text</a></td>";
    }
  }
  close (LINK_TOP_MENU);
  open (TOP_MENU, "$top_menu"); print <TOP_MENU>; close (TOP_MENU);
}


Код

sub controll
{
  $query = '';
  if(defined($ENV{'REQUEST_METHOD'}) && $ENV{'REQUEST_METHOD'} eq 'GET')
  {
    $query=$ENV{'QUERY_STRING'};
  }
  elsif(defined($ENV{'REQUEST_METHOD'}) && $ENV{'REQUEST_METHOD'} eq 'POST')
  {
    sysread(STDIN, $query, $ENV{'CONTENT_LENGTH'});
  }
}


В текстовом файле содержится:
Код

Услуги #:main.pl?top=uslugi
Обратная связь:main.pl?link_1=a
Отзывы:main.pl?link_2=b


Для проверки устанавливаю ключ -w. Ошибок никаких не выдает.
Подключаю модуль strict. Говорит, что такого нет и срипт вообще перестает работать.
Хотя скачивал Perl с оф.сайта. У себя на машине установлен пакет Денвер.

Так как не такие глубокие знания языка Perl, не могу разобраться в чем дело.
PM MAIL WWW ICQ   Вверх
Кнером
Дата 3.6.2006, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



На своей машине выводится заначения нормально. А вот на хостинге, почему-то прибавляется в конце какой-то пробел.
Указал функцию chomp($test_link); которая как я понял должна убрать перевод строки, но...
В верхнем меню, первый пункт должен быть оранжевого цвета.  

Это сообщение отредактировал(а) Кнером - 3.6.2006, 16:58
PM MAIL WWW ICQ   Вверх
Кнером
Дата 3.6.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Такое ощущение, что функция chomp на хостинге не срабатывает.
Убрав ее, на моей мошине то же отобразились эти пробелы. 
PM MAIL WWW ICQ   Вверх
Кнером
Дата 8.6.2006, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Уважаемые, помогите, пожалуйста. Хотя бы натолкните на истенный путь.
До сих пор не могу разобраться с данной ошибкой. 
PM MAIL WWW ICQ   Вверх
sharq
Дата 8.6.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 2
Всего: 28



Кнером, 
Цитата(Кнером @  3.6.2006,  14:01 Найти цитируемый пост)
Подключаю модуль strict.

у тебя все полетит, т.к. код пишешь не красиво. (хотя сам таким был, когда начинал  smile )
Поставь Perl с ActiveState, версия 5.8.8 (последняя стабильная)

Пиши с
Код

use strcit

для чего придется объявлять переменные (my, our, local).

работа с файлами:
Код

open my $fh, '<', $link_top_menu;
while (<$fh>) {
    chomp; # chomp у всей строки $_
    ...
}
close $fh;



для работы с CGI - используй модуль CGI.pm (функция param) (хотя это не критично  smile )

В общем собери все рекоммендации и у тебя все получится!

 smile  


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Кнером
Дата 9.6.2006, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Цитата(sharq @  8.6.2006,  18:03 Найти цитируемый пост)
у тебя все полетит, т.к. код пишешь не красиво. (хотя сам таким был, когда начинал   )

Что значит не красиво? Не верно оформляю код или не верно составляю конструкции?
Если можно чуть поподробнее, так как я к этому серьезно отношусь и стараюсь соблюдать все правила. В какой-то степени помешан на стандартах.

Цитата(sharq @  8.6.2006,  18:03 Найти цитируемый пост)
Поставь Perl с ActiveState, версия 5.8.8 (последняя стабильная)

Как быть если у хостера стоит старая версия? У меня сейчас установлен Perl с ActiveState, версия 5.6.1.
Если я буду разрабатывать сайт на 5.8.8 это будет совместимо с 5.6.1?
Или трести хостера, чтобы он установил 5.8.8?

Цитата(sharq @  8.6.2006,  18:03 Найти цитируемый пост)
Пиши с
код Perl    
1:    
use strcit    
для чего придется объявлять переменные (my, our, local).

Пишу strcit или strict, выдает Can't locate название.pm in @INC (@INC contains: .) at...

Набрал perldoc strict, выдала справку. По всей видимости, данный вариант верный.  smile 

Цитата(sharq @  8.6.2006,  18:03 Найти цитируемый пост)
для работы с CGI - используй модуль CGI.pm (функция param) (хотя это не критично   )

Я пробывал использовать CGI.pm для передачи одного параметра. Но я не знаю как использовать для нескольких параметров. Выше я привел пример, где я получаю весб адрес, а затем разбираю его.
Мне нужно учитывать все действия пользователя. Нужно чтобы в адресе не были логин и пароль, чтобы в адресе были выбранные действия.

Мне пока не нравится или пока не могу понять, для чего все время указывать my и cgi->тра-та-та.
То есть меня не устраивает лишняя писанина. Зачем писать лишний код?

Цитата(sharq @  8.6.2006,  18:03 Найти цитируемый пост)
open my $fh, '<', $link_top_menu;

Чем меньше скобок тем лучше? Эх, а я уже 600 строк наваял  smile 
Как узнать где можно убрать скобки, а где нет? Есть ли какой-нибудь стандарт?
У меня в книжке "Освой самостоятельно Perl за 24 часа" написан формат:
open (дескриптор_файла, путь)
Исходя из этого, я и написал в таком виде. Я понимаю, что книжка не ахти.  smile 
Что есть то есть. Будет возможность, сразу же куплю хорошую, толстенную книгу.
Будет здорово, если посоветуешь.

Цитата(sharq @  8.6.2006,  18:03 Найти цитируемый пост)
В общем собери все рекоммендации и у тебя все получится!

Благодарю за ясный и полный ответ! Была бы возможность, поставил бы +!  smile 
PM MAIL WWW ICQ   Вверх
sharq
Дата 9.6.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 2
Всего: 28



Кнером, вижу твое стремление разобраться, молодец!
Но не с той книжки ты начал!
Цитата(Кнером @  9.6.2006,  07:24 Найти цитируемый пост)
У меня в книжке "Освой самостоятельно Perl за 24 часа" 

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

Теперь серьезно. 
На счет документации - здесь ни раз уже писали, повторюсь:
доверять можно только
- основной документации Perl (тем более ты помешан на спецификациях), ее можно найти он-лайн и в стандартном дистрибутиве Perl (в консольном варианте (команда perldoc) и в html-варианте)
- книги (в основном от O'reilly), вот основные:
  • Уолл Л., Кристиансен Т., Орвант Д. Программирование на Perl (Camel book.)
  • Кристиансен Т., Торкингтон Н. Perl: Библиотека программиста (Cook book)
  • Рэндал Шварц, Том Кристиансен Изучаем Perl (Llama book)
  • brian d foy, Tom Phoenix, Randal L. Schwartz Intermediate Perl
  • Холснер Perl Специальный справочник

Но основной источник - это perldoc, т.к. книги могут устаревать, нуждаются в переиздание, а perldoc обновляется вместе с дистрибутивом.

Цитата(Кнером @  9.6.2006,  07:24 Найти цитируемый пост)
Что значит не красиво? Не верно оформляю код или не верно составляю конструкции?

И то и другое. Вот прочти perldoc perlstyle.


Цитата(Кнером @  9.6.2006,  07:24 Найти цитируемый пост)
Как быть если у хостера стоит старая версия? У меня сейчас установлен Perl с ActiveState, версия 5.6.1.
Если я буду разрабатывать сайт на 5.8.8 это будет совместимо с 5.6.1?
Или трести хостера, чтобы он установил 5.8.8?

Можешь попросить хостера установить новую версию, т.к. предыдущая уже устарела.
В принципе версии совместимы, если ты не будешь использовать особенностей perl 5.8.x (unicode, perlIO, ...) Можно также почитать на соответствующей странице документации.


Цитата(Кнером @  9.6.2006,  07:24 Найти цитируемый пост)

Пишу strcit или strict, выдает Can't locate название.pm in @INC (@INC contains: .) at...

Это на сервере или на локальном компе?
Если на локальном, то поставь поверх урезанного Perl от Денвер нормальный Perl (ставь версию 5.8.8).


Цитата(Кнером @  9.6.2006,  07:24 Найти цитируемый пост)
Мне пока не нравится или пока не могу понять, для чего все время указывать my и cgi->тра-та-та.

скоро-скоро поймешь  smile 

Цитата(Кнером @  9.6.2006,  07:24 Найти цитируемый пост)
Зачем писать лишний код?

Вот это в самую точку! Но my или использование ООП - не лишний код.


Цитата(Кнером @  9.6.2006,  07:24 Найти цитируемый пост)

Чем меньше скобок тем лучше?

В принципе - да  smile , т.к.
Цитата(Кнером @  9.6.2006,  07:24 Найти цитируемый пост)
Зачем писать лишний код



Цитата(Кнером @  9.6.2006,  07:24 Найти цитируемый пост)
Как узнать где можно убрать скобки, а где нет? Есть ли какой-нибудь стандарт?

Все зависит от приоритетности, и если ты уверен, то скобки можно опускать.
Цитата(Кнером @  9.6.2006,  07:24 Найти цитируемый пост)
У меня в книжке "Освой самостоятельно Perl за 24 часа" написан формат:
open (дескриптор_файла, путь)
Исходя из этого, я и написал в таком виде.

Только одно могу сказать, если нужна инфа по функциям или особенностям Perl, то смотри perldoc.
Поэтому perldoc -f open или ищи open на странице perlfunc.

В общем, удачи, читай документацию и пиши красивый код!

 smile  


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Кнером
Дата 10.6.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


тОрмоз
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 19



Цитата(sharq @  9.6.2006,  10:08 Найти цитируемый пост)
Кнером, вижу твое стремление разобраться, молодец!
 Спасибо!  smile 

Цитата(sharq @  9.6.2006,  10:08 Найти цитируемый пост)
Но не с той книжки ты начал!

Согласен. Осебенно не советую такого рода книгу, если это первый язык программирования.
У меня Perl не первый. Поэтому данную книгу чисто как справочник использовал.
Теперь последую твоему совету, отложу.

Цитата(sharq @  9.6.2006,  10:08 Найти цитируемый пост)
доверять можно только
- основной документации Perl

Получается, что лучше книгу не покупать? То есть perldoc на все случаи жизни?

Цитата(sharq @  9.6.2006,  10:08 Найти цитируемый пост)
Можешь попросить хостера установить новую версию, т.к. предыдущая уже устарела.
В принципе версии совместимы, если ты не будешь использовать особенностей perl 5.8.x (unicode, perlIO, ...)

Это все понятно, спасибо.

Цитата(sharq @  9.6.2006,  10:08 Найти цитируемый пост)
Это на сервере или на локальном компе?
Если на локальном, то поставь поверх урезанного Perl от Денвер нормальный Perl (ставь версию 5.8.8).

По верх, к сожалению, не совесем понятно как ставить. Я установил просто отдельно, а в проекте указываю другой путь. Например, #!C:\Perl\bin\perl.
Из-за этого кстати я и сглюканул с use strict;. В программе указывался путь на урезанный Perl Денвера. Поэтому и не находил.

Цитата(sharq @  9.6.2006,  10:08 Найти цитируемый пост)
Вот это в самую точку! Но my или использование ООП - не лишний код.

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

Предположим, что чаще всего в функциях и указании переменных в модулях указываются локальные переменные. То есть мы все время пишем my. А в редких случаях нам нужно указать глобальную переменную. Исходя из этого, логичнее было считать по умолчанию, что все объявления переменных в функциях и т.д. являются локальными. Получается, что мы меньше будем писать оператор my.
Таким образом меньше придеться тыкать по кнопкам и т.д.

Это только мое личное предположение. Так как я только начал осваивать Perl. Поэтому могу ошибаться. Но если к примеру взять Pascal или C/C++ то объявляя перменную внутри функции, она там рождается при вызове функции и "умирает" при ее выполнении. Таким образом не нужно указывать, что эта переменная локальная.

Цитата(sharq @  9.6.2006,  10:08 Найти цитируемый пост)
В общем, удачи, читай документацию и пиши красивый код!

Взаимно! Спасибо!
 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.1126 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.