F-14/1/KONV-2015-0009
„A GÉPÉSZETI ÉS INFORMATIKAI ÁGAZATOK DUÁLIS ÉS
MODULÁRIS KÉPZÉSEINEK KIALAKÍTÁSA A PÉCSI
TUDOMÁNYEGYETEMEN „
Web-programozás II
Pécs
2015
Web-programozás II
Pollack Press
7624 Pécs, Boszorkány u. 2.
Felelős kiadó:
ISBN szám
Pécsi Tudományegyetem
Műszaki és Informatikai Kar
Pécs, 2015
© Dr. Nagy Enikő
2
TARTALOMJEGYZÉK
Web-programozás II
1. Bevezetés....................................................................................................... 8
2. A tantárgy célkitűzése ...................................................................................... 9
3. Követelmények ..............................................................................................10
4. A szerver oldali programozás ...........................................................................11
4.1. Az Apache .............................................................................................................................. 11
5.4.2. Ciklusok................................................................................................................................ 27
3
5.8.1. Felhasználó kezelése ........................................................................................................... 41
7. Összefoglalás .................................................................................................65
8. IRODALOMJEGYZÉK ........................................................................................67
4
ÁBRÁK JEGYZÉKE
1. ábra XAMPP telepítése I. ................................................................................................................................... 14
5
TÁBLÁZATOK JEGYZÉKE
1. táblázat Operátorok .......................................................................................................................................... 20
2. táblázat Műveletek precedenciája .................................................................................................................... 21
3. táblázat Logikai kifejezések operátorai ............................................................................................................ 22
4. táblázat Függvények ........................................................................................................................................ 23
5. táblázat Hibakezelés ........................................................................................................................................ 44
6
Web-programozás II
7
1. Bevezetés
A magyar felsőfokú informatikusképzésről elmondható, hogy a képzésfejlesztés folytonos
kihívások elé állítja az oktatásban szereplő szakembereket. Az Európai Unió által deklarált
globális kérdéskörök – közéjük tartozik az informatika is – hatással vannak a felsőoktatásra. A
felsőoktatási szektor versenyképességének javítása ugyanis az informatikai képzési eljárások
folyamatos fejlesztését igényli, és ez kemény feladatokat jelent a szakembereknek. Az
információs technológia hallatlan fejlődésével új kommunikációs csatornák, új internetes
felületek jönnek létre, amelyek folytonos változásban tartják az informatikai képzési területet.
Mára viszont elmondható, hogy szinte nincs is olyan munkakör, ahol ne lenne
szükség informatikai tudásra. A jegyzetkészítésnél tehát azt a fajta segítségnyújtási
koncepciót választottam, amellyel azt szeretném elérni, hogy olyan segédanyagot adjak a
kedves olvasók kezébe, amelynek áttanulmányozása segíthet mind az informatikai, mind a
nem informatikai szektorban történő munkák elvégzésében.
Ezek után már csak az a kérdés merülhet fel, hogy mit értünk
webprogramozáson? A programfejlesztésnek olyan aspektusait, amelyeknek eredményei
webes felületekre készülnek. A webböngésző, a webszerver, a HTTP-protokoll, a HTML nyelv,
az URL-címzés, a kliens, a JavaScript, a PHP stb. olyan kifejezések, amelyeknek egy
webprogramozó alapszókincsének részévé kell válniuk, és a programozónak a megértésük
olyan szintjét kell birtokolnia, amellyel képes webes alkalmazások fejlesztésére.
a szerző
8
2. A tantárgy célkitűzése
A felsőfokú alapképzési szakok képzési és kimeneti követelményrendszerében szerepel, hogy
alapfokozat birtokában a mérnök informatikusoktól legalább két kompetencia elvárt arra
vonatkozóan, hogy alkalmas legyen számítógépes és távközlő hálózatok telepítésére,
konfigurálására, hibaelhárítására, üzemeltetésére, továbbfejlesztésére; kliens
szerverrendszerek programozására, webprogramozásra, vállalati információs rendszerek
folyamatalapú funkcionális tervezésére és készítésére, valamint döntéstámogató rendszerek
tervezésére, készítésére, működtetésére. Ebből következően, jelen tananyaggal a
webprogramozáshoz szükséges kompetenciák, ismeretek és attitűdök kifejlesztése az
alapvető cél.
9
3. Követelmények
Jelen tananyag elsajátításához elengedhetetlenek a következők:
Ezen kívül, mivel programozási feladatok megoldására kerül sor, szükség lesz alapvető
algoritmikus gondolkodásmódra. Ide tartozóan feltételezzük a programozási alapokkal
kapcsolatos ismereteket.
10
4. A szerver oldali programozás
Mint ahogy arról az első fejezetekben is szóltunk, a webszerver elsődleges feladata, hogy
kiszolgálja a kliens gépeket, azok kéréseire reagáljon. Ha a klienstől egy kérés megy a
webszerver felé, az egy HTML-kódot juttat vissza válaszként, amely kódot a kliens gépen lévő
böngésző értelmez és jelenít meg a felhasználó számára.
A honlapok tekintetében eddig statikus oldalak létrehozását tárgyaltuk, de mi a helyzet
a dinamikus oldalakkal? Azt már jól tudjuk, hogy statikus weblapról beszélünk akkor, ha annak
tartalmát a fejlesztő előre meghatározza, leírja és tárolja. Az ilyen weblapok tartalma minden
egyes letöltéskor, megtekintéskor ugyanaz. Dinamikus honlapok esetén azokat vagy azok egy
részét nem a fejlesztő, hanem a programkód hozza létre. A program általában adatokat fogad,
és azok feldolgozása után dinamikusan állítja elő a weblap HTML-szövegét. A dinamikus
weblapok tartalma ezért nem állandó, hanem a program által feldolgozott adatoktól függ.
A dinamikus tartalom előállítását, módosítását szerver oldalon vagy kliens
számítógépen futó programkód is végezheti. Szerver oldali programról beszélünk akkor, ha a
dinamikus weblapot manipuláló programkód egy távoli gépen működik, és hozzánk már csak
a kész weblap jut el.
Mivel szerver oldali programozás esetén a programkód a szerveren tárolódik, és
végrehajtása is ott történik, így nem a böngésző, hanem a távoli gépen elhelyezett
alkalmazásszerver futtatja a programkódot. Az alkalmazásszerver olyan keretrendszer
(programozási nyelv, futtatókörnyezet, futásidejű könyvtárak, csatolófelületek együttese),
amely egymástól függetlenül működő programkódok párhuzamos futását biztosítja. Az
alkalmazásszerverek kiváló lehetőséget biztosítanak az adatbázisszerverek által működtetett
adatbázisok elérésére, és webes alkalmazások készítésére is. A webalkalmazás olyan
szoftver, amelynek kódja távoli gépre telepített alkalmazásszerver segítségével fut, de
kezelőfelülete a felhasználó gépén futó böngészőben jelenik meg. Mivel az
alkalmazásszerveren futó program képes adatbázisszerverek elérésére is, a
webalkalmazások kiválóan alkalmasak adatbázisok web felületen történő kezelésére.
4.1. Az Apache
Mielőtt elkezdenénk egy szerver oldali programnyelvnek a megismerését, ismerjük meg ide
tartozóan az egyik leggyakrabban használatos webszerver tulajdonságait. Az Apache egy
erős, nagy webszerver, amely kompatibilis a HTTP-vel. A webszerver HTML-oldalakat szolgál
ki HTTP protokollon keresztül. Alapértelmezetten a 80-as porton. Titkosított adatátvitelre is
képes SSL vagy TLS felett, a 443-as porton (HTTPS protokoll). Az Apache weboldala
http://apache.org. Az Apache valójában egy alapítvány, amelynek nagyon sok projektje van, a
webszerver (httpd) csak az egyik projekt a sok közül.
Az Apache projekt koordinálását több vezető és fejlesztő végzi, ami az Apache
Software Foundation néven fut. Ez a szerver nyílt forráskódú webkiszolgáló alkalmazás,
szabad szoftver és megfelel a gyorsan változó internet követelményeinek. Szabadon
használható akár üzleti, vállalati felhasználási célokra is. Az Apache több kiszolgáló oldali
programnyelvet támogat. Ezek többek között a Perl, a Python és a PHP is.
11
A virtual hosting segítségével egyetlen Apache installáció ki tud szolgálni több
különböző webhelyet is, aminek a lényege az, hogy például egyetlen gép egyetlen Apache
szerverrel képes kiszolgálni több, különböző címre érkező HTTP-kérést.
Statikus és dinamikus weboldalak közzétételére egyaránt használják. Sok
webalkalmazást az Apache által nyújtott környezethez és szolgáltatásokhoz terveznek. Az
Apache alkotja a webszerver komponenst a népszerű LAMP nevű alkalmazáscsomagban,
melynek további komponensei a MySQL adatbázisszerver és a PHP/Perl/Python
programozási nyelvek.
12
5. Programozás PHP nyelven
Ha szerver oldali környezetben szeretnénk webfejlesztéssel foglalkozni, ahhoz létre kell
hoznunk a megfelelő programozói környezetet, telepíteni kell a szükséges szoftvereket. A PHP
professzionális lehetőségeket kínál a webprogramozásban, amelynek alapjait szeretnénk
most elsajátíttatni. Így ebben a fejezetben a PHP nyelvvel és lehetőségeivel foglalkozunk. A
teljesség igénye nélkül vesszük sorba a nyelv legfontosabb elemeit, melyek megértését példák
illusztrálásával könnyítjük meg.
A PHP programozási nyelv létrejötte egy dán származású, kanadai programozóhoz,
Rasmus Lerdorfhoz köthető. 1994-től kezdődően jelentős fejlődésen ment keresztül a nyelv,
mire szerver oldali programnyelvként igazán alkalmas lett webalkalmazások kifejlesztésére. A
PHP rövidítés eredetileg a Personal Home Page Tools makró gyűjteményből (1995-ből) ered,
de mára a hivatalos neve Hypertext Preprocessorként van nyilvántartva.
13
1. lépés XAMPP telepítő csomag letöltése
14
4. ábra XAMPP telepítése IV.
15
6. ábra XAMPP Control Panel
Miután a telepítést elvégeztük, próbáljuk ki, működik-e a webszerverünk! Ehhez keressük meg
a létrehozott xampp mappában (c:/xampp), azon belül a htdocs nevű mappában az index.php
nevű fájlt és próbáljuk megnyitni egy böngészővel, a következő útvonallal:
http://localhost/index.html. Abban az esetben, ha a kijelzőnkön a „Something is wrong with the
XAMPP installation” feliratot látjuk, akkor valami hiba történt telepítés közben. Ilyenkor
érdemes megnézni, hogy a Control panelen futnak-e az Apache és MYSQL moduljaink.
Amennyiben futnak a moduljaink, és nem kapunk hibaüzenetet (hanem bármi mást, pl.
„IT works!”), azt jelenti, hogy működik a rendszer. A webszerver indítása után természetesen
nem tudunk majd bármelyik mappából weblapokat letölteni. Webböngészővel csupán egyetlen
könyvtár, a xampp\htdocs mappa tartalma lesz elérhető. Ez a mappa a webszerver
DocumentRoot könyvtára, ezt tekinti az Apache a weben keresztül látható könyvtárszerkezet
gyökerének.
A htdocs nevű mappán belül hozzunk létre egy webprog nevű mappát, hogy a tanulás
folyamán ide tudjuk menteni az elkészült PHP-állományainkat, és innen tudjuk majd futtatni
azokat.
16
utasításokat, műveleteket. Például a PHP-program használhatja a fájlrendszer fájljait,
adatbázisokat vagy akár hálózati kommunikációt folytathat. Ha elvégezte a műveleteket, akkor
visszaadja a webszervernek az utasítások által létrehozott kimenetet. A webszerver ezt a
kimenetet küldi vissza a böngészőnek.
Az értelmező mindig HTML-módban kezdi egy állomány feldolgozását, azaz abból
indul ki, hogy a dokumentum alapvetően HTML-szöveg, amelybe egy vagy több ponton PHP-
kódot ágyaztak. PHP módba akkor vált át, amikor a szövegben a PHP-kód kezdetét jelző
karaktersorozatot (<?php ) talál. Amikor a feldolgozásban eléri a kód végét jelző jelölőt (?>),
akkor ismét HTML-módba vált vissza. A .php kiterjesztésű állomány végrehajtásakor a html-
php-html váltás tetszőleges számban ismétlődhet, tehát a fájlban bármennyi PHP kódrészlet
lehet.
Egy PHP-program készítésekor a következő szintaktikai szabályokat figyelembe kell
venni:
- Az utasításokat pontosvessző zárja (;).
- Az utasítások esetleges paramétereit vesszővel választjuk el egymástól (,), és az
utasítás után kerek zárójelben adjuk meg őket ().
- A ciklusokhoz, elágazásokhoz és eljárásokhoz tartozó utasításblokkokat francia
zárójelek közé tesszük {..}.
- A változók nevében a kis- és nagybetűk között különbséget tesz, pl. $valtozo nem
ugyanaz és nem egyenlő $VALTOZO-val.
Léteznek olyan szabályok is, amelyek ugyan nem kötelezőek, de alkalmazásuk ajánlott a
praktikum és jobb áttekinthetőség miatt. Ezek szerint:
<?php
print("Hello World!");
?>
A program egy utasítást, a print() függvényt használt, mellyel karakterláncot ír ki a
képernyőre. A forrásszöveget mentsük el elso név alatt php kiterjesztéssel, majd a
http://localhost/elso.php webcím begépelésével töltsük be a megszerkesztett PHP-fájlt a
webböngészőbe. Ekkor a PHP-program végrehajtása a webkiszolgálón megtörténik.
17
A PHP-kód beépítése egy HTML-oldalba a PHP kódblokk beírásából áll a HTML-
elemek közé. A következő példa HTML- és PHP-kódot is tartalmaz egy oldalon. Készítsük el
ezt is!
<?php
header ("Content-Type: text/html; charset=utf-8");
?>
<h1> PHP próba </h1>
<hr/>
<ul>
<?php
$orszag=array ("Kalifornia ","Colorado és ","Arizona ");
for ($k=0; $k<3; $k++)
{
print($orszag[$k]);
}
?>
amerikai országok
A kiírásra a print() utasítást használtuk, amire ugyancsak használhatjuk az echo utasítást is.
Mindkettő a kimenetre írja az utasítás neve mellett feltüntetett adatot, azaz a kapott
paramétert. A különbség az, hogy a print csak egy, az echo pedig vesszőkkel elválasztott, több
paraméter kiírására is alkalmas.
Példa:
<?php
echo "Kalifornia ", "Colorado", "Arizona ";
print "Kalifornia, Colorado, Arizona amerikai országok.";
?>
A weblapok head elemében mindig jelezzük a weblap kódolását. Ha tisztán php-kóddal állítjuk
elő a weblapot, akkor a header() függvénnyel tudjuk elküldeni a kódolás típusát.
A fenti példában UTF8 kódolást használunk, ezért a példaprogramban szerepel a header()
függvény (header ("Content-Type: text/html; charset=utf-8");).
18
Ha egy komplett webalkalmazást tekintünk, akkor könnyen látható, hogy több PHP-fájlból
tevődik össze. Több, különálló fájlban kezeli például a kliens oldali felületet, vagy gyakori, hogy
külön fájlban kezeli a függvényeket. Fontos megjegyezni, hogy a függvényeket tartalmazó
állományokat a webszerver publikus könyvtárán kívül kell elhelyezni! Ilyenkor a külön lévő
PHP-fájlokat ideiglenesen valahogy össze kell fűzni. Erre a célra szolgálnak az include, az
include_once, a require és a require_once utasítások. Ezeknek az utasításoknak a
használatakor meg kell adni a csatolandó PHP-fájl paraméterenkénti útvonalát és nevét.
Amikor futtatjuk a kódot és az értelmező include utasításhoz ér, akkor felfüggeszti az eredeti
kód végrehajtását, és a paraméterként megadott állománnyal folytatja a művelet-végrehajtást.
Amikor végzett a becsatolt fájl feldolgozásával, visszatér az eredeti kódba.
Az include és a require utasítások között annyi különbség van, hogy hiba esetén az include
csak küld egy figyelmeztető üzenetet, majd folytatja tovább a munkát, a require azonban
figyelmeztetés után megszakítja a program futását.
Ha meg akarjuk előzni egy kód többszöri beillesztését, akkor használjuk az
include_once és a require_once utasításokat. Ezek abban különböznek az include és a require
utasításoktól, hogy mielőtt elvégeznék a műveletet, megvizsgálják, hogy a kódot korábban
nem illesztettük-e be. Ha igen, akkor nem ismétlik meg a csatolást.
Amikor egy program fut, az utasításokat hajtja végre, ezzel adatokat módosít, adatokon végez
műveleteket és ábrázolja azokat. Ezt úgy mondjuk, adatkezelést végez. Ahhoz, hogy tudjuk
ábrázolni az adatokat, meg kell ismerni a lehetséges alapelemeket, elemi lépéseket,
műveleteket, amelyekkel a program képes dolgozni. Ebben a fejezetben megismerjük az
adattípusokat, használható változókat, konstansokat, és ezekhez kapcsolódóan az ábrázolási
módokat.
A PHP nyelv elemei, a literálok, a kifejezések, a változók, a konstansok és a tömbök.
Nézzük meg, melyik elemnek melyek a jellemzői!
5.3.1. A literálok
A literál lehet szöveges és számérték, illetve logikai literál. A PHP a ’ ’ és az „” idézőjelek közé
gépelt karaktersorokat érti szöveg, így szövegliterál alatt. Az így megadott szövegeket az
azonnali megjelenítésre használjuk.
A számok ábrázolásakor egész és valós típusú numerikus adatokat tárolhatunk
literálban. A valós szám literálokat a számban elhelyezett pont (.) tizedes elválasztó
különbözteti meg az egész literáloktól. Utóbbiak esetében az oktális és hexadecimális
ábrázolásra is van lehetőség. Az oktális számokat 0 (011=>9), a hexadecimális számokat 0x
karakterekkel (0xff=>255) kell kezdeni. A valós számokat legtöbbször egyszerűen tizedes
elválasztóval jelezzük (3.14), de használhatjuk az exponenciális (normalizált) formát is (314e-
2=> 314*10-2=>3.14).
Példa:
echo "Egész szám: ",270,"</br>";
19
A logikai típusú adat mindössze kétféle, igaz vagy hamis értéket vehet fel.
5.3.2. A kifejezések
A program során az adatkezelésre használjuk alapvetően a kifejezéseket, melyek alapvetően
két részből állnak, a tényezőkből (operandus) és a műveleti jelekből (operátor). Az értelmező
úgy kezeli a kifejezéseket, hogy elvégzi a kifejezésben szereplő műveletet, és azt így kapott
eredményértéket helyettesíti be, azzal dolgozik tovább. Numerikus kifejezésekben aritmetikai
(matematikai) operátorokat, a szöveges kifejezésekben sztring operátorokat használunk.
Matematikai operátorok:
1. táblázat Operátorok
Operátor Művelet Példa Eredmény
+ Összeadás 6+3 9
- Kivonás 6-3 3
* Szorzás 6*3 18
/ Osztás 6/3 2
% Maradékképzés 7%3 1
Összehasonlító operátorok:
Értékadó operátor:
20
Régi érték Operátor Példa Egyenértékű kifejezés Új érték
10 += $a += 5 $a = $a + 5 15
10 -= $a -= 5 $a = $a - 5 5
10 *= $a *= 5 $a = $a * 5 50
10 /= $a /= 5 $a = $a / 5 2
10 %= $a %= 5 $a = $a % 5 0
"Hello " .= $koszon.="World" $koszon = $koszon . "World" "Hello World"
Bináris operátorok:
Operátor Művelet
& ÉS, azaz AND
| VAGY, azaz OR
^ kizáró vagy, azaz XOR
~ NO
<< balra tolás
>> jobbra tolás
Forrás:Saját szerkesztés
21
||
?:
= += -= *= /= .= %= &= |= ^= <<= >>= =>
and
xor
or
Forrás: Saját szerkesztés
Az összetett logikai kifejezések operátorai a következők lehetnek:
5.3.3. Változók
A változó nem más, mint a memóriában egy érték, egy adat számára lefoglalt szakasz.
Ezeket a szakaszokat vagy memóriahelyeket a PHP-értelmező foglalja le a program futásakor
az értékek tárolására. A változó nevével hivatkozunk rá, az adat pedig az értéket jelenti.
Ahhoz, hogy változót tudjunk használni, deklarálnunk kell (nevet kell adnunk és helyet kell
lefoglalnunk a memóriában), majd kezdőértéket kell adni. A PHP nyelvben minden változónév
dollár jellel ($) kezdődik, betűkből, számjegyekből és aláhúzás karakterekből (_) állhat.
Fontos: A $ jelet követő első karakter nem lehet számjegy és a változónevek nem
tartalmazhatnak szóközt! A PHP az utasítások neveiben nem különbözteti meg a kis- és
nagybetűvel írt változatokat.
Példa: $a=8;
PHP-ban arra is van lehetőség, hogy a változót a program különböző pontjain más-
más típusú adatként kezeljük, sőt típusát meg is változtathatjuk a futás során.
22
Erre mutat példát a következő programrészlet, amelyben a szorzás művelet hatására
az ’a’ szöveges változó típusa számra változik:
<?php
$a="8";
$b=6;
echo $a*$b;
?>
5.3.4. Konstansok
Az olyan adatokat, amelyekre alfanumerikus nevekkel lehet hivatkozni, és értéküket soha nem
szándékozzuk megváltoztatni, konstansoknak vagy állandóknak nevezzük. Létrehozásuk a
define() függvénnyel történik, amelynek első paramétere a konstans neve, a második az
értéke. A konstans neve a változókkal szemben nem kezdődik $ karakterrel, ellenben ugyan
nem kötelezően, a nevüket nagybetűkkel adjuk meg.
Példa:
<?php
define("PI",3.14);
$r=10;
echo "Terület: ",$r*$r*PI;
?>
5.3.5. A tömbök
A tömbök értékek indexelt listái, rugalmas adatszerkezetek és nagyméretű, összetett adatok
tárolására és kezelésére szolgálnak. Használatuk igazi értelme a nagyobb mennyiségű adatok
rendszerezése szempontjából fontos. A tömbök olyan programelemek, amelyekben az adatok
indexek segítségével érhetők el. Az indexelés számmal vagy karakterlánccal valósítható meg.
Alapértelmezés szerint a tömböket számokkal indexeljük, az első elem indexe mindig 0. Tehát,
bármely elem indexe eggyel kisebb az elem tömbbéli helyétől és az elem utolsó indexe mindig
eggyel kisebb a tömb méreténél.
23
szögletes zárójelek alkalmazásával.
print $orszag[2];
$orszag[]=”Arizona”;
$orszag[]=”Colorado”;
$orszag[]=”Kalifornia”;
$orszag[]=”Új-Mexikó”;
$orszag[]=”Utah”;
$orszag[5]=”Wyoming”;
<?php
$orszagok = array(
"nev"=> "Kalifornia",
"fovaros" => „Los Angeles”,
"lakosok" => "3819702",);
print $orszagok["fovaros"];
24
5.4. A PHP vezérlő szerkezetei
5.4.1. Elágazások
Az elágazások, vagy más néven szelekciók esetén a kód több utasításágra bomlik. Minden ág
további utasításokat tartalmazhat, azonban a szelekció után az ágak újra találkoznak, és a
program végrehajtása ismét közös szekvenciában folytatódik.
if (logikai kifejezés)
{
igaz_ág
}
else
{
hamis_ág
}
<?php
header ("Content-Type: text/html; charset=utf-8");
$a=8;
$b=6;
if ($a>$b)
{
echo ("$a nagyobb <br/>");}
else{
echo ("$b nagyobb <br/>");
}
?>
25
<?php
header ("Content-Type: text/html; charset=utf-8");
$a=8;
$b=6;
if ($a==$b)
{
echo ("$a egyenlő $b <br/>");}
else{
if ($a>$b)
echo ("$a nagyobb <br/>");
else
echo ("$b nagyobb <br/>");
}}
?>
A két példa alapvetően ugyanazt csinálja. Megvizsgálja két változó értékét, hogy melyik a
nagyobb és a nagyobbat kiírja. A különbség viszont a két példa között az, hogy a második
precízebb megoldás, mert azt az esetet is vizsgálja, amikor egyenlő a két változó értéke.
A sokszorosan egymásba ágyazott elágazások nehezen olvashatóvá teszik a
programkódot. A feladat egyszerűbb megvalósítására használható az if…elseif…else
szerkezet, ahol az igaz ágat követő elseif kulcsszóval új elágazást helyezhetünk el a
programkódban. Ennek a struktúrája így néz ki:
if(logikai kifejezés){
igaz_ág
} elseif (logikai kifejezés) {
igaz_ág_2
} else {
hamis_ág
}.
switch (tesztkifejezés){
case tesztérték1:
ág_utasításai;
break;
case tesztérték2:
ág_utasításai;
break;
default:
különben_utasítások;
}.
26
Az ágak a tesztkifejezés után egyetlen kapcsos zárójelpár között helyezkednek el. Az egyes
ágak case kulcsszóval kezdődnek, amelyeket egy tesztérték, majd kettőspont követ. Minden
ág tetszőleges utasításokat tartalmazhat, de az utolsó szinte mindig a break. Amikor az
interpreter végrehajtja a switch utasítást, kiszámolja a tesztkifejezés értékét, majd megkeresi
az első olyan ágat, ahol a case kulcsszó utáni tesztérték megegyezik a tesztkifejezés kiszámolt
értékével. Ennek az ágnak az utasításait fogja végrehajtani. A breakre azért van szükség, mert
különben a kiválasztottat követő ág utasításait is végrehajtaná az értelmező. A break hatására
a vezérlés azonnal az elágazás (switch szerkezet) utáni első utasításra kerül.
A default különleges ág. Akkor kerül ide a vezérlés, ha az értelmező egyetlen, a tesztkifejezés
értékének megfelelő ágat sem talál. Ha nincs default ág, akkor ilyen esetben az elágazás utáni
részre kerül a vezérlés.
Példa:
<?php
header ("Content-Type: text/html; charset=utf-8");
$varos="Denver";
switch ($varos) {
case "San Diego";
case "Los Angeles";
case "Denver";
echo ("Amerikában van. <br/>");
break;
case "Budapest";
echo ("Európában van.<br/>");
break;
case "Tokio";
echo ("Ázsiában van.<br/>");
break;
default:
echo ("Nincs ilyen.<br/>");
}
?>
5.4.2. Ciklusok
A ciklusszervezési technikák is hasonlóan működnek, mint más programozási nyelvekben.
Beszélünk elöltesztelő, hátultesztelő és léptető ciklusokról. Nézzük meg, hogyan valósulnak
meg ezek a PHP nyelvén!
Elöltesztelő ciklus:
while(tesztkifejezés){
ciklusmag
}
27
Példa: A következő PHP-programmal kiíratjuk az amerikai városokat egy kívülről meghívott
állományból.
<?php
header ("Content-Type: text/html; charset=utf-8");
require ("amerikaivarosok.php")
$varosszam=count($varosok);
$i=0;
echo"Amerikai városok listája:";
while ($i<$varosszam){
echo "$i.város:", $varosok[$i]["neve"],"<br/>";
$i++;
}
?>
Hátultesztelő ciklus:
do{
ciklusmag
} while (tesztkifejezés)
A léptető ciklus
28
Amikor a ciklus kezdődik, a ciklusváltozó értéket kap. Ez az értékadás csak egyszer
zajlik le. Az értelmező mindig megvizsgálja azonban, hogy igaz-e a logikai kifejezés. Ha nem,
akkor átlépi a ciklusmagot és folytatja a programot. Ha igaz, akkor végrehajtja a ciklusmag
utasításait, majd a ciklusmag végén elvégzi a ciklusváltozót változtató kifejezést. Ezt követően
visszatér a ciklus elejére, és újra tesztel.
Példa: Az előző feladat alapján az amerikai városok kiírásához a következő for ciklust
szervezhetjük meg:
$varosszam=$varosok;
for ($i=0; $i<$varosszam; $i++) {
$szam=$i+1;
echo ” $szam. ”, $varosok[$i],”<br/>”;
}
Van egy speciális változata a léptető ciklusnak, a foreach ciklus. Tömbök bejárására
használatos leginkább ez a fajta módszer, miszerint a ciklusmag minden végrehajtása előtt a
ciklusváltozóba másolja az aktuális tömbelemet. Az egyes ismétlések alkalmával mindig a
következő elemet veszi. Az ismétlés addig tart, amíg a tömbelemek el nem fogytak. A
ciklusmagban mindig a ciklusváltozó tartalmazza az aktuális tömbelemet.
Szintaktikája a következő:
foraeach(tömbváltozó as ciklusváltozó){
ciklusmag
}
5.5. Függvények
Egy bonyolultabb program elkészítése PHP nyelven igen bonyolulttá válhat, ha nem figyelünk
oda kellőképpen a strukturáltságra. A strukturált felépítés sajátossága, hogy jól áttekinthető a
kód, mert az elkülönül fő programrészre és alprogramokra. Vagyis a jól megtervezett
29
programban az összetett feladatokat részfeladatokra bontjuk, amelyeket külön
alprogramokban oldunk meg. Ezeket az előre elkészített alprogramokat hívjuk meg a
főprogramba, vagyis elindítjuk a megfelelő alprogramot ott és annyiszor, ahol szükséges a
főprogramon belül. Miután az alprogram lefut, a főprogram folytatja a többi részének futtatását.
A részfeladatok megoldására szolgáló ezen alprogramokat hívjuk függvénynek. Ugyanúgy,
mint más nyelvekben (pl. JavaScript), a PHP-ban is tudunk létrehozni függvényeket, és vannak
úgynevezett beépített függvények is, amelyek adott részfeladatok megoldására alkalmasak.
Függvények használata esetén ismernünk kell még a paraméter és a visszatérési érték
fogalmakat. A bemenő paraméter a részfeladat kezdő értékeként értendő, ami ahhoz kell
esetlegesen, hogy a meghívott függvény ezen adato(ko)n, vagyis paraméter(ek)en el tudja
végezni az abban tárolt műveleteket. A visszatérési érték pedig az alprogram eredménye,
amelyet visszaad a főprogramnak, ami egy értékként kezeli tovább azt. A következőkben
nézzük meg, hogyan lehet függvényt létrehozni, majd a teljesség igénye nélkül, sorba vesszük
a PHP fontosabb beépített függvényeit.
<?php
function negyzet($a)
{
return $a*$a;
}
print negyzetszamitas (10);
?>
30
A következő példában egy kép pixelszámát határozzuk meg:
$kep=pixel(1024,768);
<?php
$kep=pixel(800,600, $pa, $mb);
echo ”800x600= $pa PX<hr/>”;
echo ”800x600= $mb MP<hr/>”;
31
$m=round($m,2);
}
?>
A program kimenete:
800x600 = 480000 PX
800x600 = 0.46 MP
A PHP lehetőséget ad arra is, hogyha egy függvény használatakor nem tudjuk előre a
bemenő paraméterek számát, akkor azt a nyelv úgy is le tudja kezelni. Vagyis elmondható,
hogy a PHP bármennyi (0 is lehet) paramétert le tud kezelni a függvényeken belül.
Végül a függvények létrehozásával kapcsolatban illik ismerni a statikus változó
fogalmát is. Ennek az a lényege, hogy a függvény befejeztével a változó által lefoglalt
memóriaterület nem szabadul fel. Erre akkor lehet szükség, ha azt szeretnénk, hogy a
függvényünk megőrizze egy előző állapot eredményét (pl. számok összegzésénél, amely
számok a függvény egyes hívásainak eredményei).
32
$allam2 = "Arizona";
$allam3 = "Utah";
?>
33
szükséges, egy kimeneten meg kell jeleníteni az eredményeket. Végül, ha már nincs
szükségünk az adatbázisra, nagyon fontos, hogy szakítsuk meg a MySQL-lel a kapcsolatot
egy utolsó lépésként.
A PHP–MySQL kapcsolat létrehozását a mysql_connect() függvénnyel végezhetjük el.
Az alábbi kódrészlet szerint egy localhoston lévő MySQL szerverrel szeretnénk csatlakozni,
application felhasználó névvel és amerika jelszóval.
$host="localhost";
$felhaszn="application";
$jelsz="amerika";
$con=mysql_connect($host,felhaszn,$jelsz)
Az alábbi kódrészlet pedig egy elágazásban a kapcsolat hibáját figyeli, és ha hiba lép
fel kapcsolódáskor, egy üzenetet küld a kimenetre és leállítja a folyamatot.
Mivel „sosem lehet tudni…”, ezért érdemes a kapcsolódási kísérletet ilyen módon
elvégezni. A mysql_close() függvénnyel tudjuk lezárni a megnyitott kapcsolatot. Egy
paramétere van, ami a mysql_connect() által visszaadott resource. Visszatérése egy logikai
érték, attól függően, hogy sikerült-e lezárni a kapcsolatot, ami elvileg csak abban az esetben
nem sikerülhet, ha már megnyitni se tudtuk.
Miután sikeresen kapcsolódtunk, érdemes megadni az alapértelmezett adatbázist, amit
használni akarunk, így nem kell minden egyes lekérdezésbe beleírni a nevét. Ezt úgy is
mondhatjuk, hogy miután sikeresen kapcsolódtunk a MySQL szerverhez, ki kell választanunk
a webalkalmazás adatait tároló adatbázist:
34
Tábla sorainak kiíratása úgy történik, hogy először lekérdezzük a tábla tartalmát, majd
az így kapott eredményen végigmegyünk valamilyen MySQL-függvénnyel. A lekérdezéshez
egy SQL nyelven írt utasítást kell adnunk az adatbázis-szervernek, és az így kapott eredményt
kell kinyernünk. SQL-utasítások futtatására a mysql_query() függvény szolgál. A függvénynek
egy karakterlánc-paramétere van, ami egy vagy több SQL nyelven írt utasítást tartalmaz.
Pl.
A SELECT * FROM `allamok` SQL lekérdezés a teljes allamok nevű táblát adja vissza.
Az if ág után kell beolvasnunk az $eredmeny változót. Jobb megoldás lenne, ha a táblázat
tartalmát egy kétdimenziós tömbbe raknánk. Ezt megtehetjük a mysql_fetch_assoc()
függvénnyel. Ennek a függvénynek a visszatérési értéke egy asszociatív tömb, amiben a tábla
egy sora van. Ahhoz, hogy minden sort kiírjunk, addig kell meghívnunk ezt a függvényt, amíg
a visszatérési értéke false nem lesz, mert az azt jelenti, hogy nincs több sor. A tömb tartalmát
pedig például a következőképpen írathatjuk ki:
$allamok = array();
while ($sor = mysql_fetch_assoc($eredmeny))
{
$allamok[] = $sor;
}
print '<allamok>';
foreach ($allamok as $sor)
{
print '<tr>';
foreach ($sor as $ertek){
print '<td>'.$ertek.'</td>';
}
print '</tr>';
}
print '<allamok>';
Nézzük meg, hogy épül fel kompletten a teljes program a következő példán keresztül:
<?php
$con = mysql_connect("localhost", "application", "amerika")
or exit("Sikertelen kapcsolódás!");
mysql_select_db("gyakorlas")
35
or exit("Sikertelen adatbázis megnyitás!");
mysql_query("SET NAMES 'UTF8'");
36
…
$eredmeny=mysql_query($eredmeny);
while ($sor=mysql_fetch_row($eredmeny))
{
foreach ($sor as $mezo)
{
echo ” $ mezo, ”;
}
echo ”<br/>”;
}
mysql_close();
…
További néhány fontos függvény:
A fenti lekérdező függvények és utasítások után nézzük meg, hogy lehet módosítani
adatbázisban tárolt adatokat. Az úgynevezett DML- (Data Manipulation Language) utasítások
abban térnek el az előzőektől, hogy nincs kilistázható eredményük (pl. tábla, tömb), hanem
egyszerűen true vagy false értékkel térnek vissza. Ilyen parancsok az UPDATE, a DELETE és
az INSERT.
Nézzünk meg egy példát az UPDATE használatára.
<?php
header=(„Content-type: text/html; charset=utf-8”);
$sql=”SELECT* FROM allamok”;
$dml=UPDATE allamok SET NEv=’ARIZONA’ where idAllamok=3”;
create_conn();
if (!$res=mysql_query($sql)) die (”Sikertelen lekérdezés!”);
echo ”<b>Előtte:</b>”;
write_table($res, ”Államok:”);
37
A program eredménye az UPDATE utasítás előtt és után:
Előtte:
Államok:
idAllamok Nev
1 Kalifornia
2 Colorado
3 Arizona
4 Utah
Utána:
Államok:
idAllamok Nev
1 Kalifornia
2 Colorado
3 ARIZONA
4 Utah
38
az egyes objektumok számára nem kell külön kódot írni. A PHP a nyíl (->) operátorral teszi
elérhetővé egy objektum valamely tulajdonságát vagy metódusát:
objektumnev->adattag,
objektumnev->metodus() .
Példa:
$db = new mysqli("localhost", "application", "amerika", "allamok");
class osztálynév {
adattagok
metódusok
}
39
Példa:
class allam
{
var $nev;
function set_name($Nev);
{
$this->nev=$Nev;
}
function get_name()
{
return $this->nev;
}
}
A fenti osztálynak egy adattagja ($nev) és két metódusa (get_name, set_name) van. A
set_name a $nev adattagban tárolja az átvett paraméter értékét, a get_name pedig
visszatérési értékként adja vissza.
Adattagok és metódusok láthatóságát lehet szabályozni a public, private vagy a
protected kulcsszavakkal. A public az alapértelmezett.
A konstruktor segítségével azonnal be tudjuk állítani az objektum tulajdonságait (new
osztály).
Az feljebb definiált öröklődés szintaktikája pedig a következő:
40
$this – speciális változó, hivatkozás az objektum saját elemeire,
parent: – származtatásnál a szülő osztály kódjának elérése.
Süti létrehozása:
Példa:
<?php
setcookie("felhaszn", "Amerika", time()+3600);
?>
<html>
<body>
</body>
</html>
41
Ebben a példában egy felhaszn nevű sütit hoztunk létre, Amerika értéket
hozzárendelve, és egy órában határozzuk meg az érvényességi időt.
A süti kiolvasása a következőképpen történhet:
<?php
echo $suti["felhaszn"];
print_r($suti);
?>
<html>
<body>
<?php
if (isset($suti["felhaszn"]))
echo "Üdvözlet! " . $suti["felhaszn"] . "!<br>";
else
echo "Jó napot!<br>";
?>
</body>
</html>
<?php
setcookie("felhaszn", "", time()-3600);
?>
<?php session_start();
?>
<html>
<body>
</body>
</html>
<?php
session_start();
42
$_SESSION['nezetek']=1;
?>
<html>
<body>
<?php
echo "Pageviews=". $_SESSION['nezetek'];
?>
</body>
</html>
Egy session változó törlésére az unset függvényt, a teljes session törlésére pedig a
session_destroy függvényt alkalmazzuk.
$file=fopen("amerika.txt","r");
Erre megoldást jelent, hogy megnézzük, a fájl valóban létezik-e, mielőtt megpróbálnánk
hozzáférni:
if (!file_exists("amerika.txt"))
{
die("Fájl nem található!");
} else
{
$file=fopen("amerika.txt","r");
}
Természetesen a fenti eseten kívül más hibákat is tudnunk kell kezelni, így szükséges
készítenünk hibakezelő függvényt. Egy speciális függvényt kell létrehozni, ami meghívható,
ha hiba merül fel futás közben. Legalább kettő (hiba szintje és hibaüzenet) és maximum öt
paramétert (fájl, a sor száma és a hiba környezete) fogadhat el a függvény.
43
Szintaktika:
5. táblázat Hibakezelés
Érték Konstans Leírás
1 E_ERROR Nem kezelhető futásidejű hiba. A program végrehajtása
megszakad.
2 E_WARNING Figyelmeztetés kezelhető futásidejű hibára. A program
végrehajtása folytatódik.
4 E_PARSE Fordításidejű hiba. A kódelemző generálja, még a futás
előtt. A program végrehajtása nem kezdődik meg.
8 E_NOTICE Futásidejű megjegyzés. Az értelmező lehetséges
hibaforrást talált. A végrehajtás nem szakad meg, ugyanis
nem biztos, hogy valóban bekövetkezik a hiba.
256 E_USER_ERROR A felhasználó által dobott problémát jelző hiba.
Súlyossága az E_ERROR-hoz hasonló, azonban ezt nem
a PHP, hanem a felhasználó generálja a trigger_error ()
függvénnyel.
512 E_USER_WARNING A felhasználó által, a trigger_error() függvénnyel generált
E_WARNING súlyú figyelmeztetés.
1024 E_USER_NOTICE A felhasználó által generált, E_NOTICE súlyú hiba.
4096 E_RECOVERABLE_ Elkapható, de végzetes hiba. Olyan hibát jelöl, ami nem
ERROR állította le a PHP-motort. Ha nem kezeljük a saját
hibakezelőben, akkor leállítja a szkriptet.
8192 E_DEPRECATED Olyan hiba, amit nem javasolt utasítások használatakor
küld az interpreter.
32767 E_ALL Ez a konstans az összes hibát és figyelmeztetést jelenti
egyben.
Forrás: Saját szerkesztés
Egy másik hibakezelési módszer az objektumorientált programozásban, a kivételkezelés.
Kivételkezeles alkalmazásakor megváltoztatjuk az utasítások végrehajtásának eredeti
folyamatát hiba fellépése esetén. Gyakorlatilag ezt hívjuk kivételnek. Ebben az esetben az
éppen aktuális állapotot mentjük, és a végrehajtás átkerül egy másik, meghatározott
kivételkezelő kódra. A try, a throw és a catch utasítások használatosak a kivételkezelő kód
előállítására.
44
6. Gyakorló feladatok
Miután áttekintettük a webprogramozás elsajátításához szükséges ismereteket az elmélet
szintjén, az ebben a fejezetben található feladatokkal gyakorolhatjuk, kipróbálhatjuk az
eddigieket. HTML-, JavaScript- és PHP-feladatok következnek, az egyszerűbbtől a
nehezebbig. A feladatleírások után megadjuk a megoldásokat, illetve a megoldások kulcsát.
8. ábra 1. HTML-feladat
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title>1. Példa</title>
</head>
<body>
<strong>Személyi adatok</strong>
<br /><br />
<b>Diákok Mesevárosból:</b>
<p>
<em>Kovács János
45
<br />
Virág u. 2.
</em>
<br />
<i>Meseváros</i>
<br />
<u>00-36-30-222-3334</u>
<br /><br />
<address>
Nagy Elemér
<br />
Fő út 111.
<br />
Meseváros
</address>
</p>
</body>
</html>
9. ábra 2. HTML-feladat
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title>2. Példa</title>
</head>
46
<body>
<hr />
<h1>Amerika</h1>
<h2>Amerika</h2>
<h3>Amerika</h3>
<h4>Amerika</h4>
<h5>Amerika</h5>
<h6>Amerika</h6>
<hr />
</body>
</html>
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title>3. Példa </title>
</head>
<body>
<h2>Hiperhivatkozások</h2>
<br />
<a href="masodik.html"> Hiperhivatkozás a második oldalra </a>
<br />
<br />
<a href="http://www.mik.pte.hu">www.mik.pte.hu</a>
</body>
47
</html>
<!doctype html>
<html lang=”en”>
<head>
<title>Példa 19</title>
</head>
<body>
<table border="1" align="center">
<caption><b>HTML táblázat</b></caption>
<thead>
<tr>
<th>Információ</th>
<th>Kép</th>
</tr>
</thead>
<tbody>
<tr>
<td>Encinitas</td>
<td rowspan="2"><img src="encinitas.jpg" border="0" id="kep" width="175"
height="240" alt="NINCS KÉP" /></td>
</tr>
<tr>
<td>Kalifornia</td>
</tr>
</tbody>
</table>
</body>
</html>
5. Hozzon létre HTML-dokumentumot, amely az ábrán látható keretekkel osztja fel a
lapot!
48
12. ábra 5. HTML feladat
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title>5. Példa</title>
</head>
<frameset rows="25%,*">
<noframes>
<body>
<!-- no frames for your browser -->
</body>
</noframes>
<frame id="keret1" name="keret1" src="keret1.html" noresize="noresize"
scrolling="auto" frameborder="1" />
<frameset cols="25%,*">
<frame id="keret2" name="keret2" src="keret2.html" scrolling="no"
frameborder="1" />
<frame id="keret3" name="keret3" src="keret3.html" scrolling="no"
frameborder="1" />
</frameset>
</frameset>
</html>
49
13. ábra 6. HTML-feladat
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title>6. Példa </title>
</head>
<body>
<p><h1>Amerika</h1></p>
<iframe id="keret" name="keret" src="masodik.html" width="200" height="100"
scrolling="auto" frameborder="1"></iframe>
</body>
</html>
50
14. ábra 7. HTML-feladat
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title>7. Példa </title>
</head>
<body>
<form id="urlap" name="urlap" method="post" action="reg.php"
enctype="multipart/form-data">
Regisztráld magad, írd be az összes adatod!<br />
<br />
<fieldset>
<legend><strong>Személyi adatok</strong></legend>
<label>vezetéknév:</label>
<input type="text" id="vnev" name="vnev" />
<br />
<label>keresztnév:</label>
<input type="text" id="nev" name="nev" />
<br />
<label>e-mail:</label>
<input type="text" id="email" name="email" />
<br />
<label>jelszó:</label>
<input type="password" id="jelszo" name="jelszo" />
<br />
<label>kép:</label><input type="file" id="kep" name="kep" />
<br />
51
<br />
<label>operációs rendszer:</label>
<input type="checkbox" id="or" name="or" value="windows" />windows
<input type="checkbox" id="or" name="or" value="linux" />linux
<br />
<br />
<label>megjegyzések</label>
<br />
<textarea id="megjegyzes" name="megjegyzes" rows="3" cols="20" ></textarea>
<br />
<br />
<input type="submit" id="gomb" name="gomb" value="küld" />
<input type="reset" id="gombr" name="gombr" value="mégsem" />
<br />
<br />
</fieldset>
</form>
</body>
</html>
<!doctype html>
<html lang=”en”>
<head>
<title> 1 Példa </title>
<noscript>
Az ön böngészoje nem támogatja a JavaScriptet!
</noscript>
<script type="text/javascript" src="script.js">
52
<!--
//-->
</script>
</head>
<body>
<br />
<br />
Gyakoroljuk a JavaScriptet!<br /><br />
<form name="udvozlet" id="udvozlet" onsubmit="szia();" >
<input type="text" name="nev" id="nev" />
<input type="submit" value="Személyes üdvözlet" />
</form>
</body>
</html>
JavaScript-kód:
document.write("<strong><i>JavaScript feladat</i></strong>");
function szia()
{
var t=document.forms.udvozlet.nev.value;
alert("Szia "+t);
}
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title>2. Példa </title>
<noscript>
Az ön böngészoje nem támogatja a JavaScriptet!
</noscript>
<script type="text/javascript" >
<!--
var d=new Date();
var ido=d.getHours();
if (ido<10)
document.bgColor="#ffffff";
else
document.bgColor="#ff0000";
function valt_kepet()
{
53
document.kep.src="kepjs2.jpg";
document.kep.alt="kep 2";
window.status="Ez itt az masodik kep";
}
function visza_kepet()
{
document.kep.src="kepjs1.jpg";
document.kep.alt="kep 1";
window.status="Ez itt az elso kep";
}
function norm()
{
document.kep.src="kepjs3.jpg";
document.kep.alt="kep 3";
window.status="Ez itt az 3 kep";
}
//-->
//-->
</script>
</head>
<body>
<i> onmouseover, onmouseout, onmouseup & onmousedown</i>
<br /><br />
<img src="kepjs1.jpg" name="kep" alt="kep 1" onmouseover="valt_kepet()"
onmouseout="visza_kepet()" onmouseup="valt_kepet()" onmousedown="norm()"/>
</body>
</html>
54
3. Készítsen HTML-dokumentumot, amely az onclick, ondblclick, onkeypress és
onkeydown JavaScript eseményszkripteket kezeli. Az oldal tartalmazzon egy gombot,
amelynek segítségével kinyomtathatjuk az oldalt.
55
18. ábra 3. JavaScript-feladat III.
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title> 3. Példa </title>
<noscript>
Az ön böngészoje nem támogatja a JavaScriptet!
</noscript>
<script type="text/javascript" >
<!--
function printpage()
{
window.print()
}
s1 = new String(myform.myText.value)
function changeBg1() {
var r=Math.random()*5;
szin=Math.round(r);
document.bgColor="#ff"+szin+"f"+szin+"f";
}
function changeBg2()
{
document.bgColor="#0000ff";
}
//-->
</script>
</head>
<body>
Java Script:
56
<i> onclick, ondblclick, onkeypress & onkeydown</i>
<br /><br />
<img src="kepjs1.jpg" id="kep" ondblclick="height=height+10" />
<br /><br />
<input type="button" value="Nyomtast ki az oldalt" onclick="printpage()" />
<form action="harmadikjs.html" method="post" id="myform" name="myform">
<label>megjegyzés</label><input type="text" name="szoveg"
onkeypress="changeBg1()" onkeydown="changeBg2()" />
</form>
</body>
</html>
Üdvözlet
Amerikából!
Kovács Lujza
Megoldás:
<?php
echo "Üdvözlet";
echo "<br />Amerikából!";
echo "<br /><b>Kovács Lujza</b>";
?>
2. Készítsen egy PHP szkriptet, amely kiírja négy változó értékét és típusát!
Példa kimenetre:
Megoldás:
<?php
$1valtozo = "Amerika";
$2valtozo= 2015;
$3valtozo= 65.4;
$4valtozo= 11.111;
$tipus1=gettype($1valtozo);
57
$tipus2=gettype($2valtozo);
$tipus3=gettype($3valtozo);
$tipus4=gettype($4valtozo);
Megoldás:
<?php
$orszag[0]="Kalifornia";
$orszag[1]="Új-Mexikó";
$orszag[2]="Nevada";
$varos[0][0]="Los Angeles";
$varos[0][1]="Santa Fe";
$varos[0][2]="Las Vegas";
echo" <br>$orszag[0], $orszag[1], $orszag[2]";
echo" <br>{$varos[0][0]}, {$varos[0][1], {$varos[0][2], }";
?>
4. Készítsen egy PHP-szkriptet, amely kiszámolja és kiírja a kör kerületét és területét!
Megoldás:
<?php
define("PI",3.14);
$rad=15;
$kerulet=$rad*$rad*PI;
$terulet=2*$rad*PI;
echo "<br />A kör kerülete = $kerulet";
echo "<br />A kör területe = $terület";
?>
Példa kimenetre:
Megoldás:
58
<?php
$dolcsi=270;
if($dolcsi!=280)
echo ("Amerikai dollár árfolyam(Ft):$dolcsi");
else
echo ("Érdekes árfolyam!");
?>
Megoldás:
<head>
<title>php 8 - <?php echo Date("F d, Y") ?></title>
</head>
<?php
$ora=Date(H);
if ($ora<12)
{
$szin="yellow";
$uzenet="Éhes vagyok!";
$betuszin="black";
$kep="kep1.jpg";
}
else
{
$szin="blue";
$uzenet="Finom volt az ebéd!";
$betuszin="white";
$kep="kep2.jpg";
}
echo"<body style=\"background-color:$szin;\">";
echo"<p style=\"color:$betuszin\">$uzenet</p>";
echo"<img src=\"$kep\" alt=\"\" ide=\"kep\" name=\"kep\" />";
?>
59
7. Készítsen egy weboldalt, amely egy űrlapot jelenít meg! Az űrlap tartalmazzon:
– egy szövegmezőt (név)
– hat rádiógombot (piros, kék és zöld szín, Arial, Verdana és Tahoma betűtípus)
– egy legördülő menüt (betűméretek 10-18)
– send gombot.
A send gomb küldje az adatokat a f7.php szkriptnek, amely feldolgozza az űrlapon megadott
adatot. Az f7.php szkript jelenítsen meg a bevitt név részére (a választott színben, a választott
betűtípussal és betűmérettel) egy üdvözletet.
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title>7. PHP feladat </title>
</head>
<body>
<form method="post" action="f7.php">
<input type="text" id="nev" name="nev" /><br /><hr />
<input type="radio" value="red" name="szin" id="szin" checked="checked" />red<br />
<input type="radio" value="green" name="szin" id="szin" />green<br />
<input type="radio" value="blue" name="szin" id="szin" />blue<br />
<hr />
<input type="radio" value="Arial" name="ftipus" id="ftipus" checked="checked" />Arial<br />
<input type="radio" value="Verdana" name="ftipus" id="ftipus"/>Verdana<br />
<input type="radio" value="Tahoma" name="ftipus" id="ftipus"/>Tahoma<br /><hr />
<select name="meret" id="meret">
<option value="10">10</option>
<option value="12">12</option>
<option value="14">14</option>
<option value="16">16</option>
<option value="18">18</option>
</select><hr />
<input type="submit" name="gomb" value="send" />
</form>
</body>
</html>
A HTML-kód:
<!doctype html>
<html lang=”en”>
<head>
<title>7. PHP feladat</title>
</head>
60
<body>
<?php
$szin=$_POST["szin"];
$ftipus=$_POST["ftipus"];
$meret=$_POST["meret"];
$nev=$_POST["nev"];
echo "<p style=\"color:$szin;font-family:$ftipus;fontsize:${meret}pt;\">Szia $nev</p>";
echo"<br />";
?>
</body>
</html>
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title>Számológép</title>
</head>
<body>
<form method="post" action="f8.php">
a=<input type="text" id="a" name="a" /><br />
b=<input type="text" id="b" name="b" /><br />
<hr />
<input type="radio" value="összeadas" name="muvelet" id="muvelet"checked="checked"
/>+<br />
<input type="radio" value="kivonás" name="muvelet" id="muvelet" />-<br />
<input type="radio" value="szorzás" name="muvelet" id="muvelet" />*<br />
<input type="radio" value="osztás" name="muvelet" id="muvelet" />/<br />
<hr />
<input type="submit" name="gomb" value="küld" />
</form>
</body>
</html>
<!doctype html>
<html lang=”en”>
<head>
<title>8. Feladat</title>
61
</head>
<body>
<?php
$ertek=0;
$muvelet=$_POST["muvelet"];
$a=$_POST["a"];
$b=$_POST["b"];
switch ($muvelet)
{
case "összeadas":$ertek=$a+$b;break;
case "kivonás" :$ertek=$a-$b;break;
case "szorzás" :$ertek=$a*$b;break;
case "osztás" :$ertek=$a/$b;break;
default : echo"művelet?!";break;
}
echo"$muvelet: $ertek";
?>
</body>
</html>
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title>Összeadás</title>
</head>
<body>
<?php
$a = 6;
$b = 7;
echo"\$a=$a \$b=$b<br />";
function osszeadas()
{
global $a, $b;
$b = $a + $b;
}
osszeadas();
echo "\$a+\$b=$b";
?>
</body>
62
</html>
10. Készítsen egy weboldalt, amely létrehoz egy bejelentkezési és egy regisztrációs
űrlapot! Az adatokat a login adattáblába tárolja.
Megoldás:
<!doctype html>
<html lang=”en”>
<head>
<title>Adatbázisos</title>
</head>
<body>
<hr/>
<b>Bejelentkezés</b><br />
<form method="post" action="check.php?cmd=1" id="login"
name="login">Email:<input type="text" id="email" name="email" /><br />Jelszo:<input
type="password" id="jelszo" name="jelszo" size="10" /><br/>
<input type="submit" name="sgomb1" value="küld" />
<input type="reset" name="rgomb1" value="mégsem" />
</form>
<hr />
<b>Új felhasználó:</b>
<form method="post" action="check.php?cmd=2" id="register"name="register">
Nev:<input type="text" id="nev" name="nev" /><br />
Vnev:<input type="text" id="vnev" name="vnev" /><br />
Email:<input type="text" id="email" name="email" /><br />
Jelszo:<input type="password" id="jelszo" name="jelszo" size="10" /><br/>
<input type="submit" name="sgomb2" value="küld" />
<input type="reset" name="rgomb2" value="mégsem" />
</form>
<hr />
<?php
if($uzenet==1)
echo "Nincs ilyen felhasználó!";
if($uzenet==2)
echo "Sikeres regisztráció!";
?>
</body>
</html>
<?php
$server="localhost";
$felhasznalob="root";
$jelszob="";
63
$ab="it";
if($cmd==1)
{
loginfelhasznalo($email,$jelszo);
}
elseif($cmd==2)
{
ujfelhasznalo($nev,$vnev,$email,$jelszo);
}
else
{
header("Location:login.php?");
}
function loginfelhasznalo($email,$jelszo)
{
global $server,$felhasznalob,$jelszob,$ab;
$kapcsolat = mysql_connect("$server", "$felhasznalob", "$jelszob") or
die(mysql_error());
mysql_select_db("$ab",$kapcsolat) or die(mysql_error());
$sql="select * from login where email='$email' and jelszo='$jelszo'";
$eredmeny = mysql_query($sql) or die(mysql_error());
if(mysql_num_rows($eredmeny)>0)
header("Location:menu.php");
else
header("Location:login.php?uzenet=1");
}
function ujfelhasznalo($nev,$vnev,$email,$jelszo)
{
global $server,$felhasznalob,$jelszob,$ab;
$kapcsolat = mysql_connect("$server", "$felhasznalob", "$jelszob") or
die(mysql_error());
mysql_select_db("$ab",$kapcsolat) or die(mysql_error());
$sql = "insert into login (nev,vnev,email,jelszo) values
('$nev','$vnev','$email','$jelszo')";
$eredmeny = mysql_query($sql) or die(mysql_error());
header("Location:login.php?uzenet=2");
}
?>
64
7. Összefoglalás
A gyakorló feladatok elkészítésével tananyagunk végéhez értünk. Ez azonban nem azt jelenti,
hogy a tanulnivalók végét is elértük. A webprogramozás misztikus világáról bátran állíthatjuk,
hogy a „végtelenhez konvergál”, így az ezzel kapcsolatos ismeretszerzési tanulmányainknak
nem érhetünk sosem a végére. Napjainkban elképesztő fejlesztési verseny van a
szoftverpiacon, és ha valaki ebbe belecsöppen, nem sok eséllyel tud kilépni a fejlődés
folyamatából. Azt gondolom, hogy ez így van jól.
Amikor elkezdtem dolgozni ezen a tananyagon, magam sem gondoltam, hogy ennyire
„hiányos” munkát fogok kiadni a kezemből. Ezeket a hiányosságokat azonban nem lehet
negatívumként jegyezni, mert a cél egyrészt nem is az volt, hogy egy teljes,
webprogramozással kapcsolatos, minden ismeretet tartalmazó egyetemi jegyzet szülessen.
Meggyőződésem, hogy ilyen munkát képtelenség lenne elkészíteni. Másrészt pedig a jegyzet
elkészítésével arra vállalkoztam, hogy bevezessem a hallgatókat a webprogramozás világába,
mellyel egyfajta inspirációt keltsek a tanulókban továbbfejlődési szándékukhoz.
Tartalmi összefoglalás címén elmondható, hogy jelen jegyzet tartalmazza mindazt az
ismeretanyagot, amelyet egy szemeszter alatt el kell sajátítaniuk azoknak a hallgatóknak, akik
felveszik a webprogramozás kurzust. A könyv első részében a szükséges alapvető
ismereteket gyűjtöttem össze a web működésével kapcsolatosan. A számítógépek fizikai
összekapcsolódásától kezdve eljutottunk a statikus és dinamikus honlapok kialakításáig.
Először a HTML-lel mint leíró nyelvvel kapcsolatos tudnivalókat szedtük rendbe. Kliens oldali
programozást tanultunk először a statikus lapok kialakításához, majd ezt követően még mindig
kliens oldalról, de már a dinamikusságot próbáltuk ki a JavaScript segítségével. JavaScripttel
interaktívvá tehetjük honlapjainkat, ami napjainkban marketingszempontból is fontos.
A jegyzet következő, lényegi része a szerver oldali programozásba vezette be az
olvasót. A PHP programozási nyelvvel kezdődött meg az ismerkedés. Megtanultuk, hogyan
tudjuk használni a szervert, és kapcsolatot létrehozni vele.
Telepítettük az XAMPP programcsomagot, majd el is készítettük első PHP-
programunkat. Lépésről lépésre vettük át az ehhez a nyelvhez kapcsolódó alapismereteket,
mint például a literálok szerepét, a függvények használatát, a MySQL adatbázisok használatát,
vagy akár a teljesség igénye nélkül, az objektumorientálás jelentőségét.
A jegyzetet záró fejezet a gyakorló feladatokat tartalmazza. HTML-ben, JavaScriptben
és PHP-ban megoldandó feladatokat gyűjtöttem össze gyakorláshoz. Szívből ajánlom,
önállóan dolgozzanak főleg azok, akik még sosem készítettek ezelőtt webes alkalmazásokat.
A feladatokat nem csupán a leírásukkal, hanem megoldási javaslatokkal is alátámasztottam
az ellenőrizhetőség megkönnyítése miatt.
Szinte biztos vagyok abban, hogy az alapok megismerése után mindenki úgy érzi, hogy
bővült az elsajátítandó ismeretek halmaza, annak ellenére, hogy megtanulta a könyvben
szereplő sok ismeretanyagot.
Bízom benne, hogy ezzel nem ment el senkinek a kedve a webprogramozástól, hanem
inkább, aki kicsit félve is kezdett bele a tanulásba, további webes kurzus felé kacsingat.
Innentől kezdve akár saját kreativitásunkat is elővehetjük és a fejlesztési lehetőségek végtelen
tárházába merülhetünk akár hobbi, akár hivatásunk szemszögéből is.
65
Végül bízom benne, hogy ezzel a jegyzettel érdemben hozzájárultam a hazai felsőfokú
képzésfejlesztéshez, és hatékonyan bővítettem a rendelkezésre álló tanulási segédeszköz-
repertoárt az informatikai képzési területen.
66
8. IRODALOMJEGYZÉK
Balássy György: Honlapépítés a XXI. században, Kezdőknek és haladóknak, Jedlik Oktatási
Stúdió Kft. Budapest 2010
Kupás Péter: Weblapszerkesztés, Oktatási segédlet, Károly Róbert Főiskola, Gyöngyös 2003
Matt Zandstra: Tanuljuk meg a PHP4 használatát 24 óra alatt, Kiskapu Kft. Budapest 2001
http://www.w3schools.com
http://www.w3c.org
http://developer.mozilla.org/en/docs/JavaScript
http://www.apache.org/
http://www.mozilla.com/en-US/firefox/
http://weblabor.hu/
67