Archivio per il mese di luglio, 2008

Come inserire manualmente un gruppo di utenti in un forum SMF Utilizzo di PHP

Posted in SMF (Simple Machine Forum), php da ShortLikeAFox luglio 30th, 2008

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:

  1. 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.
  2. 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 nel 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!

)

)
)

Permalink | Commenti

Come inserire manualmente un utente in un forum SMF Utilizzo di PHP

Posted in SMF (Simple Machine Forum), php da ShortLikeAFox In data 28 luglio 2008

Questo esempio è specifico per SMF 1.1.5. Non posso garantire che funziona con qualsiasi altra versione.

Quindi si esegue Simple Machine Forum Software e desidera immettere manualmente un utente? Nessun problema. So che questo problema sembra molto specifici, ma le idee spiegato qui può essere adattato ad altri tipi di forum e altri database pacchetti software come Wordpress. Prima di entrare esattamente come effettuare questa operazione, diamo un'occhiata a come semplice macchina Forum tiene traccia degli utenti. Nel SMF banca dati vi è una tabella chiamata smf_members. Smf_members La struttura assomiglia a questo:

Campo Tipo + + digitare Null

Chiave Predefinito Extra
ID_MEMBER mediumint (8) unsigned N PRI NULL AUTO_INCREMENT
MEMBERNAME varchar (80) N MUL
dateRegistered int (10) unsigned N MUL 0
posti mediumint (8) unsigned N MUL 0
ID_GROUP smallint (5) unsigned N MUL 0
lngfile tinytext N MUL
lastLogin int (10) unsigned N MUL 0
realname tinytext N
istantanei smallint (5) N 0
unreadMessages smallint (5) N 0
buddy_list testo N
pm_ignore_list testo N
messageLabels testo N
passwd varchar (64) N
EMAILADDRESS tinytext N
personalText tinytext N
genere tinyint (4) unsigned N 0
data di nascita data N MUL 0001-01-01
websiteTitle tinytext N
websiteUrl tinytext N
località tinytext N
ICQ tinytext N
AIM varchar (16) N
YIM varchar (32) N
MSN tinytext N
hideEmail tinyint (4) N 0
showOnline tinyint (4) N 1
timeFormat varchar (80) N
firma testo N
timeOffset galleggiante N 0
Avatar tinytext N
pm_email_notify tinyint (4) N 0
karmaBad smallint (5) unsigned N 0
karmaGood smallint (5) unsigned N 0
usertitle tinytext N
notifyAnnouncements tinyint (4) N 1
notifyOnce tinyint (4) N 1
notifySendBody tinyint (4) N 0
notifyTypes tinyint (4) N 2
memberIP tinytext N
memberIP2 tinytext N
secretQuestion tinytext N
secretAnswer varchar (64) N
ID_THEME tinyint (4) unsigned N 0
is_activated tinyint (3) unsigned N 1
validation_code varchar (10) N
ID_MSG_LAST_VISIT int (10) unsigned N 0
additionalGroups tinytext N
smileySet varchar (48) N
ID_POST_GROUP smallint (5) unsigned N MUL 0
totalTimeLoggedIn int (10) unsigned N 0
passwordSalt varchar (5) N

Settori abbiamo bisogno di prestare attenzione a:

  • MEMBERNAME - Auto Explanitory.
  • dateRegistered - non è necessario, ma se non compilato la data registrata mostra come 31o dicembre 1969. La data viene salvato come un'epoca timestamp. Non so come calcolare i timestamp nella tua testa? Nessun problema. Io uso la libera generatore trovare qui.
  • realname - deve essere inserito. Quando non sono sicuro ho appena MEMBERNAME ripetere qui.
  • EMAILADDRESS - Auto Explanitory.
  • is_activated - Deve essere impostato su 1 in quanto siamo manualmente l'attivazione di un membro.
  • ID_POST_GROUP - Non mi mentire. Non sono sicuro di che cosa si tratta, eppure sembra essere fissato a 4. Allora .... Ho semper impostato a 4. Non è il modo migliore per programma, ma quello che puoi fare?
  • passwd - La password che si desidera dare al nuovo utente. E 'impossibile capire come entrare senza guardare la documentazione SMF. Il codice per cifrare un SMF password per il database simile al seguente:

($memberName).$password) passwd = $ sha1 (strtolower ($ MEMBERNAME). $ password)

Nell'esempio precedente riga di codice, $ password è l'utente effettivo della password.

Come per farlo:

/ / In primo luogo, stabilire la connessione al database di SMF

$ host = "hostname"; / / Nome host
$ username = "nome utente"; / / MySQL nome utente
miapassword $ = "password"; / / MySQL password
$ db_name = "nome utente"; / / 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");

MEMBERNAME $ = "IronMan";
$ realname = "Tony Stark";
EMAILADDRESS $ = "ironMan@ironMan.com";
is_activated = $ 1;
$ ID_POST_GROUP = 4;

$ password = "Tony1234";

($memberName).$password); $ password = sha1 (strtolower ($ MEMBERNAME). $ password);

dateRegistered $ = 1216951200; / / 7.25.2008 2 AM

$ query = "INSERT INTO smf_members (MEMBERNAME, realname, EMAILADDRESS, is_activated, ID_POST_GROUP, passwd, dateRegistered) VALUES ( '$ MEMBERNAME', '$ realname', '$ EMAILADDRESS', '$ is_activated', '$ ID_POST_GROUP', ' $ password ',' $ dateRegistered ') ";
("SMF Error 101.234 "); $ risultato = mysql_query ($ query) or die ( "Errore SMF 101.234");

Questo è tutto quello che ad essa!

Permalink | Commenti

Come rendere le immagini in miniatura utilizzando PHP

Posted in funzioni, php da ShortLikeAFox il 22 luglio, 2008

Così si desidera creare una miniatura a partire da una data immagine ... PHP rende questo compito facile. Mi ha scritto la prima funzione qui sotto per trattare con le immagini caricate dagli utenti in un sito aiutare amministrare. Immagini caricate a questo sito possono essere i file JPEG, PNG, o GIF, così ho dovuto scrivere una funzione per far fronte a tutti e tre. Questo codice è basato, in origine, al largo di una funzione disponibile sul sito webcheatsheet.com

Come per farlo:

funzione createThumbs ($ pathToImages, $ fname, $ pathToThumbs, $ thumbWidth)
(

/ / Percorso per analizzare l'estensione

$ info = pathinfo ($ pathToImages. $ fname);
/ / Continuare solo se si tratta di una immagine JPEG
($info['extension']) == ‘jpeg’) ) if ((strtolower ($ info [ 'estensione']) == 'jpg') | | (strtolower ($ info [ 'estensione']) == 'jpeg'))
(

/ / Caricare l'immagine e ottenere le dimensioni delle immagini
img = $ imagecreatefromjpeg ( "($ pathToImages) () $ fname");
$ width = imagesx ($ img);
$ height = imagesy ($ img);

/ / Calcolare le dimensioni miniatura
new_width $ = $ thumbWidth;
new_height $ = piano ($ altezza * (thumbWidth $ / $ larghezza));

/ / Creare una nuova immagine temporaneo
tmp_img $ = imagecreatetruecolor ($ new_width, $ new_height);

/ / Copiare e ridimensionare vecchia immagine in nuova immagine
imagecopyresized ($ tmp_img, $ img, 0, 0, 0, 0, $ new_width, new_height $, $ larghezza, $ altezza);

/ / Salviamo la miniatura in un file
imagejpeg ($ tmp_img, "pathToThumbs $ () () $ fname");

)

if (strtolower ($ info [ 'estensione']) == 'gif')
(

/ / Caricare l'immagine e ottenere le dimensioni delle immagini
img = $ imagecreatefromgif ( "($ pathToImages) () $ fname");
$ width = imagesx ($ img);
$ height = imagesy ($ img);

/ / Calcolare le dimensioni miniatura
new_width $ = $ thumbWidth;
new_height $ = piano ($ altezza * (thumbWidth $ / $ larghezza));

/ / Creare una nuova immagine temporaneo
tmp_img $ = imagecreatetruecolor ($ new_width, $ new_height);

/ / Copiare e ridimensionare vecchia immagine in nuova immagine
imagecopyresized ($ tmp_img, $ img, 0, 0, 0, 0, $ new_width, new_height $, $ larghezza, $ altezza);

/ / Salviamo la miniatura in un file
imagegif ($ tmp_img, "pathToThumbs $ () () $ fname");

)

if (strtolower ($ info [ 'estensione']) == 'png')
(

/ / Caricare l'immagine e ottenere le dimensioni delle immagini
img = $ imagecreatefrompng ( "($ pathToImages) () $ fname");
$ width = imagesx ($ img);
$ height = imagesy ($ img);

/ / Calcolare le dimensioni miniatura
new_width $ = $ thumbWidth;
new_height $ = piano ($ altezza * (thumbWidth $ / $ larghezza));

/ / Creare una nuova immagine temporaneo
tmp_img $ = imagecreatetruecolor ($ new_width, $ new_height);

/ / Copiare e ridimensionare vecchia immagine in nuova immagine
imagecopyresized ($ tmp_img, $ img, 0, 0, 0, 0, $ new_width, new_height $, $ larghezza, $ altezza);

/ / Salviamo la miniatura in un file
imagepng ($ tmp_img, "pathToThumbs $ () () $ fname");

)

)

Come funziona

La funzione createThumbs prende quattro argomenti.

  • $ pathToImages -> Il percorso della cartella il file immagine è poll Si potrebbe apparire qualcosa di simile a questo: / home / content / nomeutente / html / list / upload /
  • $ fname -> Il nome del file: pic1.gif, johnny.jpg, ecc ...
  • $ pathToThumbs -> Il percorso della cartella che si desidera l'immagine in miniatura per essere poll non vuoi che questo sia lo stesso percorso come $ pathToImages, perché l'immagine in miniatura avrà lo stesso nome come l'immagine originale.
  • $ thumbWidth -> La larghezza che si desidera l'unghia del pollice per essere in pixel.

Una nota importante che vorrei fare è che questa funzione non ha nulla in atto, diversi da quelli l'estensione del file controllo, per assicurarsi che il file di immagine contengono nulla "maligno". Poiché il file createThumbs () con le opere sono già stati caricati si presume che i file sono stati adeguatamente analizzati.

La prima cosa createThumbs () non è chiamata pathinfo (). pathinfo () rompe le parti di un cammino in un array. Questo è utile per noi, perché abbiamo bisogno l'estensione del file per creare propriamente la miniatura. Avanti createThumbs () controlla per vedere se si tratta di un formato jpeg. Se il file originale è un jpeg createThumbs crea una nuova immagine basata su l'immagine originale con imagecreatefromjpeg (). Il passo successivo è quello di ottenere la larghezza e l'altezza di questa immagine (imagesx (), imagesy ()). Uso $ thumbWidth e il rapporto tra l'originale larghezza e l'altezza createThumbs () definisce la nuova larghezza e l'altezza della miniatura. L'utilizzo di questi nuovi rapporti createThumbs () crea un "vuoto" di immagine che sarà la stessa larghezza e l'altezza della miniatura con imagecreatetruecolor (). Imagecopyresized () è usato per ridimensionare l'immagine e salvarla in "bianco" appena creata. imagecopyresized () può sembrare che richiede un sacco di parametri, ma se si dà un'occhiata alla documentazione ed è davvero complicato che non. Ora che la miniatura esiste come una vera e propria immagine a colori tutte le createThumbs deve fare è convertire il file in un formato jpeg. Per effettuare questa operazione imagejpeg () è chiamato.

Ecco come funziona la funzione per i file JPEG. Ci sono differenze per minimo. E PNG. Gif.

Permalink | Commenti

Come scrivere codice specifico per browser con PHP

Posted in php da ShortLikeAFox Il 21 luglio 2008

Così si desidera scrivere il codice che appare solo su alcuni browser ... Ci sono un certo numero di ragioni per voler fare questo. La prima volta che ho personalmente necessarie a tale scopo si è verificato quando stava cercando di incorporare un mp3 su una certa pagina. Per qualche motivo non ho potuto scrivere il codice in modo che l'mp3 che gioca sul browser I test su (IE, Firefox e Opera), e convalidare allo stesso tempo. Se non ricordo male, è stato di Internet Explorer che è stata la causa del problema. La soluzione mi si avvicinò con era quello di utilizzare un po 'di PHP per scoprire quando l'utente è stato utilizzando IE, e poi incorporare in mp3 non valida se il codice che è stato il caso.

Questa soluzione ha portato alla riproduzione di MP3 semper correttamente e che la pagina semper convalida, perché il W3C validator non si identifica come IE. Questo potrebbe non essere il modo più etico per raggiungere la conformità del W3C, ma funziona.

Un'altra volta mi ricordo il bisogno di scrivere codice specifico del browser è quando mi è stato avere un problema con IE 6 non visualizza il mio. Correttamente le immagini PNG. I googled intorno e trovato un paio di soluzioni al problema, ma ciascuno di essi ha finito per fare l'intero strato posizioni sulle mie pagine. Invece di risoluzione dei problemi che il problema, mi sono recato con la soluzione rapida e ha deciso di visualizzazione. Gifs quando l'utente aveva IE 6. Se l'utente ha un altro browser che avevano. Png problemi che ho figurato che è stato troppo male per lui.

Come per farlo:

Per prima cosa è necessario scrivere una piccola riga di codice per capire che cosa il vostro browser utente ha. Ecco come fare con PHP:

  • 'HTTP_USER_AGENT' ]; visitorsOS $ = $ _SERVER [ 'HTTP_USER_AGENT'];

Ecco tre esempi di ciò che $ visitorsOS può apparire come

  • Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;. NET CLR 1.0.3705;. NET
  • Opera/9.51 (Windows NT 5.1; U; pl)
  • Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv: 1.9) Gecko/2008052906 Firefox

Il primo utente ha Internet Explorer 6, il secondo Opera 9.51, e la terza di Firefox.

Ora che sappiamo più informazioni rispetto a quelle cui abbiamo veramente bisogno su computer del visitatore abbiamo bisogno di mettere tali informazioni a buon uso. Dire che si desidera scrivere il codice che viene visualizzato solo se l'utente è in esecuzione una qualsiasi versione di Internet Explorer. In questo caso si potrebbe fare così:

(’MSIE’,$visitorsOS)){ if (eregi ( 'MSIE', $ visitorsOS)) (

Codice che viene visualizzato solo se l'utente ha IE

)

else (

Codice che verrà visualizzato in tutti gli altri casi

)

Io uso eregi, uno tra maiuscole e minuscole espressione regolare partita invece di ereg, una distinzione tra maiuscole e minuscole espressione regolare corrispondenza. Non mi ricordo se lo faccio di paranoia, o se effettivamente ho trovato un caso in cui Internet Explorer identificato come MSIE. In entrambi i casi non eregi ferito in modo che nulla è ciò che io utilizzo. Voler scrivere il codice per specifiche versioni di IE che richiedono solo un piccolo cambiamento. invece di ... (eregi ( 'MSIE' ...) Vorrei usare qualcosa di simile (eregi ( 'MSIE 6,0' ...) se volevo solo codice che compare per MSIE 6.0.

Permalink | Commenti