Milyen jellegű szakmai cikkek legyenek?

Alapokról, rövid tippek
3% (1 szavazat)
Alapokról, jól kidolgozott cikkek, magyarázattal és példákkal
27% (10 szavazat)
Komolyabb témákról, rövid tippek
5% (2 szavazat)
Komolyabb témákról, jól kidolgozott cikkek, magyarázattal és példákkal
65% (24 szavazat)
Összes szavazat: 37

Egyszerű helyesírás-ellenőrző PHP-val. - pspell könyvtár

Egy kis helyesírás-ellenőrző programot fogok mutatni, amihez a PHP pspell könyvtárát használtam. Lényegében 3 függvényt használtam fel. Ezek pedig a pspell_new, pspell_check és pspell_suggest. Ezekkel már elérhető, hogy egy magyar szótár alapján az egyes szavak helyességét vizsgáljuk. Központozást és egyéb mondattani jellemzőket nem néz.

Szükséges

hozzá az aspell csomag. Illetve magyar szótárhoz az aspell-hu is. Ezen kívül a php5-pspell könyvtár kell, amit linuxon ( debian, ubuntu ) vagy apt-get -tel kell feltelepíteni, vagy aki a php-t is saját maga fordítja, az a --with-pspell kapcsolót kell használja. Ahhoz viszont szükséges előbb a libpspell-dev csomag is.

pspell_new

Ezzel lehet egy új szótárt megnyitni. Az első paraméterben a „hu_HU” megadja, hogy magyar szótár kell. A második paraméter különböző nyelvjárások megadására szolgál, mint például amerikai, brit, kanadai angol. Megadható zsargon is, de most a fontosabb két paraméter a 4. és 5. Ezek sorban a karakterkódolás és a mód. A móddal korlátozható a hibás szavakra adott javítási javaslatok száma. Én a leggyorsabb és legkevesebb javaslatot adó PSPELL_FAST konstanst adtam meg.

pspell_check

Ezzel lehet ellenőrizni egy szót. Fontos, hogy minden átadott string egy szónak számít. Tehát a mondatok szavakra darabolását meg kell oldani. Beleértve az írásjeleket is.

pspell_suggest

Végül pedig maradt a javaslatok lekérdezése. A javaslatokat ez a függvény tömbként adja vissza.

Helyesírás-ellenőrző program

Demo-t sajnos nem tudok mutatni, mert a tárhelyemen nincs telepítve a pspell. Ezért csak leírom, mit tud a program. Egy megadott szövegben megkeresi a hibás szavakat, majd azokat aláhúzva és kiemelve pirossal, megjeleníti. A hibás szavakra kattintva megjelennek a javaslatok, ha az űrlapon ez az opció ki van pipálva. Lehetne tovább cifrázni azzal, hogy a javaslatra kattintva a szövegben lecseréli a szót, de ezt én most nem oldottam meg.

És a program forráskódja:

Megosztás/Mentés

Ifsetor és kukac operátor php 5.3 -ban

A PHP 5.3 -ban bevezettek egy nem nagyon hangoztatott operátort. Aminek a függvény alakja az „ifsetor” névre hallgatott volna. Azt viszont elvetették a fejlesztők. Az operátor hasonló a már rég ismert és más nyelvekben is használt ternáris operátorhoz.

echo $x ?: $default;

Gyakorlatilag a következő kód rövidítése:

echo $x ? $x : $default;

Tehát:

$x = 0;
echo $x ?: 20;

Kiírja, hogy 20, mert az $x logikai hamissá konvertálható. De a

$x = 12;
echo $x ?: 20;

Kiírja, hogy 12, mert az $x itt már logikai típusként igaz értéket venne fel.

Persze személy szerint azt hiszem, ezzel kaptunk egy nem túl hasznos, ámde érdekes operátort. Ugyanis erre így nem gyakran van szükség. Talán csak a következő példát tudnám most hirtelen elképzelni:

Megosztás/Mentés

Többdimenziós tömbök értékeinek szelektív lekérdezése php-ban

Az ötletet a különböző keretrendszerekben megtalálható hasonló metódusok adták, amik adatbázisból lekérdezett eredményhalmaz átrendezésére használhatók. A különböző rekordokat egy kétdimenziós tömbben is visszakaphatjuk, ami vagy numerikusan indexelt, vagy valamelyik adott oszlop értéke szerint. Például felhasználó azonosítója. Az összetett kulcsok által indexelésre viszont ezek sem adnak megoldást. Továbbá vannak olyan helyzetek, amikor egy tömbből konkrét indexekhez ( oszlopokhoz ) tartozó értékekre van szükség és csak azokra. Erre talán azt tudnám példaként említeni, amikor egy nem általunk írt függvény az átadott összes tömbelemet feldolgozza. Ezeken túl a következő függvény a nem létező indexekhez tartozó értékeket figyelmen kívül hagyja.

Példa tömb:

$array = array(
        4 => array('id' => 1, 'name' => 'Takács Ákos','age' => 25),
        8 => array('id' => 345, 'name' => 'Kovács Géza', 'age' => 31),
        1 => array('id' => 13, 'name' => 'Tóth Töhötöm', 'age' => 12),
        56 => array('id' => 98, 'name' => 'Teszt Eszter', 'age' => 43)
);

Példa select lista készítéséhez

<?php
$persons = fetch($array, 'name', 'id');
?>
<select name="persons">
<?php foreach ($persons as $id => $name) : ?>
        <option value="<?php echo (int)$id; ?>"><?php echo htmlspecialchars($name); ?></option>
<?php endforeach; ?>
</select>

Eredmény:

<select name="persons">
        <option value="1">Takács Ákos</option>
        <option value="345">Kovács Géza</option>
        <option value="13">Tóth Töhötöm</option>
        <option value="98">Teszt Eszter</option>
</select>

További példák a használatára:

Megosztás/Mentés

Triggerek használata MySQL-ben

Triggerek a MySQL 5.0 óta léteznek. Egy trigger bizonyos táblaműveletek hatására kiváltódó események kezelésére szolgál, amiben tárolt eljáráshoz hasonló szintaktikával további műveletek végezhetők. Bár még nem olyan kifinomult a MySQL trigger, mint például Oracle-ben, de be fogom mutatni, hogy így is hasznos szolgálatot tehet, amennyiben van jogosultságunk a használatára.

Triggerek létrehozása:

Egy utasítás esetén:
create trigger triggerneve  mikorfusson milyenmuveletre for each row sqlutasitas;
Több utasítás esetén:

delimiter $$
create trigger triggerneve  mikorfusson milyenmuveletre
for each row begin
      /*További sql utasítások*/
end$$
delimiter ;

mikorfusson: Lehet before vagy after.
Azaz egy művelet előtt is lefuthat, vagy csak az után.

milyenmuveletre: Lehet insert, update vagy delete

A „create” előtti sorra azért van szükség, mert a trigger törzsében levő sql utasítások utáni pontosvessző lezárná a triggert is. Meg kell tehát változtatni a delimitert, azaz az utasításokat határoló karaktert. A trigger lezárása után pedig vissza lehet azt állítani. Most pedig jöjjön egy életszerű példa a triggerek használatára!

Megosztás/Mentés

R.E. Uploader

Bár az osztályt nem ma írtam, de most érett meg a publikálásra. Segítségével egyszerűbben, felhasználóbarátabban oldható meg fájlok feltöltése és képek esetén thumbnail kép automatikus készítése. A maximális fájlméret és fájltípus korlátozható. A fájlok neve és könyvtára is megadható. Eredeti és kép esetén thumbnail képek könyvtára is. Fájlnév egyezés esetén a fájlok felülírhatók, vagy kaphatnak numerikus megkülönböztető jelet. Pl.: "_1". A fájlok egyelőre minden esetben csak url barát formában menthetők el. Tehát nincs se szóköz, se speciális karakter. Ezek automatikusan lesznek lecserélve ékezetmentes karakterekre. Vagy speciális karakterek esetén a rájuk leginkább hasonlító egyszerű karakterre.

Legújabb verzió letöltése sourceforge-ról

Megosztás/Mentés

PHP SVN project létrehozás assembla.com-on és tesztelés NetBeans -ben

2012. május 27-én a bejegyzés kiegészítve Windows felhasználók számára. A kiegészítések pirossal kiemelt dátummal jelöltek.

Azok kedvéért, akik még nem próbáltak verziókezelő rendszert használni: Több féle lehetőség létezik. git, CVS vagy akár az SVN, amiről én írok most. De egyébként jó hosszú a lista. Akit érdekel: Verziókezelő rendszerek, Verziókezelés

Hasznos dolog, mert egy szerveren megtalálható az összes fájl összes verziója, amiket vissza is lehet állítani szükség esetén. Illetve pontosan követhetők a változások. Csapatmunka esetén ki, mit módosított. Illetve bizonyos esetekben ugyanazon a fájlon több fejlesztő is dolgozhat. Más esetben ez hibát okoz, aminek a javítására vannak lehetőségek.

Vannak fejlesztői környezetek, amik támogatják a verziókezelő rendszereket. NetBeans is ilyen. CVS, Mercurial és Subversion ( SVN ) van beépítve. Ingyenes szervereket is lehet találni. Korlátozottan bár, de ilyen az Assembla.com (A fizetős verziója többet tud). Viszont lehet privát projektet is kérni. Ellentétben sourceforge.net -tel (2012. május 27.: Azóta már itt is), ahol viszont sokkal több lehetőség és eszköz használható teljesen ingyen. De nem is részletezném tovább. A tárgyra térek.

Mint írtam, netbeanst használok és SVN-t. Valamilyen PHP programot szeretnék "verziókezelni". Létrehozom a projectet, beállítom az SVN-t és módosítgatok. Tesztelgetek. Létrejönnek cache fájlok esetleg, képek vagy kitöltött, helyi gépre beállított config fájlok amiket nem szeretnénk commitolni. NetBeans-ben van lehetőség commit előtt egy listában jelölgetni, miket akarunk felküldeni a szerverre és miket nem. Vagy előre beállítani, hogy egy bizonyos mappát, fájlt sose töltsön fel. De még ekkor is el lehet veszni a fájlok között. Nem beszélve arról, hogy a netbeans projekt fájljai is bekerülhetnek ide, ha létrehozáskor nem lett megadva, hogy külön mappában tárolja a config állományokat a projekthez. Illetve nem biztos, hogy az alkalmazás fel van készítve arra, hogy minden mappába bekerül egy .svn nevű mappa is fájlokkal. Szóval nézzünk lépésről lépésre egy projectet az assembla.com -on.

Megosztás/Mentés

Rekurzív mappamásolás php-ben

Ismét egy olyan script, aminek a megírására más kérdése ösztönzött. A script pedig nem más, mint a mappák és fájlok rekurzív másolása. Lehetne írni rá jó kis rekurzív függvényt, ami önmagát hívja meg. Vagy egy ciklust, ami az aktuális könyvtárszintet változtatgatja és rekurzív függvényhívás nélkül dolgozik. Vagy használhatjuk a PHP 5 adta lehetőségeket. Jelen esetben az iterátorokra gondolok.

Megosztás/Mentés

Cakephp: Html helper és CSS, IE feltételes megjegyzéseivel

Sose gondoltam volna, hogy valaha szükségem lesz Internet Explorerhez külön css-t gyártanom. Mindig azt vallottam, hogy egy jól megírt weblap minden böngészőben legalább az elfogadható szintet megüti, ha nem is tökéletes. Könnyen beszéltem, hisz igen ritkán kellett nekem a megjelenéssel komolyabban foglalkoznom. Nem az a specialitásom. Most mégis belefutottam abba a problémába, hogy már mindenhol tökéletes volt a megjelenés 2 napi munka után, kivéve az Internet Explorer 7-et. Így szükségem lett volna az IE feltételes megjegyzéseire

Na most egy ideje van "szerencsém" cakephp keretrendszerben fejleszteni. Van neki egy HtmlHelper osztálya, aminek a css() metódusával lehet css linkeket elhelyezni vagy rögtön megjelenítve a html forráskódját ( ez ugye a layouts/default.ctp-ben szokott történni a &lt;head&gt; részben )

Megosztás/Mentés

PHP switch működése. Típusos switch és típuskonverziók.

Most egy érdekességről fogok írni, aminek igazán gyakorlati hasznát nem látom, viszont jó tudni. A switch elágazás nem egyedi a php-ben. Más nyelvek is megvalósítják, mint például a java, C vagy a pascal, csak más néven és/vagy egy kicsit másképp. Bizonyos esetekben az IF elágazás felváltására szolgál. Két érték pedig többnyire akkor lesz egyenlő, ha a típus is egyezik. Ám PHP-ben az értelmező mondhatni, kénye kedvére változtathatja a típusokat egy-egy ellenőrzés alkalmával. Persze adott, hogy mit mire tud konvertálni. De ha biztosak akarunk lenni a típusok egyezésében is, akkor a == helyett a === -re van szükség. Switch esetén viszont mindig az első verzió, azaz a típusegyeztetés nélküli ellenőrzés történik. Ez egy részt lehet probléma. Más részt ha ez probléma, akkor az if-eket se nehezebb megírni sok esetben. Mégis bizonyos speciális helyzetekben igen csak el kéne gondolkozni, hogy ugyanazt a működést egy IF hogy váltja fel. Ez pedig a break utasítások használatával és a default ág elhelyezésével függ össze.

Megosztás/Mentés