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)

Slides:



Advertisements
Hasonló előadás
Szerver oldali programozás
Advertisements

C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Kiss-Tóth Marcell Flash és PHP? De még mennyire!
Az algoritmizálás oktatás egy lehetséges útja: Visual Basic
Hatékonyságvizsgálat, dokumentálás
Programozás III STRING-XML.
Piacképes programozói tudás a középiskolában
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
3. A programozás eszközei, programozás-technikai alapismeretek
3. előadás (2005. március 1.) Utasítások, tömbök
Budapesti Műszaki és Gazdaságtudományi Egyetem Elektronikus Eszközök Tanszéke A programozás alapjai 1. (VIEEA100) 9. előadás.
Programozás alapjai A programozás azt a folyamatot jelenti, melynek során a feladatot a számítógép számára érthető formában írjuk le. C++, Delphi, Java,
JavaScript.
Bevezetés a Java programozásba
Bevezetés a Java programozásba
C A C nyelv utasításai. Ismétlés Utasítások csoportosítása.
Borland C/C++ mintapéldák fájlokra. 1. példa Írjon olyan programot,amely megnyit egy hw.txt fájlt és írja bele a Hello világ szöveget. Ez után zárja le.
Informatika matematika speciális tagozat - tematika évfolyam -
Java programozási nyelv 2. rész – Vezérlő szerkezetek
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
PHP Webprogramozás alapjai
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Szombathely Dinamikus WEB programozás: PHP és JSP.
Lénárt Anett egyetemi adjunktus - PTE PMMK Rendszer- és Szoftvertechnológia Tanszék Előadás JavaScript Tananyag: W eb - programozás.
Vizuális és web programozás II.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
WEB Technológiák WEB-DB és XML ME Általános Informatikai Tsz. dr. Kovács László.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
PHP III. Fájlok, űrlapok.
PHP VII Sütik, munkamenetek. Sütik Mi az a süti? A süti (cookie) állapotot tárol a felhasználó böngészőjében. Pl. ha egy oldalon beállítható, hogy milyen.
A PHP (PHP: Hypertext Preprocessor) nyílt forráskódú, számítógépes szkriptnyelv, legfőbb felhasználási területe a dinamikus weboldalak készítése. Emiatt.
Szintaktikai, szemantikai szabályok
PHP nyelv. PHP Interpreteres nyelv → parancsértelmező szükséges hozzá Rasmus Lerdorf 1995 → személyes felhasználás (internetes önéletrajzának megtekintésének.
Programozási nyelvek.
1 Operációs rendszerek I, 3. gyakorlat Windisch Gergely
PHP oktatási tapasztalatok
Flash és PHP? De még mennyire! Kiss-Tóth Marcell
Bevezetés a PHP világába - kezdőknek
Készítette: Csíki Gyula
Weboldal tervezés programozó szemmel. Alapok Minden webcím www. –tal kezdődikMinden webcím www. –tal kezdődik Webböngésző = Internet ExplorerWebböngésző.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Készítette: Lipp Marcell
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
PHP nyelv Mari Dániel.
Turbo Pascal Indítás: C:\LANGS\Turbo Pascal Turbo Pascal.
Visual Basic 2008 Express Edition
Java programozási nyelv Vezérlési szerkezetek
Általában a kétszintű informatika érettségiről. Források, ahol utána nézhetünk részletesebben:
Web fejlesztés V. Illés Zoltán ELTE Informatikai Kar
Objektum orientált programozás
Webprogramozó tanfolyam
Szoftverfejlesztés az Informatikus Szakigazgatási Agrármérnök szakon Bakó Mária Várallyai László DE, Gazdaságtudományi Kar.
Objektum orientált programozás
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Illés Zoltán ELTE Informatikai Kar
Java web programozás 7-8..
Violet nails Készítette: Csőke Vivien. Bevezetés Téma: Violet nails - műkörömkészítő weblapjának elkészítése A weboldal elérhető az alábbi címen: violetnails.atw.hu.
Függvények a C nyelvben 1 Függvényeket a következő esetekben szokás írni: Ha ugyanazt a tevékenységet többször is el kell végeznünk ugyanolyan típusú,
Webprogramozó tanfolyam
Algoritmizálás, adatmodellezés
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Utasítás és blokk. Elágazás típusai, alkalmazása Kovács.
A programozás oktatása WEB-es alkalmazásfejlesztő eszközök segítségével Fábián Zoltán 2008.
Gábor Dénes Számítástechnikai Emlékverseny
Programozási nyelvek típusossága.
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Előadás másolata:

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ő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)

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

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.

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

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

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

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!

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

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

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.

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.

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

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)

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!

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

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

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

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+

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

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

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

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!

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.

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.

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

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.

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 = 123.23457; // 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

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); ?>

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!”); } ?>

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 }

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;

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>”); ?>

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

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

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

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;

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.

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. } ?>

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=”http://localhost/getpelda.php?sz=123&ok=sziamiau”> 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”] ?>

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!

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!

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 email címben a @ jelet #-ra

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__

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

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

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

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.

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)

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

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:

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

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.

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.

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.

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.

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.

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...

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?

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

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

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…)

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

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

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>

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.

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.

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/1.0 401 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.

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 email 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 = "www.szily.hu"; // SMPT szerver címe $mail->Host = "10.1.1.1"; // SMPT szerver címe $mail->IsHTML(true); // set email format to HTML $mail->SMTPAuth = false; // turn on SMTP authentication $mail->From = "fz@szily.hu"; // Küldő emailcime $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);

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 ...

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>

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"); ?>

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.

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

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

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.

CMS rendszerek Lásd Drupal, Moodle, Joomla

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

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...

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

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