Deze handleiding gaat ervan uit dat u bekend bent met mijn post: Hoe een gebruiker handmatig toe te voegen in een SMF forum met behulp van PHP .
Ik heb onlangs geconfronteerd met de uitdaging van het verplaatsen van 800 of zo bands vanuit een database in een SMF forum. Ik geconfronteerd met een paar van de problemen bij het maken van de beweging die ik niet gaan in de eerste post:
- De band namen werden niet gegarandeerd veilig zijn voor een karakter per karakter te verplaatsen naar de SMF database. Dus een soort van naam wijzigen van de functie dienden te worden aangeworven.
- De bands hebben geen wachtwoorden. Dus een soort van wachtwoord generatie moet worden ingezet.
De stappen ging ik over tot alle bands in het forum register ging een beetje als volgt uit:
Open de Band Database
voor elke (Band) (
Genereer Wachtwoord
Wijzig de naam Band met "veilig" naam
Grab en het genereren van informatie die nodig is in te voegen van de gebruiker
Plaats Band in smf_members
Stuur een e-mail Band met het wachtwoord
)
Informatie die ik ter beschikking had gesteld van de band was het handig dat de database opgenomen: bandnaam, bandEmail en bandWebsite
Hier is het wachtwoord genererende functie gebruikte ik (blatently uit totallyphp.co.uk ):
createRandomPassword functie () (
$ Chars = "abcdefghijkmnopqrstuvwxyz023456789";
() * 1000000); srand ((double) microtime () * 1000000);
$ I = 0;
$ Pass = ";
while ($ i <= 7) (
33; $ Num = rand ()% 33;
$ Tmp = substr ($ chars, $ num, 1);
$ $ Pass = pass. $ Tmp;
$ I + +;
)
return $ pass;
)
Het wachtwoord aangemaakt hier relatief zwak, maar het was goed genoeg voor mijn doeleinden. Elk wachtwoord genererende functie zou prima werken hier. Ik koos voor deze omdat het gemakkelijk zou zijn voor de leden om te onthouden wanneer ze ervoor kozen om het niet te veranderen.
Hoe het te doen:
/ / Eerst verbinding maken met de band database
$ Username = "bandUsername";
$ Host = "bandHost";
$ Mijnwachtwoord = "bandPassword";
$ DB_NAME = "bandDatabase";
("cannot connect to server"); mysql_connect ("$ host", "$ username", "$ mijnwachtwoord") or die ("kan geen verbinding maken met server");
("cannot select DB"); mysql_select_db ("$ DB_NAME") or die ("kan niet kiezen DB");
/ / Nu pak alle bands uit de database
$ Query = "SELECT * FROM allBands";
$ Bands = mysql_query ($ query) or die ("Fout 2222b Config");
$ UserRows = mysql_num_rows ($ banden);
/ / Laten we nu eens verbinding te maken met de SMF db
$ Host = "smfhost"; / / Host-naam
$ Username = "smfuser; / / Mysql gebruikersnaam
$ Mijnwachtwoord = "smfpassword"; / / Mysql wachtwoord
$ DB_NAME = "smfdatabase"; / / Database naam
("cannot connect to server"); mysql_connect ("$ host", "$ username", "$ mijnwachtwoord") or die ("kan geen verbinding maken met server");
("cannot select DB"); mysql_select_db ("$ DB_NAME") or die ("kan niet kiezen DB");
/ / $ Vaild_chars gaat gebruikersnamen moet de array van de toegestane karakters voor. Ik besloot om alleen letters en cijfers. Er zijn ook andere karakters die gebruikt kunnen worden die niet zou leiden tot een probleem, maar voor stijl redenen heb ik besloten om te gaan met alleen cijfers en letters
$ Valid_chars = "abcdefghijklmnopqrstu VWXYZ 0 1 2 3 4 5 6 7 8 9";
$ Valid_chars = explode ("", $ valid_chars);
/ / Nu moeten we voor het doorlussen van elke band
){ for ($ i = 0; $ i <$ userRows; $ i + +) (
($bands)){ if ($ row = mysql_fetch_assoc ($ bands)) (
/ / Extraheer de band informatie
extract ($ row);
/ / Maak een wachtwoord voor de band
= $ RealPassword createRandomPassword ();
/ / Ik kies een wachtwoord echo van de bandnaam en als onderdeel van mijn debuggen en dus kan ik de functie zien als het werkt
echo ("<br/> bandnaam $ - $ realPassword");
NewBand $ = "";
/ / Voor elke letter in de naam voor de band gaan we kijken of het overeenkomt met een geldig teken van $ valid_chars. Zij het niet we gaan om zich te ontdoen van het afkappen en de naam van de band
($bandName); $j ++ ){ for ($ j = 0; $ j <strlen ($ bandnaam); $ j + +) (
($band[$j])); $ Temp = str_replace ($ valid_chars, "X", strtolower ($ band [$ j]));
if ($ temp == "X")
= $ $ NewBand newBand. Band $ [$ j];
)
/ / Ik sluit me aan de nieuwe naam voor dezelfde reden herhaal ik de oude naam en wachtwoord
echo ("- $ newBand");
/ / We hebben de nieuwe naam voor de band .... Laten we nu eens beginnen met de info buliding voegen we moeten in de db ...
= $ $ Membername newBand;
= $ $ Realname newBand; / / ik de echte naam en de naam hetzelfde. De bands kunnen veranderen als ze dat willen
$ Emailadres = $ bandEmail;
= $ $ WebsiteUrl bandWebsite; / / Sinds ik de bands 'websites kan net zo goed betreden
= $ $ WebsiteTitle newBand;
$ Is_activated = 1;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ Wachtwoord = sha1 (strtolower ($ membername). RealPassword $); / / wachtwoord moet worden gecodeerd
/ / Zorg ervoor dat hun geen lid is met dezelfde naam in de SMF database. We willen niet per ongeluk iemand tweemaal in te voeren
$ Query = "SELECT * FROM WHERE smf_members membername = '$ membername'";
("Config Error 2222343242b"); $ Result = mysql_query ($ query) or die ("Fout 2222343242b Config");
$ NRows = mysql_num_rows ($ result);
/ / Als de gebruikersnaam is niets gevonden
if ($ nRows> 0) ()
else (
/ / Als de gebruiker nog niet is aangemeld voor het forum, doe dat dan en stuur een e-mail ....
$ Query = "INSERT INTO smf_members (membername, echte naam, emailadres, is_activated, ID_POST_GROUP, passwd, websiteUrl, websiteTitle) VALUES ('$ membername', '$ realname', '$ emailadres', '$ is_activated', '$ ID_POST_GROUP' , '$ wachtwoord', '$ websiteUrl', '$ websiteTitle') ";
("Config Error 2232 "); $ Result = mysql_query ($ query) or die ("Fout 2232 Config");
/ / Nu moeten we de band stuur een e-mail
$ Tot = $ emailadres;
$ Subject = "Uw gebruikersnaam en wachtwoord forum";
/ / Van
$ Header = "From: Me <me@mysite.com>";
/ / Uw bericht
$ Bericht .= "Uw login en paswoord staan hieronder vermeld. U kunt op elk moment te wijzigen, hetzij. Als u niet wilt deelnemen aan onze forums, dat is geen probleem. Gewoon nooit in te loggen en het zal zijn als er niets is gebeurd. \ r \ n ";
$ Bericht .= "Gebruikersnaam: Wachtwoord membername $: $ realPassword \ r \ n";
/ / E-mail sturen
$ Verzondenberichten = mail ($ naar, $ onderwerp, $ bericht, $ header);
if ($ verzondenberichten)
echo ("- Ja!");
/ / Dit is het laatste deel van onze echo. De "-YES!" zal alleen worden afgedrukt als een e-mail wordt verzonden. Dus een volledige afdruk lijn zal er ongeveer zo uitzien:
/ / Adam Strife - 4s6vsxag - AdamStrife - YES!
)
)
)