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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прием и запись в txt ваил 
:(
    Опции темы
Alximik
Дата 21.7.2005, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Суть вопроста такова:

Есть форма (писана на wml) которая передает методом GET два параметра Ник и Сообщение

Код

print "Content-type:text/vnd.wap.wml\n\n";
require "head.pl";
print "<p align=\"center\">";

        print "Nick:<br/><input name=\"nick\" maxlength=\"20\" title=\"nick\" type=\"text\"/><br/>\n";
    print "Post:<br/><input name=\"post\" maxlength=\"200\" title=\"post\" type=\"text\"/><br/>\n";
    print "<anchor title=\"go\">Enter<go href=\"edd_post.pl\" method=\"get\"></go></anchor>\n";

print "</p>\n";
require "end.pl";


в фаил edd_post.pl в котором должны произойти прием и запись этих данных в текстовый фаил.

Как их записать я знаю
Код

open( FH, ">> gb.txt" ) or die $!;    
    # Добавляем строку в файл    
    print "$nick, $post!\n";    
# Закрываем файл    
close( FH );


(если ошибся в коде поправьте)

а вот как их принять? чтобы потом произвелась запись.

Прошу прощения за откровенно ламерский вопрос но просто только начал изучать perl третий день бьюсь неполучается.... отчаился решил написать... Неоткажите в помощи плз...
PM MAIL   Вверх
sharq
Дата 21.7.2005, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



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

my.pl
Код

use strict; # прагма, которая накладывает некоторые правила и ограничения
use CGI qw(:standard); # подключение стандартного модуля CGI
use Fcntl qw(:flock); # этот модуль нужен для блокировки и разблокироваки файла

my $nick = param('nick'); # получение значения по ключевому значению nick
my $post = param('post'); # то же, только по post

open FILE, ">> gd.txt" or die "Can't open file: $!\n"; # открытие файла на дозапись
flock FILE, LOCK_EX;               # блокировка файла, чтобы никто его не изменял в этот момент
print FILE "$nick;;$post\n";    # запись в файл, лучше переменные разделять каким-нибудь  символом 
flock FILE, LOCK_UN;              # разблокировка файла 
close FILE;                              # закрытие файла



Только для того, чтобы этот скрипт обрабатывал введенную инфо с формы, нужно в форме указать, что этот скрипт является обработчиком данной формы, то есть:
form.html - это тебе для примера
Код

...
<form method="get" action="cgi-bin/my.pl">
 <input name="nick">
 <input name="post">
</form>
...


Надеюсь, разберешься.
smile

Это сообщение отредактировал(а) sharq - 24.7.2005, 10:31


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


Бывалый
*


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

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



Загляни на http://www.ru-board.com/new/print.php?sid=47
Там с комментариями. Стандартная процедурка... Просто включаешь в скрипты, обрабатывающие формы и все...
Если в коде есть опечатки (всякое бывает), забей в поисковик фразу "Заменяем плюсы на пробелы" - получишь кучу ссылок с тем же самым кодом...
Удачи!
--------------------
Я не волшебник, я только учусь...
PM MAIL   Вверх
chaos
Дата 21.7.2005, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



Цитата(sharq @ 21.7.2005, 01:37)
Код

print FILE, "$nick;;$post\n";   # запись в файл, лучше п


Код

close FILE;                                # закрытие файла
flock FILE, LOCK_UN;          # разблокировка файла 




1) наверное правельно будет записать так
print FILE "$nick;;$post\n"; (убрал запятую) тк если мне память не изменят перл выругается
2)унлок наверное надо делать до того как ты закрыл файл

PM WWW   Вверх
Alximik
Дата 21.7.2005, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всех благодарю за советы smile буду пробовать. Правдо на этом я от вас пожалуй неотстану smile Если можно напишите как заставить скрипт читать из файла последние 10 строк причем так что последняя на экран бует выводиться первой?
PM MAIL   Вверх
chaos
Дата 21.7.2005, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



вот самый простой вариант
Код

#!/usr/bin/perl -w
use strict;

my (@cnt, $i);
my $N = 10;

open(F, "<t.txt") || die;
@cnt = <F>;
close(F);

for ($i = $#cnt; $i > ($#cnt-$N); $i--) {
  print $cnt[$i]; 
}


Это сообщение отредактировал(а) chaos - 21.7.2005, 08:09
PM WWW   Вверх
sharq
Дата 21.7.2005, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



chaos
Цитата(chaos @ 21.7.2005, 06:38)
1) наверное правельно будет записать так
print FILE "$nick;;$post\n"; (убрал запятую) тк если мне память не изменят перл выругается
2)унлок наверное надо делать до того как ты закрыл файл


да именно так, просто не тестировал, а писал по памяти smile

Про чтение можно так:
Код
open FILE, 'gb.txt';
my @data = <FILE>;
close FILE;

print join "<br>\n", reverse @data;


Это точно работает. smile


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


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



Цитата(sharq @ 21.7.2005, 11:40)
chaos
Цитата(chaos @ 21.7.2005, 06:38)
1) наверное правельно будет записать так
print FILE "$nick;;$post\n"; (убрал запятую) тк если мне память не изменят перл выругается
2)унлок наверное надо делать до того как ты закрыл файл


да именно так, просто не тестировал, а писал по памяти smile


не думай что я на тебя бочку качу smile просто указал чтобы новечек не метался в поисках ошибки smile
Добавлено @ 11:57
Цитата(sharq @ 21.7.2005, 11:40)
Про чтение можно так:
Код
open FILE, 'gb.txt';
my @data = <FILE>;
close FILE;

print join "<br>\n", reverse @data;


Это точно работает. smile

Цитата
Если можно напишите как заставить скрипт читать из файла последние 10 строк причем так что последняя на экран бует выводиться первой?


а у тя он весь файл вываливает
PM WWW   Вверх
sharq
Дата 21.7.2005, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



chaos я и не думаю smile

Я показал как можно не париться с циклом, а обойтись станд. оператором.

А массив при создании, если так необходимо, можно ограничить только 10 записями.

И это уже пустяки...

smile

Это сообщение отредактировал(а) sharq - 21.7.2005, 12:09


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


Бывалый
*


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

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



Вот и еще однин с удалением из массива просмотренных записей
Код

open FILE, 'gb.txt';
my @data = <FILE>;
close FILE;

for (my $i=0;$i<10;$i++) {print pop @data}

Вариантов достаточно много.
Все зависит того, что тебе нужно дальше и сколько у тебя записей...
--------------------
Я не волшебник, я только учусь...
PM MAIL   Вверх
Alximik
Дата 21.7.2005, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сталкнулся с такой проблемой по таму методе как фаил должен читать все читает нормаьно а писать в фаил почемуто отказывается.... пользуюсь Деневером.... может както нужно chmod выставлять на *.txt ? если да то как это сделать на локальной машине и на Деневере в частности?
PM MAIL   Вверх
sharq
Дата 21.7.2005, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



Alximik на какой оси ты запускаешь скрипт?
на Windows, тогда тебе права никакие не нужны.
если на nix, то файлам нужно поставить права: 0666.

если ты на Windows-платформе и не получается записать в файл, привели код и логи, если они есть.

smile


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


Новичок



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

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



Запускаю под Виндой

из формы передается вот в этот скрипт:
Код

use strict;
use CGI (:standard);
use Fcntl qw(:flock)
my $nick = param('nick');
my $post = param('post');

open FILE, ">> gb.txt" or die "Can't open file: $!\n";
flock FILE, LOCK_SH;
print FILE "$nick;;$post\n";
flock FILE, LOCK_UN;
close FILE;


а вот это log ошибок
Код

[Thu Jul 21 19:55:34 2005] [error] [client 127.0.0.1] Premature end of script headers: /home/localhost/cgi-bin/gb/my.pl
[Thu Jul 21 19:55:34 2005] [error] [client 127.0.0.1] Can't locate strict.pm in @INC (@INC contains: .) at \\home\\LOCALH~1\\cgi-bin\\gb\\my.pl line 2.\n
[Thu Jul 21 19:55:34 2005] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at \\home\\LOCALH~1\\cgi-bin\\gb\\my.pl line 2.\n


PM MAIL   Вверх
wladk
Дата 22.7.2005, 10:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здается мне, что у тебя как то по кривому перл встал. По кривому, в смысле отсутсуют некоторые необходимые переменные окружения. В данном случаее @INC , в смысле в ней лежит только текущий каталог. "." А путей, к установленным модулям нету. Уверен, что такиеже сообщения тебя ждут для каждого из подсоединяемых модулей. Так что разбирайся с установкой.


  Вверх
Sadok
Дата 22.7.2005, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Alximik
Цитата
а вот это log ошибок

Чего-то я не понял, это лог Апача? Если да, то
Цитата
Premature end of script headers: /home/localhost/cgi-bin/gb/my.pl

говорит о том, что скрипт у тебя не выдает http-заголовки. Копать в сторону
Код
use CGI;                       # load CGI routines
$q = new CGI;                  # create new CGI object
print $q->header,              # create the HTTP header
$q->start_html('hello world'), # start the HTML
$q->h1('hello world'),         # level 1 header
$q->end_html;                  # end the HTML


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


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

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


 




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


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

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