![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| r |
|
|||
|
Unregistered |
Приветик Всем!
У меня имеется куча скриптов, в которых содержится вызов форм, их обработка, и т. д. Причём один к примеру скрипт вываливает форму, проверяет данные уже другой, затем вызывается третий он вываливает уже другую форму... Количество скриптов растёт, а на фига енто мне надо? Внимание вопрос: Хочу как нибудь обьединить эти скрипты в один, скажем использовать их как функции, только как мне принимать данные от клиента посредством POST к примеру? |
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Принимай с помощью модуля CGI, можно вообщето и в ручную, но модуль CGI надёжнее. Вот пример:
Удачи. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| r |
|
|||
|
Unregistered |
Простите за назойливость, код работоспособный, огромное спасибо, не могли-бы Вы
мне обьяснить эту строку:
в частности что эта за символ-> b? Это сообщение отредактировал(а) korob2001 - 8.3.2005, 01:51 |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Строка:
print $cgi->b( $param1 ); Метод b, просто оборачивает строку в тэги <B>Строка</B>, т.е. получаем на выходе строку, которая написана полужирным шрифтом. На самом деле, можно описать всю html страничку, только при промоши модуля CGI. Не используя в программе таких записай: print "<center><font color='#ff0000'><b>Hello, world!</b></font></center>"; гораздо красивее так: print $cgi->center( $cgi->font( { -color => '#ff0000' }, $cgi->b("Hello, world!") ) ); Хотя, может это только моё мнение. Это сообщение отредактировал(а) korob2001 - 22.2.2005, 00:54 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
А я так обычно пишу
Так ро моему логичнее и проще Это сообщение отредактировал(а) korob2001 - 8.3.2005, 01:51 |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
;))))) Ну это уже кому как, мне например объектно ориентированный подход более по душе. Но можно конечно и так, только в таком случае нужно следить за пространством имён, да бы не было конфликта. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| r |
|
|||
|
Unregistered |
Всем огромное спасибо, буду про модуль искать мануал.
|
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| r |
|
|||
|
Unregistered |
1. Там уже качал, и как описывать html теги не видел.
2. И всё равно не получил того что хотел. Вот внизу пример имеется, получается что как не выдавай форму(с помощью CGI.pm etc...) все равно данные обрабатывать будет другой скрипт я не прав? <form method="POST" action="http://localhost/cgi-bin/script.pl"> ... </form> |
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Вот, специально для тебя, набросал рабочий пример, простой, гостевой книги. В нём ты не увидешь ниодного HTML тэга, потому как эта программа написана на чистом CGI. Просто скопируй код ниже и сохрани его в файл с любым именем, толко расширение должно быть как у выполняемого файла, как правило .pl или .cgi. Затем можешь, не о чём не волнуясь, запустить его на выполнение через браузер и протестировать его, все необходимые, дополнительные файлы программа создаст сама. Вообще-то данный код получился немного объёмный, но это я сделал специально, что бы ты понял принцип программирования с помощью модуля CGI.pm. Особого контроля вводимой информации я не делал, так как суть была показать рабочий пример CGI.pm программы, а не её безопасность.
Вот код:
Если возникнут вопросы, пиши сюда. Постараюсь пояснить. Удачи. Это сообщение отредактировал(а) korob2001 - 21.12.2005, 00:27 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Opik |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
korob2001
можешь объяснить 2 момента:
и
|
||||
|
|||||
| GoodBoy |
|
||||
![]() Главный джедай ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3886 Регистрация: 8.1.2003 Где: КМВ Репутация: 4 Всего: 83 |
Opr
поочередно каждая из переменных $name, $family и $name чистится от пробелов в начале, конце, последовательности из нескольких пробелов заменяются на 1 пробел, а символ µ удаляется... хотя зачем 2 раза $name... видимо просто описка...
если не заданы переменные $name и $family - то им присваюваются значения. unless ( $name or $family ) - то же самое, что и if ( !$name and !$family ) |
||||
|
|||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Opr - GoodBoy уже ответил на твои вопросы, я опоздал. ;))))
GoodBoy - точно я 2 раза указал переменную $name, на самом деле я имел ввиду перменную $mess на месте второй переменной $name. Уже исправил. Это сообщение отредактировал(а) korob2001 - 25.2.2005, 17:51 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
А, и
это для работы с файлами? |
|||
|
||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Да, это для того, что бы блокировать файл при открытии для записи. Используется здесь:
если нужно заблокировать файл, делаем там:
Можно было бы сделать это и в ручную, но лично я предпочитаю юзать модуль Fcntl, тем более он входит в стандартный пакет Perl. Это сообщение отредактировал(а) korob2001 - 26.2.2005, 16:41 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| r |
|
|||
|
Unregistered |
Потрясающе, что называется красота в программировании. Если конечно есть возможность дай линк, на тот мануал где ты это
прочитал про CGI.pm. У меня есть, но какой-то кривой и неполный. Сразу-же начал переписывать все скрипты по новой. Возникли вопросы. Буду задавать их постепенно.
Этот пример кода только с одной формой, а у меня их несколько, и в зависимости от данных переданных пользователем будет вызыватся какая-то из них, как мне поочерёдно принимать данные от них? Спасибо. Это сообщение отредактировал(а) korob2001 - 8.3.2005, 01:50 |
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Сылку я уже давал, так же читай книги по CGI программированию, особенно хочется выделить такие как: 1. Программирование на CGI.pm ( эта книга написана Линкольном Штэйном, автором модуля CGI.pm ). 2. CGI программирование на Perl (Скотт Гулич, Шишир Гундаварам, Гюнтер Бирзнекс). 3. Разработка CGI приложений на Perl ( Кевин Мельтцер, Брент Михальски ).
Даже если у каждой формы поля с одинаковыми именами, то можно присвоить разные имена для кнопок типа SUBMIT, по ним определять какая из форм была передана CGI программе. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| r |
|
||||
|
Unregistered |
Можно с этого момента поподробнее:))), т. к. как я только не пробовал.
iЭтот код выводит две формы, не дожидаясь пока получу параметры по первой, запутался... Это сообщение отредактировал(а) korob2001 - 8.3.2005, 01:49 |
||||
|
|||||
| r |
|
||||
|
Unregistered |
Нашёл перевод CGI.pm, но там пример, как получить параметры один, и совершенно не подходящий. Нужен хоть какой нибудь пример, как выдать форму и тут-же получить
данные из этой формы, и так раза три в одном скрипте. Пример который из гостевой книги непонятен:
Я тут кое-что придумал правда где-то ошибка...
Это сообщение отредактировал(а) korob2001 - 8.3.2005, 01:47 |
||||
|
|||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Насколько я поня, у тебя есть несколько форм на одной странице. Ты хочешь узнать какая из форм была передана, для этого присваиваешь разные имена кнопкам SUBMIT. Например имя этой кнопки для первой формы такое name => "form1", для кнопки второй формы name => "form".
Теперь можно определить, какая из форм была переданна, таким условием.
Можно было бы сделать и такую проверку:
Удачи. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| r |
|
|||
|
Unregistered |
Да, всё заработало, спасибо. Вопросы ещё остались. Первое, странно как-то у тебя блокируются файлы, где-то читал что блокировать надо дескриптор файла. Второе
раньше когда я не знал что такое CGI.pm у меня был такой код:
То есть открывал файл и выводил всё содержимое в броузер причем как видишь создавал линки на это содержимое с указанием скрипта который это обрабатывал. Теперь пытаясь обьединить все скрипты в один ума не приложу как это переписать. Скрипт просто сохранял текст линка в файл. Спасибо. Это сообщение отредактировал(а) korob2001 - 8.3.2005, 01:42 |
|||
|
||||
| korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Всё верно, это когда блокируешь файлы в ручную. Я пользуюсь стандартным модулем Fcntl и нахожу этот способ более удобным. А вообще-то это дело вкуса. Как этот способ работает, я уже описывал ранее, в этой же теме.
Я не дома, потому нижеприведённый код не тестировал, но он не сильно большой, потому думаю ошибок не будет.
Удачи. PS: возникнут трудности, пиши. И ещё: При вставке кода, пользуйся кнопкой "Код". Предидущие посты я подправил, но как ты наверное понимаешь, я не буду делать это за тебя, постоянно. Все последующие сообщения в которых будет вставлен код без подсветки, будут удаляться. Облегчи труд всех участников, хотя бы этим. Это сообщение отредактировал(а) korob2001 - 8.3.2005, 01:57 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
| Guest |
|
||||||
|
Unregistered |
Привет korob2001, ты неправильно понял, смысл не в том как вставить линк. А в том что теряется идея обьединить все скрипты в один получается все равно вот так:
и вызывается другой скрипт, и не важно, сделано как линк или через форму. Но это не важно, подумаешь будет два скрипта раз CGI.pm не совершенен. Теперь другой вопрос вот html:
А вот как с помощью CGI.pm:
совершенно разное отображение, количество столбцов разное. Спасибо. |
||||||
|
|||||||
| r |
|
||||||
|
Unregistered |
Виноват маэстро, простите, кривые руки.
Вот что мне надо было. Правда вот эти штуки остались ' ' вокруг текста в файле, ну это мелочи. Ну и здесь подправил:
А по таблицам вопрос не закрыт. Спасибо. |
||||||
|
|||||||
| korob2001 |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Это само собой разумеется, убери эти символы из своего кода. Другими словами, просто замени эту строку:
на такую
И найди отличие, тогда всё станет на свои места.
Не знаю на сколько правильно я тебя понял, постараюсь пояснить на примере:
Если хочешь выводить только 2 цвета, просто удали не нужные цвета из массива @colors и добавь дополнительный вызов функции в условной конструкции unless. Таким образом:
Для чего мы добавили дополнительный вызов функции в unless, догадайся сам. Поэксперементируй с этим кодом, поробуй не добавлять вызов change_color, пробуй изменить условие в цикле и т.п. Удачи. Это сообщение отредактировал(а) korob2001 - 9.3.2005, 04:27 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||||
|
|||||||||||||
| r |
|
|||
|
Unregistered |
Привет Всем, особенно Комодераторам, последний пример был супер, не в плане цвета, а как пример, я переписал все формы!!!!!!! Думаю поискать книгу в инете, про этот чудный модуль CGI.pm, а то в нашем городке об этой книге никто даже не слышал, кто нибудь если знает хороший магазин пишите сюда. Ну и ещё есть вопросик, никак не могу убрать из строки первый символ может это из-за кирилицы. Спасибо.
|
|||
|
||||
| korob2001 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Допустим есть такая строка "тпривет, мир!", на выходе мы хотим видеть её, в таком виде "Привет, мир!".
теперь наша строка выглядит так "привет, мир", для того что бы преобразовать первый символ в верхний регистр, можно воспользоваться функцией ucfirst(), либо заюзать эскейп-последовательности, есть и другие способы, но эти пожалуй семые эффективные.
Заметь, что ничего не изменилось, строка так и осталась такой "привет, мир!". Причина в том, что некоторые функции Perl не всегда верно работают с символами кирилицы и теми языками где имспользуются диактрические знаки. Нам просто нужно подключить прагму use locale, она даёт компилятору команду использовать национальные установки из POSIX, её можно так же и отменить, таким способом no locale. Подправим вышеприведённый код:
Теперь строка будет выглядеть так "Привет, мир!". Вот так можно добиться того же эффекта, с помощью эскейп-последовательностей:
Но это, на мой взляд не самый удобный способ, куда удобнее работать с функцией ucfirst(), хотя это тебе решать, как ты будешь обрабатывать строку. Удачи. Это сообщение отредактировал(а) korob2001 - 13.3.2005, 23:02 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||
|
|||||||||
| r |
|
|||
|
Unregistered |
Спасибо, буду пробовать. Зайду если что.
|
|||
|
||||
| r |
|
|||
|
Unregistered |
Привет Всем Постояльцам, тут вот закавыка вышла, первый символ я удалил, все нормально, а проблема вот в чем: у меня есть список у которого строки пронумерованы и когда необходимо удалить одну цифру это работает, но когда надо удалить например вот такое число: 1236?
С регулярными выражениями никак не подружусь. Спасибо. P.s. У Вас ошибка на странице выскакивает. |
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Этот код немного излишен, такак его цель удалить не просто цифру в начале строки, а ещё и символы пробела если таковые есть. Удачи Это сообщение отредактировал(а) korob2001 - 24.3.2005, 00:47 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| r |
|
|||
|
Unregistered |
Спасибо, пашет. Когда-же я таким вумным стану?
|
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Следуй заветам Ильича. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
![]()
|
| Правила форума "Perl: CGI программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |