1 PHP programozás alapjai A PHP manapság az egyik leggyakrabban használt web programozási nyelv. Nyílt forrású, fejlesztő környezete is könnyen telepí...
PHP programozás alapjai A PHP manapság az egyik leggyakrabban használt web programozási nyelv. Nyílt forrású, fejlesztő környezete is könnyen telepíthető, a legtöbb LINUX verzió is tartalmazza. Egyike a dinamikus alkalmazásfejlesztőknek, alkalmas nagyméretű portálok és SQL adatbázisok kezelésére, valamint kiválóan együttműködik a HTML kóddal. Készíthetők tisztán PHP kódok is, de szerintem igazán szép kivitelben a HTML alapú CSS ben formázott (tehát ezek adják a keretet) PHP programok működnek. Nagy adatmennyiség esetén célszerű az adatokat SQL, MySQL adatbázisban tartani és azokat a PHP segítségével lekérni, feldolgozni. Az ingyenes tárhely szolgáltatók egy része biztosít PHP futási környezetet, némelyik pedig SQL adatbázist is biztosít. A továbbiakban először a PHP alap utasításaival foglalkozom, majd néhány példát mutatok meg. Kezdeti tudnivalók: Minden PHP program, vagy script a kóddal fejeződik be. Magyarázó szövegek a programban bárhol elhelyezhetők, ezek nem hajtódnak végre, csak a programkódban jelennek meg és a // jelzi őket. Minden utasítást pontosvessző zár le! Kiiratás módjai: print "ezt ird"; print $valtozo; (print helyett használható az echo is). HTML utasítás kiíratása, végrehajtása a PHP kódon belül, pl: print ""; HTML utasítás idézőjele elé \ jel írandó, pl: print "";. Műveleti operátorok: + - / * % (maradék) . (összefűzés) Változó megadása és értékadás: $a=0; $string="valamilyen karakteres szöveg"; define("állandónév", érték); $a=$a+1; $a++ Mindkét utasítás az $a értékét eggyel növeli (más műveletekre hasonlóképp). $b=$b+5; $b+=5 Mindkét utasítás $b értékét növeli öttel. $veletlen=rand(); Véletlen szám generálása. abs($caltozo); A változó abszolút értékét adja vissza. Monitorra iratás: print $valtozo; Dinamikus adatkiirás, print "ird ki ezt"; Nem tárolt szöveg kiírása, print $a+$b; Művelet eredményét írja ki), print $a.$b; Két változó tartalmát fűzi össze (nem összead!) print $a."Ft"; Változó tartalmához hozzáfűz egy szöveget. Változó típusa: integer (egész), double (tört), string (karakteres), boolean (logikai), object (objektum), array (tömb) Típus lekérdezése gettype($valtozo); 1. oldal
Készítette: SaNandor, 2010., Veszprém
Típus módosítása settype($valtozo, "típus"); példáúl ismeretlen típust átalakítani, hogy fel lehessen dolgozni. Összehasonlító jelek: == egyenlő, != nem egyenlő, === azonos (érték és típus is), !== nem azonos, >= nagyobb egyenlő, <= kisebb egyenlő, < kisebb, > nagyobb, || vagy (or is jó), && és (and is jó), ! tagadás, xor kizáró vagy. Dátum és idő kezelés: $ezt=time(); Pontos időt adja UNIX időbélyegként (másodpercben eltelt idő 1970.01.01. óta) date("Y.m.d. H:i", $ezt); Dátum és idő kiírás módja mktime(óra, perc, mperc, hónap, nap, év); Átalakít egy beírt dátumot időbélyeggé. checkdate(honap, nap, év); Helyes-e a beírt dátum. Elágazások a programban: if (feltétel) {Ha a feltétel igaz, akkor az itt szereplő utasításokat hajtja végre;} else {Ha a feltétel nem igaz, akkor az itt szereplő utasítások futnak le. Ez az ág nem kötelező!;} Az if és else ágak közt lehet még közbülső feltétel is, ezt elseif (feltétel2) {utasítások;} formában illesszük a két ág közé. Többszörös elágazás is létrehozható, ahol a szelektor egy kifejezés, vagy változó. Az egyes ágakat a break utasítás zárja le! switch (szelektor) { case ertek1: Utasítások hajtódjanak végre, ha a kifejezés értéke megeggyezik érték1-gyel; break; case ertek2: Ha kifejezés értéke egyezik ertek2-vel akkor ez fusson; break; default: Ha egyik ág sem teljesül, akkor ez történjen; break; } Ciklusok a programban: A ciklusok ismétlődő utasítássorokat tartalmaznak. Mindig kell egy ciklus változó, vagy esemény, amely megszabja mikor érjen véget a ciklus, különben végtelen ciklust kapunk. Ciklus elhagyására szolgálhat a break; utasítás is (ekkor egy continue; utasítással ismétlést kezdhetünk, például a zéró osztás kiküszöbölése esetén). Amennyiben ciklusváltozónk van annak értéknövekedéséről is gondoskodni kell. Elöl tesztelő, ahol a zárójelezett utasítássor, csak a feltétel igaz volta esetén hajtódik végre: while (feltétel) {utasítások;} Hátul tesztelő, ahol az utasítássor egyszer mindenképp lefut, mivel a végén vizsgáljuk a feltétel igazságát: do {utasítások;} while (feltétel) Számlálós ciklus for (ciklusváltozó; feltétel; ciklusváltozó növelése) {utasítások;} például, ha azt szeretnénk, hogy egy utasítássor ötször fusson le: for ($i=0; $i!=5; $i++) {utasítások;} 2. oldal
Készítette: SaNandor, 2010., Veszprém
Függvények létrehozása: Amikor egy utasítássort programunk során többször is használunk, célszerű azokat függvénybe szervezni. A függvényeket általában programunk elején helyezzük el, így a program futásakor bárhonnan hivatkozhatunk rájuk. Gyakori eset, hogy függvényeket külső állományban helyezünk el, így más programmodulokból is elérhetők (Ez akkor célszerű, ha több programmodulból áll össze a teljes működő rendszer, például egy főprogram és több alprogram esetén. A függvényeknek paraméterek adhatók át, tőlük paraméterek kaphatók vissza, ezáltal válik igazán rugalmassá a programozás. A kapott paramétereket a függvény törzsben feldolgozzuk, és vagy adunk vissza értéket, vagy nem (utóbbi esetben nincs return, csak végrehajtódik a függvény). Függvényen belül definiált változók kívülről nem láthatók, csak ha a global kulcsszóval külsővé tesszük. function fuggvénynév (kapott_papaméter1, kapott_paraméter2,...) { utasítás sorok; return ezt_adja_vissza;} Tömbök létrehozása, kezelése: Nagyobb rendezett adatmennyiség kezelésére, használatára alkalmazhatók a tömbök. Ezek több elemet tartalmazó adathalmazok, ahol egy -egy elemre tömbben elfoglalt sorszámával hivatkozhatunk. $tombneve=array(); Üres tömb létrehozása $tombneve=array("elem1", "elem2", "elem3",...); Tömb létrehozása elemfeltöltéssel. $tombneve[ ]="elem"; Elem hozzáadása tömbhöz. $tomb[count($tomb)-1]; Tömb utolsó elemének sorszám lekérdezése (egyet el kell venni, ugyanis az első elem sorszáma 0). $dbszam=count($tomb)-1; Tömb méretének lekérdezése. foreach ($tomb as $atmeneti) {print "$atmeneti";} Tömb végigjárása és elemeinek kiírása $ossz= array_merge($elso_tomb, $masodik_tomb); Két tömb összeadása (összevonás). $tomb=array_push($elso, 2, "ezt"); Több elem egyidejű hozzáadása tömbhöu. $elem=array_shift($tomb); Tömb első elemének eltávolítása. $ide=array_slice($tomb, 2, 3); Elem kinyerése tömbből, a 2 indexűtől 3 hosszan új tömbbe. sort($tomb); Tömb rendezése rsort($tomb); ABC növekvő sorba rendez asort($tomb); ABC csökkenő sorba rendez. unset($tomb[1]); A tömb 1 indexű elemének eltávolítása. Associatív tömbök: Ezek karakterlánccal indexelt tömbök, ahol az egyes elemekre a karakterlánccal hivatkozhatunk $assz_tomb=array ("mezo1"=>"ertek1", "mezo2"=>"ertek2", "mezo3"=>"ertek3"); Asszociatív tömb létrehozás és feltöltés. print $ass_tomb["mezo2"]; A mezo2 indexű elem értékének kiíratása. $ass_tomb["mezo1"]="ezt írja be"; Értékadás a mezo1 indexű elemnek. foreach($assz_tomb as $kulcs=>$ertek) {print "$kulcs=$ertek"; print " "} Asszoc. tömb bejárása és kiiratása kulcs alapján, minden sor után soremelés. ksort($assz_tomb); Assz. tömb rendezése. Több dimenziós összetett tömbök $dim_tomb=array ( array ("mezo1"=>"ertek11", "mezo2"=>"ertek12", "mezo3"=>"ertek13"), array ("mezo1"=>"ertek21", "mezo2"=>"ertek22", "mezo3"=>"ertek23"), array ("mezo1"=>"ertek31", "mezo2"=>"ertek32", "mezo3"=>"ertek33") ); 3. oldal
Készítette: SaNandor, 2010., Veszprém
Fájlok kezelése: include("../itt/ezt.php"); A megadott fájlt beágyazza a programba. file_exist("../itt/ez.txt"); Adott fájl létezésének ellenőrzése. is_dir("../itt/ez.txt"); A megadott karakterlánc lehet-e fájl? is_writeable("file.txt"); A fájl írható-e? is_readable("file.txt"); A fájl olvasható-e? is_executable("file"); A fájl futtatható-e? fileatime("file"); A fájl utolsó megnyitásának ideje (UNIX időbélyeg formában!). filemtime("fájl"); A fájl utolsó módosításának ideje (UNIX időbélyeg formában!). filesize("fájl"); A fájl mérete. touch("fájl.nev"); Fájl létrehozása unlink("fájl"); Fájl törlése (Ha a jogosultságok engedik!). $fajl=fopen("ut/fajl", mod); Fájl megnyitása függvénnyel, ahol a mod a megnyitás módját jelenti, tehát r olvasásra, w írásra (ha nem létezik létrejön, ha létezik felülíródik), a hozzáfűzésre. $sor=fgets("fájl", bájt_hosszan); Sor kiolvasása fájlból adott bájt hosszan a sorvégig, vagy a fájl vége jelig. $szov=fread($fajl, bajt); Tetszőleges bájt hosszú adat kiolvasása fájlból. $adat=fgetc($fajl); Egy karakter kiolvasása. fseek( $file, bájttol); A kiolvasást adott bájttól kezdi (pozicionál). flock($file, mod); Fájl zárolása, ha mod=1, akkor olvasható, de nem írhazó, ha 2, akkor mást kizár, ha 3, akkor zároltat felszabadít. fputs($file, $adat); $adat változó tartalmát hozzáírja a fájl végéhez (plusz egy \n sorvég jelet). feof($fajl); Megadja mikor érünk a fájl végére. fclose($fajl); Fájl zárása. Mappák kezelése: is_dir($map); Jelölhet-e mappát? mkdir("mappanév", jogok); Mappa létrehozása jogosultsággal (0 és egy 0-7 közé eső szám). rmdir("mappa"); Mappa törlése. $mappa=opendir("mappa"); Mappa megnyitása. $readdir($mappa); Mappa tartalmának olvasása a mappa végéig. Karakterláncok alakítása: printf("%20s\n", "adat"); 20 karakter szélesen írja ki, majd soremelés jön (állandó széles adatmező hozható létre). Ha a szám után s található akkor az adat karakteres, más esetekben d decimális szám, b egész szám binárisként, c egész szám ASCII megfelelője, f lebegőpontos szám (tört), o egész szám, x egész szám hexadecimális megfelelője. A mezőhossz előtt a kitöltő karakterre utasítunk, számoknál + jobbra, - balra igazít. printf("%**4d", "4"); eredménye ***4, printf("%.2f", 2.3333); eredménye 2.33, mert lebegőpontos számnál kerekíthetünk is, itt kéttizedesre. sprintf(); Eze csak átalakít és nem ír ki. print $proba[2]; Egy karakterlánc 2 indexű tagját adja, mintha az tömb lenne (tehát a harmadik karaktert). strlen($szoveg); Szöveg hossza strstr($szoveg, "ezt"); Szövegrész keresése. strpos($szoveg, "ezt"); Szövegrész helyének keresése. substr($szoveg, 3, 4); Szövegrész kinyerése, a 3 indextől (tehát negyedik karakter) 4 hosszan. 4. oldal
Készítette: SaNandor, 2010., Veszprém
strtok($szoveg, "határoló"); Szövegrész kinyerése a határolóig (ciklusban futtatva a szöveg végéig keres). trim($szoveg); Szöveg elején és végén levágja az üres helyeket (tisztít). ltrim($szoveg); Csak a szöveg elejéről tisztít. strtoupper($szoveg); Nagybetűssé alakít. strtolower($szoveg); Kisbetűssé alakít. $tomb=explode(".", $kezdet); A . határolóig $kezdet szöveget tömbbé alakítja. Munkamenet változók: Amikor olyan változókat szeretnénk használni, melyeket több alprogramunk is azonosan használ (például felhasználó azonosítás, azonos szűrő adat lekérdezéseknél), akkor alkalmazhatók session_start(); A php program elején be kell írni ezt a függvényt, az első sorba a küldő és a fogadó oldalon (oldalak mindegyikén) is. Session_register("dirname"); Egy munkamenet változó bejegyzése (PHP 5-nél elhagyható). $_session['felirat']="Scriptek:"; Egy munkamenet változónak értékadás. session_is_registered(változónév); A munkamenet be van-e jegyezve? session_destroy(); Munkamenet szüneteltetése. Környezeti változók: $HTTP_USER_AGENT Böngésző neve és verziója $HTTP_ADDC Kliens IP címe $HTTP_REFRER Annak az oldalnak a címe, ami ide linkelte a látogatót $PHP_SELF Épp futó progi elérési útja $HTTP_GET_VARS Asszociatív tömb, az összes GET kéréssel $HTTP_POST_VARS Asszociatív tömb, az összes POST kéréssel header("Location: URL"); Egy adott URL-re küldi a böngészőt Kapcsolat MySQL adatbázissal: mysql_connect("Host azonosító", "felhasználó név", "felhasználó jelszó"); Csatlakozás kiszolgálóhoz mysql_select_db("adatbázis név", kiszolgáló azonosító); Adatbázis kiválasztása, kiszolgáló alapértelmezése az épp megnyitott, így elhagyható! mysql_errno(); Hiba esetén a hibaüzenet kódját adja. mysql_error(); Hiba esetén a hibaüzenet szövegét adja angolul. mysql_query(SQL_parancs, Kiszolgáló azonosító); SQL parancs futtatása, kiszolgáló alapértelmezése az épp megnyitott, így elhagyható! mysql_insert_id(); Az utolsó insert parancs során beállított automatikus növő mező értéke. msql_num_rows(eredményazonosító); Az azonosítóhoz tartozó táblában található sorok száma. msql_fetch_rows(eredményazonosító); Az azonosítóhoz tartozó táblában a következő sor kiolvasása Visszatérési értéke egy tömb, ami a sor összes mezőjét tartalmazza. msql_fetch_array(eredményazonosító); Itt asszociatív tömbként kapjuk vissza a sort, melynek indexei a mezőnevek! Igen hasznos függvény nagyobb adatbázisok esetén. msql_affected_rows(kiszolgáló); A legutóbb módosított sorok száma (kiszolgáló elhagyható). mysql_list_dbs(kiszolgáló); A kiszolgálón keresztül elérhető adatbázisok listája. mysql_tablename(azonosito, adatbázis_ sorszám); Adatbázisok nevei mysql_list_tables(dbnev, kiszolgáló); Egy adatbázis tábláinak nevei. mysql_num_fields(azonos); Lekérdezés után kapott eredménytábla mezőinek száma 5. oldal
Készítette: SaNandor, 2010., Veszprém
mysql_close(azonosító); adatkapcsolat bontása Példa egy kapcsolat megnyitására: $adatbazis = "Adatbázis név"; $kapcsolat = mysql_connect("127.0.0.1", "root", "jelszavam"); if (!$kapcsolat) {die('Nem lehet csatlakozni ' . mysql_error());} mysql_select_db ( $adatbazis ) or die ( "Nem lehet megnyitni az $adatbazis állományt " .mysql_error() ); Példa adatbázis lekérdezésre: $lista = mysql_query("SELECT * FROM szamtech ORDER BY eszktip, helysz, leltsz"); $rekordok=array(); while ( $fel=mysql_fetch_array($lista)) {$rekordok[]=$fel;} mysql_close($kapcsolat); Először kapcsolódunk az adatbázishoz, majd kiválasztjuk a kívánt rekordokat, végül a $rekordok asszociatív tömbbe feltöltjük azokat. Zárjuk a kapcsolatot és a tömbbe került rekordokkal már bármely PHP művelet elvégezhető. Példa adatbáziban adatfelvitelre: mysql_select_db ( $adatbazis ) or die ( "Nem lehet megnyitni az $adatbazis állományt" .mysql_error() ); $felvisz= "INSERT INTO szamtech (gepnev, helysz, leltsz) VALUES ('$gepnev', '$helysz', '$leltsz') "; mysql_query($felvisz) or die ("Sajnos nem tudtam adatot felvinni a táblába! ".mysql_error() ); Példa adatbázisban egy rekord módosítására: mysql_select_db ( $adatbazis ) or die ( "Nem lehet megnyitni az $adatbazis állományt" .mysql_error() ); $modosit="UPDATE szamtech SET gepnev='$gepnev', helysz='$helysz', leltsz='$leltsz', WHERE azon='$azon' "; mysql_query($modosit) or die ("Sajnos nem tudtam adatot módosítani a táblában! ".mysql_error() ); mysql_close($kapcsolat); PHP scriptek PHP utasítások beágyazása HTML oldalba: <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <meta http-equiv="Content-Language" content="hu"> 6. oldal
"; //HTML utasítás megadható scripten belül is $File = "Fiokok/fiok.htm"; //Értékadás echo date("Y.m.d. H:i", filemtime($File)); //Egy fájl utolsó módosítási idejének kiiratása echo-val ?> Egy a hívó által megnevezett fájl első 4 sorának kiiratása: A hívás történhet például Linkek formában is. Adat fogadás munkamenetből:
Készítette: SaNandor, 2010., Veszprém