Во время перехода на phpBB 3 из какой-либо системы или интеграции с другими разработками у Вас может возникнуть желание научиться программно добавлять пользователей.
Можно изучить структуру базы данных и отправлять соответствующие SQL-запросы. При этом нужно будет добавлять данные в таблицы users table, profile_fields_data table, groups table, и config, а также придется следить за целостностью данных и постараться ничего не испортить.
Но существует и более удобный способ...
Можно воспользоваться программными средствами phpBB и абстрагироваться от того, как добавление пользователей реализовано в самой системе.
Для добавления пользователей существует функция user_add (). Ее синтаксис следующий:
user_add($user_row, $cp_data = false)
Первый аргумент $user_row — это массив, содержащий данные добавляемого пользователя в ассоциативном массиве. Если дополнительные параметры для добавляемого пользователя не указаны, то будут использованы значения по умолчанию.
Второй аргумент $cp_data (опциональный параметр) — это массив, содержащий стандартные поля профиля.
Функция user_add () возвращает идентификатор только что добавленного пользователя.
Обязательны к заполнению следующие элементы массива $user_row: username, password, group_id, user_email, user_type. Все остальные поля необязательны.
Рассмотрим простой пример добавления пользователя в базу данных phpBB 3:
< ?php // Заполняем ассоциативный массив. // Естественно, все указанные значения должны быть // получены заранее. $user_row = array( 'username' => $username, 'user_password' => phpbb_hash($password), 'user_email' => $email_address, 'group_id' => (int) $group_id, 'user_timezone' => (float) $timezone, 'user_dst' => $is_dst, 'user_lang' => $language, 'user_type' => $user_type, 'user_actkey' => $user_actkey, 'user_ip' => $user_ip, 'user_regdate' => $registration_time, 'user_inactive_reason' => $user_inactive_reason, 'user_inactive_time' => $user_inactive_time, ); // Вся информация собрана - добавляем пользователя. // Будут затронуты следующие таблицы: users table, profile_fields_data table, // groups table, and config table. $user_id = user_add($user_row); ?>
Давайте теперь рассмотрим процесс добавления пользователя с более подробным расписыванием каждого элемента:
< ?php // Имя пользователя $username = 'v673'; // Пароль пользователя в открытом виде. // Конечно же, перед добавлением в базу данных // он будет хешироваться. $password = 'HaRd_PaSsWoRd'; // E-mail адрес нашего пользователя $email_address = 'my_email@domain_name.ru'; // По умолчанию, 4 - номер группы для зарегистрированных пользователей, и // 5 - для COPPA-пользователей(http://coppa.org). $group_id = ($coppa) ? 5 : 4; // Но так как ID по умолчанию может смениться, то мы обязаны предварительно сделать // запрос к базе данных для получения идентификатора. // Учтите, что после первого выполнения данный запрос закешируется. $group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED'; $sql = 'SELECT group_id FROM ' . GROUPS_TABLE . " WHERE group_name = '" . $db->sql_escape($group_name) . "' AND group_type = " . GROUP_SPECIAL; $result = $db->sql_query($sql); $row = $db->sql_fetchrow($result); $group_id = $row['group_id']; // Временная зона для пользователя, в GMT формате. $timezone = '-6'; // Язык пользователя. Указывается двухбуквенное сокрашение. $language = 'en'; // Тип пользователя. Может быть USER_INACTIVE или USER_NORMAL, // в зависимости от того, нужно ли пользователю после его создания самостоятельно // активировать свой аккаунт. $user_type = USER_INACTIVE; // Если мы устанавливаем пользователя, как неактивного (USER_INACTIVE), // то мы должны сгенерировать его активационный код. // Можете использовать любой алгоритм генерации, какой только сможете // придумать. $user_actkey = md5(rand(0, 100) . time()); $user_actkey = substr($user_actkey, 0, rand(8, 12)); // IP-адрес пользователя. $user_ip = $user->ip; // Дата регистрации пользователя в UNIX-формате. $registration_time = time(); // Причина неактивности выводится в администраторском аккаунте при // выводе списка пользователей. // Может быть следующей: INACTIVE_REGISTER, INACTIVE_PROFILE, // INACTIVE_MANUAL and INACTIVE_REMIND. // Нет необходимости указывать этот параметр, если пользователь // станет сразу активным после регистрации. $user_inactive_reason = INACTIVE_REGISTER; // Время, после которого пользователь неактивен. // То есть это фактически дата последнего входа в систему. // Указываем текущее UNIX-время. $user_inactive_time = time(); // Создаем непосредственно ассоциативный массив. $user_row = array( 'username' => $username, 'user_password' => phpbb_hash($password), 'user_email' => $email_address, 'group_id' => (int) $group_id, 'user_timezone' => (float) $timezone, 'user_dst' => $is_dst, 'user_lang' => $language, 'user_type' => $user_type, 'user_actkey' => $user_actkey, 'user_ip' => $user_ip, 'user_regdate' => $registration_time, 'user_inactive_reason' => $user_inactive_reason, 'user_inactive_time' => $user_inactive_time, ); // Далее система все берет на себя. // Пользователь будет автоматически добавлен в соответствующие // таблицы в базе данных. $user_id = user_add($user_row); ?>
Вот мы и рассмотрели в общих чертах как автоматизировать добавление пользователей в phpBB 3.
Материал подготовлен на основе соответствующей статьи в phpBB Development Wiki.
RSS
Есть мысли на этот счет:
Стас, огромное тебе спасибо! Возился 4 часа с програмным добавлением пользователя, наткнулся на твой болг, и через 20 минут решил проблему!!! Щас добавлю ленту!
Классный блог! Еще раз спасибо!
Спасибо, screamer! Очень приятно. Собственно ради такой помощи этот блог и создан, и я рад, что не зря писал эту статью. Хорошие отзывы всегда приятно слышать. :-)
А теперь не подскажешь как через user_add или еще как то добавить аватар? Или только вставлять путь напрямую в БД?
Есть два варианта:
Функций я к сожалению не нашел. Решил проблему «очевидным» способом. Правда пришлось разбиратся в хеше имени картинки. Но все же решение найденно!
а есть такая возможность в phpbb и этой функции делать разные имя входа например «login123» и отображаемое на форуме имя пользователя(«Вася Пупкин»)?.чтобы например при вводе логина login123 сообщения пользователя отображались под «Вася Пупкин»
Добрый день !!!
Классная статья спору нет,
не могли бы мне написать как подключить данный php более подробно если Вам не трудно конечно
С Уважением, Александр
Данный программный код — всего лишь пример. Его нельзя взять и подключить к phpBB. Просто на основе его можно понять как происходит программное добавление пользователей.
Если вы хотите автоматизировать этот процесс, то вам необходимо для начала подключить программное окружение в phpBB, а уж затем выполнять приведенный мной код. Если вы разбираетесь в программировании, то рекомендую статью Add custom page в phpBB Development Wiki.
Я так понял, что данный скрипт нужно добавить через Управление модулями или как ??? На данный момент у меня не получается. Помогите создавать пользователей в ручном режиме.
За ранее спасибо.
Вы не первый кто сталкивается с подобной проблемой.
Если Вам нужно добавлять пользователей в ручном режиме из администраторского интерфейса, то все гораздо проще. По умолчанию в phpBB такой функциональности нет, но существуют готовые модули, которые добавляют такую функцию.
К сожалению, я не помню названия подобного модуля, но, я думаю, вы легко сможете его найти на русскоязычных форумах поддержки phpBB.
www.phpbb.com/community/v...pic.php?t=580108
Да, именно он. Спасибо большое — буду знать.
Спасибо :) ++1 к твоей карме
Добрый день, спасибо за статью.
Подскажите, какие файлы из комплекта phpBB3 нужно подключить с отдельному сайту, чтобы работали функции phpbb_hash ($password) и user_add ($user_row)?
Да, и не будет ли конфликтов, если пытаться добавить уже существующего пользователя на форуме? как можно это предусмотреть?
Разобрался,
полный рабочий код:
// интеграция с форумом
define ('PHPBB_ROOT_PATH', './forum/');
define ('IN_PHPBB', true);
$phpbb_root_path = (defined ('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr (strrchr (__FILE__, '.'), 1);
include ($phpbb_root_path . 'common.' . $phpEx);
require_once ('./forum/config.php');
require_once ('./forum/includes/functions.php');
require_once ('./forum/includes/functions_user.php');
require_once ('./forum/includes/db/dbal.php');
require_once ('./forum/includes/db/mysql.php');
// добавляем пользователя на форум:
$us=explode ('@',$_POST['email']);
$username = $us[0];
$password = $_POST['pass'];
$email_address = $_POST['email'];
$group_id = '2';
$timezone = '-3';
$language = 'ru';
$user_type = USER_NORMAL;
$user_ip = $_SERVER['REMOTE_ADDR'];
$registration_time = time ();
$user_inactive_time = time ();
$user_row = array (
'username' => $username,
'user_password' => phpbb_hash ($password),
'user_email' => $email_address,
'group_id' => (int) $group_id,
'user_timezone' => (float) $timezone,
'user_dst' => $is_dst,
'user_lang' => $language,
'user_type' => $user_type,
'user_actkey' => $user_actkey,
'user_ip' => $user_ip,
'user_regdate' => $registration_time,
'user_inactive_reason' => $user_inactive_reason,
'user_inactive_time' => $user_inactive_time,
);
// Вся информация собрана — добавляем пользователя.
// Будут затронуты следующие таблицы: users table, profile_fields_data table,
// groups table, and config table.
$forum_user_id = user_add ($user_row);