webes alkalmazÁsfejlesztÉs 1.webprogramozas.inf.elte.hu/weaf1/ea/weaf1_09.pdf · php a...
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/28.jpg)
Ű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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/29.jpg)
Ű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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/30.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/31.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/32.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/33.jpg)
Á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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/34.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/35.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/36.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/37.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/38.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/39.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/40.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/41.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/42.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/43.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/44.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/45.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/46.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/47.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/48.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/49.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/50.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/51.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/52.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/53.jpg)
Ú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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/54.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/55.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/56.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/57.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/58.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/59.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/60.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/61.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/62.jpg)
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](https://reader031.vdocuments.net/reader031/viewer/2022022109/5c93f0f509d3f2c75a8bc8b1/html5/thumbnails/63.jpg)
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>