Dieses Tutorial geht davon kennen Sie meine Post: Wie man manuell einfügen ein Benutzer in einer SMF Forum mit PHP .
Ich habe vor kurzem stand vor der Herausforderung bewegten 800 oder so Bands aus einer Datenbank in eine SMF-Forum. Ich stellte ein paar Probleme machen, wenn der Umzug nicht, dass ich in den ersten Beitrag nicht abgedeckt:
- Die Band-Namen wurden nicht garantiert werden, für ein sicheres Zeichen für Zeichen Umzug in die SMF-Datenbank. So eine Art von Namen ändern musste Funktion eingesetzt werden.
- Die Bands haben keine Passwörter. So eine Art von Passwort-Generierung muss beschäftigt werden.
Die Schritte, die ich ging, um alle Bands im Forum registrieren ging ein wenig wie folgt aus:
Öffnen Sie das Band Database
für jeden (Band) (
Generate Password
Benennen Band mit "sicheren" Namen
Grab und generieren erforderlichen Informationen zum Einlegen der Benutzer
Legen Band in smf_members
Senden Sie eine E-Mail-Band mit dem Kennwort
)
Information hatte ich von der Band zur Verfügung, die nützliche Datenbank aufgenommen wurde: Bandnamen, bandEmail und bandWebsite
Hier ist die Passwort-Generierung Funktion habe ich (blatently entnommen totallyphp.co.uk ):
Funktion createRandomPassword () (
$ 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;
)
Das Passwort angelegt ist hier relativ schwach, aber es war gut genug für meine Zwecke. Jedes Passwort, das Generation-Funktion wäre hier gut funktionieren. Ich wählte diese eine, weil es einfach wäre für die Mitglieder zu erinnern, wenn sie nicht entschieden, es zu ändern.
Wie man es macht:
/ / Verbinden Sie zuerst die Band-Datenbank
$ Username = "bandUsername";
$ Host = "bandHost";
Mypassword $ = "bandPassword";
$ Db_name = "bandDatabase";
("cannot connect to server"); mysql_connect ("$ host", "$ username", "$ mypassword") or die ("Kann keine Verbindung zum Server");
("cannot select DB"); mysql_select_db ("$ db_name") or die ("kann nicht auswählen, DB");
/ / Jetzt greifen alle Bands aus der Datenbank
$ Query = "SELECT * FROM allBands"
Bands $ = mysql_query ($ query) or die ("Config Error 2222b");
$ UserRows = mysql_num_rows ($ Bands);
/ / Jetzt können eine Verbindung zu dem SMF db
$ Host = "smfhost"; / / Host-Namen
$ Username = "smfuser; / / MySQL-Benutzernamen
Mypassword $ = "smfpassword"; / / MySQL-Passwort
$ Db_name = "smfdatabase" / / Name der Datenbank
("cannot connect to server"); mysql_connect ("$ host", "$ username", "$ mypassword") or die ("Kann keine Verbindung zum Server");
("cannot select DB"); mysql_select_db ("$ db_name") or die ("kann nicht auswählen, DB");
/ / $ Vaild_chars wird Benutzernamen werden das Array der zulässigen Zeichen für. Ich beschloss, dass nur Buchstaben und Zahlen. Es gibt noch andere Zeichen, Zahlen und genutzt werden könnte, dass wäre kein Problem, aber für Stil Gründen habe ich beschlossen zu gehen Briefe mit nur
Valid_chars $ = "ABCDEFGHIJKLMNOPQRSTU VWXYZ 0 1 2 3 4 5 6 7 8 9";
$ Valid_chars = explode ("", $ valid_chars);
/ / Jetzt müssen wir eine Schleife über jedes Band
){ for ($ i = 0; $ i <$ userRows; $ i + +) (
($bands)){ if ($ row = mysql_fetch_assoc ($ Bands)) (
/ / Extrahieren der Band Informationen
extract ($ row);
/ / Erstelle ein Passwort für die Band
$ RealPassword createRandomPassword = ();
/ / Ich meine es wählen zu echo der Bandname und das Kennwort als Teil der Fehlersuche und damit ich sehen kann, wie die Funktion arbeitet
echo ("$ <br/> Bandnamen - $ realPassword");
NewBand $ = "";
/ / Für jeden Brief, in dem Bandnamen valid_chars wir gehen, um zu sehen, ob es gültig Spiele ein Zeichen aus $. Es es nicht werden wir sie loswerden, und verkürzen den Bandnamen
($bandName); $j ++ ){ for ($ j = 0; $ j <strlen ($ Bandnamen); $ j + +) (
($band[$j])); $ Temp = str_replace ($ valid_chars, "X", ($ Band [strtolower $ j]));
if ($ temp == "X")
$ $ = NewBand newBand. $ Band [$ j];
)
/ / Ich schließe mich den neuen Namen für den gleichen Grund, warum ich echo den alten Namen und Passwort
echo ("- $ newBand");
/ / Wir haben den neuen Band-Namen .... Jetzt geht's los buliding die Info brauchen wir zum Einfügen in die DB ...
$ $ = MemberName newBand;
$ $ = RealName newBand; / / ich den richtigen Namen und den gleichen Namen Mitglied. Die Bands können es ändern, wenn sie wollen
$ $ = EmailAddress bandEmail;
$ $ = WebsiteUrl bandWebsite; / / Seit ich die Bands "könnte genauso gut Websites eingeben
$ $ = WebsiteTitle newBand;
Is_activated $ = 1;
ID_POST_GROUP $ = 4;
($memberName).$realPassword); //Password must be encrypted $ Password = sha1 (strtolower ($ MemberName). RealPassword $); / / Das Passwort muss verschlüsselt werden
/ / Stellen Sie sicher, ihre ist kein Mitglied mit dem gleichen Namen in der SMF-Datenbank. Wir wollen nicht versehentlich jemand doppelt
$ Query = "SELECT * FROM WHERE smf_members MemberName = '$ MemberName'";
("Config Error 2222343242b"); $ Result = mysql_query ($ query) or die ("Config Error 2222343242b");
$ Nrows = mysql_num_rows ($ result);
/ / Wenn das Mitglied Name gefunden wird nichts tun,
if ($ nrows> 0) ()
else (
/ / Wenn der Benutzer nicht bereits angemeldet Foren für die, tun Sie dies und senden Sie eine 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" , "$ password ',' $ websiteUrl ',' $ websiteTitle ')";
("Config Error 2232 "); $ Result = mysql_query ($ query) or die ("Config Error 2232");
/ / Jetzt müssen wir die Band senden eine E-Mail
$ Bis = $ emailAddress;
$ Subject = "Ihr Forum Benutzername und Passwort";
/ / Aus
$ Header = "From: <me@mysite.com> Me";
/ / Deine Nachricht
$ Message .= "Ihr Login und Passwort sind unten aufgelistet. Sie können entweder jederzeit ändern. Wenn Sie nicht möchten, dass in unseren Foren teilnehmen, das ist kein Problem. Just nie log in, und es wird nichts sein wie nie passiert. \ r \ n ";
$ Message .= "Username: $ MemberName Passwort: $ realPassword \ r \ n";
/ / E-Mail versenden
$ SentMail = mail ($ to, $ subject, $ message, $ header);
if ($ SentMail)
echo ("- JA!");
/ / Dies ist der letzte Teil unserer Echo. Die "-JA!" wird nur dann gesendet werden gedruckt, wenn eine E-Mail ist. Also eine volle Ausdruck dieser Zeile wird in etwa so aussehen:
/ / Adam Strife - 4s6vsxag - AdamStrife - JA!
)
)
)