Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Перенос базы пользователей


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

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

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

Код
<?  

$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);  
      }  
   }  
    
  
?>


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


Автор: Photon 24.6.2009, 06:42
Во-первых вот так:
Код

  $salt = fetch_user_salt( $temp[2] ); 
  $pwd = md5( md5($temp[3]).$salt ); 
         
        
  $query="INSERT INTO f_user (userid, email, username, password,salt) values('$temp[0]', '$temp[1]', '$temp[2]', '$pwd', '$salt')";  
  $result=mysql_query($query);  


Ответ на вопрос:

Код

$link1 = mysql_connect($host1, $login1, $pass1);
mysql_select_db($db1, $link1);

$link2 = mysql_connect($host2, $login2, $pass2);
mysql_select_db($db1, $link2);

$res1 = mysql_query('select login,pass from users', $link1);
if (mysql_num_rows($res1) > 0)
  while ($data = mysql_fetch_assoc($res1)) {
     //Обработка данных: генерация пароля и т.п.
     mysql_query("INSERT INTO f_user (userid, email, username, password,salt) values('$temp[0]', '$temp[1]', '$temp[2]', '$pwd', '$salt')");
  }


Примерно так..

Автор: sergphp 24.6.2009, 10:50
А если вот такую конструкцию 

Код


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

Автор: bars80080 24.6.2009, 14:41
Цитата(sergphp @  24.6.2009,  10:50 Найти цитируемый пост)
'id, email, username, pwd, regdate FROM $dtable'

а это по вашему полноценный запрос? мало того, что нет ключевого слова (SELECT, INSERT, UPDATE, SHOW, DESCRIBE и т.д.), так ещё вы засунули в строку переменную, надеясь что она отдаст своё значение в одинарных кавычках

пишите по правилам, будет вам счастье

Код

$sql = 'SELECT id, email, username, pwd, regdate FROM '.$dtable;

$res1 = mysql_query($sql, $link1);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)