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

A programozás oktatása WEB-es alkalmazásfejlesztő eszközök segítségével Fábián Zoltán 2006 (az anyag itt elérhető: http://www.szily.hu/photoalbum/2006_Roadshow/2006_suli_webkonferencia_2.ppt)

Hasonló előadás


Az előadások a következő témára: "A programozás oktatása WEB-es alkalmazásfejlesztő eszközök segítségével Fábián Zoltán 2006 (az anyag itt elérhető: http://www.szily.hu/photoalbum/2006_Roadshow/2006_suli_webkonferencia_2.ppt)"— Előadás másolata:

1 A programozás oktatása WEB-es alkalmazásfejlesztő eszközök segítségével
Fábián Zoltán 2006 (az anyag itt elérhető:

2 Előzmények 1982 – Commodore Plusz4 – Basic, Assembly Számítástechnika tanítás (C-64 – BASIC), Pascal, Logo, ELAN, CLipper, C, Java, FazztScript nyelvek 1992 – Világbanki project, programozás oktatása a Szilyben – Pascal nyelv 1999 – Ismerkedés a PHP 3-mal, MySql-lel 2000 – PHP oktatás kezdete a számítástechnikai programozók évfolyamán – szakdolgozatok (PHP+MySQL)

3 Sok diák jelentkezik informatikára az általános iskola után. Miért?
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Sok diák jelentkezik informatikára az általános iskola után. Miért? A számítógép játék A számítógép egy elvarázsolt világ, A számítógép „titkai” megtanulhatók A családban van informatikus, esetleg programozó Korábbi elhivatott tanár Van megfelelő motiváció, de kevés az ismeret

4 Az informatikus diákok csekély része lesz programozó. Miért?
Hozott képességek. Kell algoritmizálási képesség, kreativitás, alkalmazni kell tudni a tanultakat, Motiváltság szorgalom – otthoni munka kitartás – sokáig tart, amíg látványos eredményeket ér el az ember.

5 Az alkotás vágya az alapvető motiváció a programozásra?
Mikor marad fent ez a motiváció? Vannak viszonylag gyors sikerek, látványos előrehaladás Olyan alkalmazások készítésének a képessége, amelyeket nap, mint nap használ Látványos alkalmazások elkészítésének képessége

6 Mi a helyzet középiskolában és az OKJ-s szakmákban?
Mi info tanárok mindannyian a Pascalon szocializálódtunk! A középszintű Informatika érettséginek nem része a programozás, emelt szinten elegendő a Pascal nyelv ismerete Informatikai alapismeretek érettségihez középszinten és emelt szinten elegendő a Pascal ismerete OKJ középfokú programozó vizsgát lehet tenni Pascallal (Igaz kellene még egy nyelv, de a pontszám elegendő) A képzési idő nem elég a jó programozási gyakorlat elsajátítására

7 Ma már a Pascal nem motivál eléggé
Nem grafikus – csak Delphi esetén vagy BGI grafikával Nincs képkezelés, gombok, stb... Kevés ahhoz, hogy olyan játékot írjon a gyerek, mint amit szokott játszani Nincs köze az Internethez A számítógép szerepe mára megváltozott, ablak egy kitágult világra

8 Megoldás Internetes technológiák használata!
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Megoldás Internetes technológiák használata!

9 Vannak gyors sikerek! <?php print(”A hello World!”); ?>
Gyorsan fejleszthető A változók használata a típusok keveredése miatt nem túl szigorú Elágazások, ciklusok használata érthető, világos

10 Látványos előrehaladás
Az alkalmazásokkal egyszerűen HTML és PHP keverésével látványos megoldások érhetők el

11 Olyan alkalmazások készítésének a képessége, amelyeket nap, mint nap használ
Az internet használata során a diákok látják, hogy a site-ok jelentős része php alapú. Viszonylag könnyen lehet készíteni alkalmazásokat, amelyek hasonlítanak nagy példaképekre.

12 Látványos alkalmazások elkészítésének képessége
Ha egy diák az Internetről levesz egy-egy ingyenes DHTML megoldást, akkor látványossá teheti az oldalt.

13 Milyen rendszer felel meg az oktatás követelményeinek?
Lehessen interaktív programot írni Legyenek alapvető struktúrák (szekvencia, iteráció, szelekció) Függvény, eljárás hívás Sokféle egyszerű adattípus Összetett adattípusok: tömbök, rekordok Globális és lokális változók Paraméterátadás: cím és érték szerint is Szövegkezelő függvények Fájlkezelés OOP

14 Esélyes technológiák Java (kliens és szerver oldal is)
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Esélyes technológiák Java (kliens és szerver oldal is) Javascript (kliens oldal) PHP (szerver oldal)

15 JAVA Appletekre és kliens alkalmazásokra tökéletesen alkalmas
Adattípusok széles választéka áll rendelkezésre Globális, lokális változók használhatók Paraméterátadás: cím és érték szerint is Függvény és eljárás Szigorú programszerkezet. csak formai megfelelőség esetén fordul le a program Fájlkezelés kliens alkalmazások esetén Grafika, képkezelés Vezérlési szerkezetek széles választéka OOP Kezdőnyelvnek nehéz, mert teljesen OOP centrikus!

16 Javascript Majdnem mindenben megfelel Fájlkezelés nincs a böngészőben
A tömbök kissé „furcsán” viselkednek Futási idejű hibaellenőrzés nehézkes

17 PHP Jó választás Mindennek megfelel, kivéve Erősségek
Nem túl szigorú a programszerkezet, futási időben történik a hibaellenőrzés Nem interaktív –azért ez megoldható Szerveroldali (majdnem csak) OOP majdnem teljes a PHP5-ben Erősségek Sok szövegkezelő függvény Sok fájlkezelő függvény Jó választás

18 Jó-e a PHP kezdőnyelvnek?
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Jó-e a PHP kezdőnyelvnek? <?php print(”Hello Word!”); ?> Az elején egyszerű, természetes, a tanulással együtt lehet összetett alkalmazásokat írni. Alapesetben nem interaktív

19 Milyen feltételek kellenek a tanításhoz (ha lehet olcsón)?
Hardver Egy mai átlagos PC, lehet kicsit régibb is. MS Windows 2000, Windows XP vagy Linux op. rendszer, azaz platform független rendszer. Az eszközök ingyenesek Jegyzettömb, vagy valami erősebb ASCII editor vagy komolyabb alkalmazásként, PSPad Apache és később MySQL Böngésző – IE6 vagy Firefox 1.5+

20 Komolyabb eszközök WAMP – Windows Apache MySQL PHP (XAMP, BigApache, Uniserver, stb) PHP Eclipse platformfüggetlen IDE – JAVA-ra épül Zend IDE – minden ami a fejlesztéshez kell (Editor, Debugger, Profiler) CodeCharge – későbbi előadás

21 A fenti dolgokat megtanítjuk, vagy átvesszük az oktatás előtt
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Előismeretek Stabil, de egyszerű HTML alapok kellenek A HTML oldal szerkezete Néhány alapvető tag: <p>,<br>, <table>,<th>,<tr>,<td>, A formázáshoz szükséges paraméterek <FORM> Jó, ha van stíluslap, CSS tudás A fenti dolgokat megtanítjuk, vagy átvesszük az oktatás előtt

22 A kliens-szerver architektúra koncepció lényegét elmagyarázom
A fejlesztői gépen a kliens és szerver egy és ugyanaz lehet

23 Első lépések – a PHP kód, és a HTML kód viszonya
A PHP program kimenete HTML kód, amit a böngésző értelmez! Sulykolni kell egyszerű kiírást és formázást létrehozó példákon keresztül Ezalatt szintaktikai alapismeretek a PHP-ban. Ha második nyelv, akkor jelmondat: Mint a C-ben (majdnem)! Lássunk néhány példát!

24 A majdnem „Hello world!” PHP-ben.
<html> <head> <title>Hello world</title> </head> <body> Hello world! </body> </html> Ha a PHP fájl csak HTML kódból áll, akkor, mintha nem is lenne PHP. A PHP értelmező beolvassa a fájlt, majd kiküldi a szervernek változatlan formában.

25 A „Hello world!” PHP-ben.
<html> <head> <title>Hello world</title> </head> <body> <?php echo ”Hello world!”; ?> </body> </html> A PHP nyitó tagtől a zárótagig az interpreter értelmezi a kódot. A kimenet a webszerverhez kerül.

26 Alternatív kiíró utasítások
helloworld2.php <html> <head> <title>Hello world</title> </head> <body> <?php echo ”Ez is jó lesz kiírásra”; print (”Hello world!<br>”); printf (”%6d a sorszáma”, 1984); ?> </body> </html> A print() többször használatos, sőt van a c-hez hasonló printf() is, ugyanolyan formázó stringek használatával. Az egyszerű példákban megjelenítünk HTML tag-eket is a PHP segítségével

27 Változók és típusok bevezetése
Ha a változók és adattípusok fogalmát ismerik a diákok, akkor átismételjük a PHP-ben lévőket. Ha nem ismerik azokat, akkor bevezetjük az egyszerű típusokat. A String típus hová soroljuk? Szerintem az egyszerűek közé. Változók használatának szintaktikai szabályai A középiskolás korosztály esetén célszerű a példákon keresztül megközelíteni a programozás tanulását, és így eljutni az elméletig.

28 A PHP típusos nyelv, de … A változó neve mindig $ jellel kezdődik. A név kis és nagybetű érzékeny! A változó típusa értékadáskor dől el. Pl.: $s = ”Szia, ez egy string”; // string $d = 123; // egész szám $f = ; // float $b = true; // logikai típus $t = array(); // Tömb típus $fp = fopen(”C:/valami.txt”,”r”); // erőforrás típus $o = new semmi(); // osztályokról később Gyakori az automatikus típuskonverzió: Echo $s . ” : ” . $d; // Stringre konvertál minden kiírandót // . A stringek összefűzésére használt jel

29 Operátorok használata
Stringek összefűzése Matematikai alapműveletek <?php $x = 5; $y = 10; $z = $x.”*”.$y.” eredménye:”.($x*$y).” lesz”; print($z); ?>

30 Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Szelekció Az elején nem törekszünk minden vezérlési szerkezet megismertetésére <?php $x = rand(0,100); if($x <50){ print(” Nem nyert”); }else{ print(” Ön nyert!”); } ?>

31 Szelekció 2. Persze a többi szerkezetet is megtanítjuk később
if( feltétel){ utasíás1; Utasítás2; }elseif(feltétel){ alternatív_utasítás1; alternatív_utasítás2; }else{ alternatív_2utasítás1; alternatív_2utasítás2; } Switch(ertek){ case kons1 : utasítás; break; case konst2 : ……. default }

32 Konstansok, default értékek
Konstans definiálása Define(”KNEV”, érték); Ha nem tudom, hogy korábban már definiáltam-e egy konstanst, akkor adok neki egy default értéket if( !defined(”KNEV”) ) define(”KNEV”, ”default érték”); Ha nem tudom, hogy egy változó már létezik-e, azt is megvizsgálhatom és adhatok neki default értéket. if(!isset($a) ) $a = 1112; // default érték; Ha tudni akarom hogy létezik-e a változó vagy az értéke ... if (!isset($a) || ( $a == 0 ) ) $a = 1;

33 Mintapélda a ciklus használatának bemutatására
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Iteráció Mintapélda a ciklus használatának bemutatására <?php for($i=0; $i< 100; $i++){ print($i.”<br>”); } print(”<table>”); print(”<tr>”); print(”<td>”.$i.”</td>”); print(”<td>”.($i+100).”</td>”); print(”</tr>”); print(”</table>”); ?>

34 Iteráció Mintapélda ciklusok alkalmazására: $i = 0; $x = 0; while( $x> 80 && $i < 100 ){ $x = rand (1,100) print($i.” : ”.$x); $i++; } $i = 0 do{  echo $i; } while ($i > 0); Ezekre a ciklusokra a tanulás során a programozási tételeknél lesz szükség

35 Tömbök Bevezetem a tömböket, mint egyszerű adatok sorozatát.
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Tömbök Bevezetem a tömböket, mint egyszerű adatok sorozatát. Index, tömbelem van stb... Csak egy dimenziós tömbök Példák a for ciklus és a tömbök együttműködésére ... itt most nem részletezem

36 Iteráció II. A foreach speciális ciklus, később van jelentősége
$t = array("Pista", "géza"); foreach($t AS $i => $e){ print("index: "); print($i); print(", Érték: "); print($e); print("<br>"); } A futás eredménye: Index: 0, Érték: Pista Index: 1, Érték: géza

37 Eljárások, függvények Tartalom Motiváció Irány az internet
Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Eljárások, függvények Hol deklarálhatom, és mikor érhetem el. Paraméterátadás (Érték szerinti, default érték, cím szerint) Eljárás a PHP-ban paraméterekkel function procnev($a, $b = 123){ echo $a . $b; } Függvény átadott paraméterekkel function fnev($a){ $a = $a +2; return $a; Eljárás cím szerinti paraméterátadással function fnev ( &$a ){ $a = $a *2;

38 Változók hatásköre és globalitása
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Változók hatásköre és globalitása A php oldalon létrejövő változók globálisak A függvények/eljárásokon belül deklarált minden változó lokális. Ha a globális névtérből importálhatok változókat Léteznek szuperglobális változók, amelyek a PHP kód minden részérő elérhetők.

39 Nézzünk egy példát <?php $a = 1118; //Globális változók $b = 123;
$c = 9999; $GLOBALS[”hello”] = ”Ez szuperglobális” //Mi ez tömb? Function fn(){ global $a; // Importálom a globális névtérből, // tehát használhatom a függvényen belül $c = ”Ez lokális változó”; $a ++; //A globális változó értékét növeltem $szoveg = $GLOBALS[”hello”]; echo $szoveg. } ?>

40 Egy kis kitérő - GET metódus
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Ha egy HTML oldalon van egy link, és arra kattintasz, akkor paramétert adsz át a következő PHP oldalnak: <a href=” Ez itt a link </a> Ez a paraméterátadás GET metódussal zajlik. A meghívott oldalon automatikusan létrejön az alábbi változó: $_GET[”sz”] és értéke 123 lesz! getpelda.php <?php Echo ”Ezt kaptam: ” . $_GET[”sz”] . ”<br>”; echo ”Meg ezt: ” . $_GET[”ok”] ?>

41 POST metódus bevezetése - interaktivitás
A HTML oldalon lévő űrlap elküldi az adatokat egy másik oldalnak POST metódussal. Index.html <form action=”postpelda.php” method=”POST”> <input type=”text” name=”name”> <input type=”checkbox” name=”chk”> <input type=”submit” name=”ok” value=”ok”> </form> A meghívott oldalon létrejön automatikusan a $_POST tömb és azt feldolgozzuk postpelda.php <?php foreach( $_POST AS $i => $e){ echo ”index: ” . $i . ”, Érték: ”. $e . ”<br>”; } ?> Önmagukat meghívó oldalakat alkalmazhatunk!

42 Asszociatív tömbök, típusok keveredése
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Asszociatív tömbök, típusok keveredése A tömbelemeket tetszőleges típusú értékekkel indexelhetem. A tömb elemeinek indexét tetszőlegesen keverhetem. A tömbökben tárolt adatok típusa keveredhet! $a[”gj”] = 123; $a[1] = ”Ez fura”; A tömbökben tárolhatok tömböket A tömbök mérete dinamikusan változhat. $b = array(”Hi”, 1, true, array(11, 22) ); $b[4] = ”Ez is bekerül!”; A foreach ciklust igazából arra lehet jól használni, hogy feldolgozzunk asszociatív tömböket!

43 Szövegkezelés A bőség zavara (97 függvény) A fontosabbak: substr(),
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás A bőség zavara (97 függvény) A fontosabbak: substr(), str_replace(), strlen(), pos(), strpos() reguláris kifejezések... Mintafeladatok: Állapítsa meg, hogy egy szövegben szerepel-e egy adott karakter, és ha igen, akkor hol szerepel? Cserélje ki egy szövegben előforduló minden címben jelet #-ra

44 Fájlkezelés Fájlok kezelése C szintaktika szerint,
Tartalom Motiváció Irány az internet Eszközválasztás Jó-e a PHP PHP oktatási tematika Első lépések Szelekció Iteráció Tömbök Eljárás, Függ. Változók GET, POST Assz. tömbök Szövegkezelés Fájlkezelés Folytatás Fájlok kezelése C szintaktika szerint, fopen(),fclose(), feof(),fgets(), fgetc() fseek(), fwrite() Fájlok ahogy én szeretem $str = file_get_contents(”file.txt”) file_put_contents(”file.txt”,$str) File() => array Fájlrendszer műveletek is_file(), is_dir(), file_exists(), dir() dirname(), pathinfo() WEB-es fájlműveletek, relatív címzés sulykolása, $_SERVER["DOCUMENT_ROOT"] $_SERVER[”PHP_SELF"] __FILE__

45 Fájlkezelés mintafeladatok
Készíts programot, amely a szerveren elmenti minden letöltő IP címét, és a böngészőjének típusát, majd készíts programot, amely kiértékeli a látogatottsági adatokat Készítsd el egy könyvtárban lévő fájlok listáját! Jelenítsd meg a fájlok méretét is! Készítsd el egy könyvtárban lévő fájlok listáját úgy hogy a fájlokat az internetről le lehessen tölteni. A fájl típusának megfelelő ikonok jelenjenek meg a fájl neve mellett! Egy speciálisan formázott szövegfájlban tároljuk a könyvtárban lévő fényképek leírásait. Írj programot, amely kiírja a képeket egy weboldalra és hozzájuk fűzi a szövegeket. Készíts programot, amellyel rekurzívan be lehet járni a szerver könyvtárstruktúráját

46 Fájlok includolása Miért kell – újrafelhasználható kód, struktúrált programozás include(), include_once() require(), require_once()

47 A szuperglobális tömbök
Ez a téma átvezet a következő év anyagára. $_GET – A GET metódussal átadott paraméterek tömbje $_POST – a POST-tal átadott paraméterek tömbje $_COOKIE – a php oldal meghívásakor a böngészőktől érkező cookie-k tömbje $_SESSION – a munkamenet azonosítók tömbje (később) $_SERVER – a webszerver környezeti paramétereit tároló tömb $_ENV – az operációs rendszer környezeti változóit tároló tömb $_FILES – A html űrlapról feltöltött file adatait tároló tömb $_REQUEST – A böngésző által elküldött kérés paramétereit tartalmazó tömb $GLOBALS – ebben minden benne van

48 Egy nagyon sűrű tanév vége
Körülbelül idáig juthatnak el egy tanév alatt a diákok egy tanév alatt heti 3-4 órában tanulva a programozást a semmiről A tanév alatt természetesen algoritmusokat írunk, amikor csak lehet Programozási tételek szerepelnek azután, miután a ciklusok, eljárások és függvények már ismertek Otthoni munka fontos. Ma már a diákok jelentős részének van otthon számítógépe – lehet HF-et adni nekik. Akinek nincsen, az iskolában kaphat gépidőt.

49 Folytatás – a második év
Programok tervezésének ismerete - A tanévben adatbázisokkal kapcsolatos ismeretek OOP programozás, és azok alkalmazása Modern programozási módszertan Kliens oldali megoldások (CSS, DOM, Javascript, Java, XML, AJAX)

50 Köszönöm figyelmüket! Várom kérdéseiket?

51 Adatbázisok kezelése? 1. „Fapados” módszer
A program kapcsolódik az adatbázishoz Kiválasztja a célzott adatbázist Elküld egy SQL lekérdezést az adatbázisra vonatkozólag az adatbázis szervernek Az eredmény rekordszetet feldolgozza Kiírja az eredményt. Nézzük:

52 Kapcsolat létrehozása
<?php $kapcsolat = mysql_connect("localhost", "felhasználónév", "titok"); if (!$kapcsolat) {     die('Nem lehet csatlakozni ' . mysql_error())); } echo('A csatlakozás sikerült'); mysql_close($kapcsolat); ?> A lefutás után a kapcsolat megszakad a PHP és az adatbázis szerver között. A kapcsolat felépítése a leglassabb az adatbázis műveletek között. Perzisztens kapcsolat időtakarékosabb, mert meglévő kapcsolatot használ az új kapcsolat helyett: mysql_connect() helyett mysql_pconnect(). A $kapcsolat változó típusa erőforrás típus (valójában a megadott memória területre mutató pointer) A mysql kapcsolat hibáját le lehet kezelni: mysql_error(); A kapcsolatot le is lehet zárni: mysql_close(). az oldal lefutásakor a kapcsolat lezárul

53 Az adatbázis kiválasztása
<?php $adatbazis_kivalasztva = mysql_select_db('szily', $kapcsolat); if (!$adatbazis_kivalasztva) { die('Nem tudom kiválasztani a szily adatbázist: ' . mysql_error()) } ?> Le lehet kérdezni az adatbázisok listáját is. És még sok egyéb adatbázis-kezelő függvény van a PHP-ben, de erre most nem térek ki.

54 SQL Lekérdezés elküldése
<?php $kapcsolat = mysql_connect("localhost", "felhasználónév", "titok"); if (!$kapcsolat) { die('Nem lehet csatlakozni ' . mysql_error())); } echo('A csatlakozás sikerült'); $adatbazis_kivalasztva = mysql_select_db('szily', $kapcsolat); if (!$adatbazis_kivalasztva) { die('Nem tudom kiválasztani az ize adatbázist: ' . mysql_error()) $eredmeny = mysql_query ("SELECT * FROM nevsor"); if (!$eredmeny) {   die('Érvénytelen lekérdezés:' . mysql_error()); ?> A lekérdezés eredménye egy rekordszet, amit fel kell dolgoznunk ciklussal, vagy egyéb módon.

55 Az eredmény feldolgozása és kiírása táblázatban egy html oldalra
<?php $kapcsolat = mysql_connect("localhost", "felhasználónév", "titok"); $adatbazis_kivalasztva = mysql_select_db(‘szily', $kapcsolat); $eredmeny = mysql_query ("SELECT * FROM nevsor"); echo ”<table>”; echo ”<tr><td>név</td><td>cím</td><td>Életkor</td></tr>”; while ($sor = mysql_fetch_array($eredmeny)) { echo ”<tr>”; echo ” <td>”. $sor['nev'] .” </td>”; echo ” <td>”. $sor['cim'] .” </td>” echo ” <td>”. $sor['kor'] . ” </td>”; echo ”</tr>”; } echo ”</table>”; mysql_close(); ?> A mysql_fetch_array() egy rekord adatait beteszi egy asszociatív tömbbe. A while ciklussal addig olvassuk a rekordszet eredménysorokat, amíg vannak még rekordok. Ha nincs több rekord, akkor a $sor értéke false és vége a ciklusnak.

56 Adatok módosítása egy adatbázisban - Törlés
Egy oldalon rábökünk egy linkre vagy egy nyomógombra, ami meghív egy másik oldalt, ahol a megfelelő SQL utasítás lefut végrehajtja a szerver. <a href=”torol.php?id=100”>Törlés</a> Torol.php <?php $kapcsolat = mysql_connect("localhost", "felhasználónév", "titok"); $adatbazis_kivalasztva = mysql_select_db(‘szily', $kapcsolat); $e = mysql_query (”DEL * FROM nevsor WHERE id=”.$_GET[”id”]); If ($e){ echo ”A törlés sikerült”; }else{ echo ”A törlés nem sikerült”; } mysql_close(); ?> A kódot javíthatjuk a korábbiakban tanult isset() fv. segítségével.

57 Módosítás, Új sor beszúrása, ugyanezen az elven, de nagyon macerás… egyszerűbben lehet-e?
Minden oldalon ugyanazokat a műveleteket kell elvégezni (kapcsolódás, adatbázis választás, stb…) => valami include kellene <?php Include(”adatbazis.php”); $e = mysql_query (”DEL * FROM nevsor WHERE id=”.$_GET[”id”]); If ($e){ echo ”A törlés sikerült”; }else{ echo ”A törlés nem sikerült”; } ?> A kapcsolódásért felelős programrészleteket minden oldalon beincludoljuk a programba, Más library jellegű eljárásokat és függvényeket is készíthetünk, betesszük őket az include fájlba és a megfelelő oldalon beincludoljuk.

58 Még mindig sokat kell dolgozni!
Készítsünk olyan előre gyártott függvényt, amely a gyakori műveleteket (lekérdezés, beszúrás, módosítás, törlés) eljárás formájában hajtja vége, megfelelő paraméterek átvételével A lekérdezés eredményét a függvény eleve tömb formájában adja vissza. Később mutatok ilyet...

59 Adatbázis függetlenség
A különböző adatbázis-kezelőkhöz nem pontosan ugyanazok a függvények tartoznak Kell egy adatbázis-absztrakció, amely eltakarja az adatbázis-kezelők közti különbséget Létező lehetőségek: PEAR – A PHP-hez fejlesztett hivatalos programcsomag – nagy falat, de sok mindent tud ADODB Library – adatbázis absztrakciós felület, viszonlyag egyszerűbben el lehet sajátítani PHP 5.1.x – PDO, Új hivatalos adatbázis absztrakciós réteg. Hogyan működnek ezek?

60 Az adatbázis absztrakciós rétegek működése
A mi PHP kódunk adatbázis típus, kapcs. Id, SQL ↓ ↑ A lekérdezés eredménye Absztrakciós réteg (pl. ADODB, PDO, PERL) ↓↑ Php_MYSQL driver Php_ODBC driver Php_MSSQL driver Php_Oracle driver MySql szerver Tetszőleges ODBC driver Microsoft SQL szerver Oracle szerver

61 OOP alapú adatbázis kezelés
A PHP kód az absztrakt osztályok metódusait hívja A metódusok paraméterei A metódusok visszaadott eredményei Az adatbázisunk tábláinak struktúrája ~ hasonlít az osztálystruktúrára adatbázis típus, kapcs. Id, SQL ↓ ↑ A lekérdezés eredménye Absztrakciós réteg (pl. ADODB, PDO, PERL) ↓↑ Php_MYSQL driver Php_ODBC driver Php_MSSQL driver Php_Oracle driver Mysql szerver Tetszőleges ODBC driver Microsoft SQL szerver Oracle szerver Később ilyet láthatunk, tervezést igényel

62 Alkalmazásfejlesztés Model-View-Controler elképzelés
Az alkalmazások további rétegezése Model => az adatbázis modell, eddig erről volt szó View => Az adatbázis adatainak megjelenítését vezérli – az adatbázis absztrakcióra építjük. Kellhet hozzá kliens oldali komponens is. (Javascript, Flash - ActionScript, Java, CSS) Controller => A felhasználó tevékenységére hogyan reagáljon a felület – eseménykezelés a böngészőben Kliens oldali megoldások kellenek (Javascript, CSS, ActionScript, Java Applet, AJAX, stb…)

63 Azonosítás, beléptetés, session
A user a HTML űrlapon beírja a usernév, password párost Elküldi a szervernek az adatokat, amit az oldal ellenőriz az adatbázis alapján Később már csak a belépettség állapotát ellenőrizzük. Mielőtt ezt megnéznénk egy keveset halljunk a http protokollról

64 HTTP protokoll gyorstalpaló – Cookie-k
GET vagy POST kéréskor először a kérés headerei mennek a szerverhez. A headerek közül az egyik legfontosabb a Cookie. A cookie a böngészőn tárolt max. 4 kb-nyi adat. A Netscape vezette be. A cookie-kat a látogató azonosításra, számlálásra használják, stb... A cookie-t a web szerver elküldi a PHP-nak, amit azzal fel lehet dolgozni. A PHP oldal a először a válasz header-eit küldi el, amihez a webszerver hozzáteszi a magáét A PHP oldal a HTML tartalmat csak ezután küldheti ki a szervernek

65 Cookie kezelés példa – hányszor látogatta az oldalt
<?php if(isset($_COOKIE["counter"])) // Elküldte-e a counter nevű cookie-t $counter = $_COOKIE["counter"]; //Ha igen, akkor megjegyezzük az értéket else $counter = 0; //Még nem volt az oldalon $counter ++; //Növeljük a látogatottság számlálót if(isset($_POST["nev"])) $nev = $_POST["nev"]; //Ha beírta az adatokat, akkor majd megjelenítjük else $nev = ""; if(isset($_POST["pwd"])) $pwd = $_POST["pwd"]; else $pwd = ""; setcookie("counter",$counter,time()+30*24*60*60); // Beállítom a cookie értékét és elküldöm a cookie-t a // böngészőnek. A cookie lejárata 1 hónap ?> <HTML> <HEAD><TITLE>Cookieteszt</TITLE></HEAD> <BODY> <FORM METHOD="POST" ACTION=”cookietest.php"> <INPUT TYPE="text" NAME="nev" VALUE="<?php print($nev); ?>"><br> <INPUT TYPE="password" NAME="pwd"> <INPUT TYPE="submit"> </FORM> Belépések száma: <?php print($counter);?><br> </BODY> </HTML>

66 Session-ök kezelése 1. A kliens oldalon tilos éles információt tárolni - > a szerveren kell olyan helyen, amit a PHP tud olvasni, de a webről nem elérhető A session olyan fájl, amiben a PHP oldalak adatokat tárolhatnak. Ezek a többi oldalon is elérhetők (globális értékek) A tárolás módja: az adatok serializációja (Az értékeket átalakítjuk speciális stringgé, $str = serialize($tomb) és vissza $tomb = unserialize($_SESSION[”tomb”])) pl.: col|a:4:{ i:0;a:3:{s:5:"order";i:10;s:4:"view";s:1:"1";s:5:"width";i:0;} i:1;a:3:{s:5:"order";i:9;s:4:"view";s:1:"1";s:5:"width";i:10;} i:2;a:3:{s:5:"order";i:8;s:4:"view";s:1:"1";s:5:"width";i:20;} i:3;a:3:{s:5:"order";i:7;s:4:"view";s:1:"1";s:5:"width";i:30;} i:4;a:3:{s:5:"order";i:6;s:4:"view";s:1:"1";s:5:"width";i:40;} } A session véletlenszerű nevet kap, valami ilyet és ilyen nevű fájlba kerülnek az adatok. pl.: sess_ade7acbe988ecddbfbed16166ded0e54 A fájlnevet cookieban elküldi a szerver a böngészőnek. A cookie lejárata azonnali, tehát ha a user kilép a böngészőből a cookie érvénytelenné válik – így a kliens oldalra kerülő információ segítségével sem lehet hozzájutni a sessionben tárolt adatokhoz.

67 Session kezelés 2. session.php <?php
session_start(); //megnyitom a sessiont, ha nincsen, akkor létrehozok egyet if(isset($_SESSION[”szamlalo”])) $i = $_SESSION[”szamlalo”] + 1; else $i = 1; echo ”Ennyi oldalon át volt session kezelés: ”,$i.”<br>” $_SESSION[”szamlalo”] = $t; //letároljuk a megőrzendő adatot session_write_close(); ?> <a href=”session.php”>Kattints ide</a> A session megnyitása előtt semmiféle html tartalom nem kerülhet a kimenetre, mivel a session-cookie is header adat, aminek a html tartalom előtt kell kikerülnie. Ha nem zárjuk le az oldalon a session-t, akkor a rendszer automatikusan lezárja, mihelyt lefutott a script A lezárás után a $_SESSION[] tartalmát már nem lehet cookie-ba írni.

68 Beléptető rendszer <?php $name =""; $pwd =""; Session_start();
if(!isset($_SESSION["logged_in"])) $_SESSION["logged_in"] = False; If (!$_SESSION["logged_in"]){ if( isset($_POST["name"]) && isset($_POST["pwd"])){ //Ha később login formot használunk POST-tal $name = $_POST["name"]; $name = $PHP_AUTH_USER; $pwd = $PHP_AUTH_PW; //A jelszó és usernév ellenőrzése adatbázisból mysql_connect("hostname", "username", "password") or die ("Unable to connect to database."); mysql_select_db("Userlista") or die ("Unable to select database."); $sql = "SELECT * FROM users WHERE username='$name' and password='$pwd'"; $result = mysql_query($sql); // Ha az eredménynek 0 sora van => nincs ilyen user és jelszó // ha 1, akkor van $num = mysql_numrows($result); if($num>0){ //Ide kell betenni a jelszóellenőrzést $_SESSION["logged_in"] = True; //vagy sima text vagy mysql lekérdezés stb... } If (!($_SESSION["logged_in"])){ //Authentikálás a szevrer segítségével header('WWW-Authenticate: Basic realm="Beléptetés!"'); header('HTTP/ Unauthorized'); exit; ?> A rendszer csak a beléptetés tényét tárolja, de sem a usernevet, sem a jelszót nem szabad biztonsági okokból a sessionben tárolni.

69 E-mailek küldése (kicsit hosszú a kód)
Lehetne fapadosan is, de miért ne tegyük elegánsabban, pl. adatbázisból véve a címeket? include("phpMailer/class.phpmailer.php"); set_time_limit(20*60); $maxmail = 220; $con = mysql_connect('localhost','fz',‘jelszo') or die("Nincs kapcsoalt az adatbázissal"); if(!mysql_select_db("roadshow",$con)) die("Nem sikerült az adatbázishoz csatlakozni"); $sql = "SELECT id, mail, Name, elment, ismeros, nomail FROM mailcimek WHERE mail NOT IN (SELECT FROM kizarva) ORDER BY mail"; $arr = array(); $rs = mysql_query($sql); $i = 0; while($sor = mysql_fetch_assoc($rs)){ if(!$sor['elment']){ $arr[$i] = $sor; $i++; } // levelek küldése $Logfilename = "./webkonferencia.log"; $log = file_get_contents($Logfilename); for($j = 0;$j<count($arr) && $j<$maxmail ; $j++){ $mail = new phpmailer(); $mail->IsSMTP(); // set mailer to use SMTP $mail->Hostname = " // SMPT szerver címe $mail->Host = " "; // SMPT szerver címe $mail->IsHTML(true); // set format to HTML $mail->SMTPAuth = false; // turn on SMTP authentication $mail->From = // Küldő cime $mail->FromName = "Fábián Zoltán"; // Én vagyok $mail->AddAddress($arr[$j]['mail']); //Cím hozzáadása $mail->Subject = "Web Konferencia Szily Kálmán RoadShow 2006"; $mail->Body = file_get_contents("level_ism.html"); $mail->AltBody = file_get_contents("level_ism.txt"); if($mail->Send()){ $logmail .= " - levellkuldes sikeres volt\n"; $sqlupdate = "UPDATE mailcimek SET elment = 1 WHERE id = ".$arr[$j]["id"]." "; $db=mysql_query($sqlupdate); }else{ $logmail .= " - levélküldés nem sikerült\n"; print($logmail); $log .= $logmail; file_put_contents($Logfilename,$log);

70 MVC – sablon rendszer használata - Smarty
Válasszuk szét a programozót és a designert! design színek, képek, stílusok, azaz html tartalom. Program – tartalom A két fél lehetőleg ne avatkozzon egymás dolgaiba, de kell kapcsolódási felület => sablon A sablon olyan fájl, ami HTML kódot tartalmaz + a tartalom beszúrásához jelölőket. A jelölő legyen például {$valtozonev} A jelölő lehet más is ...

71 Smarty 2 – egy portál csontváza
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>CMS rendszer - skeleton</TITLE> </HEAD> <BODY> <TABLE> <TR> <TD colspan=2>{$fejlec} </TD> </TR> <TD>{$menu}</TD><TD>{$tartalom}</TD> </TABLE> </BODY> </HTML>

72 Smarty3 – a csontváz motorja, a PHP kód
// ---- Aktuális file elérési útvonala define("PATH", realpath(dirname(__FILE__))); define("SMARTY_ROOT","D:/wwwroot/diak/2005inf/_lib/smarty/"); // A smartyhoz szükséges beállítások define("SMARTY_DIR", "D:/wwwroot/diak/2005inf/_lib/smarty/libs/"); include("D:/wwwroot/diak/2005inf/_lib/smarty/libs/Smarty.class.php"); // Smarty beszerkesztése $smarty = new Smarty(); $smarty->template_dir = SMARTY_ROOT."templates_c/"; // Smarty szükséges könyvtárai $smarty->compile_dir = SMARTY_ROOT."templates_c/"; $smarty->config_dir = SMARTY_ROOT."templates_c/"; $smarty->cache_dir = SMARTY_ROOT."templates_c/"; // $fejlec = "Fejléc tartalma"; $menu = "<a href='index.php?x=1'>Elso</a><br>\n"; $menu .= "<a href='index.php?x=2'>Kettes</a><br>\n"; $menu .= "<a href='index.php?x=3'>Harmas</a><br>\n"; $menu .= "<a href='index.php?x=4'>Négyes</a><br>\n"; $x = isset($_GET["x"]) ? $_GET["x"] :""; if(!empty($x)){ $tartalom = "<div style='height:".($x*200)."px; width:".($x*250)."px'>”; $tartalom .= „Ez függ a menüben átadott paramétertől: ".$x."</div>"; }else{ $tartalom = "Ez itt a tartalom"; } // $smarty->assign("fejlec",$fejlec); $smarty->assign("menu",$menu); $smarty->assign("tartalom",$tartalom); $smarty->display(”./cms.tpl"); ?>

73 Fájlok feltöltése Feltolt.html
<FORM method="post" action=”feltolt.php" enctype="multipart/form-data"> Fájlnév <input type="file" size=50 title="(Max. méret 5M)"><br> <input type="submit" value="Ment" ><br> <input type="submit" value="Mégsem"> </FORM> feltolt.php <?php ini_set("max_execution_time", 300); //sokáig tarthat a fájlfeltöltés reset($_FILES); list($key,$up) = each($_FILES); if(!empty($up["name"])){$errorcode = $up['error']; switch($errorcode){ case 1: case 2: $errmsg = "Fájl túl nagy. ".ini_get("upload_max_filesize").") ".msg("FILENAME").": "; break; case 3: $errmsg = ”Részben feltöltött fájl”; break; case 4: $errmsg = ”Nincs feltöltött fájl"; break; default: $errmsg = ”Fájl feltöltve”; move_uploaded_file($up["tmp_name"],”C:/valahova/".$up["name"]); } print($errmsg); ?> A példában egy fájlt töltünk fel, de tetszőleges számút is lehet megfelelő módon. A fájlfeltöltésnél vigyázni kel arra, hogy a feltöltött fájlt ne lehessen elérni közvetlenül a webszerverről, illetve szűrni kell, hogy milyen típusú fájlokat lehessen feltölteni.

74 Előre definiált library-k - PEAR
Előre definiált osztályok százai, a PHP által hivatalosan támogatott. Minőségbiztosított kód! Egyszerű példa – konfigurációs fájl egy alkalmazáshoz <?php require_once('Config.php'); $conf =& new Config_Container('section', 'conf'); $conf_DB =& $conf->createSection('DB'); $conf_DB->createDirective('type', 'mysql'); $conf_DB->createDirective('host', 'localhost'); $conf_DB->createDirective('user', 'root'); $conf_DB->createDirective('pass', 'root'); $config = new Config(); $config->setRoot($conf); // write the container to a php array    $config->writeConfig('/tmp/config_test.php', 'phparray',                       array('name' => 'test') ); echo $conf->toString('phparray', array('name' => 'test')); ?> A Pear csomag minden tagja automatikusan beincludolja azokat a pear fájlokat, amelyek szükségesek az osztály működéséhez! A programozónak az include-dal nem kell törődnie

75 www.phpclasses.org Szabad forrású PHP alapú osztályok gyűjteménye.
Nincs az osztályok között összefüggés, A kódot nem ellenőrzi senki minőség szempontjából

76 Framework-ök használata
Prototype.js (alap!) Dojo Jquery Kissé nehézkes az áttekintésük, mert javascript, AJAX és PHP technológia keveredik bennük.

77 CMS rendszerek Lásd Drupal, Moodle, Joomla

78 Codecharge Studio Kódgenerátor, komplex fejlesztőrendszer
A programozói „favágást” könnyíti meg. Tematika készül az oktatására

79 Modern fejlesztő eszközök – Zend IDE
Csúcsszuper eszköz. kódformázás debug, IDE-ben, böngészőben (Böngésző pluginnnal) Profiler Adatbázis kapcsolat kezelése Kód sablonok A projekt kódjainak kezelése Több nyelv támogatása stb...

80 Eclipse Freee! Fejlődik, PHP Eclipse. Sok minden működik

81 phpMyAdmin MySQL adatbázis karbantartásához, használatához elengedhetetlen eszköz.


Letölteni ppt "A programozás oktatása WEB-es alkalmazásfejlesztő eszközök segítségével Fábián Zoltán 2006 (az anyag itt elérhető: http://www.szily.hu/photoalbum/2006_Roadshow/2006_suli_webkonferencia_2.ppt)"

Hasonló előadás


Google Hirdetések