Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > Perl
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 11.02.2012, 19:32   #1
Max1548
Форумчанин
 
Регистрация: 28.05.2011
Сообщений: 100
Репутация: 10
Восклицание Perl - скрипт не видит переменные из пакета

Есть два файла: index.pl и config.pm
index.pl - в папке ../cgi-bin
config.pm - ../cgi-bin/lib
Содержимое файла index.pl:
Код:

#!/usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use CGI qw( :standard);
use CGI::Session;
use DBI;
use strict;
push (@INC, '../cgi-bin/lib');
require "colontitles.pm";
require "config.pm";

отрезано
Код:

my $db = DBI->connect($config::ds, $config::dbuser, $config::dbpass) or die(CGI->errstr); #ошибка

Содержимое файла config.pm:
Код:

package config;
our $sesstmp = "../tmp";
our $ds = "DBI:mysql:speccod:localhost";
our $dbuser = 'root';
our $dbpass = '';
1;

index.pl выдает ошибку о подключении к БД, я менял
Код:

$config::ds

и прочие значения на
Код:

'DBI:mysql:speccod:localhost'

, все начинало работать!
Помогите, пожалуйста!
__________________
OS - [||-----------------------------------------------] забил, дойдя до драйвера памяти

Последний раз редактировалось Max1548; 11.02.2012 в 19:35. Причина: Опечатка
Max1548 вне форума   Ответить с цитированием
Старый 14.02.2012, 11:57   #2
ssdm
Участник клуба
 
Регистрация: 20.05.2009
Адрес: СПб
Сообщений: 506
Репутация: 90

icq: 212307232
По умолчанию

Выложите весь код + выложите сообщение об ошибки.
ssdm вне форума   Ответить с цитированием
Старый 14.02.2012, 16:10   #3
Max1548
Форумчанин
 
Регистрация: 28.05.2011
Сообщений: 100
Репутация: 10
Сообщение

Цитата:
Сообщение от ssdm Посмотреть сообщение
Выложите весь код + выложите сообщение об ошибки.
Код:

#!/usr/bin/perl -w
use CGI::Carp qw(fatalsToBrowser);
use CGI qw( :standard);
use CGI::Session;
use DBI;
use strict;
push (@INC, '../cgi-bin/lib');
require "colontitles.pm";
require "config.pm";
#print "Content-type: text/html\n\n";
if (!defined(param('login')) && !defined(param('password'))) {
	if (!defined(param('SID'))) {
	print "Content-type: text/html\n\n";
	&colontitles::uppercolontitle("Вход", "main.css", "0");
	print <<Form;
	<form>Логин: <input type="text" name="login" /><br />Пароль: <input type="password"  name="password" /><input type="submit" value="Вход"></form>
Form
	exit;
	}
	else {
		my $SID;
		$SID = param('SID');
		my $sidcookie = cookie(-name=>'SID', -expires=>'+5d', -value=>$SID, -path=>'/'); #-domain=>'.speccod.tk',
		print "Set-Cookie: $sidcookie\n";
		if (cookie('SID') ne '') {
			$SID = ''
		}
		print "Location: index.pl?SID=$SID\n\n";
	}
}
my $login = param('login');
my $password = param('password');
my $db = DBI->connect($config::ds, $config::dbuser, $config::dbpass) or die(CGI->errstr); 
my $query = $db->prepare("SELECT uid FROM user WHERE login=\'$login\'");
$query->execute();
if (!$query->err){
	if ($query->rows == 1){
		my $sess = CGI::Session->new('driver:file', undef, {Directory=>$config::sesstmp}) or die(CGI->errstr);
		$sess->name('SID');
		my $sidcookie = cookie(-name=>'SID', -value=>$sess->id(), -path=>'/', -expires=>'+5d');
		print "Set-cookie: $sidcookie\n";
		$sess->param(-name=>'login', -value=>$login);
		my $uid;
		while (my @row = $query->fetchrow_array()){
			$uid = $row[0];
		}
		$sess->param(-name=>'uid', -value=>$uid);
		$sess->expire('+5d');
		$sess->flush();
		$query->finish();
		$db->disconnect;
		print "Location: http://speccod.tk/cgi-bin/index.pl?SID=" . $sess->id() . "\n\n"; #"&login=" . $login . "&uid=" . $uid . 
	}
	}

Ошибка:
Код:

Can't connect to data source , no database driver specified and DBI_DSN env var not set at S:/home/speccod.tk/cgi-bin/entry.pl line 33

__________________
OS - [||-----------------------------------------------] забил, дойдя до драйвера памяти
Max1548 вне форума   Ответить с цитированием
Старый 15.02.2012, 13:04   #4
ssdm
Участник клуба
 
Регистрация: 20.05.2009
Адрес: СПб
Сообщений: 506
Репутация: 90

icq: 212307232
По умолчанию

В общем так делать не стоит. Юзайте константы.
Код:

package config;
use strict;
use warnings;
use constant {
 sesstmp => "../tmp" ,
 ds => "DBI:mysql:speccod:localhost",
 dbuser => 'root'.
 dbpass => ''
}
1;

а в скрипте
Код:

my $db = DBI->connect(config::ds, config::dbuser, config::dbpass) or die(CGI->errstr);

Добавлено :
А ещё лучше использовать конфиг файлы )

Последний раз редактировалось ssdm; 15.02.2012 в 15:50. Причина: ADD
ssdm вне форума   Ответить с цитированием
Старый 15.02.2012, 17:02   #5
Max1548
Форумчанин
 
Регистрация: 28.05.2011
Сообщений: 100
Репутация: 10
Хорошо

Цитата:
Сообщение от ssdm Посмотреть сообщение
В общем так делать не стоит. Юзайте константы.
Код:

package config;
use strict;
use warnings;
use constant {
 sesstmp => "../tmp" ,
 ds => "DBI:mysql:speccod:localhost",
 dbuser => 'root'.
 dbpass => ''
}
1;

а в скрипте
Код:

my $db = DBI->connect(config::ds, config::dbuser, config::dbpass) or die(CGI->errstr);

Добавлено :
А ещё лучше использовать конфиг файлы )
Большое спасибо, сейчас же проверю!
__________________
OS - [||-----------------------------------------------] забил, дойдя до драйвера памяти
Max1548 вне форума   Ответить с цитированием
Старый 24.02.2012, 22:22   #6
Max1548
Форумчанин
 
Регистрация: 28.05.2011
Сообщений: 100
Репутация: 10
По умолчанию

Цитата:
Can't connect to data source config:s, no database driver specified and DBI_DSN env var not set at S:/home/speccod.tk/cgi-bin/entry.pl line 3
выпадает ошибка
__________________
OS - [||-----------------------------------------------] забил, дойдя до драйвера памяти
Max1548 вне форума   Ответить с цитированием
Старый 02.03.2012, 15:13   #7
ssdm
Участник клуба
 
Регистрация: 20.05.2009
Адрес: СПб
Сообщений: 506
Репутация: 90

icq: 212307232
По умолчанию

Скиньте два ваших файла. Посмотрю.
ssdm вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скрипт не видит cookie Seran4ek PHP 3 17.10.2011 23:42
SGI скрипт на perl или php Frosts PHP 2 23.03.2011 21:57
Delphi 2010 не видит файлы dcr из созданного мной пакета DrAndriy Общие вопросы Delphi 4 18.08.2010 12:18
Классы.Не видит переменные из самого класса...Вилы=( Rid Общие вопросы Delphi 3 26.04.2010 12:32




08:52.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru