ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Перенос базы пользователей - скрипт
  #1  
Старый 23.06.2009, 17:37
serg-php
Участник форума
Регистрация: 28.01.2008
Сообщений: 247
Провел на форуме:
205760

Репутация: 28
По умолчанию Перенос базы пользователей - скрипт

Имею базу пользователей в мускуле около 10.000 на самописном движке с незашифрованными паролями. Возникла необходимость их импорта в форум воблы.

Избрал следующий путь:

1. экспортил в .csv файл;
2. собрал скриптец, который берет и заносит в базу воблы;
3. Облом возник, когда я узнал что в форуме хитрое шифрование;


PHP код:
<? 

$host 
"localhost";    // MySQL server
$user_db "1";        // MySQL пользователь
$pass_db "2";            // MySQL пароль
$dbase "1";        // MySQL база данных



 
$link = @mysql_pconnect ($host$user_db$pass_db);
        if (
$link) { 
            
mysql_select_db($dbase); 
        } else { 
            exit(
"Unable to connect to database.  Please try again later.\n"); 
        }  
 
$data=file('eu_user.csv'); 


     function 
fetch_user_salt($length 3)
    {
        
$salt '';
        for (
$i 0$i $length$i++)
        {
            
$salt .= chr(rand(32126));
        }
        return 
$salt;
    }
    
if (
is_array($data)) 
  { 
   foreach (
$data as $string
      { 
       
$temp=explode(";",$string); 
     
        
$salt fetch_user_salt);
        
$pwd md5md5$temp[3] ).$salt );
        
     
#  $username.( "', salt='".$salt."', password='{$pwd}', " )
       
      
$query="INSERT INTO f_user SET  userid='$temp[0]',email='$temp[1]',username='$temp[2]',password='$pwd'"
       
$result=mysql_query($query); 
      } 
   } 
   
 
?>

Кто-нибудь подскажите, как дописать скрипт, чтобы коннектился к старой базе напрямую, брал нужные поля, при этом шифровал пароли и заносил в базу форума!
 
Ответить с цитированием

  #2  
Старый 23.06.2009, 18:25
Doom123
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме:
3941248

Репутация: 668


Отправить сообщение для Doom123 с помощью ICQ
По умолчанию

а что тут непонятного ? генерируется соль ... длиной в 3 символа .. берётся пасс

а дальше md5(md5(пасс).соль)
 
Ответить с цитированием

  #3  
Старый 23.06.2009, 19:17
serg-php
Участник форума
Регистрация: 28.01.2008
Сообщений: 247
Провел на форуме:
205760

Репутация: 28
По умолчанию

Тогда возникает вопрос, что не так в скрипте, что пас заносится в базу, а авторизоваться пользователь не может!
 
Ответить с цитированием

  #4  
Старый 23.06.2009, 20:33
Дикс
Познавший АНТИЧАТ
Регистрация: 16.04.2006
Сообщений: 1,488
Провел на форуме:
2209675

Репутация: 537


Отправить сообщение для Дикс с помощью ICQ
По умолчанию

возьми строчку рабочего аккаунта и сравни
 
Ответить с цитированием

  #5  
Старый 23.06.2009, 20:40
serg-php
Участник форума
Регистрация: 28.01.2008
Сообщений: 247
Провел на форуме:
205760

Репутация: 28
По умолчанию

Сравнил и пишет, что пароль неверный!
 
Ответить с цитированием

  #6  
Старый 23.06.2009, 22:48
serg-php
Участник форума
Регистрация: 28.01.2008
Сообщений: 247
Провел на форуме:
205760

Репутация: 28
По умолчанию

Такс с шифрованием раозбрался - все работает, теперь бы, сделать, чтобы не из файла брало, а из базы старой непосредственно!

Преобразовал в такой вариант:

PHP код:
<? 

$host_a 
"localhost";    // MySQL server
$user_db_a "1";        // MySQL пользователь
$pass_db_a "2";            // MySQL пароль
$dbase_a "1";        // MySQL база данных
$dtable "eu_user";        // Таблица в базе данных

$host "localhost";    // MySQL server
$user_db "3";        // MySQL пользователь
$pass_db "4";            // MySQL пароль
$dbase "3";        // MySQL база данных




mysql_connect ($host_a$user_db_a$pass_db_a); 
mysql_select_db($dbase_a); 

$sql "SELECT id, email, username, pwd, regdate FROM $dtable"

$result mysql_query($sql); 

$rows mysql_fetch_array($result);


list(
$id$email$username$pwd$regdate ) = mysql_fetch_row($result);
 

 
$link = @mysql_pconnect ($host$user_db$pass_db);
        if (
$link) { 
            
mysql_select_db($dbase); 
        } else { 
            exit(
"Unable to connect to database.  Please try again later.\n"); 
        }  
 
     function 
fetch_user_salt($length 3)
    {
        
$salt '';
        for (
$i 0$i $length$i++)
        {
            
$salt .= chr(rand(32126));
        }
        return 
$salt;
    }
    
    
    
if (
is_array($rows)) 
  { 
   foreach (
$rows as $string
      { 
        
        
$salt fetch_user_salt);
        
$pwd md5md5trim($pwd) ).$salt );

         
      
$query="INSERT INTO f_user SET  userid='$id',email='$email',username='$username',password='$pwd',salt='$salt'"
       
$result=mysql_query($query); 
      } 
   } 
   
 
?>
Правда он берет только одну строку, а нужно по очереди 10.000


Видимо, домущена ошибка! Только вот где?
 
Ответить с цитированием

  #7  
Старый 23.06.2009, 22:58
Doom123
Постоянный
Регистрация: 11.11.2006
Сообщений: 834
Провел на форуме:
3941248

Репутация: 668


Отправить сообщение для Doom123 с помощью ICQ
По умолчанию

while($rows = mysql_fetch_array($result))
{
бла бла бла
}
 
Ответить с цитированием

  #8  
Старый 24.06.2009, 08:00
serg-php
Участник форума
Регистрация: 28.01.2008
Сообщений: 247
Провел на форуме:
205760

Репутация: 28
По умолчанию

PHP код:
function fetch_user_salt($length 3)
    {
        
$salt '';
        for (
$i 0$i $length$i++)
        {
            
$salt .= chr(rand(32126));
        }
        return 
$salt;
    }

$nhd1 mysql_connect($host_a$user_db_a$pass_db_a);
$nhd2 mysql_connect($host$user_db$pass_db);



mysql_select_db("$dbase"$nhd1);
mysql_select_db("$dbase"$nhd2);


//do a query from db1:
$sql "SELECT id, email, username, pwd, regdate FROM $dtable"$which $nhd1;
mysql_query($query,$which);

$result mysql_query($sql); 

while(list(
$id$email$username$pwd$regdate) = mysql_fetch_row($result)) {

 
$link mysql_pconnect ($host$user_db$pass_db);
        if (
$link) { 
            
mysql_select_db($dbase); 
        } else { 
            exit(
"Unable to connect to database.  Please try again later.\n"); 
        }  
    
if (
is_array($rows)) 
  { 
   foreach (
$rows as $string
      { 
        
        
$salt fetch_user_salt);
        
$pwd md5md5trim($pwd) ).$salt );


     
//do a query from db2
      
$query "INSERT INTO f_user SET  userid='$id',email='$email',username='$username',password='$pwd',salt='$salt'"$which $hnd2
      
mysql_query($query,$which);

      } 
   } 
   
 } 

Пишет на ошибку
Parse error: syntax error, unexpected ')', expecting '=' in Z:\home\localhost\www\myimport\index.php on line 39

39 while(list($id, $email, $username, $pwd, $regdate) = mysql_fetch_row($result)) {
 
Ответить с цитированием

  #9  
Старый 24.06.2009, 08:22
wildshaman
Постоянный
Регистрация: 16.04.2008
Сообщений: 889
Провел на форуме:
12942062

Репутация: 1550


Отправить сообщение для wildshaman с помощью ICQ
По умолчанию

Ты убил цикл, вместо = там должо быть ==
 
Ответить с цитированием

  #10  
Старый 24.06.2009, 11:33
serg-php
Участник форума
Регистрация: 28.01.2008
Сообщений: 247
Провел на форуме:
205760

Репутация: 28
По умолчанию

А если вот такую конструкцию

PHP код:

$link1 
mysql_connect($host_a$user_db_a$pass_db_a);
mysql_select_db($dbase_a$link1);

$link2 mysql_connect($host$user_db$pass_db);
mysql_select_db($dbase$link2);

$res1 mysql_query('id, email, username, pwd, regdate FROM $dtable'$link1);


if (
mysql_num_rows($res1) > 0)
  while (
$data mysql_fetch_assoc($res1)) {
     
//Обработка данных: генерация пароля и т.п.
     
mysql_query("INSERT INTO f_user SET  userid='$id',email='$email',username='$username',p  assword='$pwd',salt='$salt')");
  } 
Правда, ругается на


Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\myimport\index2.php on line 34



34. if (mysql_num_rows($res1) > 0)
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрипт выборки уинов из базы Ipb EXSlim PHP, PERL, MySQL, JavaScript 1 16.10.2006 20:26
Скрипт выборки уинов из базы Ipb EXSlim Форумы 1 16.10.2006 20:26



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT.XYZ