Este tutorial presume que estea familiarizado cos meus post: Como inserir a man a un usuario do foro SMF Utilizando PHP .
Recentemente, enfrontouse ao reto de pasar de 800 ou así que as bandas a partir dun banco de datos nun foro SMF. Enfrontar algúns problemas ó facer o movemento que eu non cobre no primeiro post:
- Os nomes de banda non estaba garantido para ser seguro a un personaxe por personaxe moverse na base de datos SMF. Entón, algún tipo de nome que se modifica a función debería ser empregada.
- As bandas non teñen claves. Entón, algún tipo de xeración de contrasinal debe ser utilizada.
As etapas que eu fun para rexistrar todas as bandas do foro foi un pouco así:
Abre o banco de datos Band
para cada (Band) (
Xerar Contrasinal
Renomear Band co "nome" seguro
Agarre e xerar información necesaria para introducir o usuario
Insire Band en smf_members
Banda Enviar un correo-e con o contrasinal
)
Información que eu tiña dispoñible a partir da base de datos de banda que foi útil inclúen: bandName, bandEmail e bandWebsite
Aquí está a función de xeración de contrasinal que eu usei (blatently eliminado totallyphp.co.uk ):
createRandomPassword función () (
$ Chars = "abcdefghijkmnopqrstuvwxyz023456789";
() * 1000000); srand ((double) microtime () * 1000000);
$ I = 0;
$ Pass = ";
while ($ i <= 7) (
33; Nun = rand $ () 33%;
$ Tmp = substr ($ caracteres, $ nun, 1);
$ Pass = $ pass. $ Tmp;
$ I + +;
)
return $ pass;
)
O contrasinal creada aquí é relativamente débil, pero foi bo o suficiente para os meus propósitos. Calquera función de xeración de contrasinal funcionaría moi ben aquí. Eu escollín este porque sería máis doado para que os membros lembrar no caso de que optaron por non cambiar.
Como facer:
/ / Primeiro, ligue para a base de datos de banda
username = $ bandUsername ";
$ Host = bandHost ";
mypassword bandPassword $ = "";
db_name bandDatabase $ = "";
("cannot connect to server"); mysql_connect ("$ host", $ nome de usuario "," $ minhasenha ") or die (" Non se pode conectar ao servidor ");
("cannot select DB"); mysql_select_db ("$ db_name") or die ("Non se pode seleccionar a DB");
/ / Agora, colle todas as bandas do banco de datos
$ Query = "SELECT * FROM allBands";
mysql_query bandas $ = ($ query) or die ("Erro de configuración 2222b);
$ UserRows = mysql_num_rows ($ pistas);
/ / Agora imos conectar ao SMF db
$ Host = smfhost "/ / nome do host
username = $ smfuser "; / username MySQL
mypassword smfpassword $ = "" / / contrasinal MySQL
db_name smfdatabase $ = "" / / nome da base de datos
("cannot connect to server"); mysql_connect ("$ host", $ nome de usuario "," $ minhasenha ") or die (" Non se pode conectar ao servidor ");
("cannot select DB"); mysql_select_db ("$ db_name") or die ("Non se pode seleccionar a DB");
/ / $ Vaild_chars vai ser a matriz de caracteres permitidos para nomes de usuario. Decidir só permiten letras e números. Hai outros personaxes que poderían ser empregados que non ía causar un problema, pero por razóns de estilo, eu decidimos ir con só letras e números
valid_chars $ = vwxyz "abcdefghijklmnopqrstu 0 1 2 3 4 5 6 7 8 9";
valid_chars $ = explode ("", $ valid_chars);
/ / Agora necesitamos para facer un loop través de cada banda
){ for ($ i = 0; $ i <$ userRows; $ i + +) (
($bands)){ if ($ row = mysql_fetch_assoc ($ pistas)) (
/ / Extraer franxa de información
Extract ($ row);
/ / Crear un contrasinal para a banda
realPassword $ = createRandomPassword ();
/ / Eu escolla o eco bandname e contrasinal como parte do meu depuración e para que eu poida ver a funcionar como funciona
echo ("<br/> bandName - realPassword $ $");
NewBand $ = "";
/ / Para cada letra do nome da banda, imos mirar para ver se corresponde a un carácter válido de R $ valid_chars. É que non estamos indo a librar-se del e truncar o nome da banda
($bandName); $j ++ ){ for ($ j = 0; $ j <strlen ($ bandName); $ j + +) (
($band[$j])); tempo $ = str_replace ($ valid_chars, "X", strtolower ($ banda [$ j]));
if ($ tempo == "X")
banda newBand newBand $ = $. [$ j];
)
/ / I echo o novo nome para a mesma razón que eu echo o antigo nome e contrasinal
echo ("- $ newBand");
/ / Temos o novo nome da banda .... Agora imos comezar buliding a información que necesitamos inserir no db ...
memberName = $ newBand;
realname = $ newBand / / eu definir o nome real eo nome do membro da mesma. As bandas poden muda-lo se queiran
emailAddress = $ bandEmail;
WebSiteUrl = $ bandWebsite / / Dende que eu teño bandas sitios do ben poderían inserir-los
websiteTitle = $ newBand;
$ Is_activated = 1;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ Contrasinal = sha1 (strtolower ($ memberName). RealPassword $) / / O contrasinal debe ser criptografada
/ / Asegúrese de que o seu non é un membro co mesmo nome na base de datos SMF. Non queremos que ninguén entra accidentalmente dúas veces
$ Query = "SELECT * FROM Where smf_members memberName = '$ memberName;
("Config Error 2222343242b"); $ Resultado = mysql_query ($ query) or die ("Erro de configuración 2222343242b");
nrows $ = mysql_num_rows ($ resultado);
/ / Se o nome do membro está nada
if ($ nrows> 0) ()
else (
/ / Se o usuario non está xa rexistrarte para os foros, facer e enviar un correo ....
$ Query = "insert into smf_members (memberName, realname, emailAddress, is_activated, ID_POST_GROUP, passwd, WebSiteUrl, websiteTitle) value ('$ memberName', '$ realname', '$ emailAddress', '$ is_activated', '$ ID_POST_GROUP' , '$ contrasinal', '$ WebSiteUrl', '$ websiteTitle') ";
("Config Error 2232 "); $ Resulta = mysql_query ($ query) or die ("Erro de configuración 2232");
/ / Agora debemos enviar un correo-e da banda
$ To = $ emailAddress;
$ Asunto = "O seu nome de usuario e contrasinal foro";
/ / De
$ Header = "From:" Me <me@mysite.com> ";
/ / A túa mensaxe
$ Mensaxe .= "O seu login e contrasinal están listadas abaixo. Pode cambiar ou en calquera momento. Se non queres participar nos nosos foros, iso non é problema. Just nunca log in e será como se nada tivese acontecido. \ r \ n ";
Contrasinal $ mensaxe .= "Nome: $ memberName: $ realPassword \ r \ n";
/ / Enviar correo-e
Conversas = $ e ($ a, $ asunto, $ mensaxe, $ header);
if ($ chats)
echo ("- Si!");
/ / Esta é a última parte do noso eco. O "-Si!" só será impreso un e-mail é enviado. Así, unha completa liña de impresión será coma este:
/ Strife Adam / - 4s6vsxag - AdamStrife - Yes!
)
)
)