HTML

WebKuvik - Hu húúú

Az olalon webfejlesztéssel kapcsolatos infókat, híreket és anyagokat találhattok.

Friss topikok

Címkék

PDO - Adatbázis absztrakció egyszerűen

2011.12.23. 17:00 Whip

Még a PHP 5-el frissítésként megjelent a PDO is, mely egy natív absztrakciós réteg a webfejlesztés során. Használatával egységes formában kezelhetünk többféle adatbázist, és jobb esetben minimális módosítással cserélhetjük ki az adatbázis kiszolgálót. Előnye, hogy a PHP része, illetve mivel C alapú, így elég gyors is. A PDO illesztkedik a PHP OOP irányú vonalához, szóval egy osztályként kapjuk kézhez.

Vegyük is gyorsan használatba

<?php

// Csatlakozási adatok

$tipus = 'mysql';
$host = 'localhost';
$database = 'adatbazis';
$username = 'felhasznalo';
$password = '12345';

// Csatlakozás

try

{
  $db = new PDO("$tipus:host=$host;dbname=$database", $username, $password);
  echo 'Sikerült a csatlakozás';
}
catch(PDOException $e)
{
   echo 'Hiba: '.$e->getMessage();
}
?>

A példában egy MySQL adatbázishoz csatlakoztam. Bármilyen probléma esetén PDOException -t fogunk kapni.

A következő példákban a kódba már nem írom bele a csatlakozást, hanem feltételezem, hogy van egy élő kapcsolatod.

Az egyik nagy előnye a PDO-nak, hogy képes a parancsokba behelyettesíteni paramétereket úgy, hogy az adatok escapelését is elvégzi. Ennek az SQL injection miatt van szerepe, ahol olyan adatot küldhetnek be amit megfelelő előszűrés nélkül SQL parancsnak értelmezhet a rendszer. Node nézzük is, hogy miként is megy ez:

        $sth = $db->prepare('UPDATE post SET title = ":title" WHERE id=:id');
        $sth->execute(array(':title' => 'Első bejegyzés', ':id' => 1));
        $sth->execute(array(':title' => 'Második bejegyzés', ':id' => 2));
        $sth->execute(array(':title' => 'Harmadik bejegyzés', ':id' => 3));

Mint látható "beállítottunk előre egy parancsot" melyet az $sth változóban eltároltunk, és későbbiekben bárhányszor meghívhatunk megfelelően paraméterezve. A paraméter konkrétan egy tömb, ahol kulcs-érték párokkal jelezzük, hogy minek a helyére mit helyettesítsen be a rendszer. Ilyen egyszerű az első három bejegyzésnek egyéni címet adni.

Tranzakció létrehozása sem túl bonyolult. A tranzakciók lényege, hogy vagy a tranzakciós blokkon belüli összes parancs lefut, vagy egyik sem. Rendkívül jól használható fícsör lehet például fizetések eltárolásánál.

$db->beginTransaction();

     $sth->execute(array(':title' => 'Első bejegyzés', ':id' => 1));
     $sth->execute(array(':title' => 'Második bejegyzés', ':id' => 2));

$db->commit();

 A $db->rollBack(); parancs kiadásával pedig megszakíthatjuk a tranzakciót.

Lépjünk is szintet, jöhetnek a lekérdezések:

    $sth = $db->prepare('SELECT * FROM post WHERE id>:id');
    $sth->execute(array(':id' => 1));
    $posts = $sth->fetchAll();

A fenti kód a $posts változóba visszaadja fetchelve az összes sort aminek az ID-je nagyobb mint 1. A $posts[0] -ban az első sor a $posts[1]-ben a második stb lesz. Emiatt egy foreach segítségével könnyen listázhatóak a találatok.

Ha konkrétan az 1-es ID-jűt szeretnéd kiíratni akkor értelemszerűen a id>:id cserélődik id=:id-re, és mivel ott csak 1 visszaadott sor lesz ezért a $posts[0]['title'] segítségével rögtön íratható is a bejegyzés címe.

Ha valamilyen hibába futnál akkor:

var_dump($db->errorInfo());

Szólj hozzá!

Címkék: php adatbázis mysql pdo

Git

2011.12.20. 14:59 Whip

Elérkezett az idő amikor nem halogathattam tovább és bele kellett vetnem magam a verziókezelő rendszerek csodás világába, méghozzá kicsit szűkítve a kört: a Git lett a kiszemelt eszköz. Mint már sokszor most is a "mi a fenéért is nem foglalkoztam vele eddig?" érzés közepedte jöttem rá, hogy a ez egy remek cucc, melyet használni kell.

Mire is jó a Git? Ez egy offline fejlesztésre (is) kihegyezett verziókövető rendszer. Nem szükséges neki folyamatos élő kapcsolat és elég jól elvan a szerverrel való folyamatos kommunikáció nélkül is. A segítségével az aktuális projektünk forráskódján történt változásokat követhetjük nyomon, elágaztathatjuk, kommentelhetjük, visszaállíthatjuk.

Egyéni fejlesztőknek hol ebben az előny? Tegyük fel, hogy dolgozol egy webshopon. Minden nap szépet commitolod a változásokat így minden nap meg tudod mondani, hogy melyik nap mi változott. Aztán jön a megrendelőtől egy kérés: Mi lenne ha facebook integráció is lenne az oldalban? Semmi gond, hiszen létrehozhatsz egy új Branch -et azaz szálat. Ebben elkezded megírni, sőt még be is fejezed a módosítást. Megrendelőnk viszont rájön, hogy ez így neki mégsem tetszik vissza az egész. Ebben az esetben visszatérhetsz az eredeti vonalhoz, és a projekt eredeti állapotát egy pillanat alatt visszahozhatod úgy, hogy "hátha kell" alapon akár az új verzió is megmaradhat.

Csapatban dolgozva mégtöbb előnye jön ki a rendszernek, hiszen többen úgy tudtok egyazon projekten dolgozni, hogy a módosításokat a rendszer nyomon követi, összefésüli. Mutatja, hogy ki mikor mit változtatott. Hasznos? Naná!

A Git telepítésére most nem térek ki, legyetek kreatívak és guglizzatok okosan. :) Mivel a Git alapvetően konzolos dolog ezért telepítés után vagy indítsatok egy Terminált, vagy Windows alatt egy start menü/cmd kelleni fog.

git config --global user.name "XY"
git config --global user.email "mail@cimem.hu"

A fenti két parancs segítségével beállíthatjuk az alapvető adatainkat, így minden általunk elkövetett műveletnél a Git tudni fogja, hogy ki kezdeményezte. Ezt csak egyszer kell beállítani.

Következő lépésben be kell lépni abba a könyvtárba aminek a tartalmát szeretnénk nyomonkövetni. A példámban ez a "project" nevű mappa lesz.

cd project
git init

A git init egy rejtett .git nevű mappát fog létrehozni a project mappán belül. Ezzel egyelőre ne törődjünk, hiszen a módosításainkat itt tartja a rendszer. A mappa létrejöttével gyakorlatilag indítottunk egy új git adatbázist. Most ha ebben a könyvtárban létrehozunk egy fájlt/módosítjuk a tartalmát, átnevezzük stb arról a git már tudni fog, azonban automatikusan nem ment el minden egyes változást!

A változások elmentését Commit -olásnak hívjuk és csak azok a fájlok commitolódnak amikre kiadjuk a parancsot.

git add .

A git add . parancs a könyvtár teljes tartalmára beállítja a figyelést, azaz minden fájlt hozzáad.

git commit -a

Minden fájlt commitol. Ilyenkor meg fog nyílni egy szövegszerkesztő, ahol egy rövid (vagy hosszú) leírást adhatsz meg arról,hogy mi is változott a projektben. Miért jó ez? Mert ha 1 hónap múlva visszanézed a commitokat akkor gőzöd sem lesz róla, hogy a mai és a tegnapi között mi a különbség. Természetesen a módosításokat látni fogod, de egyszerűbb egy 2 soros komment alapján megállapítani, mint végignézni a fájlok változásait. Másik lehetőség a commitolásra a:

git commit -a -m "Ez a megjegyzés"

Ahol a szövegszerkesztős részt megúszhatjuk, és a -m paraméter miatt a megjegyzés inline beállítható.

Akkor sincs gond, ha valamit elírtál a megjegyzésben, vagy kimaradt volna egy fájl:

git commit --amend

Commitoláskor az adatok nem töltődnek fel automatikusan a szerverre mindössze helyileg eltárolódik mint egy verzió. A feltöltéshez a git push parancs kiadása is szükséges. Ehhez először is állítsuk be a távoli szervert:

git remote add origin user@server.hu:project.git

Ahol az user a git user, a server.hu a távoli szerver címe, a project helyére pedig a projekt neve megy. Ezzel gyakorlatilag közöltük a gittel, hogy ha az origin alatt az user@server.hu:project.git repo-t értjük.

git push origin master

Az origin -ben meghatározott szerverre feltölti a master branch -et. Ha másikat szeretnénk feltölteni akkor értelemszerűen annak a nevét kell beleírni. A master branch az alapértelmezett.

git log

Megmutatja a commitok történeteit. Minden commit kap egy kódot, például c333f7d4d02468eeeef39739ac79f30720c95c94. Ennek a segítségével azonosíthatjuk a későbbiekben. Hogyan is értem ezt?

Tegyük fel, hogy véletlenül törölted a "proba" nevű fájlt és commitoltad is. Ebben az esetben nem kell kétségbe esned, hiszen annyi a feladatod, hogy a proba fájlt visszahozod az utolsó commitból ahol még elérhető volt. Ehhez először is meg kell keresni, hogy melyik az utolsó ahol még elérhető a fájl:

git rev-list -n 1 HEAD -- proba

Ez egy a fent említett sh1 kulcsot fog visszaadni ami egyértelműen azonosít egy verziót. Most:

git checkout c333f7d4d02468eeeef39739ac79f30720c95c94^ -- proba

A kulcs helyére értelemszerűen mindenki azt írja amit az rev-list visszaadott válaszul. A checkout vissza fogja nekünk állítani a proba fájlt.

Persze a checkout nem csak 1-1 fájl visszaállítására jó, hanem képes minket visszarepíteni az időben, hogy megnézhessük, miként is állt a projekt mondjuk egy hónapja:

git checkout c333f7d4d02468eeeef39739ac79f30720c95c94

A projektünk tartalmát átállítja a c333f... -nek megfelelő állapotba.

Az általános lehetőségek közül már csak az az eset maradt hátra, hogy mi történik ha többen dolgoztok egy projekten. Ebben az esetben bár más push-olhat, de mivel mindenki a saját gépén dolgozik ezért lokálisan nem fognak automatikusan befrissülni a fájlok. Erre az esetre való a pull parancs.

git pull origin master

Ami frissíti a fájlokat úgy, hogy lokálisan is megjelenjenek azok a változások amik eddig csak a szerveren voltak elérhetőek, vagyis ha a readme.txt-be valaki beszúrt egy új sort akkor az a sor megjelenik lokálisan is.

Érdekesség, hogy tömörített formában is kinyerhető bármelyik checkout. Linux alatt például:

git archive c333f7d4d02468eeeef39739ac79f30720c95c94 | bzip2 > ../teszt.tar.bz2

Hasznos funkció továbbá, hogy nem kell a checkoutok teljes nevét kiírni, csak annyit amennyi már elég az egyedi azonosításhoz. A legtöbb parancs megpróbálja kitalálni, hogy melyikre is gondoltunk, azaz a

git checkout c33f7d

pont ugyanolyan hatásos lesz mintha kiírtuk volna végig. Ha túl kevés karaktert adtunk meg az egyedi azonosításhoz akkor természetesen hibaüzenet szól a dologról.

Szólj hozzá!

Címkék: git verziókövetés

Yii Framework

2011.11.30. 14:19 Whip

Nem tetszik már a "spagetti kód"? A munkatársaiddal nem látjátok át egymás kódjait? Unod, hogy folyamatosan hasonló feladatokat kell megoldanod, és mindent a nulláról kell kezdened?

Az ilyen és ehhez hasonló problémák orvoslására valóak a php keretrendszerek. Többet is kipróbálva én a Yii mellett tettem le a voksom. Igazság szerint bár a keretrendszer választás vallási kérdés tény, hogy mindenki azt preferálja amit elsőként megtanult. Éppen ezért mindenki gondolja meg jól, hogy melyik keretrendszer tanulásának áll neki. Jelenleg a Zend, a Symfony és a Yii eléggé megy.

Miért pont Yii?

+ Gyorsan tanulható, és egyszerűen telepíthető
+ web alapú generátorok (bár néha azért kell a konzol)
+ MVC (persze a többi is)
+ ORM (Active Record)
+ Biztonságos (validátorok, szabályok, beléptetés, xss és sql injection védelem stb)
+ Nyílt forráskód
+ CRUD generator (gyak admin generátor, ami komplett forráskód generálásra képes)
+ Gyors
+ Jól dokumentált, több demó alkalmazást eleve tartalmaz a csomag
+ Segítőkész yii kóderek IRC-n
+ Ajax, jQuery támogatás web2 alkalmazás építéshez
+ Widgetek gyorsítják a munkát
+ Kiegészítők
+ Tesztelés, gyorsítótár és még sok más egyéb hasznos funkció.

Hátránya:

- Több álláshirdetésben keresnek Symfony vagy Zend kódert.
- PHP 5.3 újdonságait (például névterek) még nem támogatja. (Bár ez előny is lehet, hiszen elég neki php 5.1)

 

Szólj hozzá!

Címkék: php programozás framework yii

süti beállítások módosítása