Вот и запущена в тестовом режиме система контекстной рекламы с оплатой за показы PinkContext. На данный момент открыта регистрация только вебмастеров.
Сегодня я хочу написать о том, как я переконвертировал пользователей из проекта 7pop в PinkContext.
Для начала в файле конвертера делается запрос в базу данных с пользователями и выбираются оттуда все с положительным балансом (предварительно конечно подключив файлы с настройками подключения к БД):
$query = mysql_query("SELECT * FROM `users` WHERE `balans` != 0 ORDER BY `id`");
Затем циклом все пользователи записываются в новую базу данных:
for ($i = 0; < mysql_num_rows($query); $i++)
А вот дальше начинаются чудеса. Нужно оповестить каждого пользователя о том, что открыта новая система и что он автоматически в ней зарегистрирован с его данными из старой системы. «А вдруг он не помнит свои старые данные» — вот главная проблема. Значит нужно отправить ему его логин и пароль на электорнную почту. Как же узнать пароль, ведь он захеширован? Значит нужно создать новый. Вот как это сделал я:
$id = $_GET["id"];
$text = UrlDecode($_GET["text"]);
$title = UrlDecode($_GET["title"]);
$query = mysql_query("SELECT * FROM `user` WHERE `id` = '".$id."'");
if (!mysql_num_rows($query)) die('Пользователя с id '.$id.' не существует');
$login = mysql_result($query, 0, "login");
$email = mysql_result($query, 0, "email");
if (!$login) $login = $email;
if (preg_match('/%username%/', $text)) $text = preg_replace('/%username%/', $login, $text);
if (preg_match('/%password%/', $text))
{
$password = RandStr(8);
$text = preg_replace('/%password%/', $password, $text);
$password = md5($password);
$query = mysql_query("UPDATE `user` SET `pass` = '".$password."' WHERE `id` = '".$id."'");
}
$headers = 'Content-type: text/html; charset=utf-8 '.'\r\n';
$headers .= 'From: '.$site_mail.' '.'\r\n';
mail($email, $title, $text, $headers);
Что же этот скрипт делает? Для начала он забирает из основного модуля 3 переменных — id пользователя, которому нужно отправить сообщение, заголовок сообщения и текст сообщения. После этого лезет в БД и запрашивает данные выбранного пользователя, попутно проверяя наличие его в базе. В моем случае в предыдущей базе у пользователей не было ников, поэтому можно заходить и с помощью электронной почты и с помощью ника.
Затем скрипт ищет специальные теги %username% и %password%. Если он встречает первый тэг, то просто заменяет его на имя пользователя. Если второй, то генерирует пароль, заменяет тэг на пароль, хеширует пароль и меняет его для выбранного пользователя в БД. И уже потом отправляет письмо конечному получателю.
Вот функция для генерации случайной строки:
function RandStr($pass_len)
{
$allchars = "abcdefghijklnmpqrstuvwxyzABCDEFGHIJKLNMPQRSTUVWXYZ123456789";
$string = "";
mt_srand ((double) microtime() * 1000000);
for ($i = 0; $i < $pass_len; $i++)
{
$string .= $allchars{mt_rand (0,strlen($allchars))};
}
return $string;
}
А в следующий раз я напишу, как сконвертировать GeoIP базу от MaxMind в базу данных MySQL (так как такие вопросы иногда возникают у начинающих программистов)