Ta Tutorial predpostavlja, ste seznanjeni z mojim post: Kako ročno vstavite uporabnika v SMF forum Uporaba PHP .
Pred kratkim sem se soočajo z izzivom, ki se gibljejo 800 ali tako pasovih iz baze podatkov v forum SMF. I s katerimi se srečujejo nekaj težav pri pripravi premakniti, da sem storil ne zajema v prvi post:
- Band imena so bila ne zagotavljajo varno za znak, ki ga znak premakniti v bazo podatkov SMF. Torej nekakšen ime spreminja funkcije je bilo treba uporabiti.
- Pasovi nimajo gesla. Tako nekatere vrste proizvodnje geslo je treba uporabiti.
Koraki sem šel okoli, da se registrirajo vse pasov na forumu je šel malo všeč:
Open Database Band
za vsako (Band) (
Ustvari geslo
Preimenuj Band s "varne" name
Zgrabi in pridobivanje informacij, potrebnih za vstavljanje uporabnika
Vstavi Band v smf_members
Pošlji Band e-pošto z geslom
)
Informacije sem imel na voljo od pasu podatkovne baze, ki je koristno vključeno: bandName, bandEmail in bandWebsite
Tukaj je geslo generacija funkcijo sem uporabil (blatently vzeti iz totallyphp.co.uk ):
Funkcija createRandomPassword () (
$ Chars = "abcdefghijkmnopqrstuvwxyz023456789";
() * 1000000); srand ((dvojno) microtime () * 1000000);
$ I = 0;
$ = Prelaz ";
while ($ i <= 7) (
33; $ Num = rand ()% 33;
$ Tmp = substr ($ chars, $ num, 1);
$ $ = Prelaz prelaz. $ Tmp;
$ I + +;
)
vrnitev $ mimo;
)
Geslo ustvaril tukaj, je dokaj šibek, vendar je bil dovolj dober za moje namene. Vsaka generacija geslo naloga bo delo globe tukaj. Sem izbral ta, ker bi bilo enostavno za člane spomniti, če so se odločili, da ga ne spremeni.
Kako to storiti:
/ / Najprej povezati z bazo podatkov pasu
$ Ime = "bandUsername";
$ Host = "bandHost";
$ Mypassword = "bandPassword";
$ DB_Name = "bandDatabase";
("cannot connect to server"); mysql_connect ("$ host", "$ username", "$ mypassword") ali die ("ne more povezati s strežnikom");
("cannot select DB"); mysql_select_db ("$ DB_Name") ali die ("ne morem izbrati DB");
/ / Zdaj zgrabi vse pasovih iz baze
$ Query = "SELECT * FROM allBands";
$ = Mysql_query pasovih ($ poizvedba) ali die ("Config Error 2222b");
$ UserRows = mysql_num_rows ($ pasovi);
/ / Sedaj omogoča povezavo z SMF db
$ Host = "smfhost"; / / ime gostitelja
$ Ime = "smfuser; / / Mysql uporabniško ime
$ Mypassword = "smfpassword"; / / Mysql geslo
$ DB_Name = "smfdatabase"; / / Database ime
("cannot connect to server"); mysql_connect ("$ host", "$ username", "$ mypassword") ali die ("ne more povezati s strežnikom");
("cannot select DB"); mysql_select_db ("$ DB_Name") ali die ("ne morem izbrati DB");
/ / $ Vaild_chars se bo niz dovoljeni znaki za uporabniška imena. Odločil sem se, da bodo samo črke in številke. Obstajajo še drugi znaki, ki bi jih lahko uporabili, da ne bi povzročilo problem, ampak za stil razlogov, sem se odločila, da gredo s samo črke in številke
$ Valid_chars = "ABCDEFGHIJKLMNOPQRSTU VWXYZ 0 1 2 3 4 5 6 7 8 9";
$ Valid_chars = eksplodira ("", $ valid_chars);
/ / Zdaj je treba zanko skozi vsak band
){ for ($ i = 0; $ i <$ userRows; $ i + +) (
($bands)){ if ($ vrstica = mysql_fetch_assoc ($ pasovi)) (
/ / Citat band informacije
ekstrakt ($ vrstica);
/ / Ustvari geslo za band
$ RealPassword = createRandomPassword ();
/ / Sem se odločil, da odmeva bandname in geslo kot del moje odpravljanje napak in tako lahko vidim funkcijo, saj deluje
echo ("$ <br/> bandName - $ realPassword");
$ NewBand = "";
/ / Za vsako pismo, v pasu imena bomo videti, da vidim, če se ujema z veljavnim znakom iz $ valid_chars. To se ne bomo znebili, in skrajšajte band ime
($bandName); $j ++ ){ for ($ j = 0; $ j <strlen ($ bandName); $ j + +) (
($band[$j])); $ Temp = str_replace ($ valid_chars, "X", strtolower ($ band [$ j]));
if ($ temp == "X")
$ $ = NewBand newBand. $ Band [$ j];
)
/ / I echo novo ime iz istega razloga sem echo staro ime in geslo
echo ("- $ newBand");
/ / Imamo novo Band ime .... zdaj začnimo buliding info moramo vstaviti v db ...
$ $ = MemberName newBand;
$ $ = Realname newBand; / / I, ki pravi ime in uporabniško ime enako. Pasovih lahko spremeni, če hočejo
$ $ = EmailAddress bandEmail;
$ $ = WebsiteUrl bandWebsite; / / Ker sem pasovih spletnih strani bi lahko tudi vanje
$ $ = WebsiteTitle newBand;
$ Is_activated = 1;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ Geslo = sha1 (strtolower ($ memberName). RealPassword $); / Geslo mora / biti šifrirana
/ / Preverite svojo isn'ta člana z istim imenom v zbirki podatkov SMF. Ne želimo, da pomotoma vstopiti kdorkoli dvakrat
$ Query = "SELECT * FROM smf_members WHERE memberName = '$ memberName";
("Config Error 2222343242b"); $ Result = mysql_query ($ poizvedba) ali die ("Config Error 2222343242b");
$ Nrows = mysql_num_rows ($ rezultat);
/ / Če uporabniško ime, se ugotovi storiti ničesar
if ($ nrows> 0) ()
else (
/ / Če uporabnik ne že prijavili za forume, storijo in pošljejo email ....
$ Query = "INSERT INTO smf_members (memberName, realname, emailAddress, is_activated, ID_POST_GROUP, passwd, websiteUrl, websiteTitle) values ('$ memberName", "$ realname", "$ emailAddress", "$ is_activated", "$ ID_POST_GROUP" , '$ geslo', '$ websiteUrl "," $ websiteTitle') ";
("Config Error 2232 "); $ Result = mysql_query ($ poizvedba) ali die ("Config Error 2232");
/ / Zdaj je treba poslati skupino email
$ Na = $ emailAddress;
$ Subject = "Vaše forum uporabniško ime in geslo";
/ / Iz
$ Header = "od: Me <me@mysite.com>";
/ / Vaše sporočilo
$ Sporočilo .= "Vaše uporabniško ime in geslo, so navedeni spodaj. Spreminjate lahko bodisi kadarkoli. Če ne želite sodelovati na naših forumih, da ni problem. Samo nikoli se prijavite in ga bo kot ni nič zgodilo. \ r \ n ";
$ Sporočilo .= "Ime: $ memberName Geslo: $ realPassword \ r \ n";
/ / Pošiljanje e-pošte
$ Poslano = mail ($ za, $ predmet, $ sporočila, $ header);
if ($ poslano)
echo ("- DA!");
/ / To je zadnji del naše odmeva. "-DA!" bo le natisnjena če je poslana email. Tako poln izpis linija izgledala nekako takole:
/ / Adam Strife - 4s6vsxag - AdamStrife - DA!
)
)
)