Acest ghid presupune că sunteţi familiarizaţi cu meu post: Cum sa manual Introduceţi un utilizator intr-o SMF Forum Folosind PHP.
Am recent cu care se confruntă cu provocarea de a trece atât de benzile de 800 sau de la o bază de date într-un forum SMF. Am confruntat cu o serie de probleme atunci când faceţi mişcare de care nu am să acopere în primul post:
- Formatia nume nu au fost garantate de a fi în siguranţă de un caracter de caractere muta în baza de date a SMF. Deci, un fel de nume de modificare a avut funcţia de a fi angajat.
- Trupele nu au parole. Deci, unele forme de parola generaţie are nevoie de a fi angajat.
Paşii m-am dus pe cale de a înregistra toate benzile de la forum au fost un pic cam aşa:
Deschideţi baza de date Band
pentru fiecare (Band) (
Generaţi Parola
Redenumire Band cu "sigure" numele
Prinde genera şi informaţiile necesare pentru a introduce utilizatorul
Introduceţi banda în smf_members
Band Trimite un e-mail cu parola
)
Informaţii am avut la dispoziţie de la trupa de baze de date care a fost util incluse: bandName, bandEmail, şi bandWebsite
Aici este parola generaţie funcţie am folosit (blatently luate de la totallyphp.co.uk):
funcţiei createRandomPassword () (
$ caractere = "abcdefghijkmnopqrstuvwxyz023456789";
() * 1000000); srand ((double) microtime () * 1000000);
$ i = 0;
$ pass = ";
while ($ i <= 7) (
33; $ num = RAND () 33%;
$ tmp = substr ($ caractere, NUM $, 1);
$ pass = $ pass. $ tmp;
$ i + +;
)
return $ pass;
)
Parola creat aici este relativ slab, dar a fost destul de bun pentru scopul meu. Orice parola generaţie funcţie de lucru ar fi bine aici. Am ales-o pe asta, pentru că va fi uşor să vă amintiţi de membri, dacă acestea nu au ales să-l schimbi.
Cum se face:
/ / Prima trupa a vă conecta la baza de date
$ username = "bandUsername";
$ host = "bandHost";
$ parola mea = "bandPassword";
$ db_name = "bandDatabase";
("cannot connect to server"); mysql_connect ( "$ host", "$ username", "$ parola mea") sau a muri ( "nu se poate conecta la server");
("cannot select DB"); mysql_select_db ( "$ db_name") sau a muri ( "nu se poate selecta DB");
/ / Acum sa luam toate benzile de la baza de date
$ query = "select * de la allBands";
$ benzi = mysql_query ($ query) sau mori ( "Eroare de configurare 2222b");
$ userRows = mysql_num_rows ($ benzi);
/ / Acum, haideţi să se conecteze la smf db
$ host = "smfhost"; / / nume de gazdă
$ username = "smfuser; / / Mysql username
$ parola mea = "smfpassword"; / / mysql parola
$ db_name = "smfdatabase"; / / numele bazei de date
("cannot connect to server"); mysql_connect ( "$ host", "$ username", "$ parola mea") sau a muri ( "nu se poate conecta la server");
("cannot select DB"); mysql_select_db ( "$ db_name") sau a muri ( "nu se poate selecta DB");
/ / $ vaild_chars va fi permis serie de caractere pentru nume de utilizator. Am decis să permită doar litere şi cifre. Există şi alte caractere care pot fi folosite ca nu ar cauza o problemă, dar stilul de motive am decis sa merg cu doar litere şi cifre
$ valid_chars = "abcdefghijklmnopqrstu vwxyz 0 1 2 3 4 5 6 7 8 9";
$ = valid_chars exploda ( "", $ valid_chars);
/ / Acum trebuie să ne bucla prin fiecare bandă
){ for ($ i = 0; $ i <$ userRows; $ i + +) (
($bands)){ if ($ row = mysql_fetch_assoc ($ benzi)) (
/ / Extras de banda de informaţii
extract ($ row);
/ / Creaţi o parolă pentru trupa
$ realPassword = createRandomPassword ();
/ / I alege să ecou în bandname şi o parolă, ca parte a mea, aşa că am depanare şi posibilitatea de a vedea cum funcţionează funcţie
echo ( "<br/> bandName $ - $ realPassword");
$ newBand = "";
/ / Pentru fiecare literă din numele trupei vom uita, pentru a vedea dacă acesta se potriveşte cu un caracter corect de la $ valid_chars. Aceasta nu vom scăpa de ea şi trunchia numele trupei
($bandName); $j ++ ){ for ($ j = 0; $ j <strlen ($ bandName); $ j + +) (
($band[$j])); $ temp = str_replace ($ valid_chars, "X", strtolower ($ trupa [$ j]));
dacă ($ temp == "X")
$ newBand = $ newBand. $ trupa [$ j];
)
/ / I ecou noul nume pentru acelaşi motiv pentru care am echo vechiul nume şi o parolă
echo ( "- $ newBand");
/ / Avem noi Band numele .... acum să începem buliding info de care avem nevoie pentru a introduce în db ...
$ memberName = $ newBand;
realname $ = $ newBand; / / am setat nume real şi membru acelaşi nume. Trupele pot schimba în cazul în care doriţi
$ emailAddress = $ bandEmail;
$ websiteUrl = $ bandWebsite; / / De când sunt în benzile de site-urile ar putea, de asemenea ele intră
$ websiteTitle = $ newBand;
$ is_activated = 1;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ password = sha1 (strtolower ($ memberName). $ realPassword); / / Parola trebuie să fie criptate
/ / Asiguraţi-vă că lor isn'ta membru cu acelaşi nume în baza de date a SMF. Noi nu vrem să accidental intră cineva de două ori pe
$ query = "select * de la smf_members UNDE memberName = '$ memberName'";
("Config Error 2222343242b"); $ rezultat = mysql_query ($ query) sau mori ( "Eroare de configurare 2222343242b");
$ nrows = mysql_num_rows ($ rezultat);
/ / Cazul în care un membru nume este găsit nu fac nimic
dacă ($ nrows> 0) ()
else (
/ / Dacă utilizatorul nu este semnat deja pentru forum-uri, face acest lucru şi de a trimite un e-mail ....
$ 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" , '$ parola', '$ websiteUrl', '$ websiteTitle ")";
("Config Error 2232 "); $ rezultat = mysql_query ($ query) sau mori ( "Eroare de configurare 2232");
/ / Acum, avem nevoie pentru a trimite un e-mail de banda
$ a = $ emailAddress;
$ subiect = "forum numele de utilizator şi parola";
/ / De la
$ header = "de la: Eu <me@mysite.com>";
/ / Mesajul dvs.
$ mesaj .= "dvs. de conectare şi parola sunt enumerate mai jos. Aveţi posibilitatea de a modifica, fie in orice moment. Dacă nu doriţi să participe la forumurile noastre, asta-i nici o problema. Doar nu intraţi în ea şi va fi ca nimic nu s-a întâmplat . \ r \ n ";
$ mesaj .= "Nume de utilizator: $ memberName Parola: $ realPassword \ r \ n";
/ / Trimite un email
$ sentmail = mail ($ a, $ subiect, $ mesaj, $ antet);
dacă ($ sentmail)
echo ( "- Da!");
/ / Aceasta este ultima parte a noastră ecou. The "-Da!" vor fi tipărite numai dacă este trimis un e-mail. Deci, o linie de imprimat va arate ceva în genul:
/ / Adam Strife - 4s6vsxag - AdamStrife - Da!
)
)
)