Биллинговая система Nodeny
22 Ноября 2024, 16:38:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: 1 [2]
  Печать  
Автор Тема: 50.25  (Прочитано 15280 раз)
Elisium
NoDeny
Старожил
*

Карма: 19
Offline Offline

Сообщений: 360


На форумах "спасибом" называется плюс к карме.


Просмотр профиля
« Ответ #15 : 22 Августа 2009, 00:17:59 »

мдя .. понял ...
вобщем, вижу, грозит мне более глубокое, чем хотелось, изучение Перла ))
Записан
bondar
NoDeny
Пользователь
*

Карма: -1
Offline Offline

Сообщений: 15


269777
Просмотр профиля WWW
« Ответ #16 : 27 Августа 2009, 17:07:20 »

мдя .. понял ...
вобщем, вижу, грозит мне более глубокое, чем хотелось, изучение Перла ))
могу поделится похожим скриптом, писали для переноса дополнительных полей из 45й версии, в 50.19.
версии отличаются, но форматы полей одинаковые, тот же разделитель.
Записан
Elisium
NoDeny
Старожил
*

Карма: 19
Offline Offline

Сообщений: 360


На форумах "спасибом" называется плюс к карме.


Просмотр профиля
« Ответ #17 : 27 Августа 2009, 17:47:40 »

чето типа такого ?
От оригинального отличается исправлеными ошибками, дописано пару строк ...
Предполагается что таблица doplavues  пуста ... или номер ревизии нужно поставить такой же, как у других данных ..

Код:
#!/usr/bin/perl
#
# Скрипт для конвертации дополнительного поля с MAC-адресом из версии 49q в 50ю версию
#
# Настройки скрипта:
# $id_dop - ID поля с mac-адресом, в таблице dopfields
# $admin_id - ID админа
# $time - можно указать конкретно время в unix timestamp
# $revision - номер ревизии, желательно сделать его выше всех ревизий которые есть в таблице dopvalues

# По поводу количества дополнительных полей: в строке номер 45 можно это указать, например,
# если у Вас 5 дополнительных полей и одно из них с MAC-адресов, строка будет выглядеть так:
# (undef,undef,$ipmac,undef,undef)=split(/\|/,$dop);
# в этом варианте поле с мак-адресов у Вас третье по счету.
#
# email автора: wobondar@gmail.com
#
# (?:[0-9,aA-fF][0-9,aA-fF]\:){5}[0-9,aA-fF][0-9,aA-fF]
# 20000|20000|00:50:8d:95:b0:dd||
# ||00:1A:4D:73:6E:BF||

# Настройки скрипта
$id_dop=4;
$admin_id = 6;
$add_time = time;
$revision = 6;

# Настройка доступа к базе данных
$dbname='bill';                          # Имя БД
$dbuser='bill_kernel';                  # Логин БД
$dbpass='MY_hArd_pAssSWorD';  # Пароль БД

use DBI;
$DSN="DBI:mysql:database=$dbname;host=localhost;";
$dbh = DBI->connect($DSN,$dbuser,$dbpass);
unless ($dbh) {
    print ("Error Database");
    }
$sth=$dbh->prepare("SELECT `id`, `dop_param` FROM `users`;");
$sth->execute();
while ($p=$sth->fetchrow_hashref){
        $dop=$p->{'dop_param'};
        $id_user=$p->{'id'};
        (undef,undef,$ipmac,undef,undef)=split(/\|/,$dop);
        $ipmac=~ s/\#//s;
        $ipmac=~ s/-/:/g;
        if($ipmac){
                $dbh->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id_user', '$id_dop', '$ipmac', '$admin_id', '$add_time', '$revision');");
                print "id = $id_user\t$mac - OK!\n";
        }
}
« Последнее редактирование: 27 Августа 2009, 17:53:21 от Elisium » Записан
bondar
NoDeny
Пользователь
*

Карма: -1
Offline Offline

Сообщений: 15


269777
Просмотр профиля WWW
« Ответ #18 : 27 Августа 2009, 22:30:05 »

чето типа такого ?
От оригинального отличается исправлеными ошибками, дописано пару строк ...
Предполагается что таблица doplavues  пуста ... или номер ревизии нужно поставить такой же, как у других данных ..

Код:
#!/usr/bin/perl
#
# Скрипт для конвертации дополнительного поля с MAC-адресом из версии 49q в 50ю версию
#
# Настройки скрипта:
# $id_dop - ID поля с mac-адресом, в таблице dopfields
# $admin_id - ID админа
# $time - можно указать конкретно время в unix timestamp
# $revision - номер ревизии, желательно сделать его выше всех ревизий которые есть в таблице dopvalues

# По поводу количества дополнительных полей: в строке номер 45 можно это указать, например,
# если у Вас 5 дополнительных полей и одно из них с MAC-адресов, строка будет выглядеть так:
# (undef,undef,$ipmac,undef,undef)=split(/\|/,$dop);
# в этом варианте поле с мак-адресов у Вас третье по счету.
#
# email автора: wobondar@gmail.com
#
# (?:[0-9,aA-fF][0-9,aA-fF]\:){5}[0-9,aA-fF][0-9,aA-fF]
# 20000|20000|00:50:8d:95:b0:dd||
# ||00:1A:4D:73:6E:BF||

# Настройки скрипта
$id_dop=4;
$admin_id = 6;
$add_time = time;
$revision = 6;

# Настройка доступа к базе данных
$dbname='bill';                          # Имя БД
$dbuser='bill_kernel';                  # Логин БД
$dbpass='MY_hArd_pAssSWorD';  # Пароль БД

use DBI;
$DSN="DBI:mysql:database=$dbname;host=localhost;";
$dbh = DBI->connect($DSN,$dbuser,$dbpass);
unless ($dbh) {
    print ("Error Database");
    }
$sth=$dbh->prepare("SELECT `id`, `dop_param` FROM `users`;");
$sth->execute();
while ($p=$sth->fetchrow_hashref){
        $dop=$p->{'dop_param'};
        $id_user=$p->{'id'};
        (undef,undef,$ipmac,undef,undef)=split(/\|/,$dop);
        $ipmac=~ s/\#//s;
        $ipmac=~ s/-/:/g;
        if($ipmac){
                $dbh->do("INSERT INTO `dopvalues` (`line_id`, `parent_id`, `dopfield_id`, `field_value`, `admin_id`, `time`, `revision`) VALUES (0, '$id_user', '$id_dop', '$ipmac', '$admin_id', '$add_time', '$revision');");
                print "id = $id_user\t$mac - OK!\n";
        }
}

ооо...он самый  Улыбающийся
да его можно использовать, при переходе он сработал на все 100%.
Записан
Страниц: 1 [2]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!