PHP

PHP reguláris kifejezések - Link attribútumainak megkeresése

A reguláris kifejezésekről nagyon sokat lehetne írni. Bevezethetném az elejétől, ahogy egyszer terveztem is, most mégis maradnék csak egy példa bemutatásánál, ami megkeresi egy html kódban az összes linket és azok összes attribútumát. Azért jó ez a példa, mert több eszköz tárgyalására is lehetőséget ad.

A preg_match függvényt fogom használni. Még lehetne az ereg függvényeket, de azokat ma már nem ajánlott.

Legyen a példa html kód a következő:

Megosztás/Mentés

Űrlapok véletlen újraküldésének megakadályozása

A bejegyzés címe már sejteti a témát, de azért nézzük, miről is akarok én itt beszélni. Adott egy weboldal, és azon egy űrlap. Például egy üzenőfal. Valamint adott egy felhasználó, aki bátran kattint az "elküld" gombra. Az üzenete megjelenik, majd támad egy ingere, hogy frissítse a weblapot, mert mondjuk kíváncsi, hogy válaszoltak-e az üzenetére már. Persze ekkor az ő üzenete is újra el lesz küldve. Na most van olyan fejlesztő, aki erre nem gondol, és van olyan, aki igen. Utóbbiak megoldják, hogy frissítéskor az űrlapok ne legyenek újra elküldve. Vagy esetleg az üzenet tartalmát hasonlítják össze az előzőleg elküldöttel, és ha egyezik, akkor nem lesz újra bejegyezve az adatbázisba, avagy fájlba.

Megosztás/Mentés

PHP paraméterátadás url-ben és szép url-ek htaccess-el

Ismét egy gyakori kérdést dolgoztam fel, amit amatőr php programozók tesznek fel rendszeresen. Szokásomhoz híven igyekszem ismét a már működő de rossz megoldástól a minél szebb megoldás felé haladni. A Többféle megoldás bemutatásának célja, hogy az olvasó ne csak egy kész megoldást kapjon, hanem lássa is az alternatívákat. Hogy ő maga választhasson.


Feltetted már valaha, vagy fel akartad tenni a következő kérdést valakinek?

Hogy lehet olyant csinálni, ami itt ezen az oldalon is van, hogy ilyen kérdőjelek, meg & jelek vannak az url-ben, és úgy változik az oldal tartalma?

Talán nem pont így fogalmazódott meg benned a kérdés, de ha valaha is ott motoszkált a fejedben hasonló, és még nem kaptál rá választ, vagy már kaptál választ, de érdekel többféle módszer, akkor olvasd tovább ezt a bejegyzést és megkapod a választ.

Ezen kívül kitérek még a szép url-ek kérdésére is. Amikor már nem látszik az url-ben sok & jel,
hanem olyan, mintha mindig más mappát nyitna meg. Valójában pedig csak az apache szervernek mondjuk meg, hogy irányítson át egy másik url-re, ami már a fent említett megoldást használja, vagy php-ból szimuláljuk.

Megosztás/Mentés

Űrlapadatok helyes backslashelése PHP-vel

Alap, hogy ha PHP-ben SQL adatbázisba viszünk fel adatokat, akkor ha az egy űrlapról érkezik, esetleg url-ből, vagy bármi nem megbízható helyről, akkor mindenképp le kell védeni bizonyos káros karaktereket. Ezek jellemzően az idézőjelek. Ugyanis az SQL forráskódban is a karakterláncokat idézőjelek közé tesszük. Ha ellenőrzés nélkül bekerülhet egy aposztróf a szövegbe, akkor az lezárja a karakterláncot és utána sok csúnya dolgot lehet művelni, amibe nem megyek bele. Aki kíváncsi rá, írja be a google keresőbe, hogy sql injection. Na most ennek elkerülésére mysql-hez létezik a mysql_real_escape_string függvény. Nagyjából hasonló, mint az addslashes. Abban mindenesetre mindkettő közös, hogy az idézőjelek elé \ jelet tesz.

Megosztás/Mentés

Keresés és találatok kiemelése a szövegben

Kiemelő

A keresés megvalósítása még viszonylag egyszerű és kézenfekvő feladat annak, aki kicsit ért az SQL-hez. Feltéve persze, hogy a keresendő információt is SQL adatbázisban tárolja. De biztos mindenki látott már olyant, hogy a találatok ki voltak emelve valamilyen színes háttérrel. Erre írok egy nem tökéletes, de használható megoldást. Amiből már el lehet indulni egy komolyabb felé is.


A keresés még rendben van általában. De az ember szereti látni, hogy amire rákeresett, az mégis a talált szövegben hol van. Lehet persze a böngésző beépített kereső funkcióját is használni, ami firefox-ban a CTRL+F billentyű kombinációval is elérhető, de megspórolhatunk a felhasználónak ennyi többletmunkát.

Megosztás/Mentés

Meghívós loginrendszer - R.E. Login v2.0

R.E. Login v2.0

Az R.E. Login újabb verziója, vadi új objektum orientált motorral. Megőrizve az elődje funkcióit, de némileg kibővítve azt, és lehetőséget biztosítva további fejlesztések egyszerűbb elvégzésére. Ebből kifolyólag valószínű lesz is folytatás. Addig is köszöntsük szeretettel új barátunkat, az R.E. Login v2.0 -át.
R.E. Login v2.0.3 letöltése
Kövesd a projektet és keresd a legfrissebb verziókat a:
https://sourceforge.net/projects/relogin/ oldalon.


Figyelem: Ez a rendszer már elavult. Hibákat tartalmazhat és az új PHP verziókkal nem teljesen kompatibilis. Az init.php-be beillesztve az alább írt sorok egyikét a hibaüzenetek eltüntethetők, de a login használata csak saját felelősségre javasolt.

error_reporting(E_ALL | E_STRICT); // E_STRICT hibaüzenetek elrejtése
vagy
error_reporting(0); //minden hibaüzenet elrejtése

Kapcsolódó oldalak

Szerkesztve: 2010.04.04. 23:02
A loginban sikerült felfedezni pár hibát. Ezek javítva lettek. A hibák a következők voltak:

  • Profil módosítás fájl kimaradt a beállításokból, így csak changeprofile.php néven működött
  • Ugyanezen okból adminnak más profiljában is a saját profiljára mutató link volt.
  • Apró elírás a telepítőben. STMP volt SMTP helyett az egyik megjegyzésben
  • A telepítő nem ellenőrizte, hogy az SMTP host és port meg van-e adva. Sem az e-mail címeket.

Továbbá egy kiegészítés:

  • Most már opcionális az SMTP használat is. ha netán valakinek nem lenne semmilyen SMTP szerver használatára lehetősége, akkor SMTP nélkül küldi a leveleket.

Más nem változott. Ha bárki hibát észlel, kérem szóljon.
Köszönet tbence-nek az észrevételeiért és hibajelentésért.

A Login funkciói nagy vonalakban:

  • Regisztráció ( Opcionális meghívó mód, regisztráció blokkolása )
  • Beléptetés
  • Meghívó küldés
  • Privát üzenet küldés ( Kimenő, bejövő postafiók, Hír küldés )
  • Felhasználói profil
  • Gravatar és MKAvatar használat
  • Admin felület ( Tulajdonos és Admin rangot megkülönböztetve )
  • Bővíthető ranglista
  • Felhasználó lista
  • Online lista
  • Felhasználó keresése usernév szerint
  • Elfelejtett jelszó funkció

Megosztás/Mentés

Perzisztens PHP objektumok - R.E. DBObjects v2.1

Ez az osztálykönyvtár perzisztens megvalósítását teszi lehetővé PHP osztályoknak. Ezen kívül tartalmazza az R.E. Pagination néhány funkcióját, hogy a perzisztens objektumokat tartalmazó listát is lehessen inicializálni oldalanként.

R.E. DBObjects letöltése
Dokumentáció letöltése
Dokumentáció megtekintése

Előnyei

  • Frissítésnél és törlésnél nincs szükség sql kódok írására.

  • Az egyes adatbázis mezők objektum tulajdonságként kezelhetők. Így akár osztályon belül módosítható is az elérésük __get __set metódusokkal.

  • Egyedi metódusok definiálhatók a jellemzők kezelésére.

  • A kódolás egyszerűbb, gyorsabb, átláthatóbb.

Hátrányai

  • Összetett kulcsokat még nem tud kezelni.

  • Minden táblának tartalmaznia kell auto_increment elsődleges kulcsot.

  • A frissítés, törlés, lekérdezés valamivel lassabb lehet. Ez nyilvánvalóan adódik az előnyök megvalósításának idejéből.

  • Még nem képes több adatbázis kapcsolat egyidejű kezelésére

Példa a használatára:

<?php
//Ennek az osztálynak includeolása szükséges egyedül.
require_once 'REDBObjects/REDBObjects.class.php';
//Az összes mysql modult betölti a könyvtárból.
REDBObjects::uses('mysql');

mysql_connect('localhost', 'root', 'password');
mysql_select_db('teszt');

$list = new IsMySQLListClass(array(
        'teszt'=>array('*')
));
$list->tableName_signal = 'T_'; //Ez az alapértelmezett is
$list->table_field_sep = '__'; //Az alapértelmezett az egy darab _ jel
//sql kód FROM utáni részét kell megadni limit nélkül.
//Plusz hogy hány rekordot kérdezzen le egy oldalra
$list->page("teszt where field like 'A%'", 10);
foreach ($list as $key => $object)
{
        print $object->T_teszt__id.', '.$object->field.'<br />'.PHP_EOL;
        if ($object->id == 2)
        {
                //Frissíti a field tulajdonság értékét.
                $object->field = 'P';
                $object->update();
        }
}
?>

Megosztás/Mentés

PHP ellenőrzőkód - R.E. Captcha v1.0

Captcha kép 1

Captcha kép 2

Újabb taggal bővült az "R.E. termékcsalád", (R.E. mint RimElek) mert hogy már szinte védjegyem. Ezúttal egy Captcha PHP osztály személyében. Itt bal oldalt található is két példa kép. Mint látható, az egyiken egy matematikai műveletet kell elvégezni, a másikon pedig csak felismerni a véletlenszerűen megjelenített karaktersorozatot. Mindkét esetben megzavarva a képet a szintén véletlenszerűen generálható vonalakkal.


R.E. Captcha v1.0 letöltése
R.E. Captcha v1.0.1 letöltése
Dokumentáció letöltése
Dokumentáció online megtekintése

A fent említett két mód között már mondanom sem kell, hogy hogyan vált a program. Természetesen véletlenszerűen. Persze nem csak fix betűtípussal használható. Tetszés szerint megadható bármilyen ttf betűtípus fájl. Állítható a betűméret, a kép méret és a kép típusa is. ( jpg, png, gif ) Ezen kívül a háttérszín is, bár leginkább világos háttérszín mellett mutat jól tapasztalataim szerint. Még érdekesség, hogy mivel gyakran fordultak hozzám oylan kérdéssel, hogy egy PHP-val generált képet hogyan lehet megjeleníteni egy html fájlban, így két megjelenítési lehetőséget is beépítettem.

Megosztás/Mentés

PHP lapozó - R.E. Pagination v1.0

Ahogy ígértem, én is elkészítettem saját lapozó osztálykönyvtáramat.

Legyen szó MySQL adatbázisról, xml-ről vagy egyszerű szövegfájlról, amiben az egyes "mezőket"
valamilyen karaktersor választja el egymástól, ez az osztálykönyvtár meg fog birkózni vele.
Rengeteg opcióval konfigurálható. Megadható, hogy egy oldalon hány elemet jelenítsen meg.
Megadható, hogy hogy nézzen ki egy oldalra mutató link a linklistában, illetve az, hogy
maga a link lista hány oldal linkjét tartalmazza egyszerre. Ezen kívül az előző, következő
legelső és legutolsó oldalra mutató linkek szövege, valamint a $_GET változóban az index neve,
ami az oldalszámot fogja jelenteni a lapozóban.

Új lapozókat is lehet írni hozzá. Az AREPagination és AREPItems absztrakt osztályokat örökítve.
De minden új osztályt az install.php -ben is hozzá kell adni az osztálykönyvtárhoz, hogy
az REPClasses osztály import() metódusával anélkül lehessen importálni az osztályokat, hogy tudnánk
annak pontos útvonalát a projectben. A REPClasses osztály installedClasses() metódusa pedig
visszaadja az összes telepített osztály nevét. Ha netán nem tudnánk, milyen osztályokból lehet gazdálkodni.
(Bár ez a fájlrendszeren is kideríthető)

REPagination letöltése
Dokumentáció letöltése
Dokumentáció online megtekintése

Megosztás/Mentés

Javascript visszaszámláló - Napi sorsoló

Ebben a cikkben bemutatom, hogyan lehet olyan idő visszaszámláló szkriptet írni, ami minden nap egy konkrét időpontig számol vissza, de ez az időpont lehet a másnap reggeli időpont is akár. Ehhez figyelembe kell venni a szerveridőt is, másképp a kliens ( talán hibás ) órájára lenne bízva, hogy mikor van vége a visszaszámlálásnak. Persze a visszaszámlálásnak akkor van értelme, ha a végén valami történik is. Így szerveroldalon PHP-ból gondoskodni kell arról is, hogy például lefusson egy sorsoló program, ami aztán az eredményeket megjeleníti. Ezt vagy Crontab időzítővel, ha a tárhelyen rendelkezésre áll, vagy eltárolva például adatbázisban, hogy aznap lefutott-e már a sorsolás, és ha még nem, de az idő már lejárt, akkor fusson le. És írja ki az eredményt. Persze a következő sorsolásig a visszaszámlálás már elindul. Ennek megvalósítását mindenkinek magára bízom. Én csak a számlálást mutatom be.

Megosztás/Mentés