![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Доброго времени суток!
Я в Perl только начинаюший и много не понимаю... Вообщем возникла необходимось создать приметивный скрипт подтверждения. Идея такова: человек заполняет анкету, после заполнения PHP скрипт отсылает на маил указанный в ней письмо, где есть сформированная сылочка типа http://mysite.ru/cgi-bin/script.pl?name=hisname Вообщем передаем параметры скрипту, который отсылает на мой маил этот параметр и текст что регистрация подтверждена. Еще где-то прочитал, что если параметр 1 его можно передавать так http://mysite.ru/cgi-bin/script.pl/hisname , или я что-то путаю? Заранее благодарен. --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
Phoinix |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 16.11.2004 Где: Moskau Репутация: 1 Всего: 2 |
Digo
http://mysite.ru/cgi-bin/script.pl?hisname Вообще-то не hisname, а уникальный ключ, по которому ты определяешь какого пользователя активизировать... |
|||
|
||||
Secandr |
|
|||
![]() Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
Digo ты можешь параметры передать и так:
http://mysite.ru/reg/hisname для этоого есть примочка к апачу mod_rewrite, которая сделает перенаправление с http://mysite.ru/reg/hisname на http://mysite.ru/cgi-bin/script.pl?name=hisname |
|||
|
||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Спасибо!
Да я там немного напутал... ![]() Теперь столкнулся с проблемой как реализовать сам скрипт. Я походу че-то не так делаю или передаю, постоянно серверная ошибка 500. Идея такая кликая по ссылке передаю параметр, который присылается мне в письме... Может кто поможет? --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
Secandr |
|
|||
![]() Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
скорей всего у тебя ошибка в первой строке, неверные права на файл или символы с кодом 10 завершают строку.
|
|||
|
||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Решил начать с простого:
вот код
передаю по ссылке http://mysite.ru/cgi-bin/script.pl?lastname=hisname Вообщем для начала хочу просто ввыводить параметр переданный ссылкой на экран. Опять та же фигня... Права 644, путь тот, символы с кодом 10 не знаю что это ![]() --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
Secandr |
|
|||
![]() Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
Digo вот вот, ты набирал в блокноте у тебя ентер - это два символа 10 и 13, а в юниксе только 13. И шел считает что путь у тебя к #!/usr/bin/perl◙
|
|||
|
||||
korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Где заголовок???
Где подключение модуля CGI.pm??? param() это функция, потому передавать ей значение не нужно в фигурных скобках . Привыкай всегда использовать use strict, не самая плохая привычка ;)))). После того как получил параметр и сохранил его в переменную, не используй больше param(), пользуйся только той переменной в которую был сохранён параметр, можешь легко запутаться.
Удачи. Это сообщение отредактировал(а) korob2001 - 14.4.2005, 16:35 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
Secandr |
|
|||
![]() Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
korob2001 это следующий этап.
|
|||
|
||||
korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Secandr - ну может ты и прав, но только вот 500-ю ошибку он будет получать до тех пор, пока не выведет заголовок и не подключит модуль CGI.pm, он ведь пытается юзать param() именно из CGI.pm ![]() -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
Secandr |
|
|||
![]() Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
Вообщем чинить и чинить...
|
|||
|
||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Очень признателен вам Secandr и korob2001 за консультацию!
![]() Вот только где тогда набирать скрипт если даже блокнот не подходит? --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
Kiber_rat |
|
|||
![]() MACMANIAC ![]() ![]() Профиль Группа: Участник Сообщений: 276 Регистрация: 18.4.2002 Где: Ashdod, Israel Репутация: 1 Всего: 9 |
Поставь VI под Windows или используй любой редактор с подсветкой синтаксиса из этой ветки форума: http://forum.vingrad.ru/index.php?showtopic=43960
-------------------- Best regards! @..@_____Ku6ep =*=______\______KPbIC
|
|||
|
||||
korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Заюзай DZSoft Perl Editor 5.4
-------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Скачал DZSoft Perl Editor 5.6 рулит!!! спасибо, korob2001... правда trial до 120 строк кода
![]() Все работает!!! Теперь буду думать как переданный параметр на свой почтовый ящик отправлять... --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Вот опять столкнулся с проблемами:
Вроде скрипт работает, выводит параметры, но почту не отсылает, в чем может быть дело?
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
Secandr |
|
|||
![]() Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: нет Всего: 39 |
а точно путь /usr/sbin/sendmail
где ты его взял? |
|||
|
||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Да, я в супорте своего хоста спросил, они сказали /usr/sbin/sendmail К тому же у меня работает другой скрипт отправки почты, у него тот же путь...
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Добавь ключи:
-t - Поля заголовка берутся из входных данных, а не из командной строки -oi - Символ точки не считать признаком конца сообщения -odq - Ставит сообщения в очередь, а не пытается отправить его немедленно, этот ключ можно убрать, но без него sendmail становится уязвим при атаке "Отказ от обслуживания". -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Спасибо
![]() ![]() Последний шаг это редирект после выполнения скрипта... Я как понял он осуществляется print "Location: http://www.mysite.ru/\n\n"; когда выполняю скрипт, все просто выводится на экран, и никуда не переходит... --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
korob2001 |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Для того, что бы работал редирект, им нужно заменить заголовок:
print "Content-type: text/html\n\n"; Т.е. строку заголовка нужно заменить следующей:
Если используешь CGI.pm, то заголовок:
Нужно заменить на такой
Если нужно просто перенаправить пользователя через определённое кол-во секунд, то вставляешь в код страницы, с которой будет осуществляться перенаправление, такую строку в раздел <HEAD></HEAD>:
Другими словами, в HTML коде это будет выглядеть примерно так:
В последнем примере, перенаправление произойдёт через 5 секунд. Удачи. Это сообщение отредактировал(а) korob2001 - 18.4.2005, 19:02 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||
|
|||||||||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
В принципе все понятно... только вот что менять?, нужно же оставить print header( -charset => 'Windows-1251');(чтоб русские буквы отображал)??? А если дописывать пишет Status: 302 Moved Location:http://yandex.ru
Кстати редирект будет осуществлятся после отправки письма?
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
redirect() - это и есть хеадер, только с перенаправлением.
charset - указывай на той странице, куда перенаправляешь пользователя, можешь ещё указать прямо в redirect'e.
Если используешь redirect, то header не нужен.
Удачи. ЗЫ: если используешь CGI.pm объектно ориентированно, то не нужно указывать qw( :standard ). Просто пиши так use CGI; , создавай объект и орудуй всеми методами и свойствами этого, чудного, модуля. Это сообщение отредактировал(а) korob2001 - 18.4.2005, 23:46 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Большое спасибо
![]() --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Разбей программу на подпрограммы, там геде нужен redirect, юзай redirect, там где нужен header, юзай header.
Структура примерно такая:
Получается такая последовательность, когда запускается программа, она пропускает все подпрограммы. Когда доходит до условного выражения if ...else она проверяет был ли передан программе параметр send - это может быть имя кнопки SUBMIT. Если параметр определён, то значит пользователь нажал кнопку SUBMIT и нам нужно сделать проверку данных если подпрограмма user_controll вернула истенное значение, то значит данные проверены и готовы к отправке. Запускаем подпрограмму send_mail. Далее подпрограмма send_mail отправляет данные и из неё запускается подпрограмма enjoy, которая и перенаправляет пользователя на нужную тебе страницу. Вообще-то я упростил код и условия для наглядности, для удобства можно было бы передавать параметры из одной подпрограммы, в другую. Не мешало бы ещё создать подпрограмму, которая выводила бы ошибки, если подпрограмма user_controll их опеределит. Но это уже лирика, цель была объяснить принцип и удобство работы программы, которая разбита на несколько подпрограмм. Вроде понятно изложил. Удачи. Это сообщение отредактировал(а) korob2001 - 19.4.2005, 21:09 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Спасибо за программу, я вчера в ней разбирался весь вечер с книгой (вернее в использовании процедур
![]() Пытаюсь вызвать процедуру с конца, но че-то не пашет...
--------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Ну, а где переменная $LastName получает параметр??? Вобщем замени строку:
На такую:
Естественно измени lastName на сой параметр. ЗЫ: Только этот код очень опасен, я надеюсь ты понимаешь почему. Удачи. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Да, я просто не все скопировал...
Все равно ошибки не возникает, редирект проходит, а письмо не отсылается:
А на счет опасности догадываюсь... типа можно ящик завалить письмами кликая по ссылке, но я пока только начинающий... так что эту проблему оставлю на будущее. --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
Только что проверил, всё работает только строку:
нужно убрать. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Да, верно просто у меня сервер тормозит только сейчас письмо дошло
![]() Пришло: Переданный параметр и все... --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
korob2001 |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 13 Всего: 61 |
-odq - Ставит сообщения в очередь, а не пытается отправить его немедленно, этот ключ можно убрать, но без него sendmail становится уязвим при атаке "Отказ от обслуживания". Думаю ты понял, что это не сервер тормозит, а ты сам его поставил в очередь.
Если у ты принимаешь параметр так:
то вызывать скрипт нужно с параметром script.pl?LastName=Vasya ЗЫ: Особое внимаение обрати на регистр букв. Удачи. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||
|
|||||||
Digo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 194 Регистрация: 30.9.2004 Где: Ростов на Дону Репутация: нет Всего: нет |
Спасибо большое korob2001
![]() З.Ы. Ошибка была в регистре... ![]() --------------------
640кб оперативной памяти хватит миру по самые уши (Билл Гейтс ) |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |