Перенос базы пользователей - скрипт

Discussion in 'PHP' started by serg-php, 23 Jun 2009.

  1. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Имею базу пользователей в мускуле около 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(32, 126));
            }
            return 
    $salt;
        }
        
    if (
    is_array($data)) 
      { 
       foreach (
    $data as $string) 
          { 
           
    $temp=explode(";",$string); 
         
            
    $salt = fetch_user_salt( 3 );
            
    $pwd = md5( md5( $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. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    а что тут непонятного ? генерируется соль ... длиной в 3 символа .. берётся пасс

    а дальше md5(md5(пасс).соль)
     
  3. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Тогда возникает вопрос, что не так в скрипте, что пас заносится в базу, а авторизоваться пользователь не может!
     
  4. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    возьми строчку рабочего аккаунта и сравни
     
  5. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Сравнил и пишет, что пароль неверный!
     
  6. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Такс с шифрованием раозбрался - все работает, теперь бы, сделать, чтобы не из файла брало, а из базы старой непосредственно!

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

    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(32, 126));
            }
            return 
    $salt;
        }
        
        
        
    if (
    is_array($rows)) 
      { 
       foreach (
    $rows as $string) 
          { 
            
            
    $salt = fetch_user_salt( 3 );
            
    $pwd = md5( md5( trim($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. Doom123

    Doom123 Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    while($rows = mysql_fetch_array($result))
    {
    бла бла бла
    }
     
  8. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    PHP:
    function fetch_user_salt($length = 3)
        {
            
    $salt = '';
            for (
    $i = 0; $i < $length; $i++)
            {
                
    $salt .= chr(rand(32, 126));
            }
            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( 3 );
            
    $pwd = md5( md5( trim($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. wildshaman

    wildshaman Elder - Старейшина

    Joined:
    16 Apr 2008
    Messages:
    478
    Likes Received:
    483
    Reputations:
    99
    Ты убил цикл, вместо = там должо быть ==
     
  10. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    А если вот такую конструкцию

    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)
     
  11. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Все! Проблему решил следующим макаром:
    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("SELECT id, email, username, pwd, regdate FROM $dtable", $link1);

    #echo $temp = mysql_fetch_assoc($res1);

     
    function fetch_user_salt($length = 3)
        {
            
    $salt = '';
            for (
    $i = 0; $i < $length; $i++)
            {
                
    $salt .= chr(rand(32, 126));
            }
            return 
    $salt;
        }


    if (
    mysql_num_rows($res1) > 0)
      while (
    $temp = mysql_fetch_assoc($res1)) {
         
    //Обработка данных: генерация пароля и т.п.

        
    $salt = fetch_user_salt( 3 ); 
            
    $pwd = md5( md5( trim($temp[pwd]) ).$salt ); 

    mysql_query("INSERT INTO f_user SET  
                userid='
    $temp[id]', 
                usergroupid='2', 
                username='
    $temp[username]', 
                password='
    $pwd', 
                passworddate='2009-06-20',
                email='
    $temp[email]',
                styleid='2',
                salt='
    $salt'");
      }
     
  12. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Еще один вопрос,

    почему в новую базу данные заносятся вразнобой?

    Пример:

    id
    44
    67
    49
    и т.д.?
     
  13. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Заманали с ID!!!! Не имеет это значения, не имеет, никакого абсолютно

    ЗЫЖ Простите, эмоции:))
     
  14. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Дык, хочется все по-красивому! В старой-то базе последовательно записывало!