Ky tutorial merr jeni të njohur me postin tim: Si të manualisht Fut një Into User një forum SMF Përdorimi i PHP .
Kohët e fundit kam përballur me sfidën e lëviz 800 apo më shumë grupe nga një bazë të dhënash në një forum të SMF. I përballur me disa probleme, kur bën veprim që nuk e kam mbuluar në mesazhin e parë:
- Emrat e grupit nuk ishin të garantuara për të qenë të sigurt për një karakter me karakter të hyni në bazën e të dhënave SMF. Pra, një lloj i emrit modifikimit funksionit duhej të punësuar.
- Grupe nuk kanë passwords. Pra, disa lloj të gjenerimit fjalëkalimin duhet të jenë të punësuar.
Hapat e unë shkova për të regjistruar të gjitha grupet në forum shkoi pak si ky:
Hap Database Band
për çdo (Band) (
Generate Password
Riemërtoj Band me "Emri i sigurt"
Kap dhe të gjenerojë dhënat e nevojshme për të futur përdorues
Fut në smf_members Band
Dërgo Band një email me fjalëkalimin
)
Informacione kam pasur në dispozicion nga databaza grupi që ishte e dobishme përfshirë: bandName, bandEmail, dhe bandWebsite
Këtu është brezi i fjalëkalimin funksion I përdorur (marrë blatently nga totallyphp.co.uk ):
funksion createRandomPassword () (
$ chars = "abcdefghijkmnopqrstuvwxyz023456789";
() * 1000000); srand ((dyfishtë) microtime () * 1000000);
$ I = 0;
$ Kalojë = ";
ndërsa ($ i <= 7) (
33; $ Num = rand ()% 33;
$ Tmp = substr ($ chars, $ num, 1);
$ = $ Kalojë të kalojë. $ Tmp;
$ I + +;
)
kthim $ kalojë;
)
Fjalëkalimi krijuar këtu është relativisht i dobët, por kjo ishte mjaft e mirë për qëllime tim. Çdo brez fjalëkalimin funksion do të punojnë gjobë këtu. Unë zgjodha këtë sepse kjo do të jetë e lehtë për anëtarët për të kujtuar në qoftë se ata nuk e zgjodhi për të ndryshuar atë.
Si të bëhet kjo:
/ / Së pari lidhet me bazën e të dhënave band
$ username = "bandUsername";
$ host = "bandHost";
mypassword $ = "bandPassword";
db_name $ = "bandDatabase";
("cannot connect to server"); mysql_connect ("host" $, "$ username", "$ mypassword") ose të vdesin ("nuk mund të lidheni me serverin");
("cannot select DB"); mysql_select_db ("$ db_name") ose të vdesin ("nuk mund të zgjidhni DB");
/ / Tani kap të gjitha grupet nga baza e të dhënave
$ query = "SELECT allBands NGA *";
mysql_query bende $ = ($ query) ose të vdesin ("Config Error 2222b");
$ UserRows = mysql_num_rows ($ shirita);
/ / Tani lejon të lidheni me SMF DB
$ host = "smfhost"; / / Emri i Host
$ username = "smfuser; / / username MySQL
mypassword $ = "smfpassword"; / / MySQL password
db_name $ = "smfdatabase"; / / emri i të Dhënave
("cannot connect to server"); mysql_connect ("host" $, "$ username", "$ mypassword") ose të vdesin ("nuk mund të lidheni me serverin");
("cannot select DB"); mysql_select_db ("$ db_name") ose të vdesin ("nuk mund të zgjidhni DB");
/ / $ Vaild_chars do të jetë grup të karaktereve të lejuara për të përdoruesve. I vendosur për të lejuar vetëm shkronja dhe numra. Ka karaktere të tjera që mund të përdoren se nuk do të shkaktonte një problem, por për arsye stili kam vendosur të shkoj me vetëm shkronja dhe numra
valid_chars $ = "vwxyz abcdefghijklmnopqrstu 0 1 2 3 4 5 6 7 8 9";
valid_chars $ = shpërthejnë ("", $ valid_chars);
/ / Tani ne kemi nevojë për lak nëpërmjet çdo grupi
){ për ($ i = 0; $ i <$ userRows; $ i + +) (
($bands)){ if ($ rreshti = mysql_fetch_assoc ($ grupe)) (
/ / Hap grupi informacion
ekstrakt ($ rreshti);
/ / Krijo një fjalëkalim për të grupit
realPassword createRandomPassword $ = ();
/ / Unë zgjedh për të jehonë bandname dhe fjalëkalimin si pjesë e debugging tim dhe kështu unë mund të shoh të funksionojë si funksionon
echo ("<br/> bandName - realPassword $ $");
$ NewBand = "";
/ / Për çdo letër në emër të grupit ne do të shikojmë për të parë nëse ajo ndeshje një simbol i vlefshëm nga $ valid_chars. Ajo nuk ka ne do të të shpëtoj prej tij dhe të shkurtoj emrin e grupit
($bandName); $j ++ ){ për ($ j = 0; $ j <strlen ($ bandName); $ j + +) (
($band[$j])); $ temp = str_replace ($ valid_chars, "X", strtolower ($ band [$ j]));
if ($ temp == "X")
grupi newBand newBand $ = $. $ [$ j];
)
/ / Unë jehonë emër të ri për të njëjtën arsye unë jehonë emrin e vjetër dhe fjalëkalimin
echo ("- $ newBand");
/ / Ne kemi Band emrin e ri .... tani le të fillojë buliding info ne kemi nevojë për të futur në db ...
memberName $ = $ newBand;
realname $ = $ newBand; / / kam vendosur emrin e vërtetë dhe emri i anëtarit të njëjtën gjë. Grupe mund ta ndryshoni atë, nëse dëshirojnë
emailAddress $ = $ bandEmail;
websiteUrl $ = $ bandWebsite; / / Që kur kam banda 'faqet e internetit mund edhe të hyjnë në to
websiteTitle $ = $ newBand;
$ Is_activated = 1;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ password = sha1 (strtolower ($ memberName). realPassword $), / / Fjalekalimi duhet të jetë i
/ / Sigurohuni isn'ta anëtare e tyre me të njëjtin emër në bazën e të dhënave SMF. Ne nuk duam që të hyjë dikush rastësisht dy herë
$ query = "SELECT * smf_members NGA KU memberName" memberName = '$';
("Config Error 2222343242b"); $ rezultati = mysql_query ($ query) ose të vdesin ("Config Error 2222343242b");
nrows $ = mysql_num_rows ($ rezultati);
/ / Nëse emri anëtari është gjetur të bëjë asgjë
if ($ nrows> 0) ()
tjetër (
/ / Nëse shfrytëzuesi nuk është nënshkruar tashmë për të forumeve, një gjë të tillë dhe për të dërguar një email ....
$ query = "INSERT NË smf_members (memberName, realname, emailAddress, is_activated, ID_POST_GROUP, passwd, websiteUrl, websiteTitle) VLERAT ('$ memberName', '$ realname', '$ emailAddress', '$ is_activated', '$ ID_POST_GROUP' , '$ fjalëkalimin', '$ websiteUrl', '$ websiteTitle') ";
("Config Error 2232 "); $ rezultati = mysql_query ($ query) ose të vdesin ("Config Error 2232");
/ / Tani ne kemi nevojë për të dërguar një email të grupit
$ = $ EmailAddress për të;
subjekt $ = "Emri juaj forum dhe fjalë-kalimit";
/ / Nga
$ header = "From: Mua <me@mysite.com>";
/ / Mesazhi juaj
$ mesazhi .= "Your login dhe password janë të shënuara më poshtë. Ju mund t'i ndryshoni ose në çdo kohë. Nëse ju nuk duan të marrin pjesë në forumet tona, se ka problem. Vetëm nuk hyni dhe ajo do të jetë si asgjë nuk ka ndodhur ndonjëherë. \ r \ n ";
n Fjalëkalimi mesazh $ .= "Përdoruesi: $ memberName: $ realPassword \ r \";
/ / Dërgoni email
Mesazh i dërguar mail = $ ($ të, $ subjekt, $ mesazh, $ header);
në qoftë se ($ mesazh i dërguar)
echo ("- PO!");
/ / Kjo është pjesa e fundit e ynë jehonë. "PO!" do të jenë të shtypura në qoftë se një e-mail është dërguar. Pra, një kopje linjë të plotë do të shihni diçka si kjo:
/ / Grindjet Adam - 4s6vsxag - AdamStrife - PO!
)
)
)