Как вручную Включить группы пользователей SMF форум Использование PHP

Опубликовано в SMF (Simple Машина форум), PHP на ShortLikeAFox от 30 июля 2008

В этом руководстве предполагается, что вы знакомы с моей должности: Как вручную включить пользователя SMF форум помощью PHP.

Недавно я столкнулся с проблемой перемещения 800 или около того полосах из базы данных в SMF форум. Я столкнулся с парой проблем при переезде, что я не охватывают в первую должность:

  1. Полоса имена не были гарантированы безопасность для посимвольно перейти в SMF данных. Поэтому какой-то изменить имя функции должно быть занято.
  2. Полос не имеют паролей. Поэтому какой-либо пароль поколение должно быть занято.

Эти шаги я ходил регистрировать все полосы в форуме пошли мало так:

Открытая база данных Band

за каждый (Band) (

Сгенерировать пароль

Переименовать Band с "безопасными" имя

Хватай и накопления информации, необходимой для вставки пользователя

Включить Band в smf_members

Band Отправить письмо с паролем

)

Информация я можно получить диапазон данных, которая является полезной включали: bandName, bandEmail и bandWebsite

Вот функция генерации паролей я использовал (blatently взяты из totallyphp.co.uk):

Функция createRandomPassword () (

$ символов = "abcdefghijkmnopqrstuvwxyz023456789";

() * 1000000); srand ((двухместный) microtime () * 1000000);

$ I = 0;

$ передвинуйте = ";



а ($ I <= 7) (

33; $ NUM = RAND ()% 33;

$ TMP = substr ($ символы, $ NUM, 1);

$ передвинуйте = $ пасс. $ TMP;

$ I + +;

)

вернуть $ проход;

)

Пароль создали здесь сравнительно слабы, но он был достаточно хорош для моих целей. Любая генерация паролей функция будет работать штрафом здесь. Я выбрал это потому, что это будет легко для членов запомнить, если они решили не изменять его.

Как это сделать:

/ / Первые подключения к базе данных полоса
Имя пользователя $ = "bandUsername";
$ принимающей = "bandHost";
$ MyPassword = "bandPassword";
$ DB_NAME = "bandDatabase";

("cannot connect to server"); mysql_connect ( "$ хост", "$ имя пользователя", "$ MyPassword") или умереть ( "не могу подключиться к серверу");
("cannot select DB"); mysql_select_db ( "$ DB_NAME") или умереть ( "Невозможно выбрать БД");

/ / Теперь захватывать все полосы с базой данных
$ запрос = "SELECT * FROM allBands";
$ полос = mysql_query ($ запроса) или умереть ( "Ошибка конфигурации 2222b");
$ userRows = mysql_num_rows ($ полос);

/ / Теперь позволяет подключаться к БД SMF
$ принимающей = "smfhost"; / / Имя хоста
Имя пользователя $ = "smfuser; / / MySQL имя пользователя
$ MyPassword = "smfpassword"; / / MySQL пароль
$ DB_NAME = "smfdatabase"; / / имя базы данных

("cannot connect to server"); mysql_connect ( "$ хост", "$ имя пользователя", "$ MyPassword") или умереть ( "не могу подключиться к серверу");
("cannot select DB"); mysql_select_db ( "$ DB_NAME") или умереть ( "Невозможно выбрать БД");

/ / $ vaild_chars будет массив разрешенных символов для пользователей. Я решил позволить только буквы и цифры. Есть и другие символы, которые можно использовать, что бы не вызвать проблемы, но по стилю причин я решил пойти с только буквы и цифры
$ valid_chars = "abcdefghijklmnopqrstu vwxyz 0 1 2 3 4 5 6 7 8 9";
$ valid_chars = взорваться ( "", $ valid_chars);

/ / Теперь нам необходимо петле в каждом диапазоне

){ за ($ i = 0; $ I <$ userRows; $ I + +) (

($bands)){ если ($ подряд = mysql_fetch_assoc ($ полос)) (

/ / Извлечение информации полоса
Экстракт ($ строка);
/ / Создать пароль для полосы
$ realPassword = createRandomPassword ();
/ / Я выбрал бы повторить bandname и пароль, а часть моей отладки и так я вижу, как функция работает
эхо ( "<br/> $ bandName - $ realPassword");
$ newBand = "";
/ / Для каждого письма в полосе название мы собираемся смотреть, чтобы, если он совпадает с действительным характером от $ valid_chars. Это не мы собираемся, чтобы избавиться от ее и обрезать полосы имя
($bandName); $j ++ ){ за ($ J = 0; $ J <strlen ($ bandName); $ J + +) (

($band[$j])); $ Temp = str_replace ($ valid_chars, "X", strtolower ($ полосы [$ J]));
если ($ Temp == "X")

newBand $ = $ newBand. диапазоне $ [$ J];

)
/ / Я поддерживаю новое название для этой же причине я поддерживаю старые имя и пароль
эхо ( "- $ newBand");
/ / У нас есть новое название группе .... Теперь давайте начнем buliding информацию нужно включить в базу данных ...
memberName $ = $ newBand;
realName $ = $ newBand / / Я реальное имя и имя то же самое. Полос может измениться, если они хотят
emailAddress $ = $ bandEmail;
websiteUrl $ = $ bandWebsite / / Со мною полосах сайта могут также войти в них
websiteTitle $ = $ newBand;
$ is_activated = 1;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ Password = SHA1 (strtolower ($ memberName). realPassword $) / / Пароль должен быть зашифрован

/ / Убедитесь, что не является членом их с тем же именем в SMF данных. Мы не хотим никого вводить случайно два раза
$ запрос = "SELECT * FROM smf_members ГДЕ memberName = '$ memberName";
("Config Error 2222343242b"); $ результат = mysql_query ($ запроса) или умереть ( "Ошибка конфигурации 2222343242b");
$ nrows = mysql_num_rows ($ результата);

/ / Если имя найдено ничего не делать
если ($ nrows> 0) ()

еще (

/ / Если пользователь еще не зарегистрировались на форуме, сделать это, и отправить по электронной почте ....
$ запрос = "INSERT INTO smf_members (memberName, realName, emailAddress, is_activated, ID_POST_GROUP, пароль, websiteUrl, websiteTitle) VALUES ( '$ memberName', '$ realName', '$ emailAddress',' $ is_activated ',' $ ID_POST_GROUP ' , '$ пароль', '$ websiteUrl', '$ websiteTitle') ";

("Config Error 2232 "); $ результат = mysql_query ($ запроса) или умереть ( "Конфигурация Ошибка 2232");

/ / Теперь мы должны направить группу по электронной почте
= $ до $ emailAddress;
$ SUBJECT = "Ваш форум, имя пользователя и пароль";

/ / С
$ = заголовок "От: Me <me@mysite.com>";

/ / Ваше сообщение
$ .= сообщение "Ваш логин и пароль, перечислены ниже. Вы можете либо изменить в любой момент. Если вы не хотите участвовать в наших форумах, это не проблема. Просто никогда не войти, и он будет, как ничего не произошло . \ R \ N ";
$ .= сообщение "Имя пользователя: $ memberName Пароль: $ realPassword \ R \ N";

/ / Написать письмо
$ = отправленные почтой ($ к $ при условии, $ послание, $ заголовок);
если ($ отправленные)

эхо ( "- ДА!");
/ / Это последняя часть нашей эхо. "-ДА!" будет только печатные, если сообщение отправляется. Поэтому полная распечатка строке будет выглядеть так:
/ / Адам волнений - 4s6vsxag - AdamStrife - ДА!

)

)
)

Оставить комментарий