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

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(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. 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(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. 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(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. 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(32126));
            }
            return 
    $salt;
        }


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

        
    $salt fetch_user_salt); 
            
    $pwd md5md5trim($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
    Дык, хочется все по-красивому! В старой-то базе последовательно записывало!