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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите с гостевой 
:(
    Опции темы
yuliafifa
  Дата 17.6.2010, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте! Помогите, пожалуйста, новичку. Очень нужно разобраться.
Есть гостевая книга:

Код

#!C:/apache/bin/perl/perl


# Вывод поля заголовка о типе содержимого
print "Content-type: text/html\n\n";


# Подключаемые модули
require '_stdlib.pl';


# Вызов подпрограммы формирования начального блока кода
&start('Комментарии');


# Вызов подпрограммы разбора пользовательского запроса, переданного методом POST
&recvquery_post;


#Добавление новой записи
if(($userdata{'comment'} ne '') && ($userdata{'nick'} ne '') && ($userdata{'email'} ne ''))
{
  $userdata{'comment'} = anti_html($userdata{'comment'});
  $userdata{'nick'} = anti_html($userdata{'nick'});
  $userdata{'email'} = anti_html($userdata{'email'});
  $userdata{'comment'} =~ s/\r//g;

  $date = russian_date();

  open(OutFile, '>>comments.dat');
  flock(OutFile, LOCK_EX);
  print OutFile "$userdata{'comment'}\n<a href=\"mailto:$userdata{'email'}\">$userdata{'nick'}</a>, $date\n";
  flock(OutFile, LOCK_UN);
  close(OutFile);
}
elsif(($userdata{'comment'} ne '') || ($userdata{'nick'} ne '') || ($userdata{'email'} ne ''))
{
  print "<p style=\"color: #c00\">Все поля должны быть заполнены!</p>\n";
}


# Начальное число оставленных комментариев
$qty = 0;


# Вывод существующих записей
if(-e 'comments.dat')
{
  open(InFile, 'comments.dat');

  while($inline = <InFile>)
  {
    chomp($inline);
    if($inline ne '')
    {
      if($inline =~ /<a href="mailto:/)
      {
        print "<p style=\"text-align: right; font-style: italic; border-bottom: solid 1px #000; padding-bottom: .5em\">$inline</p>\n";
        $qty++;
      }
      else
      {
        print "<p>$inline</p>\n";
      }
    }
  }

  close(InFile);
}


# Вывод формы
print "<p>Всего комментариев: $qty.</p>\n";
print "<form action=\"comments.pl\" method=\"post\">\n";
print "<p>Ваш комментарий<span style=\"color: #c00\"><sup>*</sup></span>:<br /><textarea cols=\"30\" rows=\"5\" name=\"comment\"></textarea></p>\n";
print "<p>Как вас зовут<span style=\"color: #c00\"><sup>*</sup></span>:<br /><input type=\"text\" size=\"30\" maxlength=\"100\" name=\"nick\" /></p>\n";
print "<p>Ваш e-mail<span style=\"color: #c00\"><sup>*</sup></span>:<br /><input type=\"text\" size=\"20\" maxlength=\"50\" name=\"email\" /></p>\n";
print "<p><input type=\"submit\" value=\"Отправить!\" /></p>\n";
print "</form>\n";


# Вызов подпрограммы формирования конечного блока кода и завершения работы
&stop;


# Подпрограмма замены угловых скобок и амперсанда на соответствующие мнемоподстановки
sub anti_html
{
  my $string = shift(@_);
  $string =~ s/&/&amp;/g;
  $string =~ s/</&lt;/g;
  $string =~ s/>/&gt;/g;
  return $string;
}


# Подпрограмма формирования даты и времени, представленных в формате, принятом в России
sub russian_date
{
  my @date = localtime();
  $date[0] = '0' . $date[0] if($date[0] < 10);
  $date[1] = '0' . $date[1] if($date[1] < 10);
  $date[2] = '0' . $date[2] if($date[2] < 10);
  $date[3] = '0' . $date[3] if($date[3] < 10);
  $date[4]++;
  $date[4] = '0' . $date[4] if($date[4] < 10);
  $date[5] += 1900;
  return "оставлено $date[3].$date[4].$date[5] в $date[2]:$date[1]:$date[0]";
}



Вопрос, а как сделать так чтобы записи добавлялись в файл comments.dat не в прямом, а в обратном хронологическом порядке (новые - сверху)?


Это сообщение отредактировал(а) yuliafifa - 18.6.2010, 09:23
PM MAIL   Вверх
shamber
Дата 18.6.2010, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



yuliafifa, есть такая кнопочка код..... подредактируйте свой пост
PM MAIL Jabber   Вверх
dva300
Дата 18.6.2010, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(shamber @ 18.6.2010,  00:08)
yuliafifa, есть такая кнопочка код..... подредактируйте свой пост

по моему и так все понятно что хочет человек.

но как не парадоксально но seek(OutFile,0,0); - не поможет  премудрости перла (кто может доказать обратное - буду рад)

остается сделать следующее:

1) записать новые данные в новый файл а потом до записать старые в него из старого файла.
или
2) считать данные из файла в память а потом после записи новых данных в файл записать туда старые.

или 

3) использовать БД 

Это сообщение отредактировал(а) dva300 - 18.6.2010, 01:07
--------------------
Участник движения Культура Вождения
PM   Вверх
shamber
Дата 18.6.2010, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(dva300 @  18.6.2010,  00:30 Найти цитируемый пост)
по моему и так все понятно что хочет человек.

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


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

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


 




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


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

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