Този настойнически поема сте запознати с моя пост: Как да вмъкнете ръчно един потребител в един SMF форум Използване на PHP .
Наскоро бяха изправени пред предизвикателството да се движат 800, или групи от една база данни в един форум SMF. Аз изправени пред няколко проблеми, когато става в движение, че аз не покрива в първия пост:
- Групата имена не са гарантирани да бъдат безопасни за символ, като знак ход в базата данни на форума. Така че някакво име за изменение функция трябва да бъдат заети.
- Групите не са пароли. Така че някакъв вид парола поколение трябва да бъдат заети.
Стъпките, аз отидох за да се регистрират всички ленти във форума беше там малко по следния начин:
Отваряне на база данни 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 ($ символа, $ бр, 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"), или умират ("не може да изберете DB");
/ / Сега вземете всички ленти от базата данни
$ Заявка = "SELECT * FROM allBands";
$ Ленти = mysql_query ($ заявка), или умират ("Грешка 2222b Config");
$ UserRows = mysql_num_rows ($ ленти);
/ / Сега ви позволява свързване към SMF db
$ Домакин = "smfhost"; / / Име на хоста
$ Име = "smfuser; / / MySQL потребителско име
$ Mypassword = "smfpassword"; / / MySQL парола
$ Db_name = "smfdatabase"; / / База данни име
("cannot connect to server"); mysql_connect ("$ домакин", "$ потребителско име", "$ mypassword"), или умират ("не може да се свърже със сървъра");
("cannot select DB"); mysql_select_db ("$ db_name"), или умират ("не може да изберете DB");
/ / $ 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; $ к <strlen ($ bandName); $ к + +) (
($band[$j])); $ Temp = str_replace ($ valid_chars, "Х", strtolower ($ група [$ к]));
ако ($ Temp == "Х")
$ NewBand = $ newBand. $ Група [$ к];
)
/ / I "Хуманитарна помощ" на новото име на една и съща причина, заради която ехо на старото име и парола
"Хуманитарна помощ" ("- $ newBand");
/ / Ние имаме ново име на оркестъра .... Сега нека да започнем buliding на информация трябва да въведете в db ...
$ MemberName = $ newBand;
$ RealName = $ newBand; / / I определя истинското име и името на член на един и същ. Групата може да го промените, ако те искат
$ EmailAddress = $ bandEmail;
$ WebsiteUrl = $ bandWebsite; / / Тъй като имам ленти "на уебсайтове може и да ги въведете
$ WebsiteTitle = $ newBand;
$ Is_activated = 1;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ Парола = sha1 (strtolower ($ memberName). $ RealPassword); / / парола трябва да са криптирани
/ / Уверете се, че техните държави-isnt 'a със същото име в базата данни на форума. Ние не искаме да влиза някой случайно два пъти
$ Заявка = "Изберете от * smf_members КЪДЕ memberName" = "$ memberName";
("Config Error 2222343242b"); $ Резултат = mysql_query ($ заявка), или умират ("Грешка 2222343242b Config");
$ Nrows = mysql_num_rows ($ резултат);
/ / Ако се установи, потребителско име не се прави нищо
ако ($ nrows> 0) ()
иначе (
/ / Ако потребителят не е вече са се регистрирали за форуми, да направят и да изпратят имейл ....
$ Заявка = "вкарва в smf_members (memberName, realName, emailAddress, is_activated, ID_POST_GROUP, passwd, websiteUrl, websiteTitle) стойности (" $ memberName ',' $ realName ',' $ emailAddress ',' $ is_activated ',' $ ID_POST_GROUP " , '$ парола', '$ websiteUrl', '$ websiteTitle') ";
("Config Error 2232 "); $ Резултат = mysql_query ($ заявка), или умират ("Config Грешка 2232");
/ / Сега ние трябва да се изпрати на групата имейл
$ До = $ emailAddress;
$ Предмет = "Вашият форум потребителско име и парола";
/ / От
$ Заглавна = "от: Аз <me@mysite.com>";
/ / Вашето съобщение
$ Съобщение .= "Вашите потребителско име и парола са изброени по-долу. Можете да променяте или по всяко време. Ако не искат да участват в нашия форум, това не е проблем. Просто никога не влезете в системата и тя ще бъде като нищо не се е случило. \ R \ N ";
$ Съобщение .= "Потребителско име: $ memberName Парола: $ realPassword \ R \ N";
/ / Изпраща имейл
$ Изходяща поща = ($ до $ предмет, $ съобщение, $ заглавна);
ако ($ изходящ)
"Хуманитарна помощ" ("- ДА!");
/ / Това е последната част от нашия "Хуманитарна помощ". В "-ДА!" ще бъдат отпечатани само ако имейл е изпратен. Така че пълна гама разпечатката ще изглежда по следния начин:
/ / Адам Strife - 4s6vsxag - AdamStrife - ДА!
)
)
)