PinkContext (запись #1)

Вот и запущена в тестовом режиме система контекстной рекламы с оплатой за показы 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 (так как такие вопросы иногда возникают у начинающих программистов)

    • Alexey
    • Август 2nd, 2010 11:03пп

    Пишу конечно не по теме, но в Pinkcontext фирменной защиты от кликеров в виде ссылок в div’ах не используется. Почему решили убрать её?

      • admin
      • Август 3rd, 2010 3:41пп

      Во-первых, когда используется div, немного непривычно многим, что в статусной строке браузера не появляется ссылка
      Во-вторых, PinkContext защищен с помощью Эдбаки, которая на данный момент показывает очень хорошие результаты в отсеве накрутчиков

    • Alexey
    • Август 3rd, 2010 3:02пп

    Модерация у вас к сожалению, не 12 часов, как вы пишите =)

  1. Трэкбэков пока нет.