Denne Tutorial antager, at du er fortrolig med mit indlæg: Sådan manuelt Indsæt en bruger til en SMF Forum Brug PHP .
Jeg har for nylig stod over for udfordringen med at flytte 800 eller deromkring bands fra en database ind i en SMF forum. Jeg står et par problemer, når de foretager de skridt, som jeg ikke dækker i første indlæg:
- Bandet navne ikke garanteres at være sikkert for en tegn for tegn flytte ind i SMF databasen. Så en eller anden form af navnet ændrer funktion skulle være ansat.
- De bands der ikke har passwords. Så nogle type af adgangskode generation skal være ansat.
De skridt, jeg gik over for at registrere alle de bands i forummet gik lidt som dette:
Åbn Band Database
for hver (Band) (
Generer kodeord
Omdøb Band med "sikker" navn
Grab og generere de nødvendige oplysninger for at indsætte bruger
Indsæt Band i smf_members
Send Band en e-mail med password
)
Oplysninger, jeg havde til rådighed fra bandet database, var nyttig omfattede: BandName, bandEmail, og bandWebsite
Her er kodeordet generation funktion jeg brugte (blatently taget fra totallyphp.co.uk ):
funktion createRandomPassword () (
$ Chars = "abcdefghijkmnopqrstuvwxyz023456789";
() * 1000000); srand ((dobbelt) microtime () * 1000000);
$ I = 0;
$ Pass = ";
while ($ i <= 7) (
33; $ Num = rand ()% 33;
$ Tmp = substr ($ tegn, $ num, 1);
$ Pass = $ pass. $ Tmp;
$ I + +;
)
return $ pass;
)
Adgangskoden oprettes her er forholdsvis svag, men det var godt nok til mit formål. Enhver adgangkode generation funktion skulle fungere fint her. Jeg valgte denne her, fordi det ville være let for medlemmerne at huske, hvis de ikke valgte at ændre det.
Sådan gør du:
/ / First oprette forbindelse til bandet database
$ Brugernavn = "bandUsername";
$ Host = "bandHost";
$ MinAdgangskode = "bandPassword";
$ Db_name = "bandDatabase";
("cannot connect to server"); mysql_connect ("$ host", "$ brugernavn", "$ MinAdgangskode") or die ("kan ikke forbinde til server");
("cannot select DB"); mysql_select_db ("$ db_name") or die ("kan ikke vælge DB");
/ / Nu fange alle de bands fra databasen
$ Query = "SELECT * FROM allBands";
$ Bands = mysql_query ($ query) or die ("Config Error 2222b");
$ UserRows = mysql_num_rows ($ bånd);
/ / Nu kan oprette forbindelse til SMF db
$ Host = "smfhost"; / / værtsnavn
$ Brugernavn = "smfuser / / Mysql brugernavn
$ MinAdgangskode = "smfpassword"; / / Mysql kodeord
$ Db_name = "smfdatabase"; / / Database navn
("cannot connect to server"); mysql_connect ("$ host", "$ brugernavn", "$ MinAdgangskode") or die ("kan ikke forbinde til server");
("cannot select DB"); mysql_select_db ("$ db_name") or die ("kan ikke vælge DB");
/ / $ Vaild_chars bliver den vifte af tilladte tegn for brugernavne. Jeg besluttede, at kun bogstaver og tal. Der er andre tegn, der kunne bruges, som ikke ville give problemer, men for stil grunde besluttede jeg at gå med kun bogstaver og tal
$ Valid_chars = "abcdefghijklmnopqrstu vwxyz 0 1 2 3 4 5 6 7 8 9";
$ Valid_chars = eksplodere ("", $ valid_chars);
/ / Nu skal vi løkke igennem hver band
){ for ($ i = 0; $ i <$ userRows; $ i + +) (
($bands)){ if ($ row = mysql_fetch_assoc ($ bands)) (
/ / Udtræk bandet oplysninger
ekstrakt ($ row);
/ / Opret en adgangskode til bandet
$ RealPassword = createRandomPassword ();
/ / Jeg vælger at gentage BandName og password som en del af min debugging og så jeg kan se fungere som det virker
echo ("<br/> $ BandName - $ realPassword");
$ NewBand = "";
/ / For hvert bogstav i bandet navn vi kommer til at se på, om den svarer til et gyldigt tegn fra $ valid_chars. Det den ikke vi kommer til at slippe af med det og afkorte bandet navn
($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 det nye navn for samme grund jeg gentage det gamle navn og password
echo ("- $ newBand");
/ / Vi har det nye Band navn .... nu lad os starte buliding den info vi har brug for at indsætte i db ...
$ MemberName = $ newBand;
$ Realname = $ newBand / / jeg det rigtige navn og medlem navn det samme. De bands kan ændre det, hvis de ønsker
$ Email adresse = $ bandEmail;
$ WebsiteUrl = $ bandWebsite / / Da jeg har bands hjemmesider kunne lige så godt indtaste dem
$ WebsiteTitle = $ newBand;
$ Is_activated = 1;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ Password = sha1 (strtolower ($ memberName). $ RealPassword) / / Password skal være krypteret
/ / Sørg for, at deres isn'ta medlem med det samme navn i SMF databasen. Vi ønsker ikke at tilfældigt kommer ind nogen gange
$ Query = "SELECT * FROM smf_members WHERE memberName = '$ memberName";
("Config Error 2222343242b"); $ Result = mysql_query ($ query) or die ("Config Error 2222343242b");
$ Nrows = mysql_num_rows ($ result);
/ / Hvis medlemmet navnet er fundet intet
if ($ nrows> 0) ()
else (
/ / Hvis brugeren ikke allerede er tilmeldt de fora, så gør det og sende en email ....
$ Query = "INSERT INTO smf_members (memberName, realname, email adresse, is_activated, ID_POST_GROUP, passwd, websiteUrl, websiteTitle) VALUES ('$ memberName', '$ realname', '$ email adresse', '$ is_activated', '$ ID_POST_GROUP' , '$ kodeord', '$ websiteUrl', '$ websiteTitle') ";
("Config Error 2232 "); $ Result = mysql_query ($ query) or die ("Config Error 2232");
/ / Nu skal vi nødt til at sende båndet en e-mail
$ Til = $ email adresse;
$ Subject = "Dit forum brugernavn og adgangskode";
/ / Fra
$ Header = "fra: Me <me@mysite.com>";
/ / Din besked
$ Besked .= "Dit login og password er listet nedenfor. Du kan ændre enten som helst. Hvis du ikke ønsker at deltage i vores forum, det er ikke noget problem. Bare aldrig logge ind, og det vil være som intet hændt. \ r \ n ";
$ Besked .= "Brugernavn: $ memberName Password: $ realPassword \ r \ n";
/ / Send email
$ Sendteemails = mail ($ til, $ emne, $ besked, $ header);
if ($ sendteemails)
echo ("- YES!");
/ / Dette er den sidste del af vores ekko. Den "-JA!" vil kun blive udskrevet, hvis en e-mail er sendt. Så en fuldstændig udskrift linje vil se nogenlunde sådan her:
/ / Adam Strid - 4s6vsxag - AdamStrife - JA!
)
)
)