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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DBM- файлы. Почему не работают? 
:(
    Опции темы
rcdimon
  Дата 9.9.2004, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте. Я пишу что то типа сайта знакомств. И хочу статистику по сайту и анкетам хранить в DBM- файлах. Но почему то, когда я связываю хеш с файлом интерпретатор завершается виндой с ошибкой и предложением рассказать об этом microsoft. Почем? Ведь раньше у меня все работало! Я взял старый пример и он уже не заработал. Я пользуюсь локальным сервером denver
PM MAIL ICQ   Вверх
chaos
Дата 10.9.2004, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



а файл большой??
PM WWW   Вверх
korob2001
Дата 10.9.2004, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Как ты связываешь хеш с DBM файлом? Покажи часть кода.

Это сообщение отредактировал(а) korob2001 - 10.9.2004, 12:43


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
rcdimon
Дата 11.9.2004, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Файл пустой. Его даже нет. Но ведь он должен создать его сам, по крайней мере он так делает в нормальном перле, а на сервере нет.

Вот кодец.
Код

#!/usr/bin/perl
use CGI qw(:all);

print header;


dbmopen(%a, "l/text",0644)|| die "ERROR!!!";

$s = param('login');

print $a{$s};

PM MAIL ICQ   Вверх
Secandr
Дата 11.9.2004, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



А права на создание файла в каталоге есть?


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
korob2001
Дата 11.9.2004, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



А каталог l/ существует?
Пробуй всю эту бодягу сохранить в файл ( имя придумай сам ). Изапусти его на своём сервере. Затем введи несколько разных имён и фамилий. После жми на ссылку "Показать данные".
Результат выполнения программы напиши сюда.

Вот код:
Код

#!/usr/bin/perl -w
use strict;
use CGI;
use CGI::Carp qw( fatalsToBrowser );
my $cgi = new CGI;
my $file = 'data_base';

# Подпрограмма выводит форму
sub showForm {
   my $mess = shift || $cgi->font( { -color => "#aa0000" },
                                   "Ваши данные успешно добавлены" );
   print $cgi->start_html( -title => 'Test' ),
         $cgi->h2("Заполнение формы"),
         $cgi->br(),
         $cgi->b( $mess ),
         $cgi->br(),
         $cgi->start_form(),
         $cgi->b("Ваше имя: "),
         $cgi->textfield( -size => 15,
                          -name => 'name' ),
         $cgi->br(),
         $cgi->b("Фамилия: "),
         $cgi->textfield( -size => 15,
                          -name => 'family' ),
         $cgi->br(),
         $cgi->submit( -name => 'send',
                       -value => 'Send' ),
         $cgi->end_form(),
         $cgi->hr(),
         $cgi->a( { -href => "$ENV{ SCRIPT_NAME }?send=Show" },
                  "Показать данные" ),
         $cgi->end_html();
}

# Подпрограмма записывает данные в DBM файл
sub addToDBM {
   my $name = shift;
   my $family = shift;
   my %base = ();
   my $file = $file || 'data_base';
   my $time = time;
   dbmopen( %base, $file, 0644 ) or die $!;
   while ( 1 ) {
           if ( exists $base{ $time } ) {
                ++$time;
                next;
           } else {
                $base{ $time } = "$name|$family";
                last;
           }
   }
   dbmclose( %base );
}

# Подпрограмма вывод данные из DBM файла
sub showData {
   my %base = ();
   my $file = $file || 'data_base';
   print $cgi->start_html(),
         $cgi->h2("Данные из DBM файла: "),
         $cgi->br();

   dbmopen( %base, $file, 0644 ) or die $!;
    while ( my( $key, $val ) = each( %base ) ) {
            my( $name, $family ) = split(/\|/, $val);
            print $cgi->b("Имя: "),
                  $cgi->i( $name ),
                  $cgi->br(),
                  $cgi->b("Фамилия: "),
                  $cgi->i( $family ),
                  $cgi->br(),
                  $cgi->b("Добавлено: "),
                  $cgi->i( scalar( localtime( $key ) ) ),
                  $cgi->hr();
   }
   dbmclose( %base );
   print $cgi->a( { -href => "$ENV{ SCRIPT_NAME }" },
                             "Вернуться к форме" ),
         $cgi->end_html();
}

# Выводим заголовок
print $cgi->header( -charset => 'Windows-1251' );

# Проверяем параметры
if ( $cgi->param('send') eq 'Send' ) {
    addToDBM( $cgi->param('name'), $cgi->param('family') );
    showForm();
} elsif ( $cgi->param('send') eq 'Show' ) {
    showData();
} else {
    showForm("Заполните следующие поля и нажмите кнопку Send");
}


Удачи


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
rcdimon
Дата 11.9.2004, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ой, все это так сложно. Я лучше сделаю текстовый файл и буду вводить его построчно а потом делить на отдельные параметры или данные. smile.gif ??? Как вы считаете?
PM MAIL ICQ   Вверх
Secandr
Дата 11.9.2004, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

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



rcdimon
смотря какая задача


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
korob2001
Дата 11.9.2004, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Я не хотел вас напугать. Это из-за модуля CGI программа кажется такой запутанной, но это только так кажется на первый взгляд.

Цитата

Я лучше сделаю текстовый файл и буду вводить его построчно а потом делить на отдельные параметры или данные.

Дело твоё, но с DBM файлами работать намного удобнее чем с текстовыми. Если этого никогда не попробовать, то так никогда и не научишся их использовать.

У тебя работает пример приведённый ранее?


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
ElectricalStorm
Дата 13.9.2004, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот так попробуйте
Код


use DB_File;             # load database module

tie %HASH, "DB_File", $FILENAME                # open database to be accessed
   or die "Can't open $FILENAME:$!\n";        # through %HASH

$V = $HASH{$KEY};                              # retrieve from database
$HASH{$KEY} = $VALUE;                          # put value into database

if (exists $HASH{$KEY}) {                      # check whether in database
   # ...
}
delete $HASH{$KEY};                            # delete from database
untie %HASH;                                   # close the database



Это сообщение отредактировал(а) ElectricalStorm - 13.9.2004, 14:06


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
rcdimon
Дата 14.9.2004, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я скачал обновление для своего локального сервера Denver и хеши заработали! Но зато стал мне генерировать страницы, в хоторый браузер устанавливает вьетнамскую кодеровку! И само собой, пока не поставишь на советскую все будет в весьма не читабельном виде smile.gif Что же теперь делать с кодировкой? Я пвтался сделать так, что бы он печатал строку

Код

<META http-equiv=Content-Type content="text/html; charset=windows-1251">


Но эта строка ни на что не повлияла!

Что же делать? Я использую модуль CGI и использую

print header;

Может что то в нем не так?
PM MAIL ICQ   Вверх
korob2001
Дата 14.9.2004, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

Что же делать? Я использую модуль CGI и использую

print header;

Может что то в нем не так?

Попробуй так:
Код

print header( -charset => 'Windows-1251' );

Удачи.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Guest
Дата 17.9.2004, 13:38 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











спасибо попробую, когда попробую напишу как получилось. я сейчас просто не за тем компом
  Вверх
ElectricalStorm
Дата 20.9.2004, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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



--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
GoodBoy
Дата 21.9.2004, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Главный джедай
****


Профиль
Группа: Модератор
Сообщений: 3886
Регистрация: 8.1.2003
Где: КМВ

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



Апачь - рулит!!!! Зачем париться с тем, чего в вебе у провайдеров все-равно не найдешь???


--------------------
Чем дальше в лес, тем толще партизаны...

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


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

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


 




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


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

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