Archief voor juli, 2008

How to Manually Plaats een groep gebruikers in een SMF forum gebruiken PHP

Gepost in SMF (Simple Machine Forum), php door ShortLikeAFox op 30 juli, 2008

Deze handleiding wordt ervan uitgegaan dat u bekend bent met mijn post: How to Manually Plaats een gebruiker in een SMF forum gebruiken PHP.

Ik heb onlangs geconfronteerd met de uitdaging van het verplaatsen van 800 of zo bands uit een database in een SMF forum. Ik geconfronteerd met een paar van de problemen bij het maken van de beweging die ik had geen betrekking op in de eerste post:

  1. De band namen waren niet honderd procent veilig zijn voor een teken van karakter verplaatsen in de SMF-database. Dus een soort van naam wijzigen functie moest worden gebruikt.
  2. De bands hebben geen wachtwoorden. Dus een soort van wachtwoord generatie moet worden gebruikt.

De stappen die ik ging over tot registratie van de banden in het forum ging een beetje als volgt uit:

Open de Band Database

voor elke (Band) (

Genereer Wachtwoord

Hernoemen Band met "veilige" naam

Pak en het genereren van informatie die nodig is voor het invoegen van de gebruiker

Plaats Band in smf_members

Band Stuur een e-mail met het wachtwoord

)

Ik had beschikbare informatie uit de database die band was nuttig inbegrepen: bandnaam, bandEmail en bandWebsite

Hier is het wachtwoord generatie functie gebruikte ik (blatently genomen uit totallyphp.co.uk):

functie 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;

)

Het wachtwoord gecreëerd hier is relatief zwak, maar het was goed genoeg voor mijn doeleinden. Elke generatie wachtwoord functie zou werken prima hier. Ik koos voor deze omdat het gemakkelijk zou zijn voor de leden om te onthouden als ze koos niet te veranderen.

Hoe dit te doen:

/ / Eerste verbinding te maken met de band-database
$ username = "bandUsername";
$ host = "bandHost";
$ mijnwachtwoord = "bandPassword";
$ db_name = "bandDatabase";

("cannot connect to server"); mysql_connect ( "$ host", "$ username", "$ mijnwachtwoord") or die ( "kan geen verbinding maken met server");
("cannot select DB"); mysql_select_db ( "$ db_name") or die ( "niet kunt selecteren DB");

/ / Nu grijp alle van de bands uit de database
$ query = "SELECT * FROM allBands";
$ bands = mysql_query ($ query) or die ( "Fout 2222b Config");
$ userRows = mysql_num_rows ($ banden);

/ / Laten we nu eens verbinding te maken met de SMF db
$ host = "smfhost"; / / Host-naam
$ username = "smfuser; / / mysql gebruikersnaam
$ mijnwachtwoord = "smfpassword"; / / Mysql wachtwoord
$ db_name = "smfdatabase"; / / Database naam

("cannot connect to server"); mysql_connect ( "$ host", "$ username", "$ mijnwachtwoord") or die ( "kan geen verbinding maken met server");
("cannot select DB"); mysql_select_db ( "$ db_name") or die ( "niet kunt selecteren DB");

/ / $ vaild_chars zal de array met toegestane tekens voor gebruikersnamen. Ik heb besloten om alleen letters en nummers. Er zijn nog andere tekens die kunnen worden gebruikt die niet zou leiden tot een probleem, maar voor stijl redenen heb ik besloten te gaan met alleen cijfers en letters
$ valid_chars = "ABCDEFGHIJKLMNOPQRSTU VWXYZ 0 1 2 3 4 5 6 7 8 9";
$ valid_chars = explode ( "", $ valid_chars);

/ / Nu moeten we lus via elke band

){ for ($ i = 0; $ i <$ userRows; $ i + +) (

($bands)){ if ($ row = mysql_fetch_assoc ($ bands)) (

/ / Extraheer de band informatie
extract ($ row);
/ / Maak een wachtwoord voor de band
$ realPassword = createRandomPassword ();
/ / Kies ik voor echo van de bandnaam en wachtwoord als onderdeel van mijn debuggen en zo zie ik de functie als het werkt
echo ( "<br/> bandnaam $ - $ realPassword");
$ newBand = "";
/ / Voor elke letter in de band naam we gaan kijken om te zien of deze overeenkomt met een geldig teken van $ valid_chars. Het is niet wij gaan af te raken van het afgeplat en de band naam
($bandName); $j ++ ){ for ($ j = 0; $ j <strlen ($ bandnaam); $ j + +) (

($band[$j])); $ temp = str_replace ($ valid_chars, "X", strtolower ($ band [$ j]));
if ($ temp == "X")

$ newBand = $ newBand. $ band [$ j];

)
/ / I echo de nieuwe naam voor dezelfde reden Ik sluit me aan de oude naam en wachtwoord
echo ( "- $ newBand");
/ / We hebben de nieuwe band naam .... nu laten we beginnen buliding de info we nodig hebben om in de db ...
$ memberName = $ newBand;
realname $ = $ newBand / / ik de echte naam en lidnaam hetzelfde. De banden kunnen veranderen als ze willen
$ emailadres = $ bandEmail;
$ websiteUrl = $ bandWebsite / / Daar heb ik de banden websites kan net zo goed voer ze
$ websiteTitle = $ newBand;
$ is_activated = 1;
$ ID_POST_GROUP = 4;
($memberName).$realPassword); //Password must be encrypted $ password = SHA1 (strtolower ($ memberName). $ realPassword); / / Wachtwoord moeten worden gecodeerd

/ / Zorg ervoor dat hun geen lid met dezelfde naam in de SMF-database. We willen niet per ongeluk iemand voer tweemaal
$ query = "SELECT * FROM smf_members WAAR memberName = '$ memberName'";
("Config Error 2222343242b"); $ result = mysql_query ($ query) or die ( "Config Error 2222343242b");
$ nRows = mysql_num_rows ($ result);

/ / Als het lidnaam is gevonden niets doen
if ($ nRows> 0) ()

else (

/ / Als de gebruiker nog niet is aangemeld voor het forum, doen en stuur een e-mail ....
$ query = "INSERT INTO smf_members (memberName, realname, emailadres, is_activated, ID_POST_GROUP, passwd, websiteUrl, websiteTitle) VALUES ( '$ memberName', '$ realname', '$ emailadres',' $ is_activated ',' $ ID_POST_GROUP ' , '$ wachtwoord', '$ websiteUrl', '$ websiteTitle') ";

("Config Error 2232 "); $ result = mysql_query ($ query) or die ( "Config Error 2232");

/ / Nu hebben we voor het verzenden van de band een e-mail
$ tot = $ emailadres;
$ subject = "Uw gebruikersnaam en wachtwoord forum";

/ / Van
$ header = "from: Me <me@mysite.com>";

/ / Uw bericht
$ bericht .= "Uw gebruikersnaam en wachtwoord staan hieronder vermeld. U kunt op elk moment hetzij. Indien u niet wilt deelnemen aan onze forums, dat is geen probleem. Just nooit in te loggen en het zal zijn als er niets gebeurde . \ r \ n ";
$ bericht .= "Gebruikersnaam: $ memberName Wachtwoord: $ realPassword \ r \ n";

/ / E-mail verzenden
$ verzondenberichten = mail ($ aan, $ onderwerp, $ bericht, $ header);
if ($ verzondenberichten)

echo ( "- JA!");
/ / Dit is het laatste deel van onze echo. De "JA!" zal alleen worden afgedrukt als een e-mail wordt verzonden. Dus een volledige afdruk lijn zal er ongeveer zo uitzien:
/ / Adam strijd - 4s6vsxag - AdamStrife - JA!

)

)
)

How to Manually Plaats een gebruiker in een SMF forum gebruiken PHP

Gepost in SMF (Simple Machine Forum), php door ShortLikeAFox op 28 juli, 2008

Dit specifieke voorbeeld is voor SMF 1.1.5. Ik kan niet garanderen dat het zal werken met een andere versie.

Dus u eenvoudige machine Forum Software en handmatig wilt u een gebruiker? Geen probleem. Ik weet dat dit probleem lijkt zeer specifiek, maar de ideeën die hier kan worden aangepast aan andere soorten fora en andere database driven software pakketten als Wordpress. Voordat we in precies hoe dit te doen, laten we eens kijken hoe eenvoudige machine Forums bijhoudt van de gebruikers. In het SMF-database is er een tabel genaamd smf_members. De smf_members structuur ziet er als volgt uit:

Veld Type Null

Sleutel Standaard Extra
ID_MEMBER mediumint (8) unsigned NEE PRI NULL auto_increment
memberName varchar (80) NEE MUL
dateRegistered int (10) unsigned NEE MUL 0
posten mediumint (8) unsigned NEE MUL 0
ID_GROUP smallint (5) unsigned NEE MUL 0
lngfile tinytext NEE MUL
lastLogin int (10) unsigned NEE MUL 0
realname tinytext NEE
instantMessages smallint (5) NEE 0
unreadMessages smallint (5) NEE 0
buddy_list tekst NEE
pm_ignore_list tekst NEE
messageLabels tekst NEE
passwd varchar (64) NEE
emailadres tinytext NEE
personalText tinytext NEE
geslacht tinyint (4) unsigned NEE 0
geboortedatum datum NEE MUL 0001-01-01
websiteTitle tinytext NEE
websiteUrl tinytext NEE
locatie tinytext NEE
ICQ tinytext NEE
AIM varchar (16) NEE
YIM varchar (32) NEE
MSN tinytext NEE
hideEmail tinyint (4) NEE 0
showOnline tinyint (4) NEE 1
timeFormat varchar (80) NEE
handtekening tekst NEE
timeOffset float NEE 0
avatar tinytext NEE
pm_email_notify tinyint (4) NEE 0
karmaBad smallint (5) unsigned NEE 0
karmaGood smallint (5) unsigned NEE 0
usertitle tinytext NEE
notifyAnnouncements tinyint (4) NEE 1
notifyOnce tinyint (4) NEE 1
notifySendBody tinyint (4) NEE 0
notifyTypes tinyint (4) NEE 2
memberIP tinytext NEE
memberIP2 tinytext NEE
secretQuestion tinytext NEE
secretAnswer varchar (64) NEE
ID_THEME tinyint (4) unsigned NEE 0
is_activated tinyint (3) unsigned NEE 1
validation_code varchar (10) NEE
ID_MSG_LAST_VISIT int (10) unsigned NEE 0
additionalGroups tinytext NEE
smileySet varchar (48) NEE
ID_POST_GROUP smallint (5) unsigned NEE MUL 0
totalTimeLoggedIn int (10) unsigned NEE 0
passwordSalt varchar (5) NEE

Gebieden moeten we aandacht besteden aan:

  • memberName - Self Explanitory.
  • dateRegistered - Is niet nodig, maar als niet ingevuld op de datum geregistreerd wordt als 31 december 1969. De datum wordt opgeslagen als een tijdperk tijdstempel. Weet niet hoe te berekenen timestamps in je hoofd? Geen probleem. Ik gebruik het vrij generator gevonden hier.
  • realname - moeten worden geplaatst. Toen ik ben niet zeker of ik alleen herhalen memberName hier.
  • emailadres - Zelf Explanitory.
  • is_activated - Moet worden ingesteld op 1, omdat we zijn handmatig activeren van een lid.
  • ID_POST_GROUP - Ik zal niet liegen. Ik weet niet zeker wat dit is, maar het altijd lijkt te zijn ingesteld op 4. Dus .... Ik heb altijd ingesteld tot en met 4. Niet de beste manier te programmeren, maar wat kan je doen?
  • passwd - Het wachtwoord dat u wilt geven de nieuwe gebruiker. Het is onmogelijk om uit te vinden hoe u zonder te kijken naar de SMF documentatie. De juiste code te versleutelen SMF een wachtwoord voor de database ziet er zo uit:

($memberName).$password) $ passwd = SHA1 (strtolower ($ memberName). $ wachtwoord)

In de bovenstaande regel code, $ wachtwoord is de gebruiker de werkelijke wachtwoord.

Hoe dit te doen:

/ / Eerst verbinding te maken met de SMF-database

$ host = "hostnaam"; / / Host-naam
$ username = "gebruikersnaam"; / / mysql gebruikersnaam
$ mijnwachtwoord = "wachtwoord"; / / Mysql wachtwoord
$ db_name = "gebruikersnaam"; / / Database naam

("cannot connect to server"); mysql_connect ( "$ host", "$ username", "$ mijnwachtwoord") or die ( "kan geen verbinding maken met server");
("cannot select DB"); mysql_select_db ( "$ db_name") or die ( "niet kunt selecteren DB");

$ memberName = "ironMan";
$ realname = "Tony Stark";
$ emailadres = "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, emailadres, is_activated, ID_POST_GROUP, passwd, dateRegistered) VALUES ( '$ memberName', '$ realname', '$ emailadres',' $ is_activated ',' $ ID_POST_GROUP ',' $ password ',' $ dateRegistered ') ";
("SMF Error 101.234 "); $ result = mysql_query ($ query) or die ( "Fout SMF 101.234");

Zo eenvoudig is het!

How to Make Miniatuur in beeld met PHP

Gepost in functies, php door ShortLikeAFox op 22 juli, 2008

Dus je wilt maken een miniatuur van een bepaalde afbeelding ... PHP maakt deze taak gemakkelijk. Ik schreef de eerste functie hieronder om te gaan met afbeeldingen geüpload door de gebruikers op een site ik helpen beheren. Geüploade afbeeldingen op deze site kunnen worden jpegs, pngs of gifs, dus ik had om een functie te maken met alle drie. Deze code is gebaseerd oorspronkelijk uit van een functie te vinden op webcheatsheet.com

Hoe dit te doen:

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

/ / Parse pad voor de verlenging

$ info = pathinfo ($ pathToImages. $ fname);
/ / Blijven alleen indien deze een JPEG-afbeelding
($info['extension']) == ‘jpeg’) ) if ((strtolower ($ info [ 'extensie']) == "jpg") | | (strtolower ($ info [ 'extensie']) == 'jpeg'))
(

/ / Laden van beeld en krijg afbeeldingsformaat
$ img = imagecreatefromjpeg ( "($ pathToImages) ($ fname)");
$ width = imagesx ($ img);
$ height = imagesy ($ img);

/ / Berekenen miniatuurformaat
$ new_width = $ thumbWidth;
$ new_height = floor ($ hoogte * ($ thumbWidth / $ breedte));

/ / Maak een nieuwe tijdelijke afbeelding
$ tmp_img = imagecreatetruecolor ($ new_width, $ new_height);

/ / Kopiëren en het formaat van oude afbeelding in nieuw imago
imagecopyresized ($ tmp_img, $ img, 0, 0, 0, 0, $ new_width, $ new_height, $ breedte, $ hoogte);

/ / Thumbnail opslaan in een bestand
imagejpeg ($ tmp_img, "($ pathToThumbs) ($ fname)");

)

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

/ / Laden van beeld en krijg afbeeldingsformaat
$ img = imagecreatefromgif ( "($ pathToImages) ($ fname)");
$ width = imagesx ($ img);
$ height = imagesy ($ img);

/ / Berekenen miniatuurformaat
$ new_width = $ thumbWidth;
$ new_height = floor ($ hoogte * ($ thumbWidth / $ breedte));

/ / Maak een nieuwe tijdelijke afbeelding
$ tmp_img = imagecreatetruecolor ($ new_width, $ new_height);

/ / Kopiëren en het formaat van oude afbeelding in nieuw imago
imagecopyresized ($ tmp_img, $ img, 0, 0, 0, 0, $ new_width, $ new_height, $ breedte, $ hoogte);

/ / Thumbnail opslaan in een bestand
imagegif ($ tmp_img, "($ pathToThumbs) ($ fname)");

)

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

/ / Laden van beeld en krijg afbeeldingsformaat
$ img = imagecreatefrompng ( "($ pathToImages) ($ fname)");
$ width = imagesx ($ img);
$ height = imagesy ($ img);

/ / Berekenen miniatuurformaat
$ new_width = $ thumbWidth;
$ new_height = floor ($ hoogte * ($ thumbWidth / $ breedte));

/ / Maak een nieuwe tijdelijke afbeelding
$ tmp_img = imagecreatetruecolor ($ new_width, $ new_height);

/ / Kopiëren en het formaat van oude afbeelding in nieuw imago
imagecopyresized ($ tmp_img, $ img, 0, 0, 0, 0, $ new_width, $ new_height, $ breedte, $ hoogte);

/ / Thumbnail opslaan in een bestand
imagepng ($ tmp_img, "($ pathToThumbs) ($ fname)");

)

)

Hoe dit werkt

De functie createThumbs duurt vier argumenten.

  • $ pathToImages -> Het pad naar de map waarin het bestand zich bevindt Het zou er ongeveer zo uitzien: / home / content / gebruikersnaam / html / lijst / upload /
  • $ fname -> De bestandsnaam: pic1.gif, johnny.jpg, etc ...
  • $ pathToThumbs -> Het pad naar de map die u wilt dat de miniatuur afbeelding te bent u niet wilt dat dit het zelfde pad als $ pathToImages, omdat de miniatuurafbeelding zal dezelfde naam hebben als de oorspronkelijke afbeelding.
  • $ thumbWidth -> De breedte die u wilt dat de thumbnail te worden in pixels.

Een belangrijke opmerking die ik moet maken is dat deze functie heeft niets in de plaats, anders dan de bestandsextensie controleren, om er zeker van dat het beeld bestanden bevatten niets kwaadaardig. Aangezien de bestanden createThumbs () werkt samen met al zijn geüpload wordt aangenomen dat de bestanden zijn goed bestudeerd.

Het eerste wat createThumbs () doet is bellen pathinfo (). pathinfo () breekt de delen van een pad in een array. Dit is nuttig voor ons, want we moeten de bestandsextensie goed maken de miniatuur. Volgende createThumbs () controles om te zien of we te maken hebben met een jpeg. Als het oorspronkelijke bestand een jpeg createThumbs creëert een nieuwe afbeelding gebaseerd op de originele afbeelding met imagecreatefromjpeg (). De volgende stap is om de breedte en de hoogte van deze afbeelding (imagesx (), imagesy ()). Met behulp van $ thumbWidth en de verhouding van de oorspronkelijke breedte en hoogte createThumbs () wordt de nieuwe breedte en hoogte van de miniatuur. Met behulp van deze nieuwe verhoudingen createThumbs () zorgt voor een "blanco" beeld dat zal dezelfde breedte en hoogte van de thumbnail met imagecreatetruecolor (). Imagecopyresized () wordt gebruikt om het formaat van de afbeelding en opslaan in de "lege" net gemaakt. imagecopyresized () lijkt alsof het neemt veel van de parameters, maar als je een kijkje nemen in de documentatie het is echt niet zo ingewikkeld. Nu de miniatuur bestaat als een echte kleurbeeld alle createThumbs moet doen is het bestand converteren naar een jpeg. Om dit te doen imagejpeg () wordt aangeroepen.

Dat is hoe het werkt voor jpegs. Er zijn minimale verschillen voor. Pngs en. Gifs.

Hoe te Schrijf Browser specifieke code met PHP

Gepost in php door ShortLikeAFox op 21 juli, 2008

Dus je wilt schrijven code die alleen op bepaalde browsers ... Er zijn een aantal redenen te willen doen. De eerste keer dat ik persoonlijk nodig om dit te doen voorgedaan toen ik probeerde te verankeren een mp3 op een bepaalde pagina. Om een of andere reden kon ik niet schrijven van de code, zodat de mp3 zou spelen op de browsers die ik testen op (IE, Firefox en Opera), en valideren tegelijk. Als ik me goed herinner, was het Internet Explorer dat was het probleem veroorzaakt. De oplossing kwam ik bij was om een beetje PHP om te weten wanneer de gebruiker is het gebruik van IE, en dan de mp3 insluiten in een niet-geldige code als dat het geval was.

Deze oplossing heeft geleid tot het afspelen van mp3 altijd correct en de pagina altijd valideren, omdat de W3C validator nooit identificeert zich als IE. Dit is misschien niet de meest ethische manier te bereiken W3C naleving, maar het werkt.

Ik herinner me nog een keer hoeven te schrijven browser-specifieke code is toen ik met een probleem met IE 6 weergeeft mijn. Png beelden correct. I googled rond en vond een paar van oplossingen voor het probleem, maar beiden eindigde Messing het totale laag plaatsen op mijn pagina's. In plaats van het oplossen van dat probleem, ik ging met de snelle oplossing en besloot om weer te geven. Gifs wanneer de gebruiker had IE 6. Als de gebruiker nog een browser die had. Png problemen die ik dacht dat was jammer voor hem.

Hoe dit te doen:

Eerst moet je een beetje regel code te achterhalen welke browser uw gebruikersnaam is. Hier is hoe je dat doen met PHP:

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

Hier zijn drie voorbeelden van wat $ visitorsOS kan eruit

  • 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; nl; rv: 1.9) Gecko/2008052906 Firefox

De eerste gebruiker van Internet Explorer 6, wordt de tweede Opera 9.51, en de derde Firefox.

Nu weten we meer informatie dan we echt nodig hebben over de computer van de bezoeker moeten we die informatie goed gebruikt. Zeg dat je wilt schrijven code die alleen verschijnen als de gebruiker draait een versie van Internet Explorer. In dat geval zou je dit doen:

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

Code die alleen verschijnen als GEBRUIKER HEEFT IE

)

else (

Code die wordt weergegeven in ALLE ANDERE ZAKEN

)

Ik gebruik eregi een hoofdlettergevoelig regular expression match plaats van ereg een hoofdlettergevoelig regular expression match. Ik ben het niet vergeten als ik dit doen uit paranoia, of als ik eigenlijk gevonden voor een zaak waarin Internet Explorer geïdentificeerd als MSIE. In beide gevallen eregi zal geen pijn doen, zodat het iets is wat ik gebruik. Willen schrijven van de code voor specifieke versies van IE zou slechts een kleine verandering. in plaats van ... (eregi ( 'MSIE' ...) Ik zou iets willen (eregi ( "MSIE 6.0" ...) als ik wilde code die alleen verscheen voor MSIE 6.0.