Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

PHP ALAPOK DR. NAGY ENIKŐ PHD. EGYETEMI ADJUNKTUS PTE POLLACK MIHÁLY MŰSZAKI ÉS INFORMATIKAI KAR, MŰSZAKI INFORMATIKA ÉS VILLAMOS INTÉZET, RENDSZER- ÉS.

Hasonló előadás


Az előadások a következő témára: "PHP ALAPOK DR. NAGY ENIKŐ PHD. EGYETEMI ADJUNKTUS PTE POLLACK MIHÁLY MŰSZAKI ÉS INFORMATIKAI KAR, MŰSZAKI INFORMATIKA ÉS VILLAMOS INTÉZET, RENDSZER- ÉS."— Előadás másolata:

1 PHP ALAPOK DR. NAGY ENIKŐ PHD. EGYETEMI ADJUNKTUS PTE POLLACK MIHÁLY MŰSZAKI ÉS INFORMATIKAI KAR, MŰSZAKI INFORMATIKA ÉS VILLAMOS INTÉZET, RENDSZER- ÉS SZOFTVERTECHNOLÓGIAI TANSZÉK

2  Szerver konfigurálás  PHP alapok  Vezérlési szerkezetek  Adatbázis-kapcsolat

3 A szerver konfigurálása  Konfigurációs lépések megtételére van szükség.  Saját gép esetén nem probléma  Más esetben rendszergazdai vagy szolgáltatói jogosultság szükséges

4 Fontosabb konfigurációs lehetőségek Apache konfigurálása  Legfontosabb állomány: httpd.conf xampp/apache/conf/httpd.conf – programozói editorral megnyitni  Változtatások érvényesüléséhez webszerver újraindítása

5 Változó neveFunkciójaPélda ServerRootApache szerver telepítési útvonal meghatározása ServerRoot „C:/xampp/apache” LoadModuleOpcionális Apache modulok betöltése LoadModule rewrite_module modules/mod_rewrite.so DocumentRootAzoknak az állományoknak a helye, amelyeket elérhetővé kell tenni a szerver számára. DocumentRoot „C:/xampp/htdocs” DirectoryA megadott könyvtár tartalmát hogyan szolgálja ki a webszerver. Options Indexes FollowsSymLinks Includes ExeCGI AllowOverride All Order allow, deny Allow from all IfModuleBetöltés után veszi figyelembe … DirectoryIndexMeghatározza, hogy egy könyvtár lekérésekor mi történjen. DirectoryIndex index.php index.php4 index.php3 index.cgi index.html

6 A PHP konfigurálása  - alapvető információk az Apache, PHP konfigurációkról.  Távoli szolgáltató esetén i.php állományt kell létrehozni és gyökérkönyvtárba feltölteni a következő tartalommal:

7 Változó neveFunkciójaPélda short_open_tag

8 A phpMYAdmin konfigurálása  MySQL adatbázisok konfigurálásának adminisztrációs felületének elérési útvonala:

9 A MySQL konfigurálása XAMPP esetén  C:\xampp\mysql\bin\my.ini  Beállítási példák: port= Ezen a porton érhető el az SQL szerver. datadir=„c:/xampp/mysql/data” - adatbázisok helye. log_error=„mysql_error.log” - ide loggolja a hibaüzeneteket.

10 Jogosultságkezelés  Rendkívül fontos szerepet tölt be.  Automatikusan települ a mysql adatbázis tartalmára és figyelembe veszi, hogy Honnan kapcsolódunk Kik vagyunk Mit tehetünk

11 Az adatbázis tábláinak szerepe  User: Ki, honnan kapcsolódhat. Globális jogok is.  Db: Melyik adatbázishoz, ki férhet hozzá. Adatbázis szintű jogok is.  Host: Melyik adatbázishoz honnan lehet csatlakozni.  Tables_priv, columns_priv: Tábla és mezőszintű jogok. A hitelesítés 2 lépésben történik: 1.Van-e jogunk csatlakozni? 2.Van-e jogunk az adott parancsot lefuttatni?

12 Karakterkódolás  Használjunk mindenhol UTF 8-at!  Miért?  Mert a magyar nyelv nem triviális.  Mert az UTF-8 egyre dominánsabb, bár nem problémamentes.

13 PHP ALAPOK  PHP: Hypertext Preprocessor – szerver oldali szkriptnyelv  Dinamikus és interaktív weboldalak készítése  PHP kód HTML kódba ágyazása  Szintaxis hasonló C/C++, Java, Javasrcipt, Perl nyelvekhez  Tartalmaz szöveget, HTML tagokat, PHP kódokat (szkripteket)  Szerveren fut  Kommunikálhat adatbázis-szerverrel (pl. MySQL, Oracle stb.)  Kiterjesztése.php  Szabadon letölthető és használható

14 Szintaxis  PHP kódot nem lehet böngészővel megnézni, mert az előállított HTML kimenet látható.  PHP kód kezdete, vége: vagy

15 print

16 Print és echo nélküli kimenet kezelés: ”>

17 Megjegyzések Egysoros megjegyzések: // Egy soros megjegyzés Többsoros megjegyzés: /* Ez egy több soros megjegyzés. */

18 Változók  $ karakterrel kezdődnek a változók nevei  Szövegeket, számokat, tömböket tartalmazhatnak  Nevek: ABC betűi, számok, aláhúzás karakter, NEM kezdődik számmal, szóközt NEM tartalmazhatnak  Gyengén típusos - nincs szükség a változó előzetes megadására (értékadásnál beállítódik)  Típusok: Logikai (boolean), Egész számok (integer), Lebegőpontos számok (double), Sztringek(string), Tömbök(array), Objektumok(object), Erőforrások (adatbázis azonosítója), NULL gettype – változó típusának lekérdezése

19 Típuskonverziók  Implicit  Explicit $a=3 $b=2.4 print $a + $b print ‘2 alma’ + ‘3 körte’ print $a + (integer)$b $a= print (integer)($a*100)/ Valós számmá konvertálódik 2. Egész számmá konvertálódik 3. Valós számmá konvertálódik

20  Eddig nem változtak a típusok  Szükség lehet a típus változtatására – settype  Változó változók: $a= ‘b’;$b= ‘alma’; $$a=‘alma’

21 A sztringek  Létrehozás aposztróffal echo ‘Hamlet kérdi: „Lenni vagy nem lenni…”’;  Létrehozás idézőjellel: $kutya= ‘tacsi’; echo „törpe $kutya hosszú fülekkel”; echo „ hosszú $kutyafülek”; echo „ hosszú ${kutya}fülek”; echo „ hosszú {$kutya }fülek” String karaktereinek elérése, módosítása: $p = ‘ÉVA’; $elso = $p{0}; $harmadik = $p{2}; $p{2} = „I”; ‘heredoc’ szintaxis $t= <<< EOS Több soros sztring, melyben hosszú fülű, törpe tacsi szerepel. EOS;

22 Operátorok és kifejezések  Értékadó operátorok  Aritmetikai operátorok  Összehasonlító operátorok  Logikai operátorok

23 Értékadó operátorok OperátorPéldaJelentés =$x=$y$x=$y; +=$x+=$y$x=$x+$y; -=$x-=$y$x=$x-$y; *=$x*=$y$x=$x*$y; /=$x/=$y$x=$x/$y; %=$x%=$y$x=$x%$y;.=$x.=$y$x=$x.$y;

24 Aritmetikai operátorok OperátorPéldaEredmény +$x=2; $x+2 4 -$x=2; 5-$x 3 *$x=4; $x*5 20 /5/22.5 %5%21 ++$x=5; $x++ ++$x $x=6 --$x=5; $x— --$x $x=4

25 Összehasonlító operátorok OperátorMűveletPéldaEredmény ==Egyenlő5==8false !=Nem egyenlő5!=8true >Nagyobb5>8false =Nagyobb-egyenlő5>=8false <=Kisebb-egyenlő5<=8true ===Típus és érték egyenlő ‘5’===5false

26 Logikai operátorok OperátorMűveletPéldaEredmény && and és$x=6 $y=3 ($x 1) True || or Vagy$x=6 $y=3 ($x==5 || $y==5) ($x==5 or $y==5) False !nem$x=6 $y=3 !($x==$y)True

27 Operátorok precedenciája 1. ++, --, 2. /,*,% 3. +,- 4., >= 5. ==, !=, == 6. && 7. || 8. =, +=, -=, /=, *=, %=,.= 9. And 10. or Rövidzár kiértékelés ( $x < 5 ) && ( $y == 5 )

28 Tömbök  1 vagy több értéket tárolhat egyetlen változónévvel.  Típusai: Sorszámozott – egyedi numerikus azonosító kulcsai vannak Asszociatív – egyedi szöveg azonosító kulcsai vannak Többdimenziós tömb – 1 vagy több tömböt tartalmaz

29 Sorszámozott tömbök  $nevek = array( „Anna”, „Attila”, „Anita”);  $nevek[0]= „Anna”;  $nevek[1]= „Attila”;  $nevek[2]= „Anita”;  echo $nevek[0]. „ and „. $nevek[1]. „ and „. $nevek[2]. „jó barátok.”;

30 Asszociatív tömbök  $korok = array („Anna”= >18, „Attila”=>20, „Anita”=>21); $korok[‘Anna’] = „18”; $korok[‘Attila’] = „20”; $korok[‘Anita’] = „21”;  echo „Attila”. $korok[‘Attila’]. „éves.”;

31 Többdimenziós tömbök $csalad = array ( „Kovacs” => array( „Anna”, „Attila” ), „Nagy” => array( „Anita” ), );

32 Vezérlési szerkezetek  Elágazások – if, elseif és else  Ciklusok – while, do-while, for, foreach  Függvények használata

33 Elágazások - if-else szerkezet if (feltétel) végrehajtandó kód, ha a feltétel teljesül; else végrehajtandó kód, ha a feltétel nem teljesül; Pl. $n=date(„N”); if ($n==„Reggel” ) echo „Jó reggelt!”; else echo „Jó napot!”; $n=date(„N”); if ($n==„Reggel”) { echo „Szia! ”; echo „Jó reggelt! ”; echo”Jó munkát mára ”; }

34 Az elseif szerkezet if (feltétel1) végrehajtandó kód, ha a feltétel1 teljesül; elseif (feltetel2) végrehajtandó kód, ha a feltétel2 teljesül; else végrehajtandó kód, ha a feltétel nem teljesül; $n=date(„N”); if ($n==„Reggel” ) echo „Jó reggelt!”; elseif ($n== „Este”) echo „Jó estét!”; else echo „Jó napot!”;

35 A switch szerkezet  Akkor használjuk, ha más-más kódot akarunk végrehajtani egy kifejezés lehetséges értékei alapján.  Elkerülhetők a hosszú if-es blokkok.  Egy kif. egyszer végrehajtódik,  A kif. összahsonlításra kerül minden case kif-sel  Ha egyezik, akkor a kód végrehajtódik  Ezután a break leállítja a kód végrehajtását  A default-tal kezeljük a case által nem kezelt eseteket. switch (kif) { case cimke1: végrehajtandó kód, ha a kif = cimke1 break; case cimke2: végrehajtandó kód, ha a kif = cimke2 break; default; végrehajtandó kód Ha a kif különbözik cimke1 és címke2 – től; }

36 Ciklusok – a while ciklus PHP-ben Szintaxis: while (feltetel) ciklusmag $i=1; while($i<=5) { echo „ A szám „. $i.” ”; $i++; }

37 A do-while ciklus Szintaxis: do { ciklusmag; } while (feltetel); $i=0; do { $i++; echo „A szám”. $i. „ ”; } while ($i<5);

38 A for ciklus  Amikor előre tudjuk hányszor kell futtatni a kódot. Szintaxis: for (inicializálás; feltétel;növelés) { ciklusmag; } for ($i=1; $i<=5; $i++) { echo „Hello Világ! ”; } $i=1; while ($i<=5) { echo „Hello Világ! ”; $i++; }

39 A foreach ciklus  Tömbelemekre alkalmazzuk Tömb elemek kiíratása: $tomb=array(„egy”, „kettő”, „három”); foreach ($tomb as $ertek) echo „Érték: „. $ertek. „ ”; Kilépés ciklusból: break utasítással lehetséges. Ciklusmag végrehajtásának megszakítása: continue utasítással lehetséges.

40 Függvények használata  Kb beépített függvény  Kódblokk  function szóval kezdődik  A név utaljon a függvény funkciójára.  A PHP kód tetszőleges pontján meghívhatjuk.  Paraméterezés

41 Példák egyszerű függvényre Function Kiir($nev) { echo „ A nevem Nagy $nev. ”; } Kiir(„Anna”); Kiir(„Attila”); Kiir(„Anita”); Function Kiirfoglalk($nev, $fogl) { echo „ A nevem Nagy $nev, $fogl vagyok. ”; } Kiirfoglalk(„Anna”, „Óvodapedagógus”); Kiirfoglalk(„Attila”, „Építőmérnök”); Kiirfoglalk(„Anita”, „Tanárnő”);

42 Paraméterátadás, visszatérési érték  A paraméterek közül egyet vagy többet elhagyhatunk, ha a következőképpen adjuk meg a függvényben: function fuggvenynev($nev; $ertek = „Adott”) { … } function osszeg($x,$y) { $ossz= $x+$y; return $ossz; } echo „3+5 =”. osszeg(3,5)

43 Adatbázis-kapcsolat  MySQL a legnépszerűbb  Adatbázis adataihoz való hozzáféréshez kapcsolatot kell létrehozni az adatbázishoz.  mysql_connect()  Szintaxis: mysql_connect(servername, username, password);

44 $con = mysql_connect („localhost”, „peter”, „abc123”); if (! $con) { die(‘Nem sikerült kapcsolatot kiépíteni:’. mysql_error()); } mysql_close($con);

45  Adatbázisok és táblák létrehozása  Adattípusok  Elsődleges kulcsok  Adatok bevitele adatbázisba  Lekérdezés  Eredmények megjelenítése  Műveletek rekordokkal (feltételek, rendezések, módosítás, törlés)

46 Adatbázisok és táblák létrehozása Szerverkapcsolódás után létrehozzuk az adatbázis(oka)t és a táblá(ka)t. CREATE DATABASE adatbneve $con = mysql_connect („localhost”, „peter”, „abc123”); if (! $con) { die(‘Nem sikerült kapcsolatot kiépíteni:’. mysql_error()); } If (mysql_query(„CREATE DATABASE my_db”, $con)) { echo „Adatbázis létrehozva”; } else { echo „Sikertelen adatbázis létrehozás.”. mysql_error(); } mysql_close($con);

47 CREATE TABLE tablanev ( Oszlopnev1 adattipus, Oszlopnev2 adattipus, Oszlopnev3 adattipus, … ) mysql_select_db(„my_db”, $con); $sql=„CREATE TABLE person ( keresztnev varchar(15), vezeteknev varchar(15), kor int )”; mysql_query($sql, $con); mysql_close($con);

48 Adattípusok I. Numerikus – egész és tizedes számok, size max. számjegyek száma, d tizedes jegyek száma int(size), smallint(size), tinyint(size), mediumint(size), bigint(size) decimal(size,d), double(size,d), float(size,d) Szöveges adattípusok – sztring, betűk, számok, spec. karakterek char(size) – fix hosszúság varchar(size) - változó hosszúság tinytext – változó hossz, de max. 255 karakter, text, blob, mediumtext, mediumblob, longtext, longblob (max , , )

49 Dátum – dátumot és/vagy időt tartalmaz date(yyyy-mm-dd), datetime(yyyy-mm-dd hh:mm:ss), timestamp(yyyymmddhhmmss), time(hh:mm:ss) Összetett típusok – érték listázva enum(ertek1, ertek2, ertek3,….,ertekx) set Adattípusok II.

50 Elsődleges kulcs  Minden táblának kell legyen (kivétel a kapcsoló táblák)  Egyedileg azonosítja a sorokat, rekordokat  Egyedinek kell lennie  Nem lehet null értékű  Indexelni kell a gyakori visszakeresés végett $sql=„CREATE TABLE szemely ( szemelyazon int NOT NULL AUTO_INCREMENT, PRIMARY KEY(szemelyazon), keresztnev varchar(15), vezeteknev varchar(15), kor int )”; mysql_query($sql, $con);

51 Adatbevitel - INSERT INTO mysql_query(„INSERT INTO szemely (keresztnev, vezeteknev, kor) VALUES(‚Péter’, ‚Kovács’,’22’)”); mysql_query(„INSERT INTO szemely (keresztnev, vezeteknev, kor) VALUES(‚Éva’, ‚Kiss’,’25’)”); mysql_close($con);

52 Pl. keresztnev: vezeteknev: kor:

53 PHP kód – adatbevitel űrlapról $con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Nem sikerült kapcsolatot kiépíteni: '. mysql_error()); } mysql_select_db("my_db", $con); $sql="INSERT INTO person (keresztnev, vezeteknev, kor) VALUES ('$_POST[keresztnev]','$_POST[vezeteknev]','$_POST[kor]')"; if (!mysql_query($sql,$con)) { die('Hiba: '. mysql_error()); } echo "1 rekord létrejött"; mysql_close($con)

54 Választó Lekérdezés – SELECT $con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Nem sikerült kapcsolatot kiépíteni: '. mysql_error()); } mysql_select_db("my_db", $con); $eredmeny = mysql_query("SELECT * FROM szemely"); while($sor = mysql_fetch_array($eredmeny)) { echo $sor[‚keresztnev']. " ". $sor[‚vezeteknev']; echo " "; } mysql_close($con) ;

55 Ez miben tér el az előző példától? $con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Nem sikerült kapcsolatot kiépíteni: '. mysql_error());} mysql_select_db("my_db", $con); $eredmeny = mysql_query("SELECT * FROM szemely"); echo " Vezeteknev Keresztnev "; while($sor = mysql_fetch_array($eredmeny)) { echo " "; echo " ". $sor[‚Keresztnev']. " "; echo " ". $sor[‚Vezeteknev']. " "; echo " "; } echo " "; mysql_close($con);

56 Feltételes választó lekérdezés – SELECT WHERE Általános szintaktika: SELECT oszlop FROM tabla WHERE feltetel(ek) Operátor Leírás = Egyenlő != Nem egyenlő > Nagyobb < Kisebb >= Nagyobb, vagy egyenlő <= Kisebb, vagy egyenlő BETWEEN Tartományba esés LIKE Mintával való egyezés

57 Példa feltételes kiválasztásra $con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Nem sikerült kapcsolatot kiépíteni: '. mysql_error()); } mysql_select_db("my_db", $con); $eredmeny = mysql_query("SELECT * FROM szemely WHERE keresztnev='Péter'"); while($sor = mysql_fetch_array($eredmeny)) { echo $sor[‚keresztnev']. " ". $row[‚vezeteknev']; echo " "; }

58 Rendezés – ORDER BY Általános szintaktika: SELECT column_name(s) FROM table_name ORDER BY column_name Példa: $con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('Nem sikerült kapcsolatot kiépíteni: '. mysql_error()); } mysql_select_db("my_db", $con); $eredmeny = mysql_query("SELECT * FROM szemely ORDER BY kor"); while($sor = mysql_fetch_array($eredmeny)) { echo $sor[‚keresztnev']; echo " ". $sor[‚keresztnev']; echo " ". $sor[‚kor']; echo " "; } mysql_close($con);

59 Rendezés növekvő és csökkenő sorrendben SELECT column_name(s) FROM table_name ORDER BY column_name DESC

60 Rendezés két vagy több oszlop alapján SELECT column_name(s) FROM table_name ORDER BY column_name1, column_name2

61 Adatok módosítása - UPDATE mysql_query("UPDATE Person SET Age = '36' WHERE FirstName = 'Peter' AND LastName = 'Griffin'"); mysql_close($con);

62 Adatok törlése mysql_query("DELETE FROM Person WHERE LastName='Griffin'");

63 Adatbázis absztrakció  Ha a szolgáltató nem nyújt MySQL szolgáltatást  Ha túl nagy a szerverterhelés  Megoldás gyakran a PostgreSQL, Microsoft SQL Server, vagy az Oracle Database  Egyre inkább elterjedt módszer Előnyei:  Adatbázis-kezelő rendszer függetlenedés  Verzió függetlenedés  Nem kell specialistává válnunk

64 Absztrakciós réteg

65 PHP Data Object - PDO  Kapcsolódás adatbázishoz: $db = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');  Rekordszintű bejárás: foreach($db->query('select * from products') as $row) { //... }  Rekord beszúrása, és az új ID kiolvasása: $db->exec("insert into products (name) values ('Sample')"); $id = $db->lastInsertId();

66 Preparált lekérdezések Preparált lekérdezés : $statement = $db->prepare( 'select * from products where id = ? and category = ?'); $statement->execute( array($_GET['id'], $_GET['category'])); while($statement->fetch() as $row) { //... } Preparált módosítás: $statement = $db->prepare( 'update products set name=:name where id=:id'); $statement->execute( array('name' => $_POST['name'], 'id' => 123)); Preparált beszúrás: $statement = $db->prepare( 'insert into products (name) values(:name)'); $statement->execute( array('name' => $_POST['name'])); $newProductId = $db->lastInsertId();

67 PÉLDA 1. Űrlap készítése MySQL adatbázishoz PHP-ben  A PHP fájlba alapvetően HTML űrlapot készítünk.  Az űrlap elemeit elnevezzük, ezzel fogunk tudni hivatkozni a tartalmára. Vagyis az űrlap eleme egy változó, amit a nevével azonosítunk.  Űrlapokat a FORM tag-be írjuk bele. A FORM tag „action” attribútuma egy.php fájl.  A „method” attribútum lehet post vagy get.  A kettő között a különbség az, hogy a post estében nem fognak látszódni a paraméterek böngésző címsorában.

68

69 /********* Csatlakozunk az adatbázishoz ********/ $connect = mysql_connect( $host, $user, $password ) or die ( "Error: Can not connect to server" ); mysql_select_db( "teszt", $connect ) or die ( "Can not connect to database" );

70 /***** Ha az oldal kap paramétereket, akkor letároljuk a globális változókba ***/ $veznev = $_POST["vnev"]; $kernev = $_POST["knev"]; $city = $_POST["varos"]; $gender = $_POST["nem"];

71 /********* Ez a rész csak akkor fut le, ha minden paraméter létezik **********/ if ( isset($veznev) && isset($kernev) && isset($city) && isset($gender) ) { /******* beszúrjuk a kapott paramétereket a táblába ***********/ $sql = "INSERT INTO emberek (vezeteknev, keresztnev, varos, nem) VALUES ('". $veznev."','". $kernev. "','". $city. "','". $gender. "')"; mysql_query( $sql ) or die ("Hiba a beszúrásnál"); } $sql = "SELECT varosnev FROM varosok"; // lekérdezzük a városokat $varoslista = mysql_query( $sql ); mysql_close($connect); // lezárjuk az adatbázis-kapcsolatot

72 /************ EZ AZ ŰRLAP ********************/ /***** táblázatos elrendezést használunk *****/ /***********************************************/ echo ' '; echo ' Vezetéknév: '; echo ' Keresztnév: '; echo ' Férfi '; echo ' Nő '; echo ' Város '; while ( $v = mysql_fetch_array($varoslista, MYSQL_NUM) ) { echo ' '. $v[0]. ' '; } echo ' ';

73 // LEKERDEZES /******* újra csatlakozunk az adatbázishoz *********/ $connect = mysql_connect( $host, $user, $password ) or die ( "Error: Can not connect to server" ); mysql_select_db( "teszt", $connect ) or die ( "Can not connect to database" ); /******** lekérdezzük az adatbázisban szereplő embereket *********/ $sql = "SELECT vezeteknev, keresztnev, varos, nem FROM emberek"; $eredmeny = mysql_query( $sql ); /********* a lekérdezés eredményét kiírjuk egy táblázatba ****************/ echo ' '; echo ' Vezetéknév Keresztnév Város Nem '; while ( $rekord = mysql_fetch_array($eredmeny, MYSQL_NUM) ) { echo ' '. $rekord[0]. ' '. $rekord[1]. ' '. $rekord[2]. ' '. $rekord[3]. ' '; } echo ' ';

74 VÉGÜL: mysql_close($connect); // lezárjuk az adatbázis-kapcsolatot echo ' '; ?>

75 Mit csinál a következő PHP program? 0) { echo "A $szam "; } else{ echo "A $szam "; } ?>

76 PHP feladat  Készítsen egy PHP függvényt, amelynek paraméterként átadja a bruttó havi fizetést és egy nevet, és ez a függvény tételesen kiírja az összes levonást illetve a nettó bért.

77

78 PHP feladat  Készítsen egy olyan PHP függvényt (hozzon létre új php fájlt és új függvényt) amelynek átadja a következő asszociatív tömböt és a függvény kigenerál egy HTML táblázatot, amelyben, nettó bér szerint csökkenő sorrendbe rendezve jelennek meg a személyek és azok nettó bére. Bemeneti tömb: ["Kiss Janos" => , "Nagy Jozsef" => , "Szegeny Bela" => , "Magnas Miska" => , "Gipsz Jakab" => ] Kimenet valahogy így kellene kinézzen: Név | Nettó bér xxxxx | yyyy | zzzzz |

79 $brut) { $nyugdij = $brut * 0.1; $munkanelkuli = $brut * 0.015; $tb = $brut *0.07; $szja = $brut * 0.16; $net = $brut - $nyugdij - $munkanelkuli - $tb - $szja; $kimenet[$nev] = $net; } arsort($kimenet); eredmenyKiiras($kimenet); } function eredmenyKiiras($bemenet) { echo " Név Nettó Bér " ; foreach($bemenet as $nev => $net) { echo " ".$nev." ".$net." "; } echo " "; } $nevek = array("Kiss Janos" => , "Nagy Jozsef" => , "Szegeny Bela" => , "Magnas Miska" => , "Gipsz Jakab" => ); berkalkulator2($nevek);

80 Állománykezelés, szöveges fájlok  Szerveren tárolt szöveges állományok (.txt,.ini,.dat)  Mi a helyzet a.doc,.rtf,.pdf kiterjesztésű fájlokkal?  Meghatározott szerkezetük miatt bináris fájlok olvasására, írására előre megírt, erre a célra szolgáló függvényeket kell használni. .txt fájlok kezelési technológiája

81 Kezelési technológia 1. Meg kell nyitni a beolvasandó fájlt! 2. Megkapjuk az u.n. állományleírót. Egy változó amelynek segítségével érik el a függvények a fájlt. 3. Állománymutató használata. Az állomány valamely karakterére mutat.

82 Megnyitás és bezárás fopen() – megnyit ill. létrehoz $file = fopen("adatok/nevek.txt", "r"); Megnyitás módjai: művelet állománymutató kezdeti helyzete r fájl megnyitása olvasásrafájl eleje w fájl megnyitása írásra (létrehozás/ürítés)fájl eleje a fájl megnyitása hozzáfűzésre (létrehozás)fájl vége

83 file_exists() - file létezését ellenőrző függvény A mód befolyásolja a használható műveletek körét. Ha például olvasási módban nyitjuk meg a fájlt, nem engedhetünk rá olyan függvényt, ami írni akarja, és fordítva is igaz. Ha olvasni és írni is akarunk a fájlba, akkor nyissuk meg kétféle módban: $file_r = fopen("file.txt", "r"); $file_w = fopen("file.txt", "a");

84 fclose() - Ha a fájlban elvégeztük a műveleteket amiket akartunk, és nem akarjuk tovább bántani, akkor be szokás zárni. if (file_exists("file.txt")){ $file = fopen("file.txt", "r"); // olvasás fclose($file); } $file = fopen("file.txt", "a"); // írás fclose($file);

85 Olvasás fread() - A függvény fájl olvasására használható. $file = fopen("file.txt", "r"); $content = fread($file, filesize("file.txt")); fclose($file);

86 Jobb példa, létezést is ellenőriz function file_read($filepath){ if (file_exists($filepath)){ $file = fopen($filepath, "r"); $content = fread($file, filesize($filepath)); fclose($file); } else{ $content = false; } return $content; }

87 Írás fwrite() - Ezzel a függvénnyel fájlba tudunk írni. $file = fopen("file.txt", "a"); fwrite($file, "Ez egy tengeri T-rex"); fclose($file);

88 Példa Tegyük fel, hogy a nevek.txt-ben neveket tárolunk mégpedig úgy, hogy a nevek egy | karakterrel vannak elválasztva egymástól. Például legyen ilyen a tartalma: Hörb|Ismeretlen arc|DaniL|Gipsz Jakab Legyen egy űrlap, ami bekér egy nevet, és elküldés után bővíti a nevek listáját a beírt névvel, és kilistázza a neveket. Akkor hozzuk létre az urlap.php-t az alábbi tartalommal: // Írd be a neved:

89 nevek.php dolga, hogy beírja a fájlba az új nevet, amit a felhasználó megadott, majd listázza ki az addig beírt neveket Tömbbé alakítja a beolvasott karakterláncot

90 str_replace() függvény lecseréli a karaktereket // kiírás $nevek = str_replace("|", ", ", $nevek); print $nevek;

91 Az újsor-karakter  háromféle "változata„ van  Windows, Linux, Macintosh operációs rendszerekhez  A Linux a \n escape-karaktert használja erre (egyéb nevei: LF, line feed, soremelés). A Macintosh viszont a \r karaktert (CR, carriage return, kocsivissza). A Windows szerint pedig az újsor így néz ki: \r\n, vagyis egy kocsivissza és egy soremelés karakter egymás után írva. fwrite($file, "\r\n".$_POST["nev"]);

92 1. Példa 1.) A példaprogram nem működik megfelelően, ha kezdetben nincs név a nevek.txt fájlban. Ha így futtatjuk le, az első név előtt is lesz | karakter. Próbáljuk meg ezt kiküszöbölni! Vagyis azt kell megoldani, hogy ha eredetileg üres a fájl, akkor a név elé ne írjunk ki | karaktert.

93 Megoldás $filename = "nevek.txt"; // fájl írása $file = fopen($filename, "a"); if (filesize($filename) === 0){ fwrite($file, $_POST["nev"]); } else{ fwrite($file, "|".$_POST["nev"]); } fclose($file); //...

94 2. Példa Írjuk meg az urlap.php és a nevek.php fájlt arra az esetre, amikor a nevek.txt fájl így néz ki: Ismeretlen arc;user; Az űrlap elküldése után megjelenő kimenet legyen ilyen: Hörb (rang: admin, Ismeretlen arc (rang: user, ) DaniL (rang: admin,

95 Az urlap.php fájl lehet például ilyen: Név: Rang:

96 Az nevek.php-ben először beszúrjuk az új ember adatait, majd kiírjuk az addig összegyűjtött adatokat:

97 ÁllománykezelésFájlműveletek  létrehozás,  törlés,  átnevezés,  áthelyezés és  másolás

98 Fájl létrehozása Fájlt létrehozni a megismert fopen() függvénnyel tudunk, függetlenül attól, hogy szöveges vagy bináris fájlról van-e szó. Ehhez írási vagy hozzáfűzési módban kell meghívni a függvényt: $file = fopen("data/file.doc", "w"); Ekkor a data könyvtárban létrejön a file.doc fájl. Létrehozás után mindjárt írhatunk is a fájlba az fwrite() -tal, mivel a fopen() hívása után meg van nyitva a fájl.

99 Fájl törlése Fájlt törölni az unlink() függvénnyel tudunk. Beadjuk paraméterként a fájl elérési útját, és máris megszabadultunk tőle: unlink("data/file.doc"); A visszatérési érték true ha sikerült a törlés, false ha nem.

100 Fájl áthelyezése és átnevezése Mindkét műveletet a rename() függvénnyel tudjuk végrehajtani. Ezzel a függvénnyel egy fájl teljes elérési útját tudjuk módosítani. Pl. a fájl elérési útja: data/file.doc Ez azt jelenti, hogy a fájl a data könyvtárban van, és a neve file.doc. Az áthelyezés a fájl helyét módosítja, az átnevezés pedig a fájl nevét. Mivel a rename() függvénnyel magát az elérési utat tudjuk módosítani, így a segítségével egyszerre mindkét műveletet elvégezhetjük a fájllal: rename("data/file.doc", "limlom/egyeb/vacak.txt");

101 Nem túl szerencsés dolog az, ha a célfájl már létezik, vagyis már van egy limlom/egyeb/vacak.txt elérési úttal rendelkező fájlunk, és ezt adjuk meg második paraméterként. Ekkor a rename() vagy felülírja a célfájlt, vagy nem csinál semmit, ez főleg az operációs rendszertől függ, ami alatt fut. Így ha biztosra akarunk menni, ellenőrizzük le áthelyezés/átnevezés előtt a célfájlt a file_exists() függvénnyel. Ha felül szeretnénk írni, akkor előbb töröljük az eredetit az unlink() -kel, és utána indítsuk el az áthelyezést! További probléma, hogy ez a függvény nem tud könyvtárat létrehozni, így a fenti példában a limlom/egyeb könyvtárnak már léteznie kell, különben nem sok minden fog történni. Egy könyvtár létezését ugyanúgy a file_exists() függvénnyel tudjuk ellenőrizni.

102 $targetdir = "limlom/egyeb"; $targetname = "vacak.txt"; $file = $targetdir."/".$targetname; if (file_exists($file)){ unlink($file); } if (file_exists($targetdir)){ rename("data/file.doc", $file); }

103 Fájl másolása A másolási művelet annyiban különbözik az áthelyezéstől, hogy az eredeti helyen is megmarad a fájl. Meg persze más a függvény neve. Ezen kívül teljesen ugyanaz a helyzet: copy("data/file.doc", "limlom/egyeb/vacak.txt"); A paraméterek is teljesen ugyanúgy viselkednek. A függvény lemásolja a data könyvtárban lévő file.doc nevű fájlt, és a másolatot berakja a limlom/egyeb könyvtárba vacak.txt néven. A függvény képességei is megegyeznek a rename() függvénnyel, vagyis könyvtárat nem tud létrehozni, és már létező célfájl itt is bezavarhat, ezért hasonló vizsgálatokat érdemes elvégezni a használat előtt, mint ami fent látható, hacsak nem vagyunk biztosak abban, hogy erre nincs szükség.

104 Könyvtárak kezelése Egy könyvtár ugyebár fájlokat és más könyvtárakat tartalmazhat, amiknek nagyjából tetszőleges lehet a nevük (néhány speciális karakter nem használható). Azonban van két különleges állomány minden könyvtárban (egy üres könyvtárban is), a "." (egy pont karakter) és a ".." (két pont karakter). Nem fájlok és nem is könyvtárak, hanem könyvtárakra mutató hivatkozások. A "." állomány az őt tartalmazó könyvtárra hivatkozik, a ".." pedig a könyvtár szülő könyvtárára, vagyis arra, ami a könyvtárfában közvetlen felette van. Pl. html-ben a szülő könyvtár elérése: Kezdőlap

105 Elérési utak: kepek/kep.jpgrelatív./kepek/kep.jpgrelatív c:/wamp/www/phptanfolyam/kepek/kep.jpgabszolút /var/www/phptanfolyam/kepek/kep.jpgabszolút Mindig az adott (böngészőben fututó) fájlhoz képest kell megadni az elérési utat.

106 Könyvtár beolvasása Egy könyvtár beolvasása valamelyest hasonlít egy szöveges fájl beolvasásához. Itt is meg kell nyitni a könyvtárat, ezután olvashatunk belőle, majd a végén be kell zárni. $dir = opendir("images/logos"); // olvasás closedir($dir); Itt nincsenek megnyitási módok, mivel "íráshoz" nem kell megnyitnunk a könyvtárat.

107 Létezik-e? ill. Könyvtár-e? $path = "images/logos"; if (is_dir($path)){ $dir = opendir($path); // olvasás closedir($dir); }

108 Állományok beolvasása egyenként $dir = opendir("images/logos"); while (($name = readdir($dir)) !== false){ print $name."; "; } closedir($dir);.;..; 1.jpg; 2.jpg; saves; watermarks;

109 Állományok kiírása elérési úttal function read_dir_tree($path){ $dir = opendir($path); while (($name = readdir($dir)) !== false){ if ($name != "." && $name != ".." && is_dir($path."/".$name)){ read_dir_tree($path."/".$name); } print $path."/".$name." "; } closedir($dir); }

110 Lehetséges kimenet images/logos/. images/logos/.. images/logos/1.jpg images/logos/2.jpg images/logos/saves/. images/logos/saves/.. images/logos/saves images/logos/watermarks/. images/logos/watermarks/.. images/logos/watermarks/file1.png images/logos/watermarks

111 Könyvtár létrehozása Könyvtárakkal ugyanazokat a műveleteket el lehet végezni, mint a fájlokkal, de sajnos nem mind olyan egyszerű, mert erős korlátozások vannak mindegyikben. Könyvtárat létrehozni az mkdir() függvénnyel lehet az alábbi módon: mkdir("images/logos/new");

112 Könyvtárág létrehozása $path = "images/logos/new"; $dirs = explode("/", $path); $dirname = $dirs[0]; $n = 0; while ($n < count($dirs)){ mkdir($dirname); ++$n; $dirname += "/".$dirs[$n]; }

113 Ha létezik a könyvtárág egy része, ill. könyvtár-e vagy fájl esetén: $path = "images/logos/new"; $dirs = explode("/", $path); $dirname = $dirs[0]; $n = 0; while ($n < count($dirs)){ if (is_file($dirname)){ $success if (!$success) break; } if (!is_dir($dirname)){ mkdir($dirname); } $dirname += "/".$dirs[++$n]; }

114 Könyvtár törlése rmdir("images/logos"); Csak üres könyvtárat lehet törölni (vagyis olyat, amiben csak a "." és ".." hivatkozások vannak meg). Teljes könyvtárág törléséhez ki kell törölni a könyvtárból az összes fájlt.

115 Könyvtár áthelyezése és átnevezése rename("images/logos", "kepek/nagy_kepek/egyeb"); A könyvtárakat áthelyezés esetén a benne lévő fájlokkal és alkönyvtárakkal együtt helyezi át.

116 Könyvtár másolása Nincs semmilyen beépített függvény. Még üres könyvtár másolására se. Úgyhogy a másolást úgy kell megcsinálni, hogy létrehozunk egy üres könyvtárat, majd a forráskönyvtárat beolvassuk, és a fájlokat egyenként átmásoljuk a copy() függvénnyel a célkönyvtárba. function copy_dir($source, $target){ mkdir($target); $sourcedir = opendir($source); while (($name = readdir($sourcedir)) !== false){ $path = $source."/".$name; if ($name == "." || $name == ".."){ continue; } else if (is_dir($path)){ // könyvtár átmásolása copy_dir($path, $target."/".$name); } else{ // fájl átmásolása copy($path, $target."/".$name); } closedir($sourcedir); }

117 Példa Írjunk egy függvényt, ami egy teljes könyvtárágat tud törölni!

118 Megoldás function delete_dir($dirname){ $dir = opendir($dirname); while (($name = readdir($dir)) !== false){ $path = $dirname."/".$name; if ($name == "." || $name == ".."){ continue; } else if (is_dir($path)){ // könyvtár törlése delete_dir($path); } else{ // fájl } closedir($dir); rmdir($dirname); }

119 10 hasznos tanács leendő php fejlesztőknek

120 1.Használd a PHP beépített függvényeit és osztályait 2. Mindig készíts konfigurációs fájlt 3. Mindig takarítsd ki a szemetet az adataidból 4. Kapcsold be a hibaüzeneteket, értesítéseket mikor fejlesztesz 5. Ne tömd tele kommenttel a kódot 6. Legyenek kéznél a kedvenc kódrészleteid 7. Ne pocsékold az időd, használj jó kódszerkesztőt! 8. Használj MySQL adminisztációs tool-t, pl. a phpMyAdmin-t 9. Használj PHP környezeteket 10. Lépj kapcsolatba más PHP fejlesztőkkel


Letölteni ppt "PHP ALAPOK DR. NAGY ENIKŐ PHD. EGYETEMI ADJUNKTUS PTE POLLACK MIHÁLY MŰSZAKI ÉS INFORMATIKAI KAR, MŰSZAKI INFORMATIKA ÉS VILLAMOS INTÉZET, RENDSZER- ÉS."

Hasonló előadás


Google Hirdetések