php - patrik.what.hupatrik.what.hu/web/szta_prog/eloadas8.pdf · sql táblák mozi id mozinév...

8
PHP Ismétlés Web elérhetőségek Adatbázis (phpMyAdmin): http://mysql.atw.hu/ Saját weboldal: http://felhasznalonev.atw.hu WinScp-ből FTP csatlakozás, így tudunk a saját tárhelyünkre feltölteni weboldalakat: ftp.atw.hu + felhasználónév + jelszó Beállítások: Az FTP kapcsolatot érdemes elmenteni (Save… gomb), de mások által használt gépnél ne mentsük el a jelszót hozzá. Miután bejelentkeztünk (Login gomb), és kiválasztottuk a gépen a megfelelő mappát, érdemes a Commands menüben kiválasztani a Synchronize… parancsot, hogy ugyanaz az állapot legyen meg a gépen is, mint a távoli szerveren. Továbbá ugyanitt válasszuk ki a Keep Remote Directory Up To Datemenüpontot, amivel folyamatosan feltöltésre kerülnek a módosított fájlok, így nem kell azokat nekünk minden módosítás után átmásolni. Megjegyzés: amikor böngészőbe beírjuk a weboldalunk címét, akkor az index.php illetve index.html fájlokat kezdi el keresni. Ha ez nincs felöltve, akkor hibát ír ki. Amennyiben más fájlt szeretnénk megnézni, akkor írjuk be a fájl nevét is (pl: http://felhasznalonev.atw.hu/fajlneve.php ).

Upload: others

Post on 16-Aug-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PHP - patrik.what.hupatrik.what.hu/web/szta_prog/eloadas8.pdf · SQL Táblák Mozi ID mozinév férőhely város 1 Palace Cinemas Mammut 2200 Budapest 2 Palace Cinemas Mom Park 1700

PHP

Ismétlés

Web elérhetőségek Adatbázis (phpMyAdmin): http://mysql.atw.hu/

Saját weboldal: http://felhasznalonev.atw.hu

WinScp-ből FTP csatlakozás, így tudunk a saját tárhelyünkre feltölteni weboldalakat: ftp.atw.hu +

felhasználónév + jelszó

Beállítások:

Az FTP kapcsolatot érdemes elmenteni (Save… gomb), de mások által használt gépnél ne mentsük el

a jelszót hozzá. Miután bejelentkeztünk (Login gomb), és kiválasztottuk a gépen a megfelelő mappát,

érdemes a Commands menüben kiválasztani a Synchronize… parancsot, hogy ugyanaz az állapot

legyen meg a gépen is, mint a távoli szerveren. Továbbá ugyanitt válasszuk ki a Keep Remote

Directory Up To Date… menüpontot, amivel folyamatosan feltöltésre kerülnek a módosított fájlok,

így nem kell azokat nekünk minden módosítás után átmásolni.

Megjegyzés: amikor böngészőbe beírjuk a weboldalunk címét, akkor az index.php illetve index.html

fájlokat kezdi el keresni. Ha ez nincs felöltve, akkor hibát ír ki. Amennyiben más fájlt szeretnénk

megnézni, akkor írjuk be a fájl nevét is (pl: http://felhasznalonev.atw.hu/fajlneve.php).

Page 2: PHP - patrik.what.hupatrik.what.hu/web/szta_prog/eloadas8.pdf · SQL Táblák Mozi ID mozinév férőhely város 1 Palace Cinemas Mammut 2200 Budapest 2 Palace Cinemas Mom Park 1700

SQL

Táblák

Mozi

ID mozinév férőhely város

1 Palace Cinemas Mammut 2200 Budapest

2 Palace Cinemas Mom Park 1700 Budapest

3 Cinema City Aréna 2800 Budapest

4 Cinema City Pécs 500 Pécs

5 Cinema City Westend 2200 Budapest

6 Cinema City Savaria 700 Szombathely

7 Corvin Budapest Filmpalota 1600 Budapest

Film

ID MoziID filmcím

1 1 Titanic

2 2 Titanic

3 3 Titanic

4 6 Titanic

5 7 Titanic

6 2 Harry Potter 8.

7 2 Star Wars Episode X.

8 3 Star Wars Episode X.

9 4 Star Wars Episode X.

10 5 Keresztapa

Lekérdezések

1. Listázzuk ki az összes mozit.

a. SELECT * FROM mozi

2. Listázzuk ki a jelenleg futó filmek címeit

a. SELECT DISTINCT filmcim FROM film

3. Írjuk ki, hogy mekkora a legnagyobb moziterem

a. SELECT max(ferohely) FROM mozi

4. Listázzuk a budapesti mozikat

a. SELECT * FROM mozi WHERE varos = ’Budapest’

5. Listázzuk azokat a filmeket, melyek címében szerepel az ’ar’ betűpáros

a. SELECT filmcim FROM film WHERE filmcim LIKE ’%ar%’

6. Írjuk ki, hogy hány budapesti mozi létezik

a. SELECT count(*) FROM mozi WHERE varos = ’Budapest’

7. Írjuk ki, hogy az egyes városokban összesen hány férőhely van

a. SELECT varos, sum(ferohely) FROM mozi GROUP BY varos

8. Listázzuk azoknak a filmeknek címeit, amelyek legalább 2 moziban mennek. Jelenítsük meg

azt is, hogy hány helyen megy.

a. SELECT filmcim, count(*) AS db FROM film GROUP BY filmcim HAVING count(*) >= 2

9. Listázzuk a mozik neveit és városaikat a mozi neve szerinti csökkenő / növekvő ABC

sorrendben

Page 3: PHP - patrik.what.hupatrik.what.hu/web/szta_prog/eloadas8.pdf · SQL Táblák Mozi ID mozinév férőhely város 1 Palace Cinemas Mammut 2200 Budapest 2 Palace Cinemas Mom Park 1700

a. SELECT varos, mozinev FROM mozi ORDER BY mozinev DESC

b. SELECT varos, mozinev FROM mozi ORDER BY mozinev ASC

10. Listázzuk a mozik neveit és városaikat a mozi neve szerinti csökkenő ABC sorrendben, de csak

az első 2 találatot jelenítsük meg

a. SELECT varos, mozinev FROM mozi ORDER BY mozinev DESC LIMIT 0, 2

11. Listázzuk a mozik neveit és az ott játszott filmeket

a. SELECT mozinev, filmcim FROM mozi JOIN film ON (mozi.ID = film.moziID)

12. Módosítsuk a Westend mozijának férőhelyét a másférszeresére

a. UPDATE mozi SET ferohely = ferohely * 1.5 WHERE ID = 5

13. Vegyünk fel egy új mozit

a. INSERT INTO mozi (ID, mozinév, ferohely, varos) VALUES (8, ’WebMozi’, 500,

’Budapest’)

b. INSERT INTO mozi VALUES (8, ’WebMozi’, 500, ’Budapest’)

14. Töröljük az előbb felvett mozit

a. DELETE FROM mozi WHERE ID = 8

Bevezetés Kliens: ahol a böngésző fut, ő indít kéréseket a szerver felé, amire a szerver válaszol

Szerver: távoli számítógép, kiszolgáló, ahol futtatjuk a böngészőbe beírt URL mögött lévő fájlokat

PHP oldalak:

.php kiterjesztés

Szervernek kell tudnia futtatni

Feldolgozás lépései:

o A felhasználó a böngészőbe beír egy URL-t, ami egy PHP fájlt kér le

o A kérés eljut a webszerverhez, ami átadja a PHP értelmezőnek a feldolgozást

o Az értelmező feldolgozza az oldalt, és visszaadja a webszervernek, ami visszaküldi az

eredményt a felhasználó böngészőjének

Miért PHP? Sok helyen használják, könnyű nyelv, egyszerű támogatás a http kérések paramétereihez,

adatbázishoz való kapcsolódás lehetősége, dinamikus (változó tartalmú, felhasználói interakciókra

reagáló) weboldalak készítését teszi lehetővé.

HTTP kérések Amikor a böngészőbe beírunk egy URL-t vagy egy űrlapmezőt kitöltünk, és „Elküldjük”, akkor a

háttérben zajló kéréseket HTTP kérésnek hívjuk. A HTTP egy protokoll, ami azt jelenti, hogy egy

szabványban előre definiált módon le van írva, hogy pontosan milyen üzenetek léteznek, milyen

módon lehet továbbítani. Erre utal az URL-ek elején is a „http://” kedzet.

Mi alapvetően kétféle kéréssel fogunk foglalkozni: GET és POST.

Get kérés Get kérés esetén a böngészőbe írt URL végére paramétereket fűzhetünk, és ezeket a paramétereket

utána a PHP oldal fel fogja tudni használni. A paraméterek felsorolását egy „?”-el kezdhetjük, majd

Page 4: PHP - patrik.what.hupatrik.what.hu/web/szta_prog/eloadas8.pdf · SQL Táblák Mozi ID mozinév férőhely város 1 Palace Cinemas Mammut 2200 Budapest 2 Palace Cinemas Mom Park 1700

utána „paraméternév=érték”, tehát név-érték párokat helyezhetünk el, egymástól „&” jellel

elválasztva. Például:

http://www.example.com?automarka=Ford&tipus=focus&evjarat=1990

Post kérés Post kérésnél a paraméterek közvetlenül nem láthatóak, erre jó példa lehet egy űrlap elküldése.

Űrlap felépítése:

<form> tag

o Azon belül az egy űrlaphoz tartozó űrlapmezők

o Űrlapmező típusok:

<input type=”_____”>

type: text, password, checkbox, radio, hidden, reset, submit…stb.

<textarea>

<select>

o Az űrlapmező elküldéséhez szükséges egy gomb is <input type=”submit”>

Amikor az „Elküld” gombra kattintunk, a beírt adatok továbbküldésre kerülnek a <form> tag „action”

paraméterében megadott oldalra. Ha nem töltjük ki ezt a paramétert, akkor ugyanarra az oldalra,

ahol az űrlap is megtalálható. A „method” paraméter értéke pedig „post” vagy „get” lehet. Ha „post”,

akkor a paramétereket az oldal a háttérben kapja meg, a felhasználó számára így közvetlenül nem

lesz látható; amennyiben „get” van megadva, akkor az url-be a fentebb mutatott módon belefűzi a

név-érték párokat. Ilyen esetekben a név az egyes űrlapmezők „name” paraméterében megadott

nevek lesznek, a hozzá tartozó érték pedig az űrlapmezőbe beírt érték.

Próbáljuk ki a „get” típusú küldést. Ha sikerült, akkor látjuk az URL-ben a beírt paramétereket.

Ehhez még nem szükséges PHP, tisztán HTML-ben próbáljuk ki.

<form method="post" action="">

<p>

<label for="name">Név:</label><br />

<input type="text" name="name" id="name" />

</p>

<p>

<label for="email">E-mail cím:</label><br />

<input type="text" name="email" id="email" />

</p>

<p>

<label>Életkor: </label><br />

<select name="eletkor">

<option value="0-17">0-17</option>

<option value="18-29">18-29</option>

<option value="30-44">30-44</option>

<option value="45-64">45-64</option>

<option value="65+">65+</option>

</select>

</p>

<p>

<input type="submit" name="regSubmit" value="Elküld" />

</p>

</form>

Page 5: PHP - patrik.what.hupatrik.what.hu/web/szta_prog/eloadas8.pdf · SQL Táblák Mozi ID mozinév férőhely város 1 Palace Cinemas Mammut 2200 Budapest 2 Palace Cinemas Mom Park 1700

PHP alapok Ahhoz, hogy ezeket a GET/POST kérésekből érkező paramétereket fel tudjuk dolgozni, valamilyen

programozási nyelvre szükségünk van, mivel a HTML önmagában nem támogatja. Ehhez nézzük meg

a PHP alapjait.

A PHP kód gyakorlatilag az eddig megismert HTML kóddal vegyíthető egyetlen fájlban, csak annyit

kell tennünk, hogy a fájl kiterjesztését .html-ről .php-ra változtatjuk, és egy webszerverre elhelyezzük

a fájlt, hiszen – ahogy a bevezetőben említettük – értelmezőre van szükség ahhoz, hogy a PHP

utasításokat feldolgozzuk.

A PHP kódot mindig <?php ………………………. ?> közé kell helyeznünk, ilyen blokkból tetszőleges számú

lehet egy HTML oldalon, és tetszőleges helyen is lehetnek.

Mostantól szükségünk lesz a legelső alkalommal elmondott ismeretekre. Vigyázzunk viszont arra,

hogy ott JavaScript nyelven adtunk meg mindent, így a következőkben elhangzó dolgok ismerősek

lesznek, de más szintaxissal vettük őket (más formátummal vagy más paranccsal értük el ugyanazt).

Kommentezés:

// egysoros megjegyzések

/* többsoros megjegyzések */

# egysoros megjegyzések – ezt nem szoktuk használni

Kiíratás: print vagy echo utasítással. Példa: print ’Hello Világ!’;

Ha visszaemlékezünk, JavaScrtipt-ben ez volt a document.write(’Hello Világ!’);

Változók, típusok:

Minden változót egy-egy „$” jel jelöl. Például: $tesztValtozo

A változóknak típusa is lehet, de a PHP gyengén típusos nyelv, vagyis nem adunk meg előre

típust, hanem amit beleteszünk a változóba, az határozza meg. Tehát beletehetünk akár

szöveget (’hello’, „hahooo”), akár számot (1, 34, 53355), akár logikai értéket (true, false) is.

A változóknak értéket adhatunk: $tesztValtozo = 53355;

A változókkal műveleteket végezhetünk, ezek szinte megegyeznek a JavaScript-nél

elmondottakkal, így a következő operátorok rendelkezésre állnak:

o Aritmetikai – matematikából ismert: =, +, -, *, /, % (maradékképzés)

o ++, -- (változó értékének 1-el növelése, csökkentése)

o Összehasonlító: ==, !=, <=, >=, <, >

o Feltételes (kérdőjel-kettőspont operátor): (feltétel) ? (ha igaz) : (ha hamis)

o Szöveg összefűzése: . (pont jellel)

Figyelem: ez a legfőbb eltérés – JavaScript-ben „+” jelet használtuk erre

Tömbök

Emlékezzük: a változó az egy láda, amibe egy dolgot tehetünk, a tömb az egy láda sok rekesszel, és

minden rekesznek van egy úgynevezett indexe (sorszáma), ami jelöli, hogy hova tesszük az adott

Page 6: PHP - patrik.what.hupatrik.what.hu/web/szta_prog/eloadas8.pdf · SQL Táblák Mozi ID mozinév férőhely város 1 Palace Cinemas Mammut 2200 Budapest 2 Palace Cinemas Mom Park 1700

dolgot. PHP-ban egyetlen eltérés lesz: a tömb indexe nem csak szám lehet, hanem tetszőleges szöveg

is (a szöveges indexelésű tömböket asszociatív tömböknek nevezzük).

Asszociatív index (szöveges, nem szám alapú):

Vezérlési szerkezetek

Ugyanaz, mint JavaScript-nél: if-else if-else, for ciklus, while ciklus, break, continue, switch.

Újdonság a foreach – tömbök elemein tudunk vele végigmenni (for is használható helyette):

foreach ($auto as $név) echo "Szeretem a(z) {$név}-t<br />\n";

Aposztrófok

Kétféle aposztróf létezik:

’valami’ – egyszeres, sima aposztróf

”valami” – dupla, idézőjel

Különbség: ha változót teszünk bele, az máshogy értelmeződik. Legyen $a = 5;

o print ’Nekem $a Forint pénzem van’;

Ekkor kiírásra kerül: Nekem $a Forint pénzem van

Tehát a változót nem dolgozza fel, egy az egyben a szöveget írjuk ki

o print ”Nekem $a Forint pénzem van”;

Ekkor kiírásra kerül: Nekem 5 Forint pénzem van

Tehát a változó értéke behelyettesítődik a változó helyére

Külső állományok

// hogyan tudunk mi megadni indexeket?

$auto = array("jo"=>"ford", "szar"=>"opel", "hm"=>"audi");

print $auto[“szar”]; // opel-t írja ki

// új elem felvétele a tömbbe

$auto[“wow”] = “saab”;

// tömb létrehozása és egyben feltöltése 3 elemmel

$auto = array("ford", "opel", "audi");

// ekkor az ford lesz a 0., opel az 1., audi a 2. indexű elem, kiiratás:

print $auto[0]; // ford-ot írja ki

// új elem felvétele a tömbbe

$auto[] = “saab”;

// ekkor a következő (még nem foglalt) numerikus indexre helyezi (3)

Page 7: PHP - patrik.what.hupatrik.what.hu/web/szta_prog/eloadas8.pdf · SQL Táblák Mozi ID mozinév férőhely város 1 Palace Cinemas Mammut 2200 Budapest 2 Palace Cinemas Mom Park 1700

Ha egy fájlban szükség van egy másik fájlban megírt kódra is, nem kell mindkét fájlban külön-külön

megírni, hanem megmondhatjuk, hogy melyik külső fájl tartalmát használjuk fel az adott oldalon

belül.

include(’valami.php’); VAGY require(’valami.php’);

Azért jó, mert ha két fájlba kétszer megírnánk ugyanazt, és változtatni kellene, akkor figyelni kéne

arra, hogy minden változtatás mindenhol megtörténjen. Ez pedig hosszú távon nehézkes. Hol

láthattunk már ilyen elvet? CSS-nél. Előtte mindent HTML-ben adtunk meg, mindenhol ki kellett írni,

hogy mi milyen formázású legyen, és nehéz volt módosítani – de CSS-el csak egy helyen szükséges

elvégezni a módosításokat.

Függvények

Függvények segítségével az összetartozó lépéseket egységbe zárjuk, és segít abban is, hogy csak

egyszerűen meghívva a függvényt adott paraméterekkel futtathassuk ugyanazt a kódrészletet, így

nem szükséges külön-külön többször megírni azt.

Előredefiniált (szuperglobális) változók

Most megmutatjuk, hogyan érhetjük el a HTTP kérések GET és POST paramétereit. Egy borzasztóan

egyszerű megoldás áll rendelkezésre PHP-ban:

A $_REQUEST-ből mind a POST mind a GET értékei elérhetőek.

Feladat: próbáljuk meg kiíratni egy űrlapmező által küldött változó értékét.

Bonyolultabb megoldás:

echo 'Név: ' . $_REQUEST['name'];

print $_POST[’nev’];

print $_GET[’nev’];

function muveletek($a, $b) {

$c = $a + $b;

return $c;

}

// meghívás

$d = muveletek(2, 5);

Page 8: PHP - patrik.what.hupatrik.what.hu/web/szta_prog/eloadas8.pdf · SQL Táblák Mozi ID mozinév férőhely város 1 Palace Cinemas Mammut 2200 Budapest 2 Palace Cinemas Mom Park 1700

// UTF-8 kódolás beállítása - csak ez írja felül a szerver beállításait,

// a HTML <head> részébe írt nem, az csak jelzés a böngésző számára

header("Content-Type: text/html; charset=UTF-8");

function printForm() {

// Leellenőrizzük, hogy a Submit gomb megnyomásra került-e

if (isset($_REQUEST['commentSubmit'])) {

// Kiírjuk az adatokat ($_REQUEST és $_POST is jó)

echo 'Név: ' . $_REQUEST['name'] . '<br />';

echo 'E-mail: ' . $_POST['email'] . '<br />';

echo 'Comment: ' . $_POST['comment'] . '<br /><br />';

}

}