Questo tutorial presume che abbiano familiarità con il mio post: Come Inserire un manuale utente in un forum SMF Utilizzo di PHP.
Recentemente ho affrontato la sfida di 800 o si spostano in modo bande da un database in un forum di SMF. Ho affrontato un paio di problemi al momento di formulare la mossa che non ho coprire nel primo post:
- La band nomi non sono stati garantiti per essere sicuri di carattere per carattere trasferirsi nella banca dati SMF. Quindi, una sorta di funzione di modificare il nome doveva essere impiegato.
- Le bande non hanno password. Così qualche tipo di generazione di password deve essere impiegato.
I passi sono andato a registrare su tutte le bande nel forum è andato un po 'come questo:
Aprire il database di banda
per ogni (Band) (
Genera password
Rinomina Band con "sicuro" nome
Afferrare e generare le informazioni necessarie per inserire l'utente
Inserisci Band in smf_members
Band Invia una e-mail con la password
)
Ho avuto informazioni disponibili presso la banda database che è stato utile inclusi: bandName, bandEmail, e bandWebsite
Ecco la generazione di password la funzione che ho usato (blatently prese da totallyphp.co.uk):
createRandomPassword funzione () (
$ caratteri = "abcdefghijkmnopqrstuvwxyz023456789";
() * 1000000); srand ((doppio) microtime () * 1000000);
$ i = 0;
$ pass = ";
while ($ i <= 7) (
33; $ num = rand ()% 33;
$ tmp = substr ($ caratteri, $ num, 1);
$ $ pass = pass. $ tmp;
$ i + +;
)
return $ pass;
)
La password creato qui è relativamente debole, ma è stato abbastanza buono per i miei scopi. Qualsiasi password generazione funzione sarebbe bene lavorare qui. Ho scelto questo perché sarebbe facile per i membri di ricordare se hanno scelto di non modificare.
Come per farlo:
/ / In primo luogo la connessione a banda banca dati
$ username = "bandUsername";
$ host = "bandHost";
miapassword $ = "bandPassword";
$ db_name = "bandDatabase";
("cannot connect to server"); mysql_connect ( "$ host", "$ username", "$ miapassword") or die ( "non può connettersi al server");
("cannot select DB"); mysql_select_db ( "$ db_name") or die ( "non può selezionare DB");
/ / Ora afferrare tutte le bande dal database
$ query = "SELECT * FROM allBands";
$ bande = mysql_query ($ query) or die ( "2222b Config" Errore ");
userRows $ = mysql_num_rows ($ bande);
/ / Ora consente di connettersi al db SMF
$ host = "smfhost"; / / Nome host
$ username = "smfuser; / / MySQL nome utente
miapassword $ = "smfpassword"; / / MySQL password
$ db_name = "smfdatabase"; / / nome del database
("cannot connect to server"); mysql_connect ( "$ host", "$ username", "$ miapassword") or die ( "non può connettersi al server");
("cannot select DB"); mysql_select_db ( "$ db_name") or die ( "non può selezionare DB");
/ / $ vaild_chars sarà l'array di caratteri consentiti per i nomi utente. Ho deciso di consentire solo lettere e numeri. Ci sono altri personaggi che potrebbero essere utilizzati, che non causa un problema, ma per ragioni di stile ho deciso di andare con solo lettere e numeri
valid_chars $ = "abcdefghijklmnopqrstu VWXYZ 0 1 2 3 4 5 6 7 8 9";
= $ valid_chars esplodere ( "", $ valid_chars);
/ / Ora abbiamo bisogno di "loop through ciascuna banda
){ for ($ i = 0; $ i <$ userRows; $ i + +) (
($bands)){ if ($ row = mysql_fetch_assoc ($ bande)) (
/ / Estrarre la banda informazioni
estratto ($ riga);
/ / Crea una password per la banda
realPassword $ = createRandomPassword ();
/ / I per scegliere l'eco bandname e la password come parte del mio e il debug in modo che io possa vedere la funzione come funziona
echo ( "<br/> bandName $ - $ realPassword");
newBand $ = "";
/ / Per ogni lettera nella banda nome daremo un'occhiata per vedere se corrisponde a un carattere valido a partire da $ valid_chars. Essa non abbiamo intenzione di sbarazzarsi di essa e troncare il nome di banda
($bandName); $j ++ ){ for ($ j = 0; $ j <strlen ($ bandName); $ j + +) (
($band[$j])); $ temp = str_replace ($ valid_chars, "X", strtolower ($ banda [$ j]));
if ($ temp == "X")
newBand $ = $ newBand. banda $ [$ j];
)
/ / I eco il nuovo nome per lo stesso motivo mi associo il vecchio nome e la password
echo ( "- $ newBand");
/ / Abbiamo il nuovo nome ... Band. ora diamo inizio buliding le informazioni abbiamo bisogno di inserire nel db ...
$ = $ MEMBERNAME newBand;
$ = $ realname newBand; / / I impostare il vero nome e il nome del membro stesso. Le bande può cambiare se si vogliono
$ = $ EMAILADDRESS bandEmail;
websiteUrl $ = $ bandWebsite; / / Dato che ho l'bande di 'siti web potrebbe anche entrare li
websiteTitle $ = $ newBand;
is_activated = $ 1;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ password = sha1 (strtolower ($ MEMBERNAME). realPassword $); / / La password deve essere codificato
/ / Assicurarsi che il loro non è un membro con lo stesso nome nel database di SMF. Noi non vogliamo entrare chiunque accidentalmente due volte
$ query = "SELECT * FROM smf_members DOVE MEMBERNAME = '$ MEMBERNAME'";
("Config Error 2222343242b"); $ risultato = mysql_query ($ query) or die ( "Errore di configurazione 2222343242b");
nRows $ = mysql_num_rows ($ result);
/ / Se il nome utente non si trova nulla
if ($ nRows> 0) ()
else (
/ / Se l'utente non è già firmato per il forum, e farlo inviare una 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 "); $ risultato = mysql_query ($ query) or die ( "Errore di configurazione 2232");
/ / Ora abbiamo bisogno di inviare la band una e-mail
$ a = $ EMAILADDRESS;
$ subject = "Il tuo forum di nome utente e la password";
/ / Da
$ header = "a partire da: Me <me@mysite.com>";
/ / Il tuo messaggio
$ messaggio .= "Il tuo nome utente e la password sono elencati di seguito. È possibile modificare o in qualsiasi momento. Se non si desidera partecipare al nostro forum, che il problema non. Nuovi mai accedere e sarà come mai accaduto nulla . \ r \ n ";
$ messaggio .= "Username: Password MEMBERNAME $: $ realPassword \ r \ n";
/ / Inviare e-mail
= $ sentmail mail ($ a, $ oggetto, $ messaggio, $ header);
if ($ sentmail)
echo ( "- Sì!");
/ / Questa è l'ultima parte del nostro eco. Il "Sì!" sarà solo se stampato un messaggio di posta elettronica viene inviato. Dunque, una linea completa stampa avrà un aspetto simile a questo:
/ / Adam Strife - 4s6vsxag - AdamStrife - SI!
)
)
)