webes alkalmazÁsfejlesztÉs 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · php a...

63
WEBES ALKALMAZÁSFEJLESZTÉS 1. 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

Upload: lediep

Post on 22-Mar-2019

221 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

WEBES

ALKALMAZÁSFEJLESZTÉS 1.

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

Page 2: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tartalom2

PHP nyelvi elemei

PHP a webszerveren

Webes alkalmazások és adatbázis

PHP és adatbázis

Kódszervezés

Page 3: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

PHP ismétlés – nyelvi alapok3

Page 4: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

PHP4

PHP

Personal Home Page

PHP: Hypertext Preprocesszor

Jellemzői

nyílt forráskódú

általános célú

szkriptnyelv

HTML-be ágyazható

Page 5: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

PHP a webprogramozásban5

.php kiterjesztésű állomány kérése esetén

webszerver kikeresi az állományt

Átadja a PHP értelmezőnek

A program kimenetét a böngésző a kliens felé

továbbítja

Kliens

Szerver PHP

Page 6: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

PHP mint programozási nyelv6

Értelmezett szkriptnyelv

Gyengén típusos

Változó típusa a tárolt értéktől függ

Automatikus konverziókra figyelni kell!

Sok minden igaz, amit JavaScriptnél tanultunk

Nincs use strict, helyette error_reporting(E_ALL);

PSR (PHP Standards Recommendation)

http://www.php-fig.org/

Page 7: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Típusok

Négy elemi típus

logikai

egész

lebegőpontos

szöveg

Két összetett típus

tömb

objektum

Két speciális típus

erőforrás

NULL

7

Page 8: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Literálok8

//LogikaitruefalseTRUEFALSE

//Egész12 //decimális -340123 //oktális0x0F //hexadecimális0b0101 //bináris

//Lebegőpontos3.14155.6e12-7E-2

//Például$l = true;$i = -23;$d = 23.65;

Page 9: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Szövegliterál

aposztróf

macskaköröm

heredoc

nowdoc

Változók

behelyettesítése

9

$a = 12;

$s1 = 'alma\t{$a} alma'; //alma\t{$a} alma$s1 = 'Többsor is lehet benne';

$s2 = "alma\t{$a} alma"; //alma 12 alma$s2 = "Ez egytöbb soros szöveg";

$s3 = <<<EOT //behelyettesítTöbb soros {$a}szövegEOT;

$s4 = <<<'EOT' //nem helyettesít beEz is lehet {$a}több soros.EOT;

Page 10: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tömbök10

Gyűjtemények általános objektuma

Összetett adatszerkezet megvalósítása

rekord

indexelt tömb

asszociatív tömb

többdimenziós tömb

fa, sor, verem, stb.

Asszociatív tömb: kulcs-érték párokból áll

kulcs: integer vagy string

érték: bármilyen típusú lehet

Page 11: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tömb11

//Üres tömb$uresTomb = array();

//Indexelt tömb$indTomb = array('alma', 'korte','szilva');echo $indTomb[0]; //'alma'print_r($indTomb);/*Array(

[0] => alma[1] => korte[2] => szilva

)*/

//Indexelt tömb vegyes értékekkel$indTombVegyes = array('alma', 12,true, -23.34);print_r($indTombVegyes);/*Array(

[0] => alma[1] => 12[2] => 1[3] => -23.34

)*/

Page 12: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tömb12

//Indexelt tömb egyesével hozzáadva$indTombKezi = array();$indTombKezi[0] = 'alma';$indTombKezi[1] = 'korte';$indTombKezi[2] = 'szilva';print_r($indTombKezi);/*Array(

[0] => alma[1] => korte[2] => szilva

)*/

//Indexelt tömb egyesével hozzáadva$indTombKezi2 = array();$indTombKezi2[] = 'alma';$indTombKezi2[] = 'korte';$indTombKezi2[] = 'szilva';print_r($indTombKezi2);/*Array(

[0] => alma[1] => korte[2] => szilva

)*/

Page 13: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Asszociatív tömb13

//Asszociatív tömb$asszTomb = array('alma' => 'piros','korte' => 'sarga','szilva' => 'kek',

);echo $asszTomb['alma']; //pirosprint_r($asszTomb);/*Array(

[alma] => piros[korte] => sarga[szilva] => kek

)*/

//Asszociatív tömb kézzel$asszTombKezi = array();$asszTombKezi['alma'] = 'piros';$asszTombKezi['korte'] = 'sarga';$asszTombKezi['szilva'] = 'kek';print_r($asszTombKezi);/*Array(

[alma] => piros[korte] => sarga[szilva] => kek

)*/

Page 14: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Mátrix14

Tömbök tömbje

Lehet vegyesen használni

indexeltben indexelt

indexeltben asszociatív

//Mátrix$matrix = array(array(1, 2, 3),array(4, 5, 6),array(7, 8, 9),

);

Page 15: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tömbök bejárása15

foreach

reset(), next(), prev(), current(), key(), each()

foreach ($t as $key => $value) {echo $key.$value;

}

foreach ($t as $value) {echo $value;

}

$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');reset($fruit);while (list($key, $val) = each($fruit)) {

echo "$key => $val\n";}

Page 16: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Osztályok és láthatóság16

PHP5-ben teljesen újraírták

PHP5 objektumorientáltclass A {

public $publikus = 'alapérték';protected $proti = 'alapproti';private $privat = 'alapprivi';

public function kiir() {echo $this->publikus;echo $this->proti;echo $this->privat;

}}

$a = new A();echo $a->publikus;echo $a->kiir();

Page 17: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Konstruktorok és öröklés17

class A {function __construct() {

echo "A konstruktora";}

}

class B extends A {function __construct() {

parent::__construct();print "B konstruktora";

}}

$a = new A();$b = new B();

Page 18: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Osztályok automatikus betöltése18

Általában az osztályok külön állományban

Egyesével include-olni

hibához vezethet

__autoload

function __autoload($class) {echo $class;include $class . '.php';

}

$a = new A();$b = new B();

Page 19: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Egyéb osztálytulajdonságok19

absztrakt osztályok és metódusok

interface-ek

statikus osztályok és adattagok

mágikus metódusok

__call(), __get(), __set(), __toString(), __clone()

Page 20: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Névterek20

Definiálás

namespace my\namaspace;

Használat

my\namespace\func()

Page 21: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

PHP Standards Recommendation21

PSR

http://www.php-fig.org/psr/

Page 22: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Standard PHP Library (SPL)22

http://php.net/manual/en/book.spl.php

Adatstruktúrák

Iterátorok

Interface-ek

Page 23: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

PHP és HTML, PHP és űrlapok

PHP a webszerveren23

Page 24: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Kliens-szerver architektúra24

Kliens (böngésző)

Internet

Webszerver

Adatbázis-szerver

PHP modul

Page 25: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Logikai architektúra25

Kliens (böngésző)

Internet

Prezentációs réteg

Üzleti logikai réteg

Kapcsolati réteg (adatbázis-absztrakciós réteg)

Adatbázis-szerver

Front

end

Mid

dle

wa

reBa

ckend

Page 26: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

PHP és HTML (kimenet)

<?php … ?>

HTML és PHP kód

váltogathatja egymást

Lényeg: a PHP

eredménye általában

HTML kód

Mindig nézzük meg a

generált forrást

HTML elvárásunkat

fogalmazzuk meg

először

26

<!-- Nem javasolt -->HTML kód<?php if (felt) { ?>HTML kód<?php } else { ?>HTML kód<?php } ?>HTML kód

<?phpPHP kód

?>

Page 27: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

PHP és HTML (bemenet)27

GET: urlben query string

http://pelda.hu?alma=piros&korte=kukacos

POST: standard inputon a query string

A query stringet űrlapküldésnél a böngésző állítja

elő (name attribútum szükséges!)

PHP

$_GET, $_POST, $_COOKIE, $_FILES, $_SESSION, stb.

Page 28: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Űrlapfeldolgozás28

Első megtekintés: űrlap megjelenítése

Űrlap elküldése ugyanannak a szkriptnek

Űrlapadatok ellenőrzése

Ha hiba volt, akkor hibák megjelenítése, űrlap

megjelenítése állapotát megőrizve

Ha nem volt hiba, akkor adatok feldolgozása, és

megjelenítése vagy más oldal megjelenítése

Page 29: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Űrlapfeldolgozás29

<?php$a = '';if ($_POST) {

$a = $_POST['a'];//Adatok ellenőrzése...if (siker) {

//Adatok feldolgozása}else {

//Hibás adatokelőkészítése}

}?><html><body><!-- Hiba opcionális megjelenítése --><form action="x.php" method="post">

<!-- Űrlapadatok --></form></body></html>

Page 30: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Webes alkalmazások és adatbázis30

Page 31: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Web és adatbázis31

Adatintenzív, adatközpontú webes alkalmazások

Adatvezérelt alkalmazások: alkalmazás felépítése,

logikája, megjelenése függ a háttérben tárolt

adatok szerkezetétől, jellegétől

Adatok tárolása adatbázis-kezelő rendszerben

történik a leggyakrabban

Page 32: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Kapcsolat az adatbázissal32

Szerveroldali technológiától független

Adott nyelvben függvények, osztályok az egyes

adatbázis-kezelő rendszerekhez

Adatbázis-művelet előtt kapcsolódás az

adatbázishoz

SQL utasítások kiadása a nyelv adatbázis-

függvényeinek segítségével

DDL, DML (eredményhalmaz feldolgozása), DCL, TCL

Kapcsolat bontása

Page 33: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Általános fogalmak33

Állandó kapcsolatok

átmeneti tároló

Előkészített utasítások

ld. adatkötés

Pufferelt lekérdezések

Page 34: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

PHP és adatbázis34

Page 35: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

PHP és adatbázisok35

Különböző függvénykönyvtárak a különböző

adatbázis-kezelő rendszerekhez

IBM DB2 — IBM DB2

Mssql — Microsoft SQL Server

MySQL

Mysqli — MySQL Improved Extension

OCI8 — Oracle OCI8

PostgreSQL

Page 36: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

PHP és MySQL36

Kétféle interfész

MySQL

régebbi

mind a mai napig gyakran használják

Mysqli

újabb MySQL verziók funkcióinak kihasználása

biztonságosabb kapcsolódás és használat

OOP-s interfész

manapság ez ajánlott

PDO (ld. később)

Page 37: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

MySQL függvénykönyvtárak37

libmysql

régebbi

kliens megléte szükséges

mysqlnd

korszerűbb

Legkorszerűbb

mysqli + mysqlnd

pdo + mysqlnd

Page 38: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tipikus lépések38

Kapcsolat létesítése az adatbázis-szerverrel

Adatbázis kiválasztása

Összeállított SQL utasítás futtatása

Opcionálisan a visszakapott eredmények

feldolgozása

Page 39: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Fontosabb parancsok

mysql_connect()

mysql_select_db()

mysql_query()

mysql_fetch_*()

mysql_free_result()

mysql_close()

$mysqli = new myslqi()

$r = $mysqli->query()

$r->fetch-*()

$r->free()

$mysqli->close()

$s=$mysqli->prepare()

$s->bind_param()

$s->bind_result()

39

MySQL Mysqli

Page 40: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tipikus utasítások40

mysqli bővítmény, pufferelt lekérdezés

new mysqli::mysqli()

mysqli::real_query()

mysqli::store_result()

mysqli_result::fetch_assoc()

mysqli_result::free()

mysqli::close()

Page 41: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tipikus utasítások41

mysqli bővítmény, nem pufferelt lekérdezés

new mysqli::mysqli()

mysqli::real_query()

mysqli::use_result()

mysqli_result::fetch_assoc()

mysqli_result::free()

mysqli::close()

Page 42: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tipikus utasítások42

mysqli bővítmény, nem pufferelt lekérdezés, előkészített utasítás

new mysqli::mysqli()

mysqli::prepare()

mysqli_stmt::bind_param()

mysqli_stmt::execute()

mysqli_stmt::bind_result()

mysqli_stmt::fetch()

mysqli_stmt::free_result()

mysqli::close()

Page 43: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tipikus utasítások43

mysqli bővítmény, pufferelt lekérdezés, előkészített utasítás

new mysqli::mysqli()

mysqli::prepare()

mysqli_stmt::bind_param()

mysqli_stmt::execute()

mysqli_stmt::store_result()

mysqli_stmt::bind_result()

mysqli_stmt::fetch()

mysqli_stmt::free_result()

mysqli::close()

Page 44: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tipikus utasítások44

nem pufferelt lekérdezés, előkészített utasítás

new PDO()

PDO::prepare()

PDOStatement::bindParam()

PDOStatement::execute()

PDOStatement::fetch()

Page 45: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Tipikus utasítások45

pufferelt lekérdezés, előkészített utasítás

new PDO()

PDO::prepare()

PDOStatement::bindParam()

PDOStatement::execute()

PDOStatement::fetchAll()

Page 46: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Adatbázis biztonság46

Mysqli interfész a preferált (Mysql-lel szemben)

Szövegösszefűzés

mysql_real_escape_string()

sprintf()

Adatkötés

előkészített kifejezések

prepare

bind_param()

bind_result()

Page 47: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Példa47

Lekérdezés egy táblából

Lépésekre bontva

Tábla:

CREATE TABLE `albums` (`id` int(10) unsigned NOT NULL auto_increment,`nev` varchar(45) NOT NULL,`leiras` varchar(200) NOT NULL,PRIMARY KEY (`id`),

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Page 48: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

HTML előkészítése48

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>

<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Albumok</title>

</head><body>

<h1>Albumok listázása</h1><table>

<tr><th>Azonosító</th><th>Név</th><th>Leírás</th>

</tr><!-- Dinamikus szakasz kezdete --><tr>

<td>1</td><td>Album1</td><td>Album1 leírása</td>

</tr><!-- Dinamikus szakasz vege -->

</table></body>

</html>

Page 49: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Mysqli használata49

$mysqli = new mysqli('servername', 'username', 'password', 'database');if ($mysqli->connect_error) {

die('Kapcsolodasi hiba' . $mysqli->connect_errno .$mysqli->connect_error);

}$mysqli->query('set names utf8');

$q = 'select * from photo_albums';$result = $mysqli->query( $q );

if ($result) {while ($sor = $result->fetch_assoc()) {

echo <<<EOT<tr>

<td>{$sor['id']}</td><td>{$sor['nev']}</td><td>{$sor['leiras']}</td>

</tr>EOT;

}$result->free();

}$mysqli->close();

Page 50: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Paraméterek összefűzéssel50

$nev = '';$leiras = '';

echo $q = sprintf("select * from photo_albums

where nev like '%%%s%%' and leiras like '%%%s%%'",

mysql_real_escape_string($nev),mysql_real_escape_string($leiras));

$result = $mysqli->query( $q );

Page 51: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Paraméterek adatkötéssel51

$nev = '';$leiras = '';$stmt = $mysqli->prepare(

"select id, nev, leiras from photo_albumswhere nev like ? and

leiras like ?");$stmt->bind_param('ss', $nev, $leiras);$nev = "%{$nev}%";$leiras = "%{$leiras}%";

$stmt->execute();$stmt->bind_result($r_id, $r_nev, $r_leiras);

while ($stmt->fetch()) {echo <<<EOT

<tr><td>{$r_id}</td><td>{$r_nev}</td><td>{$r_leiras}</td>

</tr>EOT;}

Page 52: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Paraméterek adatkötéssel52

Általánosabb eredménykötés

$stmt->execute();$meta = $stmt->result_metadata();$sor = array();foreach ($meta->fetch_fields() as $field) {

$params[] = &$sor[$field->name];}call_user_func_array(array($stmt, 'bind_result'), $params);while ($stmt->fetch()) {

echo <<<EOT<tr>

<td>{$sor['id']}</td><td>{$sor['nev']}</td><td>{$sor['leiras']}</td>

</tr>EOT;}

Page 53: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Útban az MVC felé

Kód újrarendezése53

Page 54: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Kritika54

HTML és PHP keveredik egymással

Különböző funkciójú kódrészletek keverednek egymással

vezérlés, adatelérés, megjelenítés, feldolgozás, alkalmazáslogika

Konfiguráció kódba épített

Több belépési pontja lehet az alkalmazásnak

Csoportmunka nem lehetséges

Karbantartása nehézkes

Page 55: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Logika és megjelenés szétválasztása55

Válasszuk szét a logikát a megjelenéstől

Határozott vonal húzható a PHP és HTML között

Akár külön file-ba kerülhet a megjelenés

A HTML-ben lesznek PHP kódrészletek, de ezek már

csak a megjelenést szolgálják: sablonnyelv

PHP alternatív szintaxis

Háromféle utasítás szerepelhet

echo, if, foreach

HTML nem generálható (echo)

Logikában nincs HTML kód

<?php if (felt) : ?>HTML

<?php else : ?>HTML

<?php endif; ?>

<?php foreach (...) : ?>HTML

<?php endforeach; ?>

Page 56: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Nézet (view)56

A logika és megjelenés szétválasztásából születik

meg a nézet (view)

Előnye

Egy logikához többféle nézet is rendelhető

HTML, szöveg, PDF, XML

Külön szakember foglalkozhat a kétféle résszel

Példa: index2.php és list.php

Page 57: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Adatmanipuláció elkülönítése (modell)57

Adatokkal kapcsolatos rész elkülönítése

Előnyei

Több helyen felhasználható

Módosítások egy helyre összpontosulnak (pl. tábla

átnevezés, adatbázis-váltás)

Az adatok feldolgozását végző kódrész a modell

Ld. albums_model.php

Page 58: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Vezérlő (controller)58

A maradék kód a folyamat irányításáért felel:

vezérlő

Inputadatok begyűjtése, adatok átadása, elkérése a

modelltől, az eredményt a nézetnek átadni

Kérés feldolgozása

Munkamenet-kezelés

Authentikáció, authorizáció

Könnyen áttekinthetővé vált

Ld. index3.php

Page 59: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Vezérlő (controller)59

<?php

include('albums_model.php');

$nev = '';$leiras = '';if (isset($_POST['nev'])) {

$nev = $_POST['nev'];}if (isset($_POST['leiras'])) {

$leiras = $_POST['leiras'];}

$albums = get_albums($nev, $leiras); //modell

include('list.php'); //view

Page 60: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Modell (model)60

<?phpfunction get_albums($nev = '', $leiras = '') {

$mysqli = new mysqli('localhost', 'wabp3', 'ab2009', 'wabp3');if ($mysqli->connect_error) {

die('Kapcsolodasi hiba' . $mysqli->connect_errno .$mysqli->connect_error);

}$mysqli->query('set names utf8');

$stmt = $mysqli->prepare("select * from photo_albumswhere nev like ? and

leiras like ?");$stmt->bind_param('ss', $nev, $leiras);$nev = "%{$nev}%";$leiras = "%{$leiras}%";$stmt->execute();

Page 61: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Modell (model)61

$meta = $stmt->result_metadata();$sor = array();foreach ($meta->fetch_fields() as $field) {

$params[] = &$sor[$field->name];}call_user_func_array(array($stmt, 'bind_result'), $params);

$albums = array();while ($stmt->fetch()) {

$albums[] = array('id' => $sor['id'],'nev' => $sor['nev'],'leiras' => $sor['leiras'],

);}$stmt->free_result();$mysqli->close();

return $albums;}

Page 62: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Nézet (view)62

<html><head>

<title></title><meta http-equiv="Content-Type"

content="text/html; charset=UTF-8"></head><body>

<h1>Albumok listazasa</h1><form action="index2.php" method="post">

Nev: <input type="text" name="nev"value="<?php echo $nev; ?>" ><br>

Leiras: <input type="text" name="leiras"value="<?php echo $leiras; ?>" ><br>

<input type="submit" value="Szur"></form>

Page 63: WEBES ALKALMAZÁSFEJLESZTÉS 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · PHP a webprogramozásban 5 .php kiterjesztésű állomány kérése esetén webszerver kikeresi

Nézet (view)63

<table><tr>

<th>Azonosító</th><th>Név</th><th>Leírás</th>

</tr><!--Dinamikus resz kezdete --><?php foreach ($albums as $sor) : ?><tr>

<td><?php echo $sor['id']; ?></td><td><?php echo $sor['nev']; ?></td><td><?php echo $sor['leiras']; ?></td>

</tr><?php endforeach; ?><!--Dinamikus resz vege -->

</table><a href="insert.php">Új album...</a>

</body></html>