Dieses Tutorial setzt voraus, dass Sie sich mit meinem Beitrag: Wie, manuell einen User in eine SMF Forum PHP.
Ich war vor kurzem vor der Herausforderung der bewegenden 800 oder so Bands aus einer Datenbank in eine SMF-Forum. Ich hatte ein paar Probleme bei der Bewegung, dass ich nicht die in den ersten Post
- Die Band-Namen wurden nicht garantiert werden, sicher zu sein für ein Zeichen für Zeichen in die SMF-Datenbank. So eine Art der Änderung der Name-Funktion zu werden.
- Die Bänder haben keine Passwörter. So eine Art von Passwort-Generation zu werden.
Die Schritte ging ich über die Registrierung aller von den Bands im Forum ging ein wenig wie folgt aus:
Öffnen Sie die Band-Datenbank
für jede (Band) (
Passwort generieren
Umbenennen Band mit "sicheren" Namen
Grab-und generieren erforderlichen Informationen, um die Benutzer
Legen Sie in Band smf_members
Senden Sie eine E-Mail-Band mit dem Kennwort
)
Informationen, die ich zur Verfügung hatte, aus der Datenbank, die Band war nützlich enthalten: Bandname, bandEmail und bandWebsite
Hier ist die Passwort-Funktion Generation habe ich (blatently aus 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 hier ist relativ schwach, aber es war gut genug für meine Zwecke. Jedes Passwort, Generation Funktion würde funktionieren hier. Ich habe mich für diese, denn es wäre ein Leichtes für die Mitglieder zu merken, wenn sie sich nicht zu ändern.
So geht's:
/ / Erstes eine Verbindung mit dem 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 ( "nicht wählen können, DB");
/ / Nun greifen alle Bands aus der Datenbank
$ query = "SELECT * FROM allBands";
$ Bands = mysql_query ($ query) or die ( "Config Fehler 2222b");
$ userRows = mysql_num_rows ($ Bands);
/ / Jetzt können die Verbindung zum smf db
$ host = "smfhost"; / / Host-Name
$ username = "smfuser; / / MySQL Username
$ mypassword = "smfpassword"; / / MySQL Passwort
$ db_name = "smfdatabase"; / / Name der Datenbank
("cannot connect to server"); mysql_connect ( "$ host", "$ username", "$ mypassword) oder die (" kann keine Verbindung zum Server ");
("cannot select DB"); mysql_select_db ( "$ db_name") or die ( "nicht wählen können, DB");
/ / $ vaild_chars wird das Array der erlaubten Zeichen für Benutzernamen. Ich habe mich entschieden, nur Buchstaben und Zahlen enthalten. Es gibt auch andere Zeichen, die genutzt werden könnten, die nicht zu einem Problem führen, sondern auch für Stil Gründe, warum ich beschlossen, nur mit Buchstaben und Zahlen
$ valid_chars = "ABCDEFGHIJKLMNOPQRSTU VWXYZ 0 1 2 3 4 5 6 7 8 9";
$ valid_chars = explode ( "", $ valid_chars);
/ / Jetzt müssen wir Schleife durch jedes Band
){ for ($ i = 0; $ i <$ userRows; $ i + +) (
($bands)){ if ($ row = mysql_fetch_assoc ($ Bands)) (
/ / Extrahieren der Band Informationen
extract ($ row);
/ / Erstellen Sie ein Passwort für die Band
$ realPassword = createRandomPassword ();
/ / Habe ich mich für den Echo der Bandname und das Kennwort als Teil meiner Debugging und so sehe ich das so funktionieren, wie es funktioniert
echo ( "<br/> Bandname $ - $ realPassword");
$ newBand = "";
/ / Für jeden Buchstaben im Namen der Band werden wir sehen, wenn sie mit einem gültigen Zeichen aus valid_chars $. Es es nicht werden wir los, und die Band truncate Namen
($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];
)
/ / Echo ich den neuen Namen für den gleichen Grund, warum ich echo den alten Namen und Passwort
echo ( "- $ newBand");
/ / Wir haben die neuen Band-Namen .... jetzt geht's los Gebäude die Info brauchen wir, um in der DB ...
$ Name = $ newBand;
$ realname = $ newBand; / / Ich habe die richtigen Namen und den gleichen Namen Mitglied. Die Bänder können, wenn sie wollen
$ E-Mail-Adresse = $ bandEmail;
$ websiteUrl = $ bandWebsite; / / Da ich die Bands "Websites kann auch sein, daß Sie diese
$ websiteTitle = $ newBand;
$ is_activated = 1;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ password = sha1 (strtolower ($ Name). $ realPassword); / / Das Passwort muss verschlüsselt
/ / Stellen Sie sicher, dass ihr kein Mitglied mit dem gleichen Namen in der Datenbank SMF. Wir wollen nicht versehentlich zweimal in jeder
$ query = "SELECT * FROM smf_members WHERE Name = '$ Name'";
("Config Error 2222343242b"); $ result = mysql_query ($ query) or die ( "Config 2222343242b Fehler");
$ nrows = mysql_num_rows ($ result);
/ / Wenn das Mitglied ist nichts gefunden
if ($ nrows> 0) ()
else (
/ / Wenn der Benutzer nicht bereits für das Forum, tun Sie dies und senden Sie eine E-Mail ....
$ query = "INSERT INTO smf_members (Name, realname, E-Mail-Adresse, is_activated, ID_POST_GROUP, passwd, websiteUrl, websiteTitle) VALUES ( '$ Name', '$ realname', '$ E-Mail-Adresse', '$ is_activated', '$ ID_POST_GROUP" , '$ password', '$ websiteUrl', '$ websiteTitle') ";
("Config Error 2232 "); $ result = mysql_query ($ query) or die ( "Config Fehler 2232");
/ / Jetzt brauchen wir, um die Band eine E-Mail
$ to = $ E-Mail-Adresse;
$ subject = "Ihr Benutzername und Kennwort-Forum";
/ / Von
$ header = "From: Me <me@mysite.com>";
/ / Ihre Nachricht
$ message .= "Ihr Login und Passwort sind unten aufgeführt. Sie können entweder jederzeit ändern. Wenn Sie nicht möchten, dass die Teilnahme an unserem Forum, das ist kein Problem. Melden Sie sich einfach nie, und es wird wie immer nichts passiert ist . \ r \ n ";
$ message .= "Benutzername: Passwort $ Name: $ realPassword \ r \ n";
/ / Senden von E-Mails
$ sentmail = mail ($ to, $ subject, $ message, $ header);
if ($ sentmail)
echo ( "- JA!");
/ / Dies ist der letzte Teil unserer echo. Die "JA!" wird nur dann gedruckt, wenn eine E-Mail gesendet wird. So ein Ausdruck Zeile wird in etwa so aussehen:
/ / Adam Strife - 4s6vsxag - AdamStrife - JA!
)
)
)