Dinamikus weboldalak fejlesztése

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "Dinamikus weboldalak fejlesztése"

Átírás

1 Eszterházy Károly F iskola Matematikai és Informatikai Intézet Dinamikus weboldalak fejlesztése Király Roland Eger, 2010

2 Tartalomjegyzék 1. Bevezetés Tartalom kezel rendszerek CMS telepítése Ellen rz kérdések HTML és PHP használata Weboldalak programjának elkészítése Futtató környezet tesztelése Kezdeti lépések a programozáshoz Ellen rz kérdések A PHP nyelv alapjai Az output kezelése Változók és adatok Összetett adatok Vezérl szerkezetek Alprogramok Ellen rz kérdések Adatbázisok elérése PHP programokban DBMS rendszerek Hozzáférés adatbázis kezel khöz Az els kapcsolat Saját függvények kapcsolódáshoz Adatbázis kezel modul készítése Ellen rz kérdések Modulszerkezet Moduláris felépítés Menükezelés A menükezel rutinjai Ellen rz kérdések

3 6. Adatkezel alkalmazások készítése Adatbevitel Adatfeldolgozás Adatok küldése és beszúrása adatbázisba Ellen rz kérdések Listák generálása Adatok megjelenítése listákban Ellen rz kérdések Fájlkezelés Fájlok feltöltése a szerverre Képek kezelése és méretezése Ellen rz kérdések Weboldalak adminisztrációja Listák lapozása Rekordok törlése listából Egyszer jelszavas védelem Ellen rz kérdések Regisztráció és munkamenet indítás Felhasználók nyomkövetése Felhasználói regisztráció Egyszer capcha készítése Munkamenetek használata Ellen rz kérdések Sz rés és keresés Listák sz rése Keresés az adatbázisban Ellen rz kérdések

4 12.Kód újrahasznosítás Alapelvek Objektum alapú weboldal készítése Ellen rz kérdések Irodalomjegyzék 138 3

5 1. Bevezetés 1.1. Tartalom kezel rendszerek Telepíthet tartalomkezel rendszerek. A tartalomkezel rendszerek terjedésével egyre inkább általánossá válik az a nézet, hogy weboldalak készítéséhez elegend letölteni egy mások által erre a célra kifejlesztett CMS rendszert, majd, a szolgáltatónk által rendelkezésre bocsájtott tárhelyre másolni. Némi kongurálás után elindítható a weboldal és a felhasználók nyugodtan használhatják. Amennyiben nem akarjuk hosszú napokra a gépe elé szegezni magunkat, és programkódok gépelésével tölteni az id t azért, hogy egy-két oldalnyi szöveget megjelenítsünk, vagy éppen blogot írjunk a nagyvilág számára, az el re gyártott, Instant weboldalak kényelmes megoldást nyújtanak. Így van ez akkor, ha a CMS rendelkezik azzal a szolgáltatással, amire éppen használni szeretnénk. Mert ha nem, akkor talán jobb, ha mi írjuk meg azt a weboldalt, vagy modult, amire szükségünk van. És, ha ez nem elég, akkor is van még egy fontos szempont, ami miatt meg kell tanulnunk dinamikus weboldalakat készíteni. Tegyük fel magunknak azt a kérdést, hogy hogyan születnek a CMS rendszerek. Hogyan jönnek létre az Instant weboldalak. Bizonyosan nem úgy készülnek, hogy letöltünk az Internetr l egy el re legyártott CMS készít CMS-t. Ha így lenne, akkor is fennállna az a dilemma, hogy ez a letölthet CMS készít hogyan jön létre. Akárhogyan is ragozzuk a dolgot, értenünk kell a programozáshoz, és számos esetben, mikor a CMS már nem elegend, meg kell alkotnunk azokat a programokat, melyek kielégítik a felhasználók igényeit, mert akárhogy is tiltakozik ez ellen a programozók nagy családja, igenis a felhasználók támasztotta igények tartják életben és hajtják el re ezt a tudományágat. Mi is az a Tartalom Kezel Rendszer, vagy az angol rövidítés után CMS? Egy olyan félig elkészített weboldal, melyet némi konguráció, jelszó beállítás és egyéb kisebb trükkök segítségével néhány perc alatt be tudunk üzemelni. Egy általános CMS az alábbi elemeket tartalmazza: 4

6 Beléptet rendszer Adminisztrációs felület a tartalom kezeléséhez Hírek menü és blog Képgaléria Kedvencek és RSS hírszolgáltatás Fórum (ez általában egy integrált küls modul) Naptár és a hozzá tartozó szolgáltatások Eseménykezel rendszer Az oldal küls megjelenésének beállításai Egyéb, csak az adott CMS-re jellemz speciális funkciók Weboldalak készítésénél a fenti funkciók mindegyikének a m ködésével tisztában kell lennünk. Fontos, hogy ezeket a gyakorlatban is lássuk m ködni, mivel csak így tudunk hasonló modulokat készíteni. Ebben a jegyzetben a WordPress rendszerét fogjuk telepíteni. A választás azért erre a rendszerre esett, mert igen elterjed, másrészt pedig híres az öt perces telepít jér l CMS telepítése Els lépésként le kell töltenünk a Word Press aktuális verzióját. Nem kell feltétlenül ezt a CMS-t választani. Amennyiben a kedves olvasó ragaszkodik egy másik rendszerhez, próbálkozzon azzal, vagy akár egyszerre többet is kipróbálhat. A Word Press esetén a letöltést a weboldalon, a letöltés pontra kattintva indíthatjuk el. 5

7 Telepít használata. A telepítéshez szükségünk lesz egy szolgáltató által a rendelkezésünkre bocsájtott tárhelyre, vagy telepítenünk kell egy olyan CMS rendszert, ami Webszerver, PHP futtató környezet és adatbázis tárhely szolgáltatásokat nyújt. Adatbázis kezel rendszernek válasszunk SQL alapút, lehet ség szerint MySQL alapokon m köd rendszert. Ez azért fontos, mivel ebben a jegyzetben MySQL nyelv lekérdezéseket használunk. Jelenleg az XAMP és a WAMP szerverek elterjedtek a programozók körében, így hát mi az XAMP egy verzióját alkalmazzuk. Vegyük észre, hogy a szerver oldali környezet kialakítását is egy Instant programmal oldjuk meg kockáztatva ezzel azt, hogy egy valódi szerver telepítését soha nem tanuljuk meg. Tehát, ha nem találtunk ingyenes szolgáltatót - aminek egyébként nagyon kicsi az esélye -, akkor töltsük le a weboldalról az XAMP egy változatát, majd telepítsük. (Windows esetén a telepít ben való némi kattingatás után rendelkezésre is áll a webszolgáltatás. Linux operációs rendszer esetén mindképpen olvassuk el a telepítésr l szóló fájlt miel tt hozzálátunk a munkához. Egyébként a Linux változat beüzemelése sem tart tovább néhány percnél. Miután elindítottuk a webszervert, csak annyi dolgunk marad, hogy a Word Press fájljait bemásoljuk a htdocs könyvtárba. Ez az alapértelmezett könyvtár, mely a weboldalainkat tárolja az XAMP rendszerben, de változhat a konguráció során. Indítsuk el a program telepít jét a kedvenc böngész nkben. A program elkéri az adatbázishoz tartozó felhasználó nevet és jelszót, Meg kell még adnunk az oldal adminisztrátorának a nevét és jelszavát, valamint néhány olyan információt, amit a program nem tud kitalálni. (ha ezeket is ki tudná találni, talán nem is kellene hozzá felhasználó.. ). Ahogy elkészültünk a telepítéssel, a program tájékoztat minket err l és mindjárt el is kezdhetjük az oldalunk nomhangolását. Beállíthatjuk a küls megjelenésre vonatkozó paramétereket, és a nyelvet. Felvehetjük a felhasználóinkat, akik a leend oldalunkat használhatják, átszervezhetjük a modulokat, és mindent olyat megtehetnünk, amit az oldal 6

8 megenged a számunkra - komolyabb rendszerek esetén már a fogd és vidd technika segítségével is. Ennyi az egész. Ha a program README fájljában leírtak szerint jártunk el, programozás nélkül készítettünk el egy m köd képes weboldalt, mely fel van vértezve az Interneten elterjedt modulok mindegyikével. Sajnos ez az oldal nem igazán alkalmas speciális feladatok ellátására, vagyis csak azt tudja, amit a programozói beépítettek a rendszerbe. A rendszer továbbfejlesztése. A frissen telepített weboldal használata, kongurálása nagyon kényelmes és egyszer, de problémáink támadhatnak, ha szeretnénk valami különlegeset. Amennyiben az oldalt egy felhasználónknak készítettük - zetett is a programért - akinek eszébe jut, hogy szüksége volna saját funkciókra a programjában, melyet az általunk telepített CMS nem tartalmaz, nehéz helyzetbe kerülhetünk. A gyakorlott programozó ilyenkor átnézi a forráskódot és ha szerencséje van, sikerül átalakítania a programot úgy, hogy a kért funkció integrálására lehet vé váljon. Számos CMS tartalmazza a lehet séget a továbbfejlesztésre, de ez soha nem olyan egyszer, mintha saját programjainkat alakítanánk át. Meg kell értenünk más programozók forráskódjait és át kell alakítanunk úgy, hogy ne rontsuk el az eredeti funkciókat, de az újakat integrálni tudjuk. Ez nehéz feladat gyakorlott programozók számára is. Természetesen ett l még a CMS rendszerek nem rosszak, és nyugodtan használhatjuk ket. Nagyon jók ezek a szoftverek, de mindig csak arra a meghatározott célra, amire készítették ket. Ezt szem el tt tartva gondoljuk át, hogy az adott rendszer megfelel-e a számunkra hosszabb távon is. Ha igen, akkor bátran alkalmazzuk, ha viszont nem vagyunk ebben biztosak, inkább fogjunk bele a fejlesztésbe. Ez a jegyzet ebben nyújt segítséget, mivel bevezeti az olvasót a dinamikus weboldalak programozásának tudományába, és lépésr l lépésre bemutatja a CMS rendszerek csak a fejleszt k által ismert világát. 7

9 1.3. Ellen rz kérdések 1. Mit jelent a dinamikus jelz a weboldalak világában? 2. Milyen komponenseket tartalmaz a webszerver, ha adatbázis alapú, PHP kódú weboldalakat futtatunk rajta? 3. Milyen feladatokat lát el a webszerver? 4. Lehet-e módosítani a webszerverek kongurációját? 5. Mit jelent a CMS szó? 6. Mi az el nye a modulokra bontás technikájának? 7. Mit jelent a moduláris felépítés weboldalak esetén? 8. Milyen protokoll segítségével futnak a weboldalak? 9. Mi a webszerver feladata a PHP programok futtatása esetén? 10. Hogyan lehet publikus domain címhez jutni? 11. Milyen f bb funkciói vannak egy CMS alapú rendszernek? animaciok/tamopweb0006.avi animaciok/tamopweb0007.avi 8

10 2. HTML és PHP használata 2.1. Weboldalak programjának elkészítése Ahhoz, hogy weboldalakat tudjunk szerkeszteni, ismernünk kell a HTML nyelv alapjait. Tudnunk kell formázni a programok kimenetét, vagyis a webböngész ben megjelen tartalmat. A HTML nyelv használható szövegek, táblázatok, és képek esztétikus megjelenítésére. Segítségével képesek vagyunk deniálni a karakter kódolást, a különleges karaktereket, valamint utasítani tudjuk a kliens oldali böngész programot, hogy ne az alapértelmezett formázási beállításokat használja. Lehet ségünk nyílik egyedi megjelenés oldalak készítésére. A weboldal tulajdonosára jellemz színvilág és tartalom megjelenítésére. Sajnos a HTML nyelv nem alkalmas arra, hogy az interakciókat kezelni tudja. HTML forrásszövegekben nem tudunk szelekciót, iterációt szervezni. Nem tudunk adatbázisokhoz kapcsolódni, vagy függvényeket, eljárásokat készíteni. A pusztán HTML nyelven elkészített weboldalak hátránya, hogy statikus m ködés ek, ami azt jelenti, hogy a weboldalon megjelen szöveg, kép és egyéb információ nem változik meg csak akkor, ha az oldal készít je átírja a HTML fájlokat szövegszerkeszt segítségével. Gondoljunk bele abba, hogy ez mit jelentene egy valuta árfolyamokat és azok változásait leíró grakonokat tartalmazó weboldal esetén. A feladat megoldása szinte lehetetlen. Változó tartalom kezeléséhez, vagy interakció kezeléséhez mindenképpen szükség van programozási nyelvre és programra. Szükség van továbbá adatbázisokra - az adatok tárolásához - és elágazásokra, ciklusokra, függvényekre, valamint eljárásokra. A programok futtatásához futtató rendszert kell telepíteni, mely képes a szövegszerkeszt ben megírt forrásszöveg helyességét ellen rzi, fordítani és futtatni. A programok, forráskódok védelme is fontos feladat, mivel a weboldalak tartalmát a felhasználók letöltik a számítógépükre. A letöltött szöveget az operációs rendszerre telepített böngész program értelmezi és futtatja, vagyis 9

11 megjeleníti a bennük tárolt és leírt információt. A böngész program b vítmények segítségével kezeli a kép és hangfájlokat, képes a Flash és a JavaScript alapú programok futtatására. PHP, vagy más programozási nyelveken írt forráskódok futtatására viszont nem képes, de erre nincs is szüksége. Senki nem várja el a felhasználótól, hogy PHP alapú oldalak futtatásához letöltse a számítógépére a nyelv fordítóprogramját, kongurálja a futtató környezetet, tesztelje azt, majd javítsa a felmerül hibákat. A PHP nyelv használata esetén a weboldalak programja szervereken fut. A szerver üzemeltet je kongurálja a futtatási környezetet és az adatbázis kezel rendszert. Ez több szempontból is jobb így, mint a kliens oldali programok használata esetén. A forrásszövegek szerver oldali fordítása és futtatása komoly er forrás megtakarítást eredményez a kliens számítógépeken. Az adatok tárolása is a szerveren történik, ami az er forrásokkal való gazdálkodást tekintve szintén nem elhanyagolható, nem beszélve a biztonságról. A programok forráskódja nem látható a kliens számítógépeken, mivel oda csak a programok eredménye, vagyis az el állított HTML tartalom kerül letöltésre. A programok biztonságos futtatása egyszer bb feladat, mivel a forráskód és a forráskód logikája nem látható az ártó szándékú felhasználók számára. Az 2.1 ábra bemutatja a kliens és a szerver oldal m ködését. PHP programok beágyazása. A PHP programok szervereken futnak, a HTML szöveget viszont a kliens számítógép értelmezi. Az adatok a szerveren tárolódnak, de a kliens számítógépeken jelennek meg. Ez els látásra ellentmondásosnak t nik. A forráskód különböz részei különböz helyeken, más-más alkalmazások segítségével futnak, viszont a forráskódot egy fájlban is tárolhatjuk. A legtöbb fordítóprogram, valamint a futtató környezet egyaránt képes detektálni a számára értelmezhet forrásszöveget, így a PHP programokat is tetszés szerint be lehet ágyazni HTML forrásba. 10

12 2.1. ábra. Kliens szerver kapcsolat <BODY> <? echo " J e l e n l e g i r e g i s z t r á l t f e l h a s z n á l ó : ". $reguser ;?> </BODY> 2.1. program. PHP beágyazása HTML forrásszövegbe Történhet ez pontosan fordítva is. PHP programokban is generálhatunk HTML kimenetet a számítógépek böngész je számára. 11

13 for ( $ i =0; $i <10; $ i++) { echo "<TABLE><TR><TD>$ i. s o r </TD> </TR></TABLE>" ; } 2.2. program. PHP programból generált HTML kód Vagy teljesen külön is választhatjuk a programokat és a HTML kódot. Mindegy hogyan járunk el, a lényeg, hogy a programjainkat a megfelel módon és megfelel méret modulokba szervezzük, mert a jó tagolású és felépítés programot könnyebb átalakítani, vagy javítani. A programszöveget vagy funkció, vagy típus alapján részekre szokták bontani a forráskód kezelhet ségének megtartása érdekében. A kliens számítógépek böngész jében megjelen oldalakat is érdemes külön modulokban (ez legtöbbször egy önálló fájlt jelent) elhelyezni. Fontos továbbá a jó kezelhet ség szempontjából az is, hogy az adatbáziskezelést implementáló, a bejelentkezést, vagy a különböz listákat generáló kódrészleteket, és minden összetartozó programegységet függvényekbe, a függvényeket modulokba, vagy osztályokba szervezzük Futtató környezet tesztelése Miel tt elkészítenénk az els PHP alapú webprogramot, gy z djünk meg arról, hogy a szerverre telepített futtató környezet m köd képes-e. A teszteléshez be kell jelentkezni a szerverre. Ez a m velet kétféleképpen történhet. Feltehet leg az a számítógép, amin a fejlesztést végezzük, és az, ami webszerverként funkcionál nem ugyanaz a számítógép, ezért els ként kapcsolatot kell létesítenünk. Fájlok mozgatásához használjunk olyan fájlkezel programot, ami ismeri az FTP protokollt, terminál kapcsolat kialakításához viszont telepítsünk SSH, vagy Telnet kliensprogramot. Utóbbi nem javasolt, mivel Telnet protokoll futtatása esetén az adataink titkosítás nélkül közlekednek a hálózaton. 12

14 A szerver számítógép webkönyvtárában készítsünk egy fájlt index.php néven. Ügyeljünk arra, hogy a webszerver a különböz kiterjesztés fájlokat más-más sorrendben veszi gyelembe. Amennyiben van a könyvtárban egy index.html nev fájl, az fog futni és nem a php kiterjesztéssel rendelkez. A futtatás sorrendje egyébként nagyban függ a webszerver beállításaitól. A szerver web-könyvtárai. A könyvtár, amiben a fájlt el kell helyeznünk Linux operációs rendszer esetén a var/www könyvtár valamely alkönyvtára. A Linux rendszerre felvett felhasználói könyvtárak esetén ez a felhasználó home könyvtárának a gyökeréb l nyíló public_html könyvtár, vagy annak valamely alkönyvtára. Ahány alkönyvtár készül a public_html könyvtárba, annyi különböz weboldalt képes az adott felhasználó m ködtetni. A m ködési elv a következ : A kliens számítógép böngész programja kapcsolatot létesít a szerverrel. A kapcsolat alapértelmezés szerint a szerver számítógép 80-as virtuális portján keresztül jön létre [1]. A szerver a bejöv kérés hatására megkeresi a böngész által hivatkozott könyvtárat, majd a könyvtárban lév index.php fájlt. A fájlban található forráskódot értelmezi és végrehajtja. Amennyiben az index fájlban PHP programszöveget talál, lefuttatja a PHP program értelmez -fordító programja segítségével. A kész HTML kódot - amit a fájlban talált, vagy a PHP program generált - elküldi a kliens számítógépnek, ami értelmezi és megjeleníti a kliens oldal böngész jében ábra. Webböngész URL sávja Ahhoz, hogy mindez megtörténjen, a kliens böngész jébe (2.2 ábra) az alábbi URL-t, vagyis webcímet kell begépelni: 13

15 2.1. megjegyzés. A cím regisztrált domain név esetén, a.hu tartományban lehetne érvényes... Felhasználók webkönyvtárai esetén az oldalt a szerver neve, a felhasználó neve, és annak az alkönyvtárnak az elérési útja azonosítja, ahol az index fájl található. Ebben az esetben a www el tag elhagyása kötelez. A címben a ~ karakter a felhasználó neve elé kerül és arra utal, hogy egy felhasználói könyvtárban kell keresni az index fájlt. Miután elkészítettük az index fájlt, nyissuk meg a kedvenc szerkeszt programunkkal, majd írjuk bele a következ néhány sort: <? phpinfo ( ) ;?> 2.3. program. Webszerver ellen rzése A phpinfo a nyelv egy beépített függvénye, ami táblázatos formában megjeleníti a szerver beállításait, a változókat, melyek jellemzik a futtató környezetet, és minden olyan információt, ami a programozás és üzemeltetés szempontjából szükséges lehet. A táblázat amellett, hogy információkat szolgáltat, megmutatja azt is, hogy a szerver megfelel en m ködik-e. A 2.3 ábrán látható kimenethez hasonlót kell látnunk a böngész ben Kezdeti lépések a programozáshoz Miel tt elmélyednénk a PHP nyelv szabályaiban, készítsünk el egy egyszer programot, amely amellett, hogy motivál bennünket, példaként szolgál a komolyabb programok kivitelezésénél. Igaz, hogy a PHP OOP [2] nyelv. Az is igaz, hogy, teljesen külön lehet választani a HTML szöveget a forráskódtól és a CMS-ek készít i is így járnak el, mi mégis ágyazzuk be a forrásszöveget a HTML kódba. 14

16 2.3. ábra. Webszerver információs panel Ez a megoldás hosszú távon is használható, ha nem akarunk OOP alapú programokat írni, vagy kisebb fejlesztéseket végzünk, de ne feledjük, az OOP programok kódját újra lehet hasznosítani, valamint könnyebb ket tovább fejleszteni és karbantartani. Els lépésként készítsünk egy programot, mely rövid szöveges üzenetet jelenít meg a böngész ben. A kiírt szövegünk legyen a klasszikussá vált Hello Világ. A forráskód kizárólag HTML nyelv használatával a következ : 15

17 <!DOCTYPE HTML PUBLIC " //W3C//DTD HTML //EN" " http ://www. w3. org /TR/html4/ s t r i c t. dtd"> <HTML> <had> <TITLE>tesztprogram </TITLE> <meta http equiv=" content type " content=" text /HTML; charset=utf 8"> <meta http equiv=" content type " content=" a p p l i c a t i o n /xhtml+xml ; charset=utf 8"> <meta http equiv=" content style type " content=" text / c s s "> </had> <body> Hello Világ </body> </HTML> 2.4. program. HTML fejléc Mivel a programszöveg kizárólag HTML tag-eket, valamint a kiírásra szánt szöveget tartalmazza, fejlesszük tovább. Hogyan tudnánk a szöveget többször, egymás alá kiírni úgy, hogy a sorokat megszámozzuk? Kis számú sor esetén a másolás-beillesztés technológia segíthet rajtunk, de mit tehetünk mondjuk 1000 sor esetén, vagy ha nem egy konstans szöveget kell kiírni a kliens oldal képerny jére. Írhatunk programot, használhatunk ciklus utasítást, és kiolvashatjuk az adatokat adatbázisokból. A dinamikus weboldalak er ssége pontosan ebben a technikában rejlik. Készítünk egy rövid, de kifejez PHP programot, az adatainkat adatbázisban tárolhatjuk és HTML alapokon jeleníthetjük meg. Így a böngész nek szánt szöveget a PHP program generálhatja az adatbázisból érkez adatok alapján. Mivel adatbázisokat még nem tudunk használni, helyezzük el a kiírandó 16

18 szövegrészeket egy tömbben (tömbökr l kés bb). Ezután egy egyszer forciklus segítségével generáljuk le a megfelel HTML tegeket. <HTML> <had> <t i t l e >tesztprogram </ t i t l e > <meta http equiv=" content type " content=" text /HTML; charset=utf 8"> <meta http equiv=" content type " content=" a p p l i c a t i o n /xhtml+xml ; charset=utf 8"> <meta http equiv=" content style type " content=" text / c s s "> </had> <body> <? $szoveg = array ( "Európa", " Afrika ", " Ausztrália ", "Amerika", " Ázsia " ) ; $db = count( $szoveg ) ; for ( $ i =0; $i<$db; $ i++) { echo " Hello $szoveg [ $ i ]! <br>" ; }?> </body> </HTML> 2.5. program. HTML generálása A fenti forráskód sokkal általánosabb, mint a statikus HTML változat, mivel az adatokat egy tömbb l veszi, a kimenetet (2.4 ábra) pedig intelligens módon a rendelkezésre álló adatokból és a kiírandó mondat prexéb l állítja 17

19 össze ábra. A földrészes program kimenete Ne rettenjünk meg a forráskódban található speciális elemekt l. A kód els ránézésre bonyolultnak t nik, de nagyon hasonlít a C, C++ nyelvekre, vagy a Linux shell programjainak nyelvezetére. A $ jelek a változókat jelölik, a kiíró utasításban található HTML tegek pedig már ismer sek lehetnek számunkra. Azt viszont meg kell szoknunk, hogy a PHP programok készítésekor felváltva kell használnunk különböz programozási, vagy formátum leíró nyelveket, ráadásul egymásba kell tudnunk ágyazni ezeket. A programunk kimenete a 2.4 ábrán látható Ellen rz kérdések 1. Hova kerül a PHP program kimenete? 2. Milyen lépések hajtódnak végre a PHP alapú weboldalak böngész ben való futtatása esetén? 3. Mit jelent az URL rövidítés? 18

20 4. Milyen ismert programozási nyelveken tudjuk megszólítani a MYSQL adatbázis kezel rendszert? 5. Hogyan kell a PHP forrásszövegeket a HTML kódba ágyazni? 6. Mi a weboldalak f fájljának a neve (alapbeállítás esetén)? 7. Milyen kiterjesztéssel rendelkeznek a PHP programokat tároló fájlok? 8. Milyen sorrendben veszi a következ kiterjesztéseket a webszerver?.htm,.html,.php 9. Fordít-e a PHP tárgykódot? 10. Alapértelmezés szerint hol tárolódik a weboldalak programja? animaciok/tamopweb0001.avi animaciok/tamopweb0002.avi animaciok/tamopweb0008.avi animaciok/tamopweb0009.avi animaciok/tamopweb0010.avi 19

21 3. A PHP nyelv alapjai 3.1. Az output kezelése Mivel a PHP programok írása, és a különböz szerver oldali alkalmazások használata a programozás során nem a megszokott egy fejleszt eszköz-egyprogram stílusban történik, a nyelv megismerését is kezdjük rendhagyó módon. Nem a vezérl szerkezeteket és az alap utasításkészletet vesszük sorra. Helyette megvizsgáljuk azt, hogy a programjaink kimenete hogyan állítható el a kliens számítógépek böngész je számára. Hogyan tudjuk a változók, vagy a kifejezések értékét kiírni HTML szövegekbe ágyazva. A PHP programrészeket a <??> vagy a <?php?> jelek közé kell gépelni, ugyanis ez alapján tudja a webszerver kikövetkeztetni, hogy PHP nyelv forrásszöveg következik, és azt, hogy az meddig tart. A PHP nyelvben a szövegek kiírásához használhatjuk az echo, vagy a print függvényt. Az echo jobban átláthatóvá teszi a programok forráskódját (a kevesebb zárójel miatt) és egy kicsit gyorsabbá is. <? echo " Hello " ; echo " $ i. sor " ; echo $ i. ". sor " ;?> 3.1. program. Szöveg kiírása A kiírandó tartalmat " " és ' ' jelek közé kell zárni. mindkét formának más a jelentése és más-más hatást gyakorolnak a szöveg típusú adatokra, a változókra ($a) és a kifejezésekre ($a + 2). A ' ' jelek közé írt változók nem helyettesít dnek be, értékük helyett a kódban szerepl azonosítójuk íródik ki. 20

22 <? $a = 2 ; echo ' $a ' ;?> 3.2. program. Idéz jelek használata A forráskód eredménye nem a 2, hanem a $a szöveg. Ez azért van így, mert a ' ' közé írt karakterek úgy jelennek meg a képerny n, vagyis a kliens számítógép böngész programjának a felületén, ahogy azokat leírta a programozó, tehát minden leírt jelet karakterré kényszerítve. Amennyiben a változó tartalmát szeretnénk kiíratni, a " " aposztrófokat kell használnunk. Igazság szerint, ha nem kívánunk a változó tartalmán kívül más szöveget kiírni, a dupla " el is hagyható. <? $a = 2 ; echo "$a<br>" ; echo $b ;?> 3.3. program. Idéz jelek használata Ahogy a forráskódban látható, minden utasítást ; zár le. Az elhagyása szintaktikai hibát eredményez, ami nem túl szerencsés weboldalak esetén, ahol a programot a szerver minden futtatáskor újra lefordítja és a hiba minden futáskor láthatóvá válik a képerny n. Ez a m ködési elv, ahogy a kés bbiek során láthatjuk, számos lehet séget hordoz magában, de a lehet ségek mellett komoly hibákat is eredményezhet, mely hibákat a rendszer azonnal meg is mutat a felhasználónak. Összetett adatok és kifejezések megjelenítése. Sokkal bonyolultabb a kiírás és a megfelel formátum el állítása összetett adatok, tömbök, vagy a 21

23 kifejezések használata mellett. <? $t = array ( 1, 2, 3, 4 ) ; $db = count( $t ) ; //a $t tömb elemszáma for ( $ i = 0 ; $ i < $db ; $ i++) { echo " $ i + 1<BR>" ; }?> 3.4. program. Adatok megjelenítése A fenti (3.4) forrásszövegben a ciklus nem a $i + 1 kifejezés értékét írja ki, hanem a $i változó értékét, valamint minden érték után a +1 szöveget program. A kiírás eredménye Ez azért van így, mert a kiíró utasításban a $i + i nem értékel dik ki. A kifejezés értékét el ször ki kell számítani, és csak ezután lehet kiírni. A jó megoldás az, ha a kifejezést a szövegt l elkülönítve, egy másik echo használatával írjuk ki. Ebben az esetben a kiíró utasítás már az értéket, vagyis az eredményt jeleníti meg. 22

24 <? for ( $ i = 0 ; $ i < $db ; $ i++) { echo $ i + 1 ; echo "<BR>" ; }?> 3.6. program. Szövegrészek kiírása Lehet ségünk van arra is, hogy a kiírásra szánt szöveget darabokból illesszük össze. Erre a feladatra a PHP nyelvben nem a C, C++, vagy C# megszokott + jelet használjuk, hanem a "."-ot. Sajnos a. operátor nehezen olvashatóvá teszi a forráskódot, de némi gyakorlással, gyorsan meg lehet barátkozni ezzel a szintaxissal.?> $t = array ( 1, 2, 3, 4 ) ; $db = count( $t ) ; $e = ". tömbelem = " ; for ( $ i = 0 ; $ i < $db ; $ i++) { echo $ i. $e. $t [ $ i ]. "<BR>" ; }?> 3.7. program. Szöveg darabjainak összeillesztése A program futásának az eredménye: 23

25 1. tömbelem : 1 2. tömbelem : 2 3. tömbelem : 3 4. tömbelem : program. Tömb elemeinek listája Ahogy láthatjuk a forráskódban, kissé körülményes az adatok kiírása, de ne csodálkozzunk ezen. Több nyelvet ágyazunk egymásba, és több rendszert használunk egyszerre. Miután elsajátítottuk a PHP programok használatát, ezt a tulajdonságot ki is használhatjuk olyan feladatok megoldására, mint a forráskód generálás, vagy a dinamikus adatbázis lekérdezések készítése Változók és adatok A PHP a gyengén típusos nyelvek közé tartozik. A programokban használt egyszer skalár változókat (egészek, szövegek, törtek, vagy a karakterek) nem kell deklarálni. A deklaráció elhagyása mellet azért vannak kikötések a változók használatára vonatkozóan, de ezek nem túl bonyolultak. Miel tt használunk egy változót, értéket kell adnunk neki. Ha ezt nem tesszük meg, a futtatórendszer leállítja a program futását, és hibaüzenetet ír a képerny re (vagy a szerver kongurációjában megadott helyre). <? $ p r e f i x = ". tömbelem értéke : " ; for ( $ i = 0 ; $ i < 10; $ i++) { echo $a + $ i ; $a++; }?> 3.9. program. Értékadás 24

26 Az összetett adatszerkezetek esetén viszont, mint a tömbök, rekordok, osztályok, vagy fájlok, a típust be kell vezetni. <? $t = array ( 1, 2, 3, 4, 5, 6 ) ; $szoveg = array ( " Ázsia ", " Afrika " ) ; c l a s s t e s z t o s z t á l y {... az o s z t á l y bels v i l á g a... }?> program. Osztályok deniálása A gyenge típusosság nem jelenti azt, hogy a rendszer a típusokkal nem tör dik, vagy nem kezeli ket. Inkább csak rugalmasabb a változó kezelés, ami rengeteg lehet séget rejt magában a dinamikusan m köd weboldalak programozása során. Ne feledjük el azt sem, hogy a szám típusú, valamint a különböz szöveges adatok megjelenítése is szöveges formátumban történik, mivel a böngész egyszer HTML kódot kap a szerver oldali programtól. Az adatok és a kifejezések minden esetben szöveggé konvertálódnak, ha kiírásban szerepeltetjük ket, így a formázás és a darabok összeillesztése a direkt adatkonverziók elhagyása mellett sem okoz különösebb problémát. Ez a lehet ség is a gyenge típusosság eredménye. Egy változót akár több céllal, többféle típusú adat tárolására is alkalmas. A $a = 1 értékadást követheti a $a = "szöveg", majd a $a = 5 újbóli értékcsere után az $a változó szerepelhet akár egy kifejezésben is. A nyelv típusrendszere megenged, de vigyázzunk, a sok lehet ség sok hibalehet séget is magában hordoz. Elkövethetünk olyan hibákat, melyeket a program tesztelése során észre sem veszünk, de a felhasználó bizonyosan az els alkalommal el fogja állítani 25

27 ezeket. A teljes kör tesztelés egyszer programok esetén is nagyon körülményes. Néhány elágazást tartalmazó forrásszöveg több millió különböz végrehajtási ágat eredményezhet. Nem beszélve arról, hogy a tesztelés nagyon költséges dolog. Átgondoltan és körültekint en bánjunk a típusokkal és a változókkal, hogy ne kelljen hosszú órákat forráskódjavítással töltenünk Összetett adatok Ahhoz, hogy az összetett adatszerkezetek használatát jobban megérthessük, csoportosítsuk a PHP nyelv típusait. Háromféle típus létezik. A legegyszer bb a skalár, vagyis a számok, karakterek és minden egyszer típus. A másik nagy csoport az összetett adatok csoportja. Ide tartoznak a tömbök, listák, string-ek és az osztályok. A tömböket a nyelv kétféleképpen is képes kezelni. Hivatkozhatunk a tömbökre indexelhet vektorokként, vagyis hash táblaként. Ezt a típust asszociatív tömbnek is nevezzük. Asszociatív tömb esetén az egyes elemeket kulcsokkal érhetjük el. Ez a gyakorlatban azt jelenti, hogy nem a $tomb[$index], vagy $tomb[1], hanem a $tomb["kulcs"] formulával érhetjük el az adott elemet. Mikor vektorként kezeljük a tömböket, egyszer en indexek segítségével hivatkozunk az elemeikre. Minden elem eléréséhez az indexén keresztül vezet az út, vagyis, ha ismerjük az adott elemnek a tömbben elfoglalt helyét (sorszámát), a $tombvaltozo[$index] formulával hivatkozhatunk rá. Természetesen a PHP nyelv is ismeri a több dimenziós tömb fogalmát. $t [ 0 ] [ 0 ] = " 0.0 " ; $t [ 0 ] [ 1 ] = " 0.1 " ; program. Több dimenziós tömb Az elemekre minden dimenzióban tetsz leges módon hivatkozhatunk, vagyis az egyik dimenzióban indexekkel, a másikban asszociatív módon. 26

28 $t [ 1 ] [ " e l s o " ] = 1 ; echo $t [ 1 ] [ " e l s o " ] ; program. Tömbelemek felhasználása Létrehozhatunk tömb típusú változót az array, vagy a list függvények segítségével, esetleg direkt módon, az elemek megadásával. $t1 = array ( 1, 2, 3 ) ; $t2 [ 0 ] = 1 ; $t2 [ 1 ] = 2 ; $t2 [ 2 ] = 3 ; program. Elemek megadása Asszociatív tömböket is könnyen készíthetünk az elem index párosok deniálásával, vagy az array függvénnyel. $a1 [ " e l s o " ] = 1 ; $a1 [ "masodik" ] = 2 ; $a2 = array ( " e l s o " => 1, "masodik" => 2 ) ; program. Az array kulcsszó Az a1 és a a2 tömbök ugyanazokat az elemeket tartalmazzák, csak más az elemek neve. Nézzünk meg egy bonyolultabb példát, ami szemléletes módon mutatja be a tömbök használatát. A példaprogramban feltöltünk egy n x m méret mátrixot véletlen számokkal. A mártix elemeit két egymásba ágyazott ciklus segítségével hozzuk létre. A tárolt értékeket direkt módon adjuk meg és egy véletlen szám generátorral hozzuk létre. 27

29 <? $M = array ( ) ; $n = 10; for ( $ i = 0 ; $ i < $n ; $ i++) { for ( $j = 0 ; $j < $n ; $j++) { $M[ $ i ] [ $j ] = rand ( 1, 9 ) ; } } for ( $ i = 0 ; $ i < $n ; $ i++) { for ( $j = 0 ; $j < $n ; $j++) { echo $M[ $ i ] [ $j ]. " " ; } echo "<BR>" ; }?> program. Tömb feltöltése A tömbök kiíratását a vezérl szerkezetek ciklusokról szóló részébében vizsgáljuk meg részletesebben, de a 3.15 program eredményét megmutatjuk. 28

30 program. Mátrix kiírása A mátrix feltöltését, és kiírását külön ismétlésekben valósítottuk meg, mert alapvet programozási hiba ugyanabban ciklusban kiíratni a tömbök és listák elemeit, amelyben feltöltjük ket. A listák feldolgozásához sokkal jobb, ha a foreach vezérl szerkezetet használjuk Vezérl szerkezetek A PHP nyel tartalmazza a C, C++ és a C# programoknál megszokott vezérl szerkezeteket, elágazásokat, ciklusokat és a foreach listakezel t. Vizsgáljuk meg a vezérl szerkezeteknek a PHP nyelv változatait. Elágazások. A nyelv tartalmazza a feltételes elágazás egyszer és összetett formáját. Írhatunk if {} else {}, vagy switch típusú elágazásokat. 29

31 <? $a = 2 ; i f ( $a % 2 == 0) { echo "$a páros " ; } else { echo "$a páratlan " ; }?> program. Feltételes elágazás Természetesen egy utasítás esetén a { } jelek el is hagyhatóak, de az elhagyásuk nem javasolt, mivel a program újabb utasításokkal való b vítése setén nagyon körülményes utólag kitenni ket. Természetesen írhatunk több ággal rendelkez elágazásokat is az elif ágak bevezetésével, vagy a switch feltételes utasítás használatával. Az elif ágak használata nehézkes, ezért lehet ség szerint válasszuk a switch típusú elágazást, amit a következ példa be is mutat számunkra: 30

32 <? $a = 2 ; switch ( $a ) { case 1 : echo " hétf " ; break ; case 2 : echo "kedd" ; break ; case 3 : echo " szerda " ; break ; case 4 : echo " csütrötök " ; break ; case 5 : echo " péntek " ; break ; case 6 : echo "szombat" ; break ; case 7 : echo " vasárnap " ; break ; default : echo " hibás sorszám " ; break ; }?> program. switch vezérl szerkezet A switch feltételes utasításban az egyes ágakat a case kulcsszó vezeti be. Az ágak végén a break szónak és egy ;-nek kell szerepelnie. Ha ezt elhagyjuk, az adott ág után következ minden egyes ág le fog futni a következ break; kulcsszóig. A default szó az egyéb ágat vezeti be, mely el is hagyható. (A napok neveit kiíró programrészlet természetesen egy tömb és egy ciklus utasítás segítségével hatékonyabban megvalósítható.) A switch utasítás kit n en használható weboldalak menükezelésének a megszervezésére. Erre a lehet ségre kés bb még visszatérünk. Ciklus utasítások. Ciklusokból a PHP nyelveben háromféle típus létezik, kiegészítve a foreach utasítással, amit listák, valamint tömbök bejárására használhatunk. 31

33 <? for ( $ i = 0 ; $ i < 10; $ i++) { echo " $ i <BR>" ; } echo "<BR>" ; $ i = 0 ; while ( $ i < 10) { echo " $ i <BR>" ; $ i++; } echo "<BR>" ; $ i = 0 ; do { echo " $ i <BR>" ; $ i++; } while ( $ i < 10)?> program. Ismétlések A fenti három ciklus utasítás ugyanazt a feladatot végzi el, vagyis kiírják a képerny re a 0-9 számokat, mindegyiket új sorba. A while és a do-while ciklusok esetén gondoskodnunk kell a ciklusból való kilépésr l. A do-while a C, C++ és a C# programok mintájára a ciklusban maradás és nem a ciklusból való kilépés feltételét tartalmazza. A foreach kissé eltér a megszokott C formától. A PHP nyelvben nem a foreach ( s k a l á r változó in l i s t a k i f e j e z é s ), hanem a 32

34 foreach ( l i s t a k i f e j e z é s as l i s t a k i f e j e z é s )... formát használjuk. $t = array ( 1, 2, 3, 4, 5, 6 ) ; foreach ( $t as &$ i ) { echo $ i ; } program. Foreach listák feldolgozására A &$t azért szükséges, mert a foreach utasításban nem a tömb, vagy a lista elemeire hivatkozunk, hanem magára a tömbre, így azt nem skalár típusú változóként kell kezelnünk, hanem tömb típusként Alprogramok A nyelv alapjai nem bonyolultak, különösen nem azok számára, akik már megtanultak más nyelveken programozni. Adatbázisból származó adatokkal m köd oldalak készítéséhez viszont mindenképpen el kell sajátítanunk a függvények és eljárások használatát megjegyzés. Az alprogramokat a továbbiakban egységesen függvénynek fogjuk nevezni. Ahol szükséges, kitérünk a típusokra és a visszatérési érték kezelésére is... Ahhoz, hogy függvényeket tudjunk készíteni, tisztában kell lennünk a formális, és aktuális paraméterek fogalmával, valamint a függvényhívások módjával. Függvények használata. Az alprogramokat a function kulcsszó vezeti be. Ezután következik a paraméterlista () között, majd a függvény blokkja, melyet {} zárójelek közé zárunk. 33

35 A () zárójelek a paraméterekkel nem rendelkez függvények esetén sem hagyhatók el. A függvény blokk tartalmazza az utasításokat és a return kulcsszó után függvény a visszatérési értékét megadó kifejezést. A return kulcsszó és az utána álló kifejezés elhagyható, ha típussal és visszatérési értékkel nem rendelkez függvényt szeretnénk el állítani. Vizsgáljuk meg a következ programlistát, aminek a függvényei nagyon szemléletesek, és a kés bbi munkánk során hasznosak lehetnek. Figyeljük meg, hogy a függvények paramétereinek nem kell típust adni. A paraméterátadás a függvények esetén nagyon fontos és elhagyása komoly hibákhoz vezethet, mivel a globális változók közül csak azok láthatóak a függvények törzsében, amelyeket regisztráltunk globális változónak 34

36 <? function h e l l o ( ) { echo " Hello " ; } function hi ($BODY) { echo "Hi ".$BODY. "! " ; } function amount ($A, $B) { return $A + $B ; } function sum( $LIST ) { $SUM = 0 ; for ( $ i = 0 ; $ i < $db ; $ i++) { $SUM += $LIST [ $ i ] ; } return $SUM; } function trim ($TEXT, $LIST ) { return str_replace ($LIST, "",$TEXT) ; } function createid ($NAME, $BADList, $GOODList) { $NAME = str_replace ( $BADList, $GOODList, $NAME) ; return rand ( ).$NAME; }?> program. Függvények használata 35

37 Az els függvény nagyon egyszer, és a hasznossága is vitatható (Hasonló a helyzet a másodikkal is.). Paramétere nincs, és ha meghívjuk, akkor kiírja a Hello szócskát, vagyis ránk köszön. A második függvény már némiképp nagyobb tudású. Ennek a bemenete egy név (vagy egy tetsz leges szöveg). Ahogy meghívjuk, a kapott paraméter elé írja Hi szót, majd a végére egy felkiáltó jelet ragaszt. Az amount függvény a paraméterként kapott két számot összeadja, majd visszatér az összeggel. A sum egy listát kap paraméterként, majd visszaadja a listában szerepl elemek összegét megjegyzés. Szöveges adatok esetén a szövegrészek konkatenáltjával tér vissza minkét függvény... A trim már valamivel hasznosabb, mivel ez a függvény a paraméterként kapott szövegb l törli, vagyis üres szövegre cseréli a második paraméterben megkapott részszó összes el fordulását. A függvényben leírt m veletsor webprogramok írásakor rutin feladatnak számít, ha beviteli mez k, vagy rlapok adatait dolgozzuk fel. A createid a trim-hez hasonlóan m ködik, de ennek a paramétere egy azonosító, vagy név. A nemkívánatosnak vélt elemeket ($BADList) lecseréli a jó elemeket tartalmazó listában ($GOODList) szerepl párjukra, majd az eredmény elé ragaszt egy viszonylag nagy egész számot, így biztosítva annak egyediségét. Ez a függvény egyedi azonosítók, vagy fájlnevek generálásánál szinte elengedhetetlen, de nagyon hasznos képek, vagy szöveges fájlok kezeléséhez megjegyzés. A digitális fényképez gépek generált neveket használnak a fényképek tárolásához. A névadási konvenció legtöbbször igen egyszer algoritmussal történik. A kép neve az Image szóval kezd dik, majd a készítés sorrendjében egy sorszám követi. A sorszámot sokszor szóköz el zi meg és () zárójelek közt szerepel. Végül a kiterjesztés következik, amit a felhasználók számítógépe, vagy már a fényképez is nagybet sre alakít. Ez egy Unix-Linux operációs rendszeren futó webszerver számára kész rémálom. A névben szerepl szóköz, a zárójelek és a nagybet s kiterjesztés 36

38 (.JPG,.PNG) lehetetlenné teszi a képek szerverre történ másolását és a névre való hivatkozást... Ahogy a lista végére érünk, láthatjuk, hogy PHP nyelven függvényt írni könnyed és hasznos elfoglaltság. Mindezek mellet az osztályok készítése (OOP), a kód újrahasznosítás, a könyvtári modulok írása, és ezáltal hatékony programok el állítása szinte elképzelhetetlen alprogramok használata nélkül Ellen rz kérdések 1. Hogyan kell változót deklarálni PHP programban? 2. Milyen típusú tömbök léteznek a PHP nyelvben? 3. Hogyan lehet tömböket hatékonyan feldolgozni a PHP programokban? 4. Hogyan tudunk PHP forrásszövegb l HTML kódot generálni? 5. Hogyan kell függvényeket deniálni PHP programokban? 6. Hogyan lehet egy PHP függvényben elérni a globális változókat? 7. Milyen összetett adatszerkezetek deniálhatóak a PHP nyelvben? 8. Hogyan hivatkozunk a skalár változókra PHP-ban? 9. Hogyan m ködik a foreach utasítás PHP-ban? 10. Milyen vezérl szerkezeteket tartalmaz a PHP nyelv? 11. Milyen ciklusutasítások használhatóak PHP-ban? 12. Mivel jelöljük a PHP programokban a változókat? 13. Milyen lehet ségeket kínál a PHP nyelv az adatok megjelenítésére, kiírására? 14. Mit jelent az asszociatív tömb fogalma? 15. Milyen típusokat deniálhatunk PHP-ban? 37

39 16. Hogyan hivatkozhatunk asszociatív tömbök elemeire? 38

40 4. Adatbázisok elérése PHP programokban 4.1. DBMS rendszerek A dinamikus webmotorok nagy részének adatai, menüpontjai és minden változó tartalom, mely az oldalakon el fordul adatbázisokban tárolódik. Ez nagyon hasznos tulajdonság, mivel az adatbázis-kezel k (DBMS - Database Management System) segítségével az adatok bevitele, kiírása és az adatbiztonság kezelése lényegesen egyszer bb. Az adatbázis kezel rendszerek a szokásos feladatok mellet az olyan jelleg problémákat is megoldják, amelyekkel a hálózaton m köd adatkezel alkalmazásoknál feltétlenül számolni kell. Az adatokat egy id ben több felhasználó is elérheti, ezért biztosítani kell a párhuzamos hozzáférést. Adatbevitel esetén biztosítani kell a kizárólagos hozzáférést, hogy ne forduljanak el különféle anomáliák [4] Az adatok tárolása nem feltétlenül egy gépen történik, ezért biztosítani kell az elosztott adatelérést Az adatbázisok tábláinak indexeit karban kell tartani A hozzáférési szinteket szabályozni kell Biztosítani kell tárolt eljárások [3] írásának lehet ségét, valamint az adathozzáférést különböz hálózati eszközökön keresztül Számos feladat van tehát, amit l egy jó adatbázis kezel megkíméli a programozót. Sokféle adatbázis kezel létezik. Köztük vannak jobbak, rosszabbak. A megfelel kiválasztása sarokpontja lehet a jó webprogram elkészítésének. Ha a gyorsaság a cél és az adattárolás során kevés információt tárolunk elég valamely kisebb és kevésbé hatékony rendszert választanunk, mint a MySQL. Abban az esetben viszont, ha nagy mennyiség adatot tárolunk, vagy mozgatunk válasszuk az er teljesebb és nagyobb tudású PSQL vagy MSSQL 39

41 rendszereket. Soha ne kövessük el azt a hibát, hogy mi magunk akarjuk az adatkezelést programját megoldani, hacsak nem ez a feladatunk Hozzáférés adatbázis kezel khöz Bármilyen adatbázis kezel t is választunk, az els feladatunk az lesz, hogy megvizsgáljuk a programozásra használt nyelv adatbázis kezel rutinjait, és azokat a könyvtári modulokkal, amelyek az adatbázis kezel vel folytatott párbeszédek lebonyolításáért felel sek. Emlékezzünk vissza, hogyan m ködnek a weboldalak. A kliens gépek kapcsolódnak a webszerver 80-as portjához. A szerver a hozzá intézett kérés, vagyis az URL alapján megkeresi a kéréshez tartozó könyvtárat és azon belül az index fájlt. Abban az esetben, ha a fájlban található PHP forrásszöveg, a rendszer a PHP fordítóprogramját segítségül hívva lefordítja, és a programban szerepl utasításokat végrehajtja. Az adatbázis kezelést ezen a ponton lehet megvalósítani a programokban elhelyezett adatbázis kezel rutinok segítségével. Ez a gyakorlatban azt jelenti, hogy a nyelv által biztosított függvényeket a megfelel paraméterekkel ellátva a forrásszövegbe ágyazzuk. Mi az egyszer ség kedvéért a MySQL rendszert fogjuk használni, mert nyitott forráskódú [5], ingyenesen hozzáférhet, könnyedén kongurálható és nagyon elterjedt alkalmazás Az els kapcsolat Adatbázis kapcsolat létesítéséhez rendelkeznünk kell saját adatbázis-kezel rendszerrel, vagy hozzáférést kell szereznünk egy mások által üzemeltetett DBMS változathoz. Mindegy, hogy az els fejezet során bemutatott webszervert mi magunk készítettük el, és annak adatbázis kezel jét használjuk, vagy a hozzáférés igénylését választottuk, mindkét esetben rendelkeznünk kell egy felhasználói névvel és egy jelszóval. Ezekre az adatokra szükségünk van a program megírása közben. 40

42 A legtöbb szolgáltató nagyon ügyel a felhasználók és a saját adataik védelmére, ezért a szerverhez való hozzáférést a lehet legszigorúbb módon korlátozzák. Mindezek miatt el fordulhat, hogy az adott szerverre SSH, vagy Telnet kapcsolattal nem, kizárólag FTP-vel férhetünk hozzá. Sajnos ebben az esetben kizárt, hogy a MySQL rendszert közvetlenül, vagyis parancsosból használhassuk a táblák létrehozására. A megoldás a problémára az, hogy a táblák létrehozását is programok segítségével végezzük el, de miel tt ezt megtennénk, tervezzük meg azt a táblát, melyben az adatainkat tárolni fogjuk. Gyakorlásnak készítsünk egy egyszer alkalmazást, amely felhasználók adatait tárolja egy kezdetleges MiniFaceBook alkalmazás számára. A képen látható tábla megfelel lesz a tárolásra: 4.1. ábra. A MiniFaceBook táblája Készítsük el azt az SQL query-t, mely a táblánkat létrehozza. Az alábbi lista tartalmazza az SQL nyelv utasítást, melyet a kés bbiekben a PHP programunk segítségével elküldünk a DBMS számára. 41

43 CREATE TABLE users ( i d i n t primary key auto_increment, name varchar (255), p i c t u r e varchar (255), cv text ) 4.1. program. Felhasználók táblája Kezdetnek ennyi is elég lesz. Ha szükségünk lesz további adatokra, a táblát kiegészíthetjük az alter table utasítás segítségével. Most inkább vizsgáljuk meg, hogy mit jelent és milyen mez ket tartalmaz az SQL utasítás. Az id mez a tábla els dleges kulcsa (primary key). Erre minden tábla esetén szükség van, mivel ez a mez azonosítja a rekordokat. A mez típusa int, vagyis egy el jeles egész szám. Az auto_increment módosítás azt jelenti, hogy az adatbázis kezel re bízzuk ennek a mez nek a karbantartását. A rendszer adja az értéket és a törlések, módosítások után is gondoskodik a megfelel következ érték megadásáról. A módosítót használva, a mez t a beszúrások és törlések során sem kell kezelnünk. A második mez a rekordokban szerepl személyek neveit hivatott tárolni. A típusa egy 255 karakter hosszú varchar, mely a MySQL lekérdez nyelvben a STRING típus megfelel je. A picture mez a személyekhez tartozó képeket fogja kezelni. A képeket nem az adatbázisban tároljuk majd, hanem a háttértáron a programjainkat tartalmazó fájlok mellett. A táblába csak a képek neveit és a hozzájuk tartozó elérési utakat szúrjuk be, ezért itt is elegend a varchar típus. Az utolsó mez be a személyek önéletrajzát vihetjük be. Erre e célra 42

44 egy 255 karakter hosszú változó nem elegend, ezért választottuk a text típust. Ahhoz, hogy a táblát létre is hozzuk, kapcsolódnunk kell az adatbázis kezel höz és el kell küldenünk feldolgozásra az elkészített query-t. A következ programlista tartalmazza a forráskódot, ami ezt a feladatot el is végzi. A forrást egy fájlba kell leírnunk, majd el kell helyeznünk a weboldalunk gyökérkönyvtárában. Ahhoz, hogy le is fusson, a böngész ben, a tanult módon hivatkozni kell rá. 43

45 <? $USERNAME = ' username ' ; $PASSWD = ' password ' ; $DBNAME = ' webbok ' ; $conid = mysql_connect( ' l o c a l h o s t ', $USERNAME, $PASSWD) ; i f (! isset ( $conid ) ) { echo "Hiba a kapcsolódás során hibaüzenet : ". mysql_error ( ) ; } mysql_select_db($dbname) ; $querystr = "CREATE TABLE users ( i d i n t primary key auto_increment, name varchar (255), p i c t u r e varchar (255), cv text ) " ; mysql_query( $querystr ) or die ( "Hiba a l é t r e h o z á s során... <BR>". $querystr ) ; mysql_close ( $conid ) ; echo "A tábla s i k e r e s e n l é t r e j ö t t... < br>" ; echo $querystr ;?> 4.2. program. Tábla létrehozása PHP programból Semmi esetre ne frissítsük a böngész ben a programot, mert a tábla létrehozása után az újra nem tud létrejönni, és csak újabb hibaüzeneteket kapnánk eredményül. Hibás program esetén sem fog a program a frissítések hatására megjavulni. A program futása után az A tábla sikeresen létrejött feliratnak kell megjelenni a böngész ben. Hiba esetén viszont az adatbázis kezel t l érkez 44

46 hibaüzenetnek, vagy az általunk kiírt hibának. Ha a Hiba a kapcsolódás során... kezdet sort látjuk, a mysql_connect függvény környékén keressük a hibát. A Hiba a létrehozás során üzenet, akkor jelenik meg, ha a query szövegét rontottuk el. Ha túl vagyunk a hibakeresésen, vizsgáljuk meg a forrásszöveget (ennél a programnál nem ügyeltünk sem a karakterek megfelel kódolására, sem a HTML kimenet min ségére. Ne csodálkozzunk hát, ha az ékezetes bet k helyett furcsa karakterek jelennek meg a képerny n.) A kód els sora a mysql_connect függvény hívását tartalmazza. Ennek a függvénynek többféle paraméterezése létezik. A mi programunkban a függvény els paramétere a localhost szó, mivel az adatbázis kezel és a webszerver egyazon gépen foglal helyet. A localhost jelentése az, hogy a helyi hurokra kell kapcsolódni, vagyis a IP címre [1]. Ez a paraméter kiegészülhet az adatbázis eléréséhez használt virtuális port számával. A második, és a harmadik paraméter az adatbázisok eléréséhez szükséges felhasználó nevet, és jelszót tartalmazza. Ezeket az adatokat érdemes védeni és egy helyen tárolni. Egyrészt azért, hogy ne törhessék fel a rendszerünket, másrészt, ha megváltoznak, ne keljen ket a program több pontján átírni. A függvény visszatérési értékét tároljuk egy változóban $conid abból a célból, hogy a következ feltételes elágazásban a kapcsolódás sikerességét meg tudjuk állapítani. Sikertelenség esetén hibaüzenetet írunk ki a böngész ablakába. A mysql_select_db függvény paramétere az adatbázis nevét tartalmazó változó. A név és a jelszó mellet ezzel az információval is rendelkeznünk kell. az adatbázis azonosítóját a szolgáltatónktól kapjuk, vagy mi hoztuk létre saját rendszerünkön. Ebben az adatbázisban tárolódnak a tábláink, így a jelenleg használt users tábla is. A $querystr változóban helyeztük el a tábla létrehozását leíró parancsot. Az SQL utasításokat nem kell feltétlenül változóban tárolnunk, de érdemes, mivel így hiba esetén ki tudjuk íratni ket a képerny re hibajavítási, vagy ellen rzési céllal. 45

47 A mysql_query függvény elküldi az SQL parancsot a DBMS számára. Ha függvény valamilyen okból elbukik, a közvetlenül utána írt kivételkezel átveszi az irányítást és kiírja a hiba lehetséges okát. A mysql_close függvénynek a kapcsolat megszüntetése a feladata. Erre minden esetben szükség van, mert igaz, hogy a nyitva maradt kapcsolatok el bb utóbb bezáródnak, de a nyitott kapcsolat még sebezhet bbé teszi a könnyen támadható webes alkalmazásokat. Az adatbázisokkal dolgozó alkalmazások írásakor mindig ügyeljünk arra, hogy a kapcsolatokat a lehet legrövidebb id n belül zárjuk le. Másrészt ne számítsunk arra sem, hogy a kapcsolat a következ percben még nyitva van. Gondoljuk végig, hogy a weben tevékenyked felhasználók miként használják a programokat. Néha kattintanak, el szednek egy régebbi címet, majd frissítik a böngész ablakát. Akár hosszasan is várhatnak a monitor el tt, mire újra kattintanak valamire. Azt feltételezni, hogy a kapcsolat a két kattintás között eltelt id alatt is fenn áll, butaság. Ha rosszul írjuk meg a programot és nem gondolunk erre a körülményre, könnyen el fordulhat, hogy a kapcsolat magától bezáródik mire a felhasználónk rákattint a következ lekérdezésünkre. A programunk a legjobb esetben is egy hibaüzenetet biggyeszt a képerny re. A mi programunk ennél sokkal okosabb. Ha befejezte a munkáját, lezárja a kapcsolatot, majd tájékoztat minket a sikerr l Saját függvények kapcsolódáshoz Az adatbázisokkal való kommunikáció az alábbi, egymástól jól elkülöníthet lépésekb l áll: Kapcsolódás a rendszerhez Adatbázis kiválasztása Query el állítása Query elküldése a szervernek Eredmény feldolgozása 46

48 Kapcsolat bontása Hiba esetén a hiba kezelése Ezek a rutinok ugyanabból a néhány lépésb l, vagy utasítás sorozatból állnak, melyek szinte csak a paraméterekben térnek el (a felhasználó neve, a jelszó, vagy az SQL utasítás, amit a szervernek küldünk). Kézenfekv megoldás a különböz rutinokat csoportokba foglalni, majd függvényeket írni, amely függvények bemen paraméterei leírják a változó információt Adatbázis kezel modul készítése Az adatbázis kezel függvényeket érdemes önálló modulba helyezni, mert így a modult kés bb bármely általunk készített weboldal programja mellé elhelyezhetjük, és a benne tárolt függvényeket tetszés szerint meghívhatjuk. Ez a kód újrahasznosítás elve, amit tovább javíthatunk azzal, hogy a függvényeket osztályokba helyezzük, és az osztály példányát használjuk fel a programjainkban. Ne felejtsük el, hogy a PHP objektum orientált nyelv. Ez a megoldás akkor is nagyon hasznos, ha kés bb a weboldalhoz tartozó adatbázis kezel rendszert lecseréljük. Az adatbázis-kezel függvények egy helyen vannak, ezáltal könnyebb megtaláljuk ket. Az alacsony szint adatbázis kezel m veleteket ki tudjuk cserélni úgy, hogy a függvényeink interface részét nem alakítjuk át, csak a függvények blokkjában szerepl utasításokat. Ha ezután az adott függvény nem egy MySQL rendszerhez kapcsolódik, azt a program több része észre sem fogja venni. Az, hogy a programjainkat platform függetlenre készítjük el egy alapvet programozási technológia. Ezt köztes middleware-ek, vagy más néven layerek elhelyezésével valósítják meg. A követhet ség és az egyszer ség elvét követve mi a függvényes megoldást választjuk és az osztály készítését kés bbre hagyjuk. 47

49 Már csak az a kérdés, hogy milyen csoportokba soroljuk az adatkezel lépéseit. A csoportosítást érdemes a különböz funkciók mentén elvégezni. Kell egy csoport a kapcsolat létrehozásához, egy a query-k elküldéséhez, és egy a platform függetlenség megtartása érdekében a kapcsolat bontásához. (Ez egy igen rövid függvény lesz, de hasznos) Készítsük el az adatbázis kezel modulunkat és ezt is helyezzük el a megfelel könyvtárba, az index.php fájl mellett. A korábban megírt tábla létrehozás rutint nem kell ebbe a modulba integrálni, mert annak minden funkcióját kiváltjuk a modul függvényeivel. <? #====DB module==================================== # Author : Szerz # Date : # TODO : üggvények PSQL r e n d s z e r h e z # Change l o g : # : Mysql függvények kommentjei #================================================= #TYPE: : connect ( ) : i n t function connect ( ) { $ID = mysql_connect($host, $USER, $PWD) ; id (! isset ( $ID ) ) { return " e r r o r : ". mysql_error ( ) ; } return $ID } 4.3. program. Adatbázis kezel modul 48

50 #TYPE: : s e l e c t _ d b (DBNAME: s t r i n g ) : void function select_db ($DBNAME) { mysql_select_db($dbname) ; } #TYPE: : query1 ( querystr : s t r i n g ) : void function query1 ( $querystr ) { mysql_query( $querystr ) or die ( " e r r o r ". mysql_error ( ) ) ; } #TYPE: : query2 ( querystr : s t r i n g ) : array function query2 ( $querystr ) { $ r e s u l t = mysql_query( $querystr ) or die ( " e r r o r ". mysql_error ( ) ) ; return $ r e s u l t ; } #TYPE: : c l o s e (ID : i n t ) : void function c l o s e ( $ID ) { mysql_close ( $ID ) ; }?> 4.4. program. Adatbázis kezel modul Vegyük sorra, hogy milyen elemeket tartalmaz a könyvtári modulunk. Rögtön az elején található a modulra vonatkozó minden fontos információ. Ez a rész komment, és nem tartalmaz semmi olyat, ami a program futását befolyásolná, de ennek ellenére mégis nagyon fontos szerepe van. A fejleszt k az itt leírt információk segítségével tájékozódhatnak a forráskód életciklusát érint minden fontosabb információról. 49

51 A függvények el tti TYPE kezdet részek a függvényék és a paramétereik típusáról tájékoztatják a programozót. A program m ködését ez a rész sem befolyásolja (akár el is hagyható), de alkalmas dokumentáció generálására, és arra, hogy a függvény összes fontos tulajdonságát leírjuk, megkönnyítve ezzel a program továbbfejlesztését. Erre a célra használhatunk már létez dokumentációs eszközöket, vagy kitalálhatunk sajátot. Az utóbbi sokkal hasznosabb, mivel a hozzá tartozó elemz program megírásával nagyon sokat tanulhatunk. A connect, a select_db és a close függvények a korábban megismert funkciókat látják el. A két különböz query függvény feladata viszont eltér, ezért is van bel lük kett. A query1 a beszúrás, módosítás és törlés típus lekérdezéseket hajtja végre, míg a query2 azokat, melyek adatokat szolgáltatnak a programunk felé további feldolgozásra megjegyzés. Vegyük észre, hogy a függvények blokkjainak cseréje, vagy átírása más adatbázis kezel utasításaira egyáltalán nem változtatják meg a függvények felhasználásának a módját... Mivel a PHP nem készít tárgykódot, a kész modult elég az alkalmazás többi fájlja mellé másolni, majd minden olyan helyen láthatóvá tenni, ahol használni szeretnénk. Ez a gyakorlatban azt jelenti, hogy azokban a programokban, melyekben a modul függvényeit használni akarjuk, el kell helyezni egy include, vagy egy require függvényt a modul nevével paraméterezve. 50

52 <? #f e l h a s z n á l á s i helyen require "dbmodule. php" ; #vagy require_once "dbmodule. php" ; #í g y nem d u p l i k á l h a t j u k a l i n k e l é s t, #ha e s e t l e g nem f i g y e l n é n k oda?> 4.5. program. Modulok linkelése Platform-független adatbáziskezel készítéséhez a fenti query2 függvény nem elegend. A függvény hívási helyén sajnos szükség van mysql specikus függvényekre ahoz, hogy a DBMS fel l érkez adatokat feldolgozzuk. <?... while ( l i s t ( $v1, $v2,..., $vn ) = mysql_fetch_row( $ r e s u l t ) ) {... }...?> 4.6. program. Adatok feldolgozása A probléma a mysql_fetch_row függvénnyel van, mivel a f program minden olyan részén meg kell hívnunk, ahol az adatokat fel szeretnénk dolgozni. Megoldásként átalakíthatjuk a query2 függvényt úgy, hogy a fetch_row funkcióit valósitsa meg, vagyis bontsa sorokra a rekordlistát, majd helyezze egy asszociatív tömbbe az eredményt. 51

53 #TYPE: : query2 ( querystr : s t r i n g ) : array function query2 ( $querystr ) { $ l i s t a = array ( ) ; $ r e s u l t = mysql_query( $querystr ) or die ( " e r r o r ". mysql_error ( ) ) ; while ( $ l i n e = mysql_fetch_assoc( $ r e s u l t ) ) { $ l i s t a [ ] = $ l i n e ; } return $ l i s t a ; } 4.7. program. Módosított query A módosított query2 függvény els sora deniál egy tömböt az array() függvény meghívásával. Az SQL lekérdezés eredményét egy while ciklusban soronként belerakja a $line tömbbe. A kapott tömböt a f program a következ képp tudja feldolgozni: két foreach egymásba ágyazásával minden hasznos információ kinyerhet a az eredmény listából. A küls ismétlés a sorokat adja, a bels pedig egy mintaillesztés segítségével kiválasztja az adott sorból a mez neveket, és a mez k tartalmát. 52

54 ... $ l i s t a = query2 ( ' s e l e c t from tablename ' ) ; foreach ( $ l i s t a as $ l i n e ) { foreach ( $ l i n e as $k => $v ) { echo "$v a kulcs, $k az adat<br>" ; } } program. Adatfeldolgozás mintaillesztéssel Az adatfeldolgozásnak ez a módja elég általános ahhoz, hogy a f program bármely részén, vagy akár más programokban is fel tudjuk használni az adatbázis kezel modulját. A forrásszövegben már csak egy olyan rész van, melyr l eddig nem beszéltünk, a mintaillesztés a bels foreach-ben. foreach ( $ l i n e as $k => $v ) program. Modulok linkelése A $line változó tartalma - ami egyébként egy asszociatív tömb egy elemének felel meg - egy key => value formájú adat. Az els része a tömb adott elemének a kulcsa (neve), a második pedig a kulcshoz tartozó adat (érték). A mintaillesztés során a $k változóba bekerül a kulcs, a $v változóba pedig a kulcshoz tartozó, ezért van szükség a formulában a => szelektor használatára megjegyzés. Ha ezután sem értjük a kódot, olvassuk el gyelmesen a tömbök kezelésér l szóló fejezetet... A modult ezzel a kis módosítással általános felhasználásúvá alakítottuk, mivel ügyeltünk arra, hogy a függvények paraméterezést l függ en minél 53

55 több programban fel lehessen azokat használni. Az adatbázis kezelést átlátszóvá tettük a platformfüggetlen interface elkészítésével, így az adatbázis kezel rendszer cseréje során a f programot nem kell megváltoztatni. Minden olyan módosítás, ami az adatkezelést érinti elvégezhet a modul függvényeinek átalakításával, vagy az inteface megtartása mellett a modul teljes cseréjével. A befektetett energia, és a rengeteg forrásszöveg haszontalannak t nhet, de hosszabb távon mindenképpen megéri Ellen rz kérdések 1. Milyen lépésekb l áll az adatbázis kapcsolat felépítése? 2. Hogyan ellen rizhet le az adatbázis kapcsolat felépítésének sikere? 3. Hogyan készíthetünk SQL táblákat PHP programokban? 4. Hogyan kell feldolgozni a több rekorddal visszatér SQL lekérdezés eredményét? 5. Milyen el nyökkel jár az adatbázis függvények modulokba sorolása? 6. Hogyan hozhatunk létre SQL táblákat. 7. Hogyan adhatunk parancsokat a DBMS számára. 8. Milyen eszközöket biztosít a PHP nyelv az adatbázis kezeléshez? 9. Hogyan kell lezárni az adatbázis kapcsolatot: 10. Hogyan kerülhet el a többszörös include, vagy require függvények használata esetén a többszörös fájl linkelés? animaciok/tamopweb0003.avi animaciok/tamopweb0005.avi 54

56 5. Modulszerkezet 5.1. Moduláris felépítés Miután elkészítettük az adatok tárolásához szükséges táblát, megírtuk az adatbázis kezel rutinokat tartalmazó könyvtári modult, ne feledkezzünk meg arról sem, hogy a hálózaton mindenki számára elérhet, böngész ben m köd alkalmazást fogunk készíteni. A programot valószín leg fokozatosan tovább kell fejlesztenünk a felmerül igények alapján. Ha mindezeket szem el tt tartva újratervezzük a programunkat, hamar beláthatjuk, hogy szükségünk van egy keretrendszerre, amelyben leírhatjuk a menükezelést, a menüpontokat és a tartalmukat tároló fájlokat ábra. Moduláris felépítés A különböz oldalak forrásszövegeit érdemes csoportosítanunk. Gondoljunk vissza az els fejezetben megismert CMS moduljaira, vagy menüszerkezetére. Miel tt tehát hozzákezdenénk az adatkezel megírásához, készítsük el a keretprogramot, melyet az index.php fájlban fogunk eltárolni. Ebben a fájlban fogjuk leírni az oldal HTML kódját, vagyis a megjelenését. Ide linkeljük a menükezel programrészeket, a menüpontok el állításához 55

57 szükséges kódot, és a menük hatására megjelen oldalak kódjának betöltése is ebben a részben kap helyet. Ha ez sikerül, akkor az index.php fájlt már csak arra használjuk, hogy az újabb menük, vagy funkciók programjait integrálhassuk. Az oldalunk felépítése így némiképp hasonlítani fog a CMS rendszerek szerkezetére. Ez bizonyára azért van így, mert a CMS-ek programozói is logikusan gondolkodva építik fel a programjaik szerkezetét. A 5.1 ábrán láthatjuk a moduláris szerkezet rajzát. Az ábra abban lesz a segítségünkre, hogy a modulszerkezetet jobban átlássuk és megérthessük. 56

58 <HTML> <had> <t i t l e >tesztprogram </ t i t l e > <meta http equiv=" content type " content=" text /HTML; charset=utf 8"> <meta http equiv=" content type " content=" a p p l i c a t i o n /xhtml+xml ; charset=utf 8"> <meta http equiv=" content style type " content=" text / c s s "> </head> <body> <? require "dbmodule. php" ;?> <table c l a s s=header> <tr> <td><? include " header. php" ;?></td> </tr> <tr> <td c l a s s=menu><? include "menu. php" ;?></td> <td c l a s s=content> <? include " content. php" ;?></td> </tr> </table > </body> </html> 5.1. program. Modulszerkezet Az 5.1 lista, amely a modulszerkezet programját mutatja be, a HTML kód mellett tartalmazza a stíluslapra mutató hivatkozást is, valamint PHP blokkokat. A blokkok kötelez en a <??> jelek között foglalnak helyet, hogy a webszerver felismerje a forrásszövegben leírt utasításokat. 57

59 5.1. megjegyzés. A stíluslapot leíró.css kiterjesztés fájlokat az index mellett kell elhelyezni, vagy gondoskodni a hozzáférésr l.... A forráskód néhány pontján elhelyezett include függvények paramétere az adott ponton betöltend fájlok neve (vagy elérési útja és neve). Most készítsük el fejléc HTML kódját, amely segítségével betöltünk egy képet, valamint elhelyezünk egy rövid szöveget, ami a weboldal címeként funkcionál. Ezt a programot el kell mentenünk a header.php fájlba. <table c l a s s=header width=760> <tr> <td><img s r c=images /header. jpg ></td> <td>weboldal f e j l é c e </td> </tr> <table > 5.2. program. Fejléc szerkezete Az program úgy fog m ködni, mintha futás közben másolnánk a helyére a paraméterként kapott fájlban leírt forráskódot, majd le is futtatnánk azt. Az include függvény számos lehet séget kínál a programozó számára a dinamikus kódgenerálás, és kódátalakítás területén. Ezeket a lehet ségeket mi is ki fogjuk használni, méghozzá arra, hogy a menüpontokhoz tartozó tartalmak közül mindíg csak az adott menünek megfelel t mutassuk meg a böngész ben. A menüpontokat tartalmazó kódrészlet lehet akár egyszer HTML szöveg is, de a menüket generálhatjuk listákból is megjegyzés. Az elágazásban szerepl, de eddig még hiányzó fájlokat készítsük el, majd másoljuk ket a weboldal könyvtárába, ha nem szeretnénk további hibaüzeneteket kapni.... Azért, hogy a weboldal a CMS rendszerekhez hasonló módon m ködjön, tárolhatjuk a menüket is adatbázisban. A következ részben mindkét, vagyis a statikus, és a dinamikus megoldásra is mutatunk példát. 58

60 5.2. Menükezelés Menüpontok létrehozása. A menüpontok, valamint a hozzájuk tartozó linkek tárolására létre kell hoznunk a mgfelel táblát. A tábla az 5.2 ábrán látható mez ket tartalmazza, és a korábban tanult módon hozhatjuk létre. CREATE TABLE menutable ( i d i n t primary key auto_increment, name varchar (255), link varchar (255) ) 5.3. program. Menüpontok tárolása 5.3. megjegyzés. Vegyük észre, hogy a linkeket tartalmazó mez igen rövid, mindössze 255 karakter hosszú. Szerencsére ez nem baj, mivel a mez ben nem az interneten használt hosszú URL-eket tároljuk, hanem az index.php fájl nevét, és néhány változó tartalmát (lásd kés bb). Hosszabb linkek esetén használhatunk nagyobb teherbírású mez ket... A menüpontok táblában való tárolása lehet vé teszi számunkra, hogy kés bb a menük készítéséhez biztosítsunk olyan adminisztrációs felületet, ahol a felhasználóink új menüpontokat adhatnak a programhoz, törölhetik, és módosíthatják azokat. A menükezel forráskódját az 5.4 programlista tartalmazza. A modul a korábban elkészített, és az adatbázis kezel modulban megírt függvényeket használja az adatok eléréséhez. 59

61 <? $conid = connect ( ) ; select_db ( "webbok" ) ; $q=" s e l e c t name, l i n k from menutable" ; $res = query2 ( $q ) ; c l o s e ( $conid ) ; echo "<table c l a s s=menutable>" ; while ( l i s t ( $menutitle, $ l i n k )=mysql_fetch_row( $res ) ) { echo "<tr ><td> <a c l a s s=menu h r e f=index. php?d=". $ l i n k. ">". $menutitle. "</a></td></tr>" ; } echo "</table >" ;?> 5.4. program. Menüpontok tárolása A forrásszöveg els néhány sora az adatbázis kapcsolat felépítéséhez szükséges forráskódot tartalmazza, a további részek pedig a menüpontok lekérdezését. Újdonság az eddigiekhez képest az a ciklus, amely a menüpontok nevéb l, és a hozzájuk tartozó linkekb l felépíti a menüszerkezetet leíró HTML forrást a böngész számára. A while ciklus addig fut, amíg a lekérdezés rekordokat ad vissza, vagyis ha az eredmény 4 rekord, akkor négyszer. A ciklus minden futása során a list függvényben elhelyezett változókba tölt dik a mysql_fetch_row függvény által visszaadott rekordban szerepl mez k értéke. Az els rekord mez je az els változóba, a második mez a második változóba, és így tovább. A mi esetünkben a $menutitle változóba a name mez értéke, a $link változóba a link mez értéke kerül. A link mez csak a menüpont számát tartalmazza, és nem a menüpont 60

62 tartalmát leíró fájl nevét (URL). Sajnos ez a megoldás küls hivatkozások kezelését nem teszi lehet vé. A mez k és a változók sorrendje és darabszám is fontos. Amennyiben három változóba szeretnénk betölteni négy mez értékét az utolsó mez elveszik. A változók neve viszont nem lényeges, de a program érthet bb és olvashatóbb, ha a funkcionalitás után nevezzük el ket. A náv lehet ség szerint legyen hasonló a mez nevéhez, de utaljon a funkcióra. A forráskódban a ciklus blokkja a kapott adatok alapján el állítja a menüpontokat, beírja a nevüket a <a...></a> tegek közé, és a href= részhez elhelyezi az oldalra mutató hivatkozás linkjét A menükezel rutinjai <? i f (! isset ($_GET[ "d" ] ) ) {$_GET[ "d" ] = 0;} switch ($_GET[ "d" ] ) ) { case 1 : include "menu1. php" ; break ; case 2 : include "menu2. php" ; break ; case 3 : include "menu3. php" ; break ; case 4 : include "menu4. php" ; break ; default : include " kezdolap. php" ; break ; }?> 5.5. program. Menük kezelése Menüpontok tartalmának betöltése. A menükezelés kódjában, amely vagy az index fájlban, vagy a tartalmat kezel modulban kap helyet, az els feltételes elágazásnak nagyon fontos szerepe van. Elhagyása esetén a program már els indításakor leáll, mivel a PHP nyelvben a változó els értékadáskor jön létre. Ha a felhasználó nem kattint egy menüpontra sem, márpedig erre nem 61

63 sok az esélye az oldal els beletör désekor, a d változónk létre sem jön, de a következ sorban már hivatkozunk rá. Ez súlyos hiba, ezért kell odaírni a forráskód elejére az elágazást, ami ezt a lehet séget vizsgálja. Az isset függvény a paraméterként kapott változóról megmondja, hogy az létezik, vagy sem. Mivel a feltételes elágazásban a! operátorral tagadtuk az eredményt, a feltétel akkor teljesül, ha még nincs d változó. Ilyenkor a d a 0 értéket kapja, mert ez jelenti a programunk számára az alapértelmezett m veletet, vagyis a kezd lap betöltését. Minden más esetben, vagyis amikor a d-nek már van értéke, nem kell hozzányúlni, mivel az érték a menüpontokra való kattintás során jött létre. Az oldalunk tehát úgy m ködik, hogy az els betöltéskor, vagyis amikor a kliens számítógép hivatkozik rá, a d értéke automatikusan 0 lesz. Ekkor a switch default ága fut le és betölti a kezd lapot. Ha az oldal használója valamely menüpontra kattint, az megváltoztatja a d értékét és az értéknek megfelel ágban deniált oldal fog betölt dni. Annak az oka, hogy a d változóra a $_GET["d"] kifejezéssel hivatkozunk, az az oka, hogy az Apache webszervereken a globális változók használatát korlátozták a REGISTER_GLOBALS direktíva OFF értékre állításával. Ez nem minden szerveren van így. Természetesen a rendszer üzemeltet je megváltoztathatja a direktíva értéket. Szerencsére a mi programunk minden esetben jól m ködik, mivel az oldalhoz tartozó munkamenetben tárolja az értékeit megjegyzés. Ezt a megoldást használják a FORM és a fájlkezelés esetén is, csak az adatátvitelre használt tömbök neve más ($_POST $_FILE)... A menük kezelésére használhatunk más módszert is, de a következ t semmiképp ne tegyük: Ne adjuk át a fájlok neveit URL-ben a következ módon: http : //... index. php?d= f i l e. php Ha így teszünk, akkor a fájl nevét átírva bármilyen más, a szerveren 62

64 elérhet fájl tartalmát megjeleníti a kliens oldal böngész je. Ehhez csak annyit kell tenni, hogy az URL-t átírjuk: http : //... index. php : d=/e t c / passwd Az eredmény katasztrofális lesz, mivel a menükezel kódrészlet a passwd fájlt az include függvény segítségével beolvassa, majd kiírja a böngész ablakába. Ez a biztonsági rés a webszerverek fejl désével egyre kevésbé használható ki, de akkor is biztonsági rés, amire ügyelni kell. Abban az esetben, ha nem akarunk dinamikus menükezelést, a menük forráskódját egyszer en csak bele kell írnunk HTML kódba. Ekkor sajnos új menüpont hozzáadása csak a forráskód szerkesztésével lehetséges. Az 5.6 programlista tartalmazza a statikus menük leírását: <table c l a s s=menutable width=150> <tr ><td> <a c l a s s=menu h r e f=index. php?d=0>kezd lap</a> </td></tr > <tr ><td> <a c l a s s=menu h r e f=index. php?d=1>menü1</a> </td></tr > <tr ><td> <a c l a s s=menu h r e f=index. php?d=2>menü2</a> </td></tr >... </table > 5.6. program. Statikus menü készítése Természetesen a menüpontok kiválasztása esetén lefutó forráskód nem változik, mivel az csak a menüpontok hatására létrejöv d változó értékét gyeli, egyébként teljesen független. 63

65 5.4. Ellen rz kérdések 1. Hogyan kell modulokat, fájlokat PHP programokba linkelni? 2. Milyen webszerver beállítások teszik szükségessé a $_GET, $_SET és a $_FILES tömbök használatát? 3. Hogyan kezeljük a dinamikus weboldalak esetén a globális adatokat? 4. Milyen protokollok segítségével érhet el a webszerver könyvtára? 5. Milyen következményekkel jár a REGISTER_GLOBALS paraméter OFF értékre állítása? 6. Mit azonosítanak az URL-ek különböz részei? 7. Lehet-e adatokat, fájlokat mozgatni a kliens és a szerver számítógép között? 8. Hogyan érhetjük el az el re kidolgozott PHP függvényeket tartalmazó modulokat? 9. Miért érdemes a weboldalak egyes funkcióit külön fájlokban elhelyezni? 10. Mivel jelezzük a webszerver számára, hogy a HTML kódban PHP szkript következik? 11. Lehet-e indexek segítségével elérni az asszociatív tömbök elemeit? 64

66 6. Adatkezel alkalmazások készítése 6.1. Adatbevitel Az weboldal modulokra bontásának mintájára próbáljuk meg az adatbevitelt is a lehet legegyszer bben megoldani. A webes felület nem teszi lehet vé az adatok közvetlen beolvasását. Mivel nem tudunk egyszer beolvasó utasításokat használni, el kell gondolkodnunk a lehet ségeinken. Hogyan is m ködnek a dinamikus weboldalak? A webböngész elküldi a kéréseit a szerver 80-as portja felé. A webszerver feldolgozza a kérésben szerepl URL-t, és a benne hivatkozott oldalt megkeresi a gyökérkönyvtárban, majd a fájlban található PHP forrásszöveget lefuttatva el állítja a kimenetet, amit visszaküld a böngész nek ábra. Adatok áramlása a weben Láthatjuk, hogy a felhasználótól jöv adatok megszerzése lényegesen bonyolultabb, mint az operációs rendszeren futó, és felhasználói felülettel rendelkez programoknál. Webalkalmazások inputjának kezeléséhez kézenfekv megoldás a webes 65

67 rlapok, közismert nevükön a form-ok használata. A form a HTML nyelvben használható egység, mely kontrollokat tartalmazhat. A kontroll felhasználói interakciót segít elem, melynek számos fajtája létezik. Az elemek listáját gyakran kiegészítik - kliens oldali szkriptnyelven írt speciális kontrollokkal megjegyzés. Legtöbbször Java alapú kontrollokat használunk... A formokat a HTML kódba, vagy PHP programokba ágyazva írhatjuk le ahogy ezt a 6.1 programlistában is láthatjuk megjegyzés. A form-ok használatát csak annyira részletezzük, amennyire a feladatok megoldásánál szükségünk lesz erre. Megpróbálunk kizárólag azokra az attribútumokra koncentrálni, amik az adatkezelésnél elengedhetetlenek... <form action=use. php method=po s t enctype=multipart /form data> <input type=t e x t name=szoveg> <input type=submit name=btn1 v a l u e="ok"> </form> <? echo "<form attribútumok> form é p í t e l e k </form>" ;?> 6.1. program. Formok készítése Vizsgáljuk meg az épít elemeket, amelyek segítségével a 6.1 programban szerepel form-ot létrehoztuk : Az action=use.php rész azt jelenti, hogy a form adatait az use.php fájlban elhelyezett programmal dolgozzuk fel. A method=post arra utal, hogy a form POST típusú, vagyis továbbküldi az adatokat a feldolgozó rutinokat leíró programrész felé. 66

68 a multipart/form-data attribútumra azért van szükség, hogy kés bb a fájlok kezelésénél a $_FILES változóba bekerüljenek a feltöltésre szánt fájlokat leíró, és azok feldolgozásához szükséges adatok. Az rlapokban használható kontrollok elegend támogatást nyújtanak, hogy bármilyen adatot el tudjunk juttatni a kliens oldaltól a szerverig és vissza, ezért érdemes megvizsgálnunk a fontosabbakat. a text mez a rövid szöveges adatok beolvasására használható. <input type=text name=szoveg...> a textarea egy páros HTML nyelvi elem, mely egy több soros szöveg bevitelére alkalmas szövegdobozt hoz létre. A <textarea> és a </textarea> tag-ek közé írhatunk szöveget, ami megjelenik a kontroll felületén. A rows és a cols attribútumokkal a szövegdoboz sorainak és oszlopainak a számát adhatjuk meg, a name attribútum pedig a kontorllhoz rendelt változó nevét deniálja. a checkbox, segítségével a több lehet ség közüli választást tehetjük lehet vé a felhasználók számára. A checkbox-okat csoportosíthatjuk, és a csoportból egyszerre több, vagy akár mindegyik elem lehet aktív mikor a form elküldésre kerül megjegyzés. Természetesen az is lehetséges, hogy a felhasználó egy elemet sem jelöl ki a csoportból. Ezt a lehet séget gyelembe véve érdemes gondoskodni a változó alapértelmezett értékér l, hogy az adatok feldolgozása során az üres, vagy nem létez változók ne okozzanak problémát. Mint azt már tudjuk, a PHP nyelvben a változók akkor jönnek létre, ha értéket kapnak és ez komoly problémákhoz vezet, ha a checkbox-ok közül egy sincs kijelölve, viszont a feldolgozásért felel s programrész hivatkozik a csoport nevére... radio nev elem egy hagyományos radiobutton-t hoz létre a form felületén. A checkbox-okhoz hasonlóan ezeket az elemeket is tudjuk 67

69 csoportosítani. Az elemek neveinek egyeznie kell, az értéküknek viszont különbözni egymástól (value). A csoportban egyszerre csak egy elem lehet kijelölve, így a csoport segítségével a felhasználót eldöntend kérdések megválaszolására késztethetjük. <input type=radio name=r1 value=1> Létezik fájlok tallózására alkalmas kontroll is, ami a következ sor felhasználásával készíthet el: <input type=file name=file1>. Ahogy láthatjuk, a kontroll típusa file, a neve pedig file1. Ne használjuk a típussal megegyez nevet, mert ezzel sok problémát okozhatunk magunknak a változók feldolgozása során. Ez az elem úgy m ködik, hogy a nyomógombja elindít egy fájl tallózó varázslót, melyben a feltöltésre szánt fájlt tudjuk kiválasztani. Ha nem akarunk tallózni, begépelhetjük az elérési utat és a fájl nevét. A fájltallózás során egyszerre csak egy fájl választható ki feldolgozásra. Könyvtár kiválasztására alkalmas tallózót ne is keressünk. A több fájl, vagy könyvtár kezelése alapvet biztonsági rés lenne, mivel ebben az esetben a szerver oldali szkripteknek lehet séget kellene adnunk a felhasználók helyi könyvtárainak az olvasására(linux esetén az X jog használatára is) megjegyzés. Amennyiben több fájlt szeretnénk feltölteni, egyesével kell kiválasztania azokat A fájlkezelésre kés bb még visszatérünk, és megmutatjuk a feltöltés technikai, és biztonsági kérdéseit. Most elégedjünk meg annyival, hogy els lépésként megteremtjük a fájlkezelés lehet ségét... A form-on elhelyezhet elemek közül számunkra ennyi elegend lesz. Segítségükkel minden olyan adatot be tudunk olvasni, amire szükség lehet, a beolvasáshoz viszont ennyi tudás még nem elegend. A form segítségével megszerzett információt fel kell dolgozni, a megfelel helyre eljuttatni, tárolni, valamint reagálni kell a felmerül hibákra. 68

70 A fejezet következ részében ezekkel a problémákkal foglalkozunk. A már elkészült weboldalunkba modulként helyezzük el az adatbevitelt megvalósító programrészeket, majd az adatbázis kezel modul segítségével tároljuk a felhasználótól jöv információt Adatfeldolgozás A form-tól az adatokat el kell juttatnunk az adatfeldolgozáshoz készített programrészig. Ez nem bonyolult feladat, de a m ködését mindenképpen meg kell értenünk ahhoz, hogy hatékonyan tudjuk kezelni a beérkez információt. Ha az adatáramlás m ködését vizsgáljuk, ki kell térnünk a WEB sajátos állapotnélküliségére. Ellentétben az kliens gépeken m köd programokkal, a weboldalak egy sajátos, úgynevezett állapot nélküli állapotban léteznek. Valójában ez az els látásra ellentmondásos helyzet teszi biztonságossá a webes felületet és a weboldalak egymás közötti, valamint a weboldalak és a webszerver közti adatáramlást. Ha egy oldal címét begépeljük a böngész be, akkor az letölti a szerverr l a címben kért tartalmat. A weboldal forrásában szerepl programrészek létrehoznak változókat és feltöltik azokat adatokkal. Az így létrejött változók, valamint adatok halmazát nevezzük a program állapotterének. A weboldal használója kattint egyet az oldalon, vagy egyszer en csak frissíti a böngész jét, a program által használt változók nagy része teljesen, másoknak csak a tartalma vész el, mivel a frissítés esetén a program újra lefut és minden olyan utasítást végrehajt, amit az el z futása során is végrehajtott. Így sajnos felülírja a korábban értékkel ellátott változóit. Az éppen futó weboldalak közti adatcsere csak speciális módon oldható meg. Globális értékek tárolására használhatunk munkamenet változókat, vagy küls tárolókat, fájlt, esetleg adatbázist megjegyzés. A session kezelésr l kés bb még lesz szó, mert a használata elengedhetetlen a felhasználók beléptetéséhez és nyomkövetéséhez... A form-ok esetében az adatátvitel nem ennyire kényelmetlen, de itt is oda kell gyelnünk, ha mindent szépen és helyesen akarunk megvalósítani. A 69

71 webszerver beállításaitól függ en, kétféleképpen lehet az adatokat a form-tól megszerezni. A rossz megoldás az, ha a form-ban deniált változókra a feldolgozást végz programban közvetlenül hivatkozunk ($szovegdoboz1, $file1). Ahogy azt korábban már említettük, ez a megoldás egyes szervereken m ködik, ahol a REGISTER_GLOBALS direktíva alapértékre van állítva, de ezeknek a szervereknek a száma egyre kevesebb, és abban sem lehetünk biztosak, hogy a szerver üzemeltet je nem változtatja meg a beállításokat. A jó megoldás az, ha a $_GET, a $_POST, és fájlok esetén a $_FILES tömböket használjuk az adatok feldolgozására. A rendszer ezekbe helyezi el a form-októl érkez adatokat. A post típusú form-ok esetén a $_POST asszociatív tömbbe, a get típusúnál a $_GET-be. A $_FILES tömbbe a fájl tallózó fel l érkez fájl adatai kerülnek bele. Minden tömbbelem az adott kontroll nevével megegyez nev változó értékét tartalmazza, melyre a változó nevével megegyez címke segítségével hivatkozhatunk: $_POST['kontroll_neve']. Igazság szerint ezek a tömbök a weboldalunk globális változói, melyek segítségével megoldhatjuk az adatok tárolását és átvitelét az egyes oldalak és aloldalak váltogatása közben. Minden weboldalhoz, illetve minden weboldal egy példányához létrejön egy munkamenet, vagy más néven session, melybe szabadon tárolhatunk akármit megjegyzés. Az adatok védelme a munkamenetek használata esetén is fontos. Lehet ség szerint védjük meg ket az ártó szándékú felhasználóktól. Próbáljuk meg a lehet legtöbbet kihozni a programjainkból az adatvédelem területén... Most, hogy ismerjük az adatátadás elméleti kérdéseit, nézzük meg, hogy jut el az információ a form-tól a feldolgozást végz modulig. Emlékezzünk vissza, hogy a korábban elkészített rlapra, ami egy fájlra hivatkozik. Ennek a fájlnak az a feladata, hogy az rlap adatait feldolgozza. Ez valójában azt jelenti, hogy ha a felhasználó a submit gombra kattintva aktivizálja a form-ot, a böngész je megkéri a webszervert a fájlban található forráskód értelmezésére. 70

72 Ez a fájl nem ír semmit a képerny re, csak elvégzi a számára el írt feladatokat. Ha elvégezte a munkáját, visszaadja a vezérlést egy másik programrészhez, ami informálja a felhasználót a történtekr l. A 6.2 kép ezt a folyamatot illusztrálja. Ahogy a képen láthatjuk, ez pontosan úgy m ködik, mint amikor a f program meghív egy függvényt, ami elvégzi a feladatait, majd visszatér az eredménnyel a f programhoz megjegyzés. A mi esetünkben a függvény egy fájlba leírt programrész, vagy ha úgy tetszik egy alprogram saját feladatokkal és állapottérrel.... Miután láttuk, hogyan hívódik meg és tér vissza a program, készítsük el azt a modult, ami az adatok felvitelére szolgál. Folytassuk tehát a harmadik fejezetben elkezdett modult. A személyek adatainak felviteléhez szükségünk lesz egy rlapra, valamint egy olyan programra, ami a felvitt adatokat tárolja, és meg tudja jeleníteni ábra. Függvény és modulhívás Kés bb készíthetünk keresést, valamint különböz sz réseket is az adatok rendszerezéséhez megjegyzés. Az adatbázis kelez rutinok, valamint az adatok tárolására használható tábla rendelkezésre állnak, mivel ezeket korábban elkészítettük 71

73 CREATE TABLE users ( i d i n t primary key auto_increment, name varchar (255), p i c t u r e varchar (255), cv text ) 6.2. program. Felhasználók táblája Az rlap forráskódját a 6.3-as programszöveg tartalmazza: <form action=beszuras. php method=post enctype=multipart /form data> <input type=t e x t name=nev><br> <input type=f i l e name=kep><br> <textarea rows=10 c o l s =50 name=cv></textarea > <BR> <input type=submit v a l u e=" Hozzáadás"> </form> 6.3. program. Adatbeviteli rlap 6.9. megjegyzés. A felvitelt segít rlapot érdemes egy css fájlban leírt formátum segítségével megformázni, de lagalábbis egy táblázatba illeszteni, hogy átláthatóbb és könnyen kezelhet legyen... Most, hogy elkészült a forráskód, mentsük el az useradd.php nev fájlba, majd a menükezel modulban helyezzünk el egy hivatkozást a fájlra. 72

74 ... switch ($_GET[ "d" ] ) {... case 1 : include " useradd. php" ; break ; case.. } program. Az új funkció menüje Helyezzük el az új menüpontot a régiek között. Dinamikus menü esetén ez a m velet azzal jár, hogy a menüpontok táblájába felvisszük a megfelel rekordot. Amennyiben statikus menüt készítettünk, egyszer en írjuk a kódba a következ linket:... <a h r e f=index. php?d=1>minifacebook</a> program. Új menüpont elhelyezése Ki is próbálhatjuk a munkánk eredményét. Ha mindent jól csináltunk, a menüpontra kattintva az 6.3 ábrán szerepl rlapot kell látnunk. Természetesen az adatbevitel még nem m ködik, mivel a beszúrást végz programot nem készítettük el Adatok küldése és beszúrása adatbázisba Ha minden megfelel en m ködött, folytassuk a munkát. Hozzuk létre a programot, ami az adatok tárolásáért felel. 73

75 <? require_once "dbmodule. php" ; $c = connect ( ) ; select_db ( "webbok" ) ; $querystring = " i n s e r t into users (name, picture, cv ) values ( ' ".$_POST[ ' nev ' ]. " ', ' ". $_FILES [ ' kep ' ]. " ', ' ".$_POST[ ' cv ' ]. " ') " ; query1 ( $querystring ) ; c l o s e ( $c ) ; echo '<meta http equiv="r e f r e s h " content ="0; URL=index. php?d=1"> ' ;?> 6.6. program. Form adatainak beszúrása adatbázisba A forráskód els látásra bonyolultnak t nik, de ha jobban megvizsgáljuk, rájövünk, hogy minden karakternek megvan a szerepe. Az els sorban, a require_once függvény betölti a korábban elkészített adatbázis kezel modult megjegyzés. Amennyiben azt egy másik programrész betöltötte volna, a program akkor is helyesen m ködik, mivel a require_once függvény nem engedi meg a többszörös betöltés kezdeményezését... A connect, és a selectdb függvények a már ismert módon kapcsolódnak az adatbázis kezel höz, és kiválasztják azt az adatbázist, amire a programnak szüksége van. A következ néhány sor, ahol a $querystring nev változót el állítjuk, a program legfontosabb és egyben legbonyolultabb része. Ezt a string-et küldjük el az adatbázis-kezel nek, ami majd elvégzi az általunk összeállított rekord beszúrását. A rekord a form adataiból épül fel. Sorban a megadott névb l, amely a $_POST['nev'] formulából kerül ki. A $_POST tömb a post típusú form-hoz 74

76 6.3. ábra. Minialkalmazás kimenete létrejött asszociatív tömb, melynek a 'nev' címkével hivatkozott eleme a form $nev változóját tartalmazza megjegyzés. Valójában ez a tömbbelem csak a változó tartalmát veszi át, és nem a változót, de egyszer bb, ha úgy tekintünk rá, mintha maga a változó lenne a tömbben... A $_POST['cv'] elemmel ugyan ez a helyzet, csak ebben nem egy nevet, hanem egy hosszabb szöveget tárol a rendszer. Ezt az adatot is hozzáf zzük a beszúrandó rekordhoz, vagyis aahhoz az sql nyelv utasításhoz, amit a $querystring változóban készítünk el. A $_FILES tömbben elhelyezett $kep változó valamivel bonyolultabb az el z eknél, mivel minden eleme egy, a felhasználó által feltöltésre kiválasztott fájl adatait tartalmazza. Tehát minden eleme egy összetett adatszerkezet, amely a fájl neve, elérési útja, típusa és mérete mellet minden olyan információt tartalmaz, ami a fájl feldolgozásához szükséges. A fájl neve és elérési útja segítségével fel kell azt másolnunk a webszerver egy erre a célra kijelölt könyvtárába. Létre kell hoznunk az új nevét, majd az így létrejött elérési utat és fájlnevet összeragasztva hozzá kell f zni azt 75

77 az sql parancshoz megjegyzés. A fájl nevének megváltoztatása nagyon fontos lépés, ha nem akarunk hibákat kapni a feltöltés során. Egyrészt azért van szükség rá, mert a feltöltött képek nevei tartalmazhatnak olyan karaktereket, amiket a webszerver elérési útként nem tud kezelni. Ilyen például a szóköz, ami egyes operációs rendszerek esetén az elérési út végét jelenti, és ami ezután következik azt az operációs rendszer nem veszi gyelembe. Másrészt arról is gondoskodnunk kell, hogy a feltöltött fájlok nevei ne egyezzenek meg. Ebben az esetben vagy sikertelen lenne a feltöltés, vagy a régebben feltöltött fájlokat egyszer en felülírnánk. Ezt a problémát kés bb megoldjuk egy rövid függvénnyel, ami eltávolítja a nemkívánatos karaktereket a névb l, valamint elé helyez egy viszonylag hosszú véletlen számot. Ezzel a módszerrel már majdnem garantálhatjuk a fájlnevek egyediségét.... A fájl feltöltését egy másik fejezetben oldjuk meg, most elégedjünk meg azzal, hogy a nevet és az elérési utat beszúrjuk az adatbázisba, és az adatok kiírásakor csak a fájl nevét írjuk ki a weboldalra. Visszatérve a forráskódhoz, láthatjuk, hogy a query1 függvényt szintén az adatbázis kezel modulból hívtuk meg. Ez a függvény felel s az adatok elküldéséért. Az adatbázis kezel felé küldött SQL parancs viszont érdemel egy kis gyelmet. Már az is érdekes, hogyan állítottuk össze a tartalmát. Ez a technika a dinamikus weboldalak programozásánál elengedhetetlen és talán az egyik legérdekesebb dolog. Az adatbázis kezel számára küldött, SQL parancsokat a program futás közben, felhasználói beavatkozások hatására állítja össze. Ez a gyakorlatban azt jelenti, hogy a query-ket a form-ok adataiból létrejöv változókból, és a megfelel SQL nyelvi elemekb l állítjuk el, így azok minden esetben a megfelel eredményt szolgáltatják. Erre a dinamizmusra azért is szükség van, mert a lekérdezéseket lehetetlen lenne el re leprogramozni. A 6.6 forrásszövegben el állított SQL parancs a következ képp áll össze: Az query els része tartalmazza magát az SQL utasítást, vagyis leírja 76

78 a m veletet, amit el kell végezni. Ez a beszúrás. Tartalmazza továbbá a tábla nevét, amibe be kell szúrni a rekordot. A következ rész a values kulcsszó el tt, zárójelek között megadja azokat a mez ket, amelyekbe az adatok bekerülnek. A felsorolásra azért van szükség, mert az id mez, vagyis a tábla els dleges kulcsa automatikusan kap értéket. Ezt a mez t ki kell hagynunk a listából, és elem kihagyása csak úgy lehetséges, ha a beszúrás során értéket kapó mez ket felsoroljuk, a többit meg kihagyjuk a felsorolásból. A következ zárójeles lista tartalmazza a beszúrandó értékeket. Ez a része a query-nek elég komplikált, mivel tele van aposztrófokkal, idéz jelekkel, vessz kkel és zárójelekkel. Erre a sajátos, bonyolult leírásra azért van szükség, mert két nyelvet használunk egyazon kódban, és ezt a keveréket egy harmadik nyelvbe, a HTML-be ágyazzuk. Az sql részekhez hozzá kell f znünk a PHP nyelven deniált változók tartalmát, amik ráadásul egy munkamenet változóban tárolódnak. Az aposztrófok és az idéz jelek ebben az esetben nem ártanak, inkább hasznosak, mivel ezáltal a fordító, és értelmez programok meg tudják különböztetni egymástól a felhasznált nyelveket. Hogy a ('".$_POST['nev']."','. kifejezést értelmezni tudjuk, nézzük meg egy statikus lekérdezés esetén hogyan nézne ki a beszúrandó elemek listája. i n s e r t into users (name, picture, cv ) values ( ' Személy Neve ', ' kepe01 ', ' Önéletrajz... ' ) 6.7. program. Statikus sql utasítás Láthatjuk, hogy a beszúrni kívánt adatokat az sql stringként értelmezi, ha '' jelek közé írjuk azokat. Az egyes elemeket vessz vel kell elválasztani 77

79 egymástól. A dinamikus lekérdezésben is ezért van szükség az aposztrófokra és a vessz kre ','". $_POST['nev']. "','. A "" idéz jelek a PHP programokban a karakterláncokat kezdik és zárják le. Az sql nyelv darabok elején és végén is ezt a szerepet töltik be megjegyzés. Vegyük észre, hogy a query-k egyszer szövegek, amelyek csak összeillesztve és az adatbázis kezel nek elküldve nyernek értelmet. Csak akkor válnak valódi utasítássá, ha az adatbázis kezel értelmezi ket... A "" jelekkel elválasztott részek között a pontok (.) a PHP nyelvben szöveges adatok összef zését jelentik. Az sql parancsban a szerepük az, hogy a PHP változóinak a tartalmát hozzáf zzék az SQL parancs darabjaihoz. Természetesen az SQL utasítás összeállítását másképp is meg tudtuk volna oldani. Lehetne a query egyszer sítésén is gondolkodni, de a használt megoldás bármilyen szerver környezetben jól m ködik, és ha megszokjuk a benne szerepl jelek használatát, átláthatóvá válik a számunkra. A forrásszöveg utolsó néhány sora azért felel s, hogy lezárja az adatbázis kapcsolatot, valamint azért, hogy a beszúrás után visszakerüljünk arra a helyre, ahonnan elindultunk, vagyis a beszúrást kezdeményez rlaphoz. A visszalépést az úrlaphoz egy META utasítással valósíthatjuk meg a legegyszer bben. A META utasításban leírjuk, hogy mennyi ideig kell várni a beszúrás után (ez jelen esetben 0), és melyik oldalt kell betölteni, vagyis, hogy hova kell ugrani. A REFRESH azt jelenti, hogy frissíteni kell a böngész t, az URL pedig deniálja a betöltend oldalt. Mi azt az egyszer megoldást választjuk, hogy azt az linkett írjuk az utasítás url részéhez, amit az adatfelvitelhez használt menüpont mellé is írtunk. Ez az index.php?d=1 link. Ezzel azt érjük el, hogy a felhasználónk az adatok begépelése után, a submit gombra kattintva ráveszi a böngész t a frissítésre. Ezután azonnal visszakapja a felviteli form-ot. Látszólag csak ennyi történik, de közben az adatai bekerülnek az adatbázisba, és ha elkészítjük a kiírást megvalósító modult, akkor ezt az új bejegyzés láthatóvá is válik a számára. 78

80 6.4. Ellen rz kérdések 1. Hogyan kell karakterláncokat összef zni PHP programokban? 2. Mi a hiba oka, ha a Forbidden kezdet hibaüzenet jelenik meg a böngész ben? 3. Mit tegyünk, ha a Forbidden kezdet hibaüzenet látjuk? 4. Hogyan kell adatokat beolvasni PHP programokban? 5. Hogyan oldható meg az weboldalak közti paraméterátadás? 6. Hogyan keressünk hibát PHP programok esetén? 7. Milyen kliens oldali nyelveket használhatunk weboldalak progranjának a kiegészítésére? 8. Hogyan tudjuk frissíteni az oldalakat a böngész ben? 9. Milyen tömbök segítségével érhetjük el a globális változókat? 10. Hogyan készülnek a dinamikus lekérdezések? animaciok/tamopweb0004.avi 79

81 7. Listák generálása 7.1. Adatok megjelenítése listákban Az adatbevitel eredményét a programunk jelenlegi állapotában sajnos csak egy módon tudjuk ellen rizni. A DBMS parancssorában kiadva a következ parancsokat 7.1. mysql> use webbook ;... mysql> s e l e c t from users ; mysql> 7.1. program. DBMS parancssora 7.1. megjegyzés. Hogy az adatbázis kezel parancssorát elérjük, terminál kapcsolatot kell létesítenünk a szerverrel. A kapcsolathoz használhatunk grakus felület kliens programot, vagy az operációs rendszer parancsorából is kezdeményezhetjük azt. Linux rendszer esetén ez a következ paranccsal elvégezhet : ssh server -l username. Az SSH protokollt használva a -l kapcsoló után megadjuk a felhasználó nevünket. A rendszer ezután kéri a jelszavunkat, és ha az helyes, beenged a szerverre. A MySql konzolba is be kell jelentkeznünk. Ehez használjuk a következ parancsot: mysql -u username -p. Ha gond nélkül bejutottunk, indíthatjuk a fenti sql lekérdezést... Amennyiben a táblánk rekordjai között megjelenik az utoljára bevitt adatsor, a program jól m ködik, és hozzáláthatunk az adatokból felépül lista elkészítéséhez. Az adatbáziskezel modul erre a feladatra is kínál lehet séget. A query2 függvény paraméterként egy sql parancsot vár, és eredményként visszaadja a rekordokat egy listában. A dolgunk csak annyi, hogy ezt a listát feldolgozzuk és HTML kódba ágyazva megjelenítsük. Az eredmény lista hosszát nem tudjuk konstansként kezelni, mivel az a rekordok számától függ. Kézenfekv, hogy ciklus utasítással dolgozzunk. A 80

82 7.1. ábra. Az SQL lekérdezés kimenete ciklust akkor állítjuk meg, ha elfogytak a rekordok, vagyis, ha már minden adatot megjelenítettünk a kliens számítógép böngész programjában. A kérdés az, hogyan vesszük észre, hogy a lista végére értünk? A PHP nyelv tartalmaz egy mysql_fetch_row nev függvényt, mely a segítségünkre lehet az ismétlés megállításához. 81

83 <? require_once "dbmodule. php" ; $c = connect ( ) ; select_db ( "webbook" ) ; $querystring = " s e l e c t from users " ; $ r e s u l t = query2 ( $querystring ) ; echo "<t a b l e width=100% border=1>" ; while ( l i s t ( $id, $nev, $kep, $cv ) = mysql_fetch_rows ( $ r e s u l t ) ) { echo "<tr ><td>$id </td><td>$nev</td></tr > <tr><td colspan=2>$kep</td></tr>" ; } echo "</table >" ; c l o s e ( $c ) ;?> 7.2. program. Tábla rekordjainak kiírása HTML formában A rekordok kiírásánál ugyanazt a technikát alkalmaztuk, amit korábban a menük kiírásánál. A PHP program kimenetét HTML formátumban jelenítettük meg megjegyzés. Elkészíthettük volna a programot úgy is, hogy a HTML kódba ágyazzuk be a PHP programrészeket, vagy egyszer en csak megjelöltük volna a PHP részek helyét, és a rendszerre bízzuk a betöltését Jelenleg a legelterjedtebb ilyen eszköz a Smarty, ami a PHP kód és a HTML szétválasztására használható, de számos egyéb megoldás is létezik. Az eszközök megismerését a tisztelt olvasóra bízzuk.... A program eleje már ismer s lehet. Az els néhány sorban betöltjük az adatbázis kezel modult, kapcsolódunk az adatbáziskezel höz, el állítjuk a 82

84 lekérdezést, generáljuk az eredményb l a HTML kimenetet, majd lezárjuk a kapcsolatot. Miután elmentettük (a mentéshez használhatjuk a kiiras.php nevet), ezt a programrészt is integrálnunk kell a MiniFaceBook alkalmazásunkba. Ezt megtehetjük úgy, hogy a beviteli form forráskódjába elhelyezzük a következ sort: include "kiiras.php";. Ha a bevitei rlapot leíró rész elé helyezzük el a hivatkozást, akkor el tte, ha utánna helyzzük el, akkor utána jelenik meg a lista. Nézzük meg az eredményt! Ha több brekorddal dolgoztunk, akkor azok egymás alatt jelennek meg a felvitel sorrendjében. Ez a megjelenési forma hosszú listák esetén nem túl praktikus, mivel a lista hosszának növekedésével az oldalunk egyre áttekinthetetlenebbé válik. Hogy ezt a problémát orvosoljuk, elég annyit tennünk, hogy a kiírást kicsit megváltoztatjuk. Sokkal átláthatóbb lesz a képerny, ha a képek méretét l függ en két, vagy három elemet elyezünk el egy sorban megjegyzés. Nyilván, most még nincsenek képek, csak elérési utak, de ez a lényegen nem változtat... Ahoz, hogy minden harmadik elem után sortörés keletkezzen, maradékos osztással vizsgálnunk kell, hogy mikor következik a mindenkori harmadik elem. Ha éppen megtaláltuk, be kell szúrnunk egy </tr><tr> tag párost, ami lezárja a táblázat aktuális sorát, majd újat nyit a következ három adat számára. A táblázat megfelel tördeléséhez a ciklus el tt elkezdünk egy sort, majd a ciklussal minden sorban három cellát hozunk létre, amelyek egy rekord adatait tartalmazzák egy beágyazott táblázatban. Erre a sok cellára, és táblázatra azért van szükség, hogy a lista minden egyes részét külön-külön meg tudjuk formázni, vagy önálló stilussal tudjuk ellátni. 83

85 <?... $ i = 0 ; echo "<t a b l e width=100% border=1><tr>" ; while ( l i s t ( $id, $nev, $kep, $cv ) = mysql_fetch_row( $ r e s u l t ) ) { i f ( $ i % 3 == 0) {echo "</TR><TR>" ; } echo "<TD> <t a b l e ><tr ><td>$id </td><td>$nev</td></tr > <tr><td colspan=2>$kep</td></tr ></table > </TD>" ; $ i++; } echo "</TR></table >" ;...?> 7.3. program. Táblázat tördelése 7.4. megjegyzés. A módosított programban az új HTML elemeket nagybet vel írtuk, hogy meg lehessen különböztetni ket a korábban begépeltekt l... A 7.2 képen látható programban a lista generáló rutint a beviteli rlap után helyeztük el, valamint néhány tesztadattal feltöltöttük az adatbázist. Az esztétikusabb küls kialakításához természetesen ismét használhatunk css fájlt, vagy formázhatjuk közvetlenül a HTML kódot Ellen rz kérdések 1. Milyen vezérl szerkezet segítségével dolgozhatunk fel listákat? 2. Hogyan állítsuk meg az adatfeldolgozó ciklusokat? 3. Milyen parancsok segítségével érhet el a DBMS konzolja? 84

86 7.2. ábra. Lista el állítása 4. Milyen parancsokkal módosíthatjuk az SQL táblákat? 5. Hogyan kapcsolódunk MySql szerverhez? 6. Hogyan lehet a listálkat tördelni a kiírás során? 7. Hogyan térhetünk vissza más URL-hez? 8. Mire használjuk a META utasításokat a weboldalak programjában? 9. Miként olvassuk ki a lekérdezés eredményéb l a mez ket? 10. Hogy tehetjük használhatóvá a hosszú listákat? 85

Dinamikus webprogramozás Király, Roland

Dinamikus webprogramozás Király, Roland Király, Roland Király, Roland Publication date 2011 Szerzői jog 2011 EKF Matematikai és Informatikai Intézet Copyright 2011, EKF Mat.- Inf. Int. Tartalom 1. Dinamikus webprogramozás... 1 1. Tartalom kezelő

Részletesebben

PHP-MySQL. Adatbázisok gyakorlat

PHP-MySQL. Adatbázisok gyakorlat PHP-MySQL Adatbázisok gyakorlat Weboldalak és adatbázisok Az eddigiek során megismertük, hogyan lehet a PHP segítségével dinamikus weblapokat készíteni. A dinamikus weboldalak az esetek többségében valamilyen

Részletesebben

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Egészítsük ki a Drupal-t. Drupal modul fejlesztés Egészítsük ki a Drupal-t Drupal modul fejlesztés Drupal 6.0 2008. február 13. Miért írjunk Drupal modult? Nincs az igényeinknek megfelelő modul Valamilyen közösségi igény kielégítése Valami nem úgy működik

Részletesebben

Java programozási nyelv

Java programozási nyelv Java programozási nyelv 2. rész Vezérlő szerkezetek Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/23 Tartalomjegyzék

Részletesebben

PHP. Adatbázisok gyakorlat

PHP. Adatbázisok gyakorlat PHP Adatbázisok gyakorlat Mi a PHP? A PHP (PHP: Hypertext Preprocessor) egy nyílt forráskódú, számítógépes szkriptnyelv, legfőbb felhasználási területe a dinamikus weboldalak készítése. A PHP-kódunk általában

Részletesebben

Szkriptnyelvek. 1. UNIX shell

Szkriptnyelvek. 1. UNIX shell Szkriptnyelvek 1. UNIX shell Szkriptek futtatása Parancsértelmez ő shell script neve paraméterek shell script neve paraméterek Ebben az esetben a szkript tartalmazza a parancsértelmezőt: #!/bin/bash Szkriptek

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. november 20. 10. El adás SQLite SQLite: Adatbázis kezel rendszer SQL standardokat nagyrészt követi Nagyon elterjedt, pl böngész kben is használt Nehéz olyan programnyelvet

Részletesebben

BarAck.Net. Internetes csomagkezel. Felhasználói kézikönyv V 1.0. (2011. július 20.)

BarAck.Net. Internetes csomagkezel. Felhasználói kézikönyv V 1.0. (2011. július 20.) BarAck.Net Internetes csomagkezel Felhasználói kézikönyv V 1.0 (2011. július 20.) Tartalomjegyzék 1 Áttekintés...2 1.1 Célkitzés...2 1.2 A program felépítése...2 2 Futtatási környezet, telepítési információk...3

Részletesebben

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv PHP A PHP rövidítés jelentése hivatalosan: PHP Hypertext Preprocessor. Ez egy kiszolgáló-oldali parancsnyelv, amit jellemzően HTML oldalakon használnak. A különbség a két nyelv között az, hogy a kiszolgáló

Részletesebben

1. Alapok. #!/bin/bash

1. Alapok. #!/bin/bash 1. oldal 1.1. A programfájlok szerkezete 1. Alapok A bash programok tulajnképpen egyszerű szöveges fájlok, amelyeket bármely szövegszerkesztő programmal megírhatunk. Alapvetően ugyanazokat a at használhatjuk

Részletesebben

HTML. Ismerkedés a JavaScripttel. A JavaScript lehet ségei. A JavaScript kód helye. Önálló JavaScript fájlok

HTML. Ismerkedés a JavaScripttel. A JavaScript lehet ségei. A JavaScript kód helye. Önálló JavaScript fájlok HTML Ismerkedés a JavaScripttel webprogramozó A weblapokat HTML nyelven készíthetjük el. A HTML egyszer leírónyelv, nem alkalmas válaszolni a felhasználóknak, nem tud döntéseket hozni, nem tud végrehajtani

Részletesebben

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17 Adatbázisok 8. gyakorlat SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT 2015. október 26. 2015. október 26. Adatbázisok 1 / 17 SQL nyelv Structured Query Language Struktúrált lekérdez

Részletesebben

Első lépések weboldalak programozásához

Első lépések weboldalak programozásához Király Roland Első lépések weboldalak programozásához Jegyzet Tartalomjegyzék Első lépések weboldalak programozásához...1 Tartalomjegyzék...2 Előszó...2 Tartalomkezelő rendszerek...3 Webprogramok...4 Változók...9

Részletesebben

Programozás alapjai Bevezetés

Programozás alapjai Bevezetés Programozás alapjai Bevezetés Miskolci Egyetem Általános Informatikai Tanszék Programozás alapjai Bevezetés SWF1 / 1 Tartalom A gépi kódú programozás és hátrányai A magas szintÿ programozási nyelv fogalma

Részletesebben

AWK programozás, minták, vezérlési szerkezetek

AWK programozás, minták, vezérlési szerkezetek 10 AWK programozás, minták, vezérlési szerkezetek AWK adatvezérelt szkriptnyelv text processing, adat kiterjesztés, tagolt adatok automatizált soronkénti feldolgozása a forrásállományt soronként beolvassa

Részletesebben

WordPress segédlet. Bevezető. Letöltés. Telepítés

WordPress segédlet. Bevezető. Letöltés. Telepítés WordPress segédlet Bevezető A WordPress egy ingyenes tartalomkezelő rendszer (Content Management System - CMS), amely legnagyobb előnye az egyszerű telepítés és a letisztult kezelhetőség és a változatos

Részletesebben

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni: 1 Adatbázis kezelés 3. gyakorlat A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni: Tábla kapcsolatok létrehozása,

Részletesebben

Felhasználói kézikönyv. Verzió: 1.01

Felhasználói kézikönyv. Verzió: 1.01 Felhasználói kézikönyv Verzió: 1.01 Tartalomjegyzék Általános áttekintés 3 A DocGP rendszer célja 3 A rendszer által biztosított szolgáltatások 3 A felhasználói felület elérése 3 JAVA JRE telepítése 3

Részletesebben

FTP Az FTP jelentése: File Transfer Protocol. Ennek a segítségével lehet távoli szerverek és a saját gépünk között nagyobb állományokat mozgatni. Ugyanez a módszer alkalmas arra, hogy a kari web-szerveren

Részletesebben

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek Programozás alapjai gyakorlat 4. gyakorlat Konstansok, tömbök, stringek Házi ellenőrzés (f0069) Valósítsd meg a linuxos seq parancs egy egyszerűbb változatát, ami beolvas két egész számot, majd a kettő

Részletesebben

Flex tutorial. Dévai Gergely

Flex tutorial. Dévai Gergely Flex tutorial Dévai Gergely A Flex (Fast Lexical Analyser) egy lexikáliselemz -generátor: reguláris kifejezések sorozatából egy C/C++ programot generál, ami szövegfájlokat képes lexikai elemek sorozatára

Részletesebben

PHP gyorstalpaló, avagy a Hello World-től az űrlapellenőrzésig

PHP gyorstalpaló, avagy a Hello World-től az űrlapellenőrzésig PHP gyorstalpaló, avagy a Hello World-től az űrlapellenőrzésig

Részletesebben

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

sallang avagy Fordítótervezés dióhéjban Sallai Gyula sallang avagy Fordítótervezés dióhéjban Sallai Gyula Az előadás egy kis példaprogramon keresztül mutatja be fordítók belső lelki világát De mit is jelent, az hogy fordítóprogram? Mit csinál egy fordító?

Részletesebben

MŰSZAKI DOKUMENTÁCIÓ. Aleph WebOPAC elérhetővé tétele okostelefonon. Eötvös József Főiskola 6500 Baja, Szegedi út 2.

MŰSZAKI DOKUMENTÁCIÓ. Aleph WebOPAC elérhetővé tétele okostelefonon. Eötvös József Főiskola 6500 Baja, Szegedi út 2. Telefon: Fax: E-mail: (+36-1) 269-1642 (+36-1) 331 8479 info@ex-lh.hu www.ex-lh.hu Eötvös József Főiskola 6500 Baja, Szegedi út 2. MŰSZAKI DOKUMENTÁCIÓ Aleph WebOPAC elérhetővé tétele okostelefonon Pályázati

Részletesebben

Saját Subversion tároló üzemeltetése i. Saját Subversion tároló üzemeltetése

Saját Subversion tároló üzemeltetése i. Saját Subversion tároló üzemeltetése i Saját Subversion tároló üzemeltetése ii KÖZREMŰKÖDŐK CÍM : Saját Subversion tároló üzemeltetése TEVÉKENYSÉG NÉV DÁTUM ALÁÍRÁS ÍRTA Jeszenszky, Péter 2014. február 16. VERZIÓTÖRTÉNET VERZIÓ DÁTUM LEÍRÁS

Részletesebben

Webtárhely létrehozása a WWW.freeweb.hu helyen. Lépések Teendő 1. Böngészőbe beírni: www.freeweb.hu. 2. Jobb oldalon regisztrálni (tárhelyigénylés).

Webtárhely létrehozása a WWW.freeweb.hu helyen. Lépések Teendő 1. Böngészőbe beírni: www.freeweb.hu. 2. Jobb oldalon regisztrálni (tárhelyigénylés). Lépések Teendő 1. Böngészőbe beírni: www.freeweb.hu Kép 2. Jobb oldalon regisztrálni (tárhelyigénylés). 3. 4. Értelemszerűen kitölteni a regisztrációs lapot, és elküldeni. 5. Postafiókomra érkező levélben

Részletesebben

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama 10. évfolyam: 105 óra 11. évfolyam: 140 óra 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra 36 óra OOP 14 óra Programozási

Részletesebben

4. Használati útmutatás

4. Használati útmutatás megbízható(másnéven: robusztus): mert a programozási hibák egy részét megakadályozza,a másik részét pedig futás közben kisz ri és támogatja a fejleszt t azok professzionális kezelésében. biztonságos: megakadályozza

Részletesebben

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1 SZE INFORMATIKAI KÉPZÉS 1 ADATBÁZIS-KEZELÉS MS ACCESS 2010 A feladat megoldása során a Microsoft Office Access 2010 használata a javasolt. Ebben a feladatban a következőket fogjuk gyakorolni: Adatok importálása

Részletesebben

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05 Geodéziai Feldolgozó Program

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05 Geodéziai Feldolgozó Program A GeoEasy telepítése GeoEasy V2.05 Geodéziai Feldolgozó Program (c)digikom Kft. 1997-2008 Tartalomjegyzék Hardver, szoftver igények GeoEasy telepítése A hardverkulcs Hálózatos hardverkulcs A GeoEasy indítása

Részletesebben

TERC V.I.P. hardverkulcs regisztráció

TERC V.I.P. hardverkulcs regisztráció TERC V.I.P. hardverkulcs regisztráció 2014. második félévétől kezdődően a TERC V.I.P. költségvetés-készítő program hardverkulcsát regisztrálniuk kell a felhasználóknak azon a számítógépen, melyeken futtatni

Részletesebben

Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt

Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt Szilipet programok telepítése Hálózatos (kliens/szerver) telepítés Windows 7 operációs rendszer alatt segédlet A Szilipet programok az adatok tárolásához Firebird adatbázis szervert használnak. Hálózatos

Részletesebben

Occam 1. Készítette: Szabó Éva

Occam 1. Készítette: Szabó Éva Occam 1. Készítette: Szabó Éva Párhuzamos programozás Egyes folyamatok (processzek) párhuzamosan futnak. Több processzor -> tényleges párhuzamosság Egy processzor -> Időosztásos szimuláció Folyamatok közötti

Részletesebben

AWK programozás, minták, vezérlési szerkezetek

AWK programozás, minták, vezérlési szerkezetek 10 AWK programozás, minták, vezérlési szerkezetek AWK futtatási módok AWK parancs, közvetlen programkódmegadás: awk 'PROGRAMKÓD' FILE példa: ls -l awk '{print $1, $5}' a programkód helyére minden indentálás

Részletesebben

Információs technológiák 2. Gy: CSS, JS alapok

Információs technológiák 2. Gy: CSS, JS alapok Információs technológiák 2. Gy: CSS, JS alapok 1/69 B ITv: MAN 2017.10.01 Ismétlés Van egy Web nevű mappánk, ebben vannak az eddig elkészített weboldalak (htm, html) képek (jpg, png). Logikai felépítés

Részletesebben

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása Tömbök kezelése Példa: Vonalkód ellenőrzőjegyének kiszámítása A számokkal jellemzett adatok, pl. személyi szám, adószám, taj-szám, vonalkód, bankszámlaszám esetében az elírásból származó hibát ún. ellenőrző

Részletesebben

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED AWK - szintaxis, vezérlési szerkezetek Operációs rendszerek 11. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik

Részletesebben

Internet alkamazások Készítette: Methos L. Müller Készült: 2010

Internet alkamazások Készítette: Methos L. Müller Készült: 2010 Internet alkamazások Készítette: Methos L. Müller Készült: 2010 Tartalomjegyzék - Tartalomkezelő rendszerek Miért jó a CMS alapú website? CMS rendszerek - Mi szükséges ezen CMS-ekhez? - Információ építészet

Részletesebben

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi. Függvények 1.Függvények...1 1.1.A függvény deníció szintaxisa... 1..Függvények érték visszatérítése...3 1.3.Környezettel kapcsolatos kérdések...4 1.4.Lokális változók használata...4 1.5.Rekurzív hívások...5.kód

Részletesebben

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK Horváth Győző Egyetemi adjunktus 1117 Budapest, Pázmány Péter sétány 1/C, 2.420 Tel: (1) 372-2500/1816 2 Ismétlés Ismétlés 3 Fájl/Adatbázis 3 4 Szerver 2 CGI

Részletesebben

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT alapjai, bevezetés Vincze Dávid Miskolci Egyetem, IIT vincze.david@iit.uni-miskolc.hu PHP Personal Home Page (Tools) Script nyelv -> interpretált Elsősorban weboldal (dinamikus) tartalmak előállítására

Részletesebben

AWK programozás Bevezetés

AWK programozás Bevezetés 09 AWK programozás Bevezetés AWK adatvezérelt szkriptnyelv text processing, adat kiterjesztés, tagolt adatok automatizált soronkénti feldolgozása a forrásállományt soronként beolvassa és feldolgozhatóvá

Részletesebben

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK Mérési Utasítás Linux/Unix jogosultságok és fájlok kezelése Linux fájlrendszerek és jogosultságok Linux alatt, az egyes fájlokhoz való hozzáférések szabályozása érdekében a fájlokhoz tulajdonost, csoportot

Részletesebben

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010 Programozási technikák Pál László Sapientia EMTE, Csíkszereda, 2009/2010 12. ELŐADÁS Adatbázis-kezelés Delphiben 2 Adatmegjelenítés lekérdezés segítségével A táblákhoz hasonlóan a lekérdezések is az adatbázis

Részletesebben

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 6. gyakorlat C++ alapok, szövegkezelés Surányi Márton PPKE-ITK 2010.10.12. Forrásfájlok: *.cpp fájlok Fordítás: a folyamat, amikor a forrásfájlból futtatható állományt állítunk

Részletesebben

S z á m í t ó g é p e s a l a p i s m e r e t e k

S z á m í t ó g é p e s a l a p i s m e r e t e k S z á m í t ó g é p e s a l a p i s m e r e t e k 7. előadás Ami eddig volt Számítógépek architektúrája Alapvető alkotóelemek Hardver elemek Szoftver Gépi kódtól az operációs rendszerig Unix alapok Ami

Részletesebben

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK Informatikai alapismeretek középszint 0721 ÉRETTSÉGI VIZSGA 2007. október 24. INFORMATIKAI ALAPISMERETEK KÖZÉPSZINTŰ ÍRÁSBELI ÉRETTSÉGI VIZSGA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ OKTATÁSI ÉS KULTURÁLIS MINISZTÉRIUM

Részletesebben

Duál Reklám weboldal Adminisztrátor kézikönyv

Duál Reklám weboldal Adminisztrátor kézikönyv Duál Reklám weboldal Adminisztrátor kézikönyv Dokumentum Verzió: 1.0 Készítette: SysWork Szoftverház Kft. 1. oldal Felület elérése Az adminisztrációs felület belépés után érhető el. Belépés után automatikusan

Részletesebben

1. A NÉPESSÉGNYILVÁNTARTÓ PROGRAM TELEPÍTÉSI FELTÉTELE. A

1. A NÉPESSÉGNYILVÁNTARTÓ PROGRAM TELEPÍTÉSI FELTÉTELE. A 1. A NÉPESSÉGNYILVÁNTARTÓ PROGRAM TELEPÍTÉSI FELTÉTELE. A következıkben leírt telepítési lépések, csak azokon a gépeken végezhetık el, ahol elızıleg is üzemelt már a DECÉRT rendszer, mivel a programhoz

Részletesebben

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Programozás alapjai gyakorlat. 2. gyakorlat C alapok Programozás alapjai gyakorlat 2. gyakorlat C alapok 2016-2017 Bordé Sándor 2 Forráskód, fordító, futtatható állomány Először megírjuk a programunk kódját (forráskód) Egyszerű szövegszerkesztőben vagy fejlesztőkörnyezettel

Részletesebben

1. DVNAV letöltése és telepítése

1. DVNAV letöltése és telepítése 1. DVNAV letöltése és telepítése A Drén és Valner Szoftver Kft által készített DVNAV programmal lehetőség van a számlázó program által elkészített XML-ek NAV-hoz történő eljuttatására, majd a számlákról

Részletesebben

INFORMATIKAI ALAPISMERETEK

INFORMATIKAI ALAPISMERETEK ÉRETTSÉGI VIZSGA 2005. május 20. INFORMATIKAI ALAPISMERETEK KÖZÉPSZINTŰ ÉRETTSÉGI VIZSGA Az írásbeli vizsga időtartama: 180 perc JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ OKTATÁSI MINISZTÉRIUM Megoldási útmutató I.

Részletesebben

Webprogramozás szakkör

Webprogramozás szakkör Webprogramozás szakkör Előadás 5 (2012.04.09) Programozás alapok Eddig amit láttunk: Programozás lépései o Feladat leírása (specifikáció) o Algoritmizálás, tervezés (folyamatábra, pszeudokód) o Programozás

Részletesebben

Vectory telepítési útmutató

Vectory telepítési útmutató Vectory telepítési útmutató A vectory kliens programja egy vyw.exe valamint egy bejelentkezes.ini nevű fájlból áll. A vyw.exe-nek és a bejelentkezes.ini-nek egy közös könyvtárba kell kerülniük. Könyvtárak,

Részletesebben

Informatika 1. Informatika el adás. Kovács Kristóf, Pálovics Róbert. Budapesti M szaki Egyetem november 5.

Informatika 1. Informatika el adás. Kovács Kristóf, Pálovics Róbert. Budapesti M szaki Egyetem november 5. 8. el adás Kovács Kristóf, Pálovics Róbert Budapesti M szaki Egyetem 2013. november 5. Amit megtanulunk HTML alapok CSS alapok Amit megtanulunk HTML alapok CSS alapok A tanítottak alapján a saját honlapotokat

Részletesebben

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05+ Geodéziai Feldolgozó Program

A GeoEasy telepítése. Tartalomjegyzék. Hardver, szoftver igények. GeoEasy telepítése. GeoEasy V2.05+ Geodéziai Feldolgozó Program A GeoEasy telepítése GeoEasy V2.05+ Geodéziai Feldolgozó Program (c)digikom Kft. 1997-2010 Tartalomjegyzék Hardver, szoftver igények GeoEasy telepítése A hardverkulcs Hálózatos hardverkulcs A GeoEasy indítása

Részletesebben

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva by A feladat bemutatása...1 Táblák létrehozása...1 Táblák feltöltése...2 Adatbáziskezelés php-ben...5 Csatlakozás az MySQL szerverhez

Részletesebben

Algoritmus terv 3. Fejezet: Folyamatok meghatározása

Algoritmus terv 3. Fejezet: Folyamatok meghatározása This image cannot currently be displayed. Algoritmus terv 3. Fejezet: Folyamatok meghatározása 1. Algoritmus általános áttekintése 2. Inputok és outputok definiálása 3. Folyamatok meghatározása 4. ozási

Részletesebben

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS 2015-2016 Adatbázis alapú alkalmazások készítése PHP-ben Adatbázis alapú alkalmazás 2 A leggyakrabban használt dinamikus alkalmazások

Részletesebben

Az Evolut Főkönyv program telepítési és beállítási útmutatója v2.0

Az Evolut Főkönyv program telepítési és beállítási útmutatója v2.0 Az Evolut Főkönyv program telepítési és beállítási útmutatója v2.0 Az Ön letölthető fájl tartalmazza az Evolut Főkönyv 2013. program telepítőjét. A jelen leírás olyan telepítésre vonatkozik, amikor Ön

Részletesebben

P-GRADE fejlesztőkörnyezet és Jini alapú GRID integrálása PVM programok végrehajtásához. Rendszerterv. Sipos Gergely sipos@sztaki.

P-GRADE fejlesztőkörnyezet és Jini alapú GRID integrálása PVM programok végrehajtásához. Rendszerterv. Sipos Gergely sipos@sztaki. P-GRADE fejlesztőkörnyezet és Jini alapú GRID integrálása PVM programok végrehajtásához Rendszerterv Sipos Gergely sipos@sztaki.hu Lovas Róbert rlovas@sztaki.hu MTA SZTAKI, 2003 Tartalomjegyzék 1. Bevezetés...

Részletesebben

Egzinet Partner Portál

Egzinet Partner Portál Egzinet Partner Portál Adminisztrációs felület Oktatási segédanyag 1 Készítsd el saját weboldalad! I. Bejelentkezés Minden Egzinet Partner Portál a http://admin.egzinet.hu adminisztrációs felületen keresztül

Részletesebben

Kaszás Tímea: Corvina OPAC az SZTE Mez gazdasági Könyvtárában

Kaszás Tímea: Corvina OPAC az SZTE Mez gazdasági Könyvtárában Kaszás Tímea: Corvina OPAC az SZTE Mez gazdasági Könyvtárában Bevezetés Az amerikai Voyager integrált könyvtári rendszer magyar installálásának eredménye a Corvina rendszer. A Corvina-t használó könyvtárak

Részletesebben

A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan

A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan Telepítés internetről A TERC VIP költségvetés-készítő program telepítése, Interneten keresztül, manuálisan Új szolgáltatásunk keretén belül, olyan lehetőséget kínálunk a TERC VIP költségvetéskészítő program

Részletesebben

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás? Bevezetés Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések Forráskód Hibajegyzék p2p.wrox.com xiii xiii xiv xiv xvi xvii xviii

Részletesebben

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk. OO PDO PDO VS MYSQLi VS MYSQL ================================================================================ A PHP mysql metódusai elavultak, helyette lehet hazsnálni a MYSQLi metódusokat, amelyek szinte

Részletesebben

A C# programozási nyelv alapjai

A C# programozási nyelv alapjai A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet

Részletesebben

Forráskód formázási szabályok

Forráskód formázási szabályok Forráskód formázási szabályok Írta: Halmai Csongor, Webcenter Bt. A php és html kódrészletek Ugyanazon fájlon belül nem szerepelhet php kód és html tartalom. E kettő különválasztására smarty-t vagy más

Részletesebben

BASH script programozás II. Vezérlési szerkezetek

BASH script programozás II. Vezérlési szerkezetek 06 BASH script programozás II. Vezérlési szerkezetek Emlékeztető Jelölésbeli különbség van parancs végrehajtása és a parancs kimenetére való hivatkozás között PARANCS $(PARANCS) Jelölésbeli különbség van

Részletesebben

Web-fejlesztés NGM_IN002_1

Web-fejlesztés NGM_IN002_1 Web-fejlesztés NGM_IN002_1 Rich Internet Applications RIA Vékony-kliens generált (statikus) HTML megjelenítése szerver oldali feldolgozással szinkron oldal megjelenítéssel RIA desktop alkalmazások funkcionalitása

Részletesebben

A C programozási nyelv II. Utasítások. A függvény.

A C programozási nyelv II. Utasítások. A függvény. A C programozási nyelv II. Utasítások. A függvény. Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv II (Utasítások, fuggvények) CBEV2 / 1 Kifejezés utasítás Kifejezés utasítás, blokk

Részletesebben

DIGITÁLIS KÖZTERÜLETI M SZAKI TÉRKÉP

DIGITÁLIS KÖZTERÜLETI M SZAKI TÉRKÉP DIGITÁLIS KÖZTERÜLETI M SZAKI TÉRKÉP Az önkormányzatok a közterületek dönt részének gazdái. A közterületekkel kapcsolatos, nyilvántartási és üzemeltetési feladatokhoz a földhivatalokban beszerezhet földmérési

Részletesebben

Pegasus Mail levélmappák importálása

Pegasus Mail levélmappák importálása Pegasus Mail levélmappák importálása OpenWebMail-be 2012. június 29. Kivonat A folyamat gyors áttekintése (türelmetlen, ill. haladó felhasználók számára): 1. A szükséges programok beszerzése és telepítése:

Részletesebben

ÁLTALÁNOS RENDSZERTERV

ÁLTALÁNOS RENDSZERTERV Általános Rendszerterv i ÁLTALÁNOS RENDSZERTERV Kormányzati Döntés-el készítést Támogató Rendszer (KDTR) a Központi Szolgáltatási F igazgatóság részére 2008, november Általános Rendszerterv 2 Jelen dokumentum

Részletesebben

4. Laborgyakorlat. A fájlokról ezeket az adatokat, a fájlrendszer tárolja. Számunkra az 1, 3, 4. oszlopok lesznek az érdekesek.

4. Laborgyakorlat. A fájlokról ezeket az adatokat, a fájlrendszer tárolja. Számunkra az 1, 3, 4. oszlopok lesznek az érdekesek. Linux fájlrendszerek. 4. Laborgyakorlat Előző gyakorlaton, már volt szó a fájlrendszerekről, mikor a mount parancs -t kapcsolójáról volt szó. Linux alatt, az egyes fájlokhoz való hozzáférések miatt, a

Részletesebben

Regionális forduló november 18.

Regionális forduló november 18. Regionális forduló 2017. november 18. 9-10. osztályosok feladata Feladat Egy e-mail kliens szoftver elkészítése lesz a feladatotok. Az elkészítendő alkalmazásnak az alábbiakban leírt specifikációnak kell

Részletesebben

HVK Adminisztrátori használati útmutató

HVK Adminisztrátori használati útmutató HVK Adminisztrátori használati útmutató Tartalom felöltés, Hírek karbantartása A www.mvfportal.hu oldalon a bejelentkezést követően a rendszer a felhasználó jogosultsági besorolásának megfelelő nyitó oldalra

Részletesebben

A WORDPRESS TELEPÍTÉSÉNEK LÉPÉSEI

A WORDPRESS TELEPÍTÉSÉNEK LÉPÉSEI Mgr. Námesztovszki Zsolt A WORDPRESS TELEPÍTÉSÉNEK LÉPÉSEI Eötvös Loránd Tudományegyetem, Pedagógiai és Pszichológiai Kar Oktatásinformatikai rendszerek - szöveggyűjtemény Budapest, 2013. Bevezető A WordPress

Részletesebben

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2018. október 11. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja

Részletesebben

A WORDPRESS TESTRESZABÁSA (MEGJELENÉS MENÜ ELEMEI)

A WORDPRESS TESTRESZABÁSA (MEGJELENÉS MENÜ ELEMEI) Mgr. Námesztovszki Zsolt A WORDPRESS TESTRESZABÁSA (MEGJELENÉS MENÜ ELEMEI) Eötvös Loránd Tudományegyetem, Pedagógiai és Pszichológiai Kar Oktatásinformatikai rendszerek - szöveggyűjtemény Budapest, 2013.

Részletesebben

Oktatási cloud használata

Oktatási cloud használata Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnikai és Információs Rendszerek Tanszék Oktatási cloud használata Készítette: Tóth Áron (BME MIT), 2013. A segédlet célja a tanszéki oktatási cloud

Részletesebben

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban OpenCL alapú eszközök verifikációja és validációja a gyakorlatban Fekete Tamás 2015. December 3. Szoftver verifikáció és validáció tantárgy Áttekintés Miért és mennyire fontos a megfelelő validáció és

Részletesebben

Hardver és szoftver követelmények

Hardver és szoftver követelmények Java-s Nyomtatványkitöltő Program Súgó Telepítési útmutató Hardver és szoftver követelmények A java-s nyomtatványkitöltő program az alábbi hardverigényt támasztja a számítógéppel szemben: 400 MHz órajelű

Részletesebben

Programozási nyelvek (ADA)

Programozási nyelvek (ADA) Programozási nyelvek (ADA) Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 1. előadás Hasznos weboldal http://kto.web.elte.hu Program felépítése Programegységek (program unit) eljárások (procedure)

Részletesebben

Tájékoztató. Használható segédeszköz: -

Tájékoztató. Használható segédeszköz: - A 12/2013. (III. 29. NFM rendelet szakmai és vizsgakövetelménye alapján. Szakképesítés, azonosítószáma és megnevezése 54 481 06 Informatikai rendszerüzemeltető Tájékoztató A vizsgázó az első lapra írja

Részletesebben

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Reguláris kifejezések - alapok, BASH Operációs rendszerek 9. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor

Részletesebben

BASH SCRIPT SHELL JEGYZETEK

BASH SCRIPT SHELL JEGYZETEK BASH SCRIPT SHELL JEGYZETEK 1 TARTALOM Paraméterek... 4 Változók... 4 Környezeti változók... 4 Szűrők... 4 grep... 4 sed... 5 cut... 5 head, tail... 5 Reguláris kifejezések... 6 *... 6 +... 6?... 6 {m,n}...

Részletesebben

PTE-PROXY VPN használata, könyvtári adatbázisok elérhetősége távolról

PTE-PROXY VPN használata, könyvtári adatbázisok elérhetősége távolról PTE-PROXY VPN használata, könyvtári adatbázisok elérhetősége távolról Az Informatikai Igazgatóság minden aktív egyetemi hallgató és munkaviszonnyal rendelkező egyetemi dolgozó részére úgynevezett proxy

Részletesebben

InCash számlázó program és a Webshop Hun rendszer összekötése

InCash számlázó program és a Webshop Hun rendszer összekötése InCash számlázó program és a Webshop Hun rendszer összekötése Az InCash számlázó programkészítő cég, egy köztes programot hozott létre, amely segítségével webáruházakban generálódó megrendeléseket képes

Részletesebben

HTML és CSS. Horváth Árpád május 6. Óbudai Egyetem Alba Regia M szaki Kar (AMK) Székesfehérvár

HTML és CSS. Horváth Árpád május 6. Óbudai Egyetem Alba Regia M szaki Kar (AMK) Székesfehérvár Óbudai Egyetem Alba Regia M szaki Kar (AMK) Székesfehérvár 2015. május 6. Vázlat 1 2 A világháló Története statikus és dinamikus oldal URL DNS-feloldás IP-cím ügyfél (kliens, böngész ) és szerver (kiszolgáló)

Részletesebben

OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK. 2.1 A feladat

OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK. 2.1 A feladat 2. Digitális óra 28 OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK 2.1 A feladat Ebben a fejezetben egy viszonylag egyszerő problémára alkalmazva tekintjük át az OO tervezés modellezési technikáit. A feladat

Részletesebben

GPRS Remote. GPRS alapú android applikáció távvezérléshez. Kezelési útmutató

GPRS Remote. GPRS alapú android applikáció távvezérléshez. Kezelési útmutató GPRS Remote GPRS alapú android applikáció távvezérléshez Kezelési útmutató Tartalomjegyzék Általános leírás... 1 Új modul beállítás... 2 Új okostelefon beállítás... 2 Modulok karbantartása... 3 Okostelefonok

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

Széchenyi István Szakképző Iskola

Széchenyi István Szakképző Iskola A SZAKKÖZÉPISKOLAI SZAKMACSOPORTOS ALAPOZÓ OKTATÁS EMELT SZINTŰ ISKOLAI PROGRAMJA 11-12. évolyam Érvényes a 2003-2004-es tanévtől felmenő rendszerben Átdolgozva, utolsó módosítás: 2004. április 26. Az

Részletesebben

OCSP Stapling. Az SSL kapcsolatok sebességének növelése Apache, IIS és NginX szerverek esetén 1(10)

OCSP Stapling. Az SSL kapcsolatok sebességének növelése Apache, IIS és NginX szerverek esetén 1(10) OCSP Stapling Az SSL kapcsolatok sebességének növelése Apache, IIS és NginX szerverek esetén 1(10) 1. Tartalomjegyzék 1. Tartalomjegyzék... 2 2. Bevezető... 3 3. OCSP Stapling támogatással rendelkező webszerverek...

Részletesebben

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. március 3. Függvények Mi az a függvény (function)? Programkód egy konkrét, azonosítható, paraméterezhet, újrahasznosítható blokkja Miért

Részletesebben

1. Jelölje meg az összes igaz állítást a következők közül!

1. Jelölje meg az összes igaz állítást a következők közül! 1. Jelölje meg az összes igaz állítást a következők közül! a) A while ciklusban a feltétel teljesülése esetén végrehajtódik a ciklusmag. b) A do while ciklusban a ciklusmag után egy kilépési feltétel van.

Részletesebben

ALKALMAZÁSOK ISMERTETÉSE

ALKALMAZÁSOK ISMERTETÉSE SZE INFORMATIKAI KÉPZÉS 1 SZE SPECIFIKUS IT ISMERETEK ALKALMAZÁSOK ISMERTETÉSE A feladat megoldása során valamely Windows Operációs rendszer használata a javasolt. Ebben a feladatban a következőket fogjuk

Részletesebben

Tudás Reflektor. Copyright 2011; Kodácsy Tamás; E-mail: kodacsy.tamas@kodasoft.hu

Tudás Reflektor. Copyright 2011; Kodácsy Tamás; E-mail: kodacsy.tamas@kodasoft.hu Tudás Reflektor A Társadalmi Megújulás Operatív Program 4.1.3. számú, A felsőoktatási szolgáltatások rendszerszintű fejlesztése Központi/felsőoktatási Validációs Rendszer projekt keretében készült olyan

Részletesebben

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Operációs rendszerek. 9. gyakorlat. BASH recap, reguláris kifejezések UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED BASH recap, reguláris kifejezések Operációs rendszerek 9. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik Viktor

Részletesebben