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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RW файлы / регулярные 
:(
    Опции темы
int19h
Дата 5.9.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день всем.
Как правило, сразу представлюсь - начинающий, неделю в перле, но кроме него больше ничего не понравилось почему то.
Купил кучу справочников, но понял, что ничего не понял. Остается только уповать на уже опытных, что подскажут куда прыгать и где грабли...

Вообщем поставил перед собой одну задачу. Задачу реализовываю через Денвер, то есть сугубо на компе, локально.
Сделал вот что.
 - на html форму, в которую вписывает свои данные тот, кто регистрируется
 - данные отсылаются на register.cgi, где обрабатываются и записывыаются в файл 123456789.txt в виде "name=Иван family=Иванов [email protected] vozr=40 sex=мужской" и т д. Имя файла генерерирую через время UNIX на момент регистрации (time())

Всё это пашет, данные корретно переносятся в CGI и прекрасно пишутся в файл. 
То есть имеем
 - форму
 - CGI обработчик
 - записанный файл.

Дальше что я хотел сделать. Имеем как бы файл, который лежит образно тут http://local.ru/123456789.txt  с данными в виде текста (выше написал). Я хочу сделать (параллельно с образованием текстового файла) генерацию 123456789.pl, который должен либо парсить либо просто открывать файл 123456789.txt и оттуда брать данные. То есть пользователь кликает по 123456789.pl и получает:
1. имя: Иван
2. фамилия: Иванов
3. Е-маил: [email protected]
и т.д. и т.п.
Причем хотелось бы, чтоб эти данные, которые были изначально введены пользователем, были обьявлены как переменные для будущих обработок в других целях
Сам html  я в перле разберусь.

У меня проблема именно в регулярных выражениях, причем сильная, ибо ну ничерта я в этих черточках слешах и ключах не понимаю.
Два варианта: либо парсером через веб-ссылку GET ("") либо через OPEN () '<'
Кто может плиз дайте примерные строки с регулярками для этого случая...


PS register.cgi, через который обрабатывают вводные данные и пишу текстовый файл:
Код

#!/usr/bin/perl -w

use CGI;
use CGI qw(:standard);
use LWP::Simple;
use POSIX qw(locale_h);
use locale;
setlocale(LC_CTYPE, "ru_RU.CP1251");

$query = new CGI;

$id = 0;
$login = $query->param('nick');
$name_sex = $query->param('sex');
$name = $query->param('name');
$name_city = $query->param('name_city');
$city_mail = $query->param('name_mail');

$id = time();

open (NAMEFILE, ">>$id.txt");
print NAMEFILE "id=".$id." login=".$login." name=".$name." name_sex=".$name_sex." \n";
close (NAMEFILE);


Добавлено @ 21:49
Как бы дополню картину.
В момент генерации вводных данных нового аккаунта будут генерироваться два файла
 - текстовый, где будут храниться данные аккаунта
 - веб ***.pl, который будет отображать эти данные.

Вот я и хочу, чтоб веб ***.pl сразу считывал данные из этого текстового файла. Сам текстовый файл с данными будет как бы основным хранилищем данных аккаунта.

Это сообщение отредактировал(а) int19h - 5.9.2009, 21:51
PM MAIL   Вверх
sir_nuf_nuf
Дата 5.9.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 14
Всего: 31



Цитата(int19h @  5.9.2009,  21:44 Найти цитируемый пост)
Как правило, сразу представлюсь - начинающий, неделю в перле, но кроме него больше ничего не понравилось почему то.

Угу... перл - чем то похож на религию. Вы выбрали не самый плохой язык =) поздравляю =)


Цитата(int19h @  5.9.2009,  21:44 Найти цитируемый пост)
Вообщем поставил перед собой одну задачу. Задачу реализовываю через Денвер,

Немного не в тему, но.. perl != CGI. Perl (в отличии от PHP) изначально проектировался как универсальный язык, а не только для веб-разработки.


Цитата(int19h @  5.9.2009,  21:44 Найти цитируемый пост)
Имя файла генерерирую через время UNIX на момент регистрации (time())

Опасное решение. А если два пользователя попытаются регистрироваться одновременно ?  Используйте тогда хотя бы Time::HiRes - вероятность пересечения снизите.


Цитата(int19h @  5.9.2009,  21:44 Найти цитируемый пост)
ибо ну ничерта я в этих черточках слешах и ключах не понимаю

Учите... через пару дней обычно настает просветление.



Цитата(int19h @  5.9.2009,  21:44 Найти цитируемый пост)
Я хочу сделать (параллельно с образованием текстового файла) генерацию 123456789.pl

А вот это совсем не правильно !! У вас будет N файлов с абсолютно одинаковой логикой. Вам нужен одна программа, которая парсит
эти файлы, а id принимает на вход как параметр. URL будет выглядеть примерно так:
Код

http://bla.ru/cgi-bin/parse.pl?id=1234566778



Теперь ответ по сути: как распарсить такой файл:
Код

#!/usr/bin/perl -w
# parse.pl
open my $fh, "<$id" or die;
my $line = <$fh>;
chomp $line;
if ($line =~ /id=(.*)\slogin=(.*)\sname=(.*)\sname_sex=(.*)\s/) {
  my ($id, $login, $name, $name_sex) = ($1, $2, $3, $4);
}

Однако следует заметить, что ваш способ хранения не надежен.
если например в поле имя вести "name_sex=123", то структура файла будет нарушена.
Вам нужно как-то экранировать данные при записи в файл



--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
int19h
Дата 6.9.2009, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



огромное спасибо за поправки и советы.
Сейчас займусь изучением вашего примера.
По поводу 
Цитата
http://bla.ru/cgi-bin/parse.pl?id=1234566778
 - именно к этому я и хочу прийти, но пока как бы вслепую тыкаюсь и не знаю, иду методом тыка...

По поводу "name_sex=123" - у меня там не текстовое поле, а "radio", то есть там выбор: либо "мужской" либо "женксий"

Это сообщение отредактировал(а) int19h - 6.9.2009, 00:48
PM MAIL   Вверх
sir_nuf_nuf
Дата 6.9.2009, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 14
Всего: 31



Цитата(int19h @  6.9.2009,  00:47 Найти цитируемый пост)
По поводу "name_sex=123" - у меня там не текстовое поле, а "radio", то есть там выбор: либо "мужской" либо "женксий"

Если кто захочет завалить вашу систему - он не ограничится браузером.
с помощью LWP::UserAgent (например) можно отправить произвольный запрос на ваш сервер.

Поэтому должно быть 2 уровня защиты (минимум)
1) на уровне HTML и JavaScript валидации - это скорее для пользователя, что бы он видел, когда лажу ввел.
2) на уровне perl. Что бы отсечь попытки взлома.


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
sir_nuf_nuf
Дата 6.9.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 14
Всего: 31



Цитата(int19h @  6.9.2009,  00:47 Найти цитируемый пост)
Цитата
http://bla.ru/cgi-bin/parse.pl?id=1234566778
 - именно к этому я и хочу прийти, но пока как бы вслепую тыкаюсь и не знаю, иду методом тыка...


Так... первое с чего бльшинство людей начинают - это использование модуля CGI
Вот так примерно выглядит получение параметра id из URL или из POST.
Код

use CGI;
my $q = CGI->new();
my $id = $q->param('id');


Поскольку вы начинающий - советую не привыкать к модулю CGI - напрямую его сейчас редко кто использует.
Посмотрите на HTML::Mason - это шаблонизатор, который делает за вас кучу работы. Фактически это замена PHP.


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
int19h
Дата 6.9.2009, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Огромное спасибо за помощь и разъяснения.
Я как раз таки в CGI и ударился, хотя тоже чувствовал, что не совсем правильно пошел.

По поводу Масона как раз сейчас читаю книжечку "Внедрение Perl в HTML с помощью Mason"

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


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

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


 




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


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

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