Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Перенос базы пользователей - скрипт (https://forum.antichat.xyz/showthread.php?t=126604)

serg-php 23.06.2009 17:37

Перенос базы пользователей - скрипт
 
Имею базу пользователей в мускуле около 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); 
      } 
   } 
   
 
?>


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

Doom123 23.06.2009 18:25

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

а дальше md5(md5(пасс).соль)

serg-php 23.06.2009 19:17

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

Дикс 23.06.2009 20:33

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

serg-php 23.06.2009 20:40

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

serg-php 23.06.2009 22:48

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

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

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


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

Doom123 23.06.2009 22:58

while($rows = mysql_fetch_array($result))
{
бла бла бла
}

serg-php 24.06.2009 08:00

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)) {

wildshaman 24.06.2009 08:22

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

serg-php 24.06.2009 11:33

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

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)


Время: 21:49