WEBFEJLESZTÉS 2. BEMENET, ŰRLAPOK

Hasonló dokumentumok
WEBFEJLESZTÉS 2. PHP NYELVI ALAPOK, HTML KIMENET, PHP BEMENET, ŰRLAPOK

A Http és a PHP kapcsolata. Web-Sky Consulting Kft Tóth Imre 2009

A webhelyhez kötődő szoftverek architektúrája

WEBFEJLESZTÉS 2. MUNKAMENET-KEZELÉS, HITELESÍTÉS

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Környezeti változók, űrlapok kezelése

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

WEBFEJLESZTÉS 2. ADATTÁROLÁS, FÁJLOK

PHP. Adatbázisok gyakorlat

Készítette: Gál Tamás. A tananyag programozott változata itt érhető el: Webfejlesztés

WEBFEJLESZTÉS 2. PHP NYELVI ALAPOK

WEB PROGRAMOZÁS 3.ELŐADÁS. Űrlapok

Internet technológiák

Web-fejlesztés NGM_IN002_1

A HTTP protokoll. A standard egy URI (Unified Resource Identifier = egységes forrás azonosító) megnevezésű címet definiál, amely lehet:

Hálózati architektúrák és Protokollok GI Kocsis Gergely

PHP gyorstalpaló, avagy a Hello World-től az űrlapellenőrzésig

Web programozás. 3. előadás

III. RÉSZ Munka a PHP-vel

Symfony kurzus 2014/2015 I. félév. Controller, Routing

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 5.ELŐADÁS. Sütik és munkamenetek kezelése

Hálózati architektúrák és Protokollok GI Kocsis Gergely

Rétegezett architektúra HTTP. A hálózatfejlesztés motorját a hálózati alkalmazások képezik. TCP/IP protokoll készlet

Web Technológiák. Répási Tibor egyetemi tanársegéd. Miskolc Egyetem,Gépészmérnöki kar, Infomatikai és Villamosmérnöki Tanszékcsoport (IVM)

Természetesen készíts egy csempe nevű könyvtárat és ide mentsd az index.html állományt.

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

Java és web programozás

Multimédia 2017/2018 II.

Bevezetés Működési elv AJAX keretrendszerek AJAX

PHP-MySQL. Adatbázisok gyakorlat

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

PHP MySQL, Java JDBC MySQL. Adatbázisok az iskolában 2012 Dr. Balázs Péter Palatinus Endre és Erdőhelyi Balázs diái alapján

Webes űrlapok és az XForms ajánlás

JavaServer Pages (JSP) (folytatás)

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

Programozás és adatbázis kezelés PHP ben

Hálózati architektúrák és Protokollok GI Kocsis Gergely

S z á m í t ó g é p e s a l a p i s m e r e t e k

HTML alapok 1. Minimális HTML file: <HTML> <HEAD> <TITLE> cím </TITLE> </HEAD> <BODY>... </BODY> </HTML> Formátum parancsok:

WEBFEJLESZTÉS 2. ADATTÁROLÁS, MUNKAMENET- KEZELÉS, AJAX

Webes alkalmazások fejlesztése

COMET webalkalmazás fejlesztés. Tóth Ádám Jasmin Media Group

Web programoz as

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 6.ELŐADÁS. Fájlkezelés PHP-ben

Tartalomjegyzék. Weboldalüzemeltetői praktikák... 1 Átlag weboldal... 1 Wordpress praktikák... 2

Java Challenge második forduló játékszabályai v1.2

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Web programozás I. 4. előadás

Biztonságos PHP a gyakorlatban

Interaktív weboldalak készítése

2017/01/27 08:59 1/6 Gettext Rendszer

API tervezése mobil környezetbe. gyakorlat

Web-technológia PHP-vel

Powershell 2. gyakorlat

Számítógépes Hálózatok. 5. gyakorlat

Java technológiák - ANTAL Margit. komponensek. A HTTP protokoll. Webkonténerek és szervletek. Egyszerű HTTP. ANTAL Margit.

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

Lássuk, mik azok a szempontok, amelyeket be kell tartanunk egy HTML kód írásánál:

Hálózati architektúrák és Protokollok MI 7,8. Kocsis Gergely

Smarty AJAX. Miért jó ez? Ha utálsz gépelni, akkor tudod. Milyen műveletet tudunk elvégezni velük:

Kompozit alkalmazások fejlesztése. IBM WebSphere Portal Server

Hálózati architektúrák és Protokollok GI - 9. Kocsis Gergely

Szabadkai Műszaki Szakfőiskola. Web programozás. dr Zlatko Čović

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

WEBFEJLESZTÉS 2. ŰRLAPOK, KÉPEK, TÁBLÁZATOK, BÖNGÉSZŐ

ASP-s alkalmazás készítés

10.óra CodeIgniter Framework #3. Gyimesi Ákos

Egészítsük ki a Drupal-t. Drupal modul fejlesztés

Bevezető. Servlet alapgondolatok

WWW Kliens-szerver Alapfogalmak Technológiák Terv. Web programozás 1 / 31

QBE Édes Otthon lakásbiztosítás tarifáló webservice. Fejlesztői dokumentáció 1.0.2

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

Alapfogalmak, WWW, HTTP

Model View Controller alapú alkalmazásfejlesztés

Weboldalak fejlesztése mobil eszközökre

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő A PHP programozási nyelv JDBC, ODBC

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

Memória játék. Felhasználói dokumentáció

Hálózati architektúrák és Protokollok PTI - 7. Kocsis Gergely

Magyar Nemzeti Bank - Elektronikus Rendszer Hitelesített Adatok Fogadásához ERA. Elektronikus aláírás - felhasználói dokumentáció

ELTE SAP Excellence Center Oktatóanyag 1

HÁLÓZATI HASZNÁLATI ÚTMUTATÓ

Webapp (in)security. Gyakori hibákról és azok kivédéséről fejlesztőknek és üzemeltetőknek egyaránt. Veres-Szentkirályi András

Informatika terméktervezőknek

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

Weblog elemzés Hadoopon 1/39

Számítógépes Hálózatok. 3. gyakorlat

Hálózati architektúrák és Protokollok GI - 8. Kocsis Gergely

PC Connect. Unique ewsletter. program leírás

Általános fiók beállítási útmutató

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

A WEB programozása - Bevezetés őszi félév Dr. Gál Tibor

Sakk játék. Feladat: JavaScript segítségével olyan programot kell írni, ami egy sakktáblát szimulál. Kiválasztásra változtatják a helyüket.

Rohonczy János: World Wide Web - Világháló

HTML. Ismerkedés a JavaScripttel. A JavaScript lehet ségei. A JavaScript kód helye. Önálló JavaScript fájlok


Internet programozása. 1. előadás

Átírás:

WEBFEJLESZTÉS 2. BEMENET, ŰRLAPOK Horváth Győző Egyetemi adjunktus 1117 Budapest, Pázmány Péter sétány 1/C, 2.420 Tel: (1) 372-2500/1816

2 Ismétlés

Ismétlés 3 Dinamikus szerveroldali webprogramozás: program állítja elő a tartalmat (HTML) PHP nyelv Adatszerkezetek Programozási tételek Kimenet (HTML) 1 Szerver HTTP 4 2 CGI 3 PHP Kliens

HTTP kérés és válasz 4 GET / HTTP/1.1 Host: webprogramozas.inf.elte.hu User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: hu-hu,hu;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate Cookie: utma=159741371.1255432553.1308299517.1308299517.1308299517.1; utma=32143338.2145495546.1326532899.1361177845.1362134456.25; HTTP/1.1 200 OK Válasz utmz=32143338.1361177845.24.12.utmcsr=google utmccn=(organic) utmcmd=organic Date: Wed, 03 Apr 2013 07:11:56 GMT utmctr=(not%20provided) Connection: keep-alive Server: Apache/2.2.10 (Linux/SUSE) Last-Modified: Wed, 20 Feb 2013 08:39:44 GMT ETag: "fe8438-6d6-4d623e65e9400" Accept-Ranges: bytes Content-Length: 1750 Content-Type: text/html <!DOCTYPE html> <html>... </html> Kérés

Vázlat 5 CGI (PHP) programok bemenete CGI interfész Kliensről érkező adatok Űrlapok feldolgozása 2 Szerver CGI 3 PHP 1 HTTP 4 Kliens

PHP programok adatai 6 Kliens Futtatókörnyezet Fájl (alkalmazásszintű) Változók PHP Adatbázis (alkalmazásszintű) Munkamenet (kliensszintű)

7 Common Gateway Interface Szerveroldali input és output, Common Gateway Interface

Common Gateway Interface (CGI) 8 Azt határozza meg, hogy egy webszerver hogyan indíthat el egy programot és milyen módon cserél adatot vele. Indítás: bináris állomány a kért erőforrás Adatok (környezeti változók, standard I/O) Kérés körülményei URL HTTP fejléc HTTP üzenettörzs 1 Szerver HTTP 4 2 CGI 3 Program Kliens

Kérés körülményei és HTTP fejlécek 9 Kérés körülményei környezeti változók REQUEST_METHOD: HTTP kérés metódusa REMOTE_ADDRESS: kliens IP címe CONTENT_LENGTH: üzenettest hossza bájtban HTTP fejlécek környezeti változók HTTP_* Pl. Accept fejléc HTTP_ACCEPT környezeti változó [REMOTE_ADDR] => 188.142.184.197 [REMOTE_PORT] => 49323 [REQUEST_METHOD] => GET [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => hu-hu,hu;q=0.8,en-us;q=0.5,en;q=0.3

URL 10 Kérés URL-je <scheme>://<host>:<port>/<path>?<query>#<fragment> Ezek leképezése környezeti változókra <scheme> <host> <port> <path> <query> SERVER_PROTOCOL SERVER_NAME SERVER_PORT SCRIPT_NAME (PATH_INFO) QUERY_STRING

HTTP üzenettörzs 11 Standard bemeneten jelenik meg Környezeti változó CONTENT_LENGTH: adatmennyiség hossza

A program eredménye 12 A program eredményének a standard outputon kell megjelennie Ezt továbbítja a webszerver a kliens felé 2 Szerver CGI 3 Program 1 HTTP 4 Kliens

Környezeti változók példa 13 [HTTP_HOST] => webprogramozas.inf.elte.hu [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => hu-hu,hu;q=0.8,en-us;q=0.5,en;q=0.3 [HTTP_ACCEPT_ENCODING] => gzip, deflate [HTTP_REFERER] => http://webprogramozas.inf.elte.hu/~gyozke/wf2/temp/ [HTTP_COOKIE] => WACID=1263304129000A11327866; utma=32143338.519822639.1361532995.1362426295.1363347264.4; utmz=32143338.1362426295.3.3.utmcsr=google utmccn=(organic) utmcmd=organic utmctr=(not%20provided) [HTTP_CONNECTION] => keep-alive [PATH] => /usr/sbin:/bin:/usr/bin:/sbin [SERVER_SIGNATURE] => <address>apache/2.2.10 (Linux/SUSE) Server at webprogramozas.inf.elte.hu Port 80</address> [SERVER_SOFTWARE] => Apache/2.2.10 (Linux/SUSE) [SERVER_NAME] => webprogramozas.inf.elte.hu [SERVER_ADDR] => 157.181.161.8 [SERVER_PORT] => 80 [REMOTE_ADDR] => 188.142.184.197 [DOCUMENT_ROOT] => /srv/www/webprog [SERVER_ADMIN] => root@webprogramozas.inf.elte.hu [SCRIPT_FILENAME] => /home/gyozke/public_html/wf2/temp/getpost.php [REMOTE_PORT] => 49323 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /~gyozke/wf2/temp/getpost.php [SCRIPT_NAME] => /~gyozke/wf2/temp/getpost.php [PHP_SELF] => /~gyozke/wf2/temp/getpost.php [REQUEST_TIME] => 1365626159

CGI összefoglalás 14 HTTP kérés részei kerülnek átadásra a programnak környezeti változók standard bemenet Információ hol érkezhet QUERY_STRING HTTP üzenettörzs

Kliensről érkező adatok 15 Böngésző 1 2 3 HTTP CGI PHP

16 Böngésző és HTTP

Kérésindítási lehetőségek 17 Cím beírása (GET) Linkre kattintás (GET) Űrlap elküldése (GET, POST) JavaScript (GET, POST) oldal újratöltés (location, GET) űrlap elküldés(submit() metódus, GET, POST) AJAX kérés (bármilyen HTTP metódus)

Címsor és hivatkozások 18 A megadott URL kerül elküldésre <a href="http://server.hu/index.php?adat=elte">valami</a> Általános formája Például <scheme>://<host>:<port>/<path>?<query>#<fragment> http://localhost/cgi-bin/cgi.exe http://webprogramozas.inf.elte.hu/~gyozke/getpost.php http://webprogramozas.inf.elte.hu/~gyozke/getpost.php?elte http://webprogramozas.inf.elte.hu/~gyozke/getpost.php?adat=elte https://tools.ietf.org/html/rfc3986#section-3.4 http://www.w3.org/tr/rec-html40/interact/forms.html#h-17.13

<form> elem 19 Attribútumok action: szerveroldali erőforrás megjelölése method: HTTP metódus enctype: a formadatok kódolása a küldés során Enctype application/x-www-form-urlencoded (alapértelmezett) multipart/form-data (fájlfeltöltés, csak POST esetén) text/plain (levélküldés)

Űrlap elküldése 20 Elküldés submit gomb megnyomása JavaScript: form.submit() meghívása Elküldhető elemek kiválasztása name attribútum (nagyon fontos) nem disabled bejelölt checkbox bejelölt radio kiválasztott select

Űrlap elküldése (folytatás) 21 Kérési adatok összeállítása Elküldhető formelemekből név=érték párokat készít ezeket & jellel fűzi össze Kérési adatok kódolása ld. enctype attribútum Kérésszöveg (Query String)

Űrlap elküldése (folytatás) 22 A kódolt kérési adatok elküldése GET az action-ben megadott URL mögé fűzi egy?-lel A kérésszöveg az URL adatokat tárolására szolgáló <query> részben jelenik meg limitált méret az URL mérete miatt (2 kb) POST a HTTP kérés üzenettörzsében utazik a kérésszöveg sok adat küldhető http://www.w3.org/tr/rechtml40/interact/forms.html#h-17.13

Űrlap elküldése példa 23 Űrlap: <form action="http://localhost/cgi-bin/cgi.exe" method="post"> <input type="text" name="alma" value="piros"> <input type="password" value="kek"> <input type="hidden" name="jelszo" value="titkos"> <input type="checkbox" name="check1" value="ertek1" checked> <input type="checkbox" name="check2" checked> <input type="submit"> </form> Query string alma=piros&jelszo=titkos&check1=ertek1&check2=on

Űrlapelemek 24 Szöveges elemek <input> type: text, password, hidden <textarea> mindig elküldésre kerülnek akár üres szöveggel is textareánál vigyázni kell: minden elküldésre kerül, ami a <textarea></textarea> elem között van

Űrlapelemek 25 checkbox, radio csak bejelölve kerül elküldésre ha nincs value on érték select csak bejelölve kerül elküldésre ha nincs value option szövege az érték size>1 esetén ha nincs kiválasztva nem küldi el multiple esetén ugyanazon névvel több név=érték pár (pl. sel=alma&sel=szilva)

Űrlapelemek 26 submit ha van neve elküldésre kerül az értékével (felirat) file enctype="multipart/form-data" method="post"

Űrlapok 27 GET beírás, link: megfelelő URL kézi előállítása http://pelda.com/index.php?alma=piros&korte=sarga form: automatikusan állnak elő a név=érték párok POST method="get", action="http://pelda.com/index.php" http://pelda.com/index.php?alma=piros&korte=sarga form: automatikusan állnak elő a név=érték párok a kérésszöveg az üzenettörzsben utazik

HTTP kérés 28 URL <scheme>://<host>:<port>/<path>?<query>#<fragment> HTTP kérés METÓDUS /<path>?<query> VERZIÓ Host: <host> FEJLÉC: ÉRTÉK FEJLÉC: ÉRTÉK FEJLÉC: ÉRTÉK ÜZENETTEST

Összefoglalás 29 Kérésszöveg URL <query> részében Üzenettörzs 1 Böngésző HTTP Címsor URL (query) Hivatkozás GET POST Üzenettörzs Űrlap Fejléc JavaScript Kérés módja

30 HTTP és CGI

HTTP kérés leképezése 31 Szabad paraméterek URL <query> része Üzenettörzs QUERY_STRING Standard bemenet HTTP 2 CGI URL (query) Üzenettörzs Fejléc Kérés módja QUERY_STRING Standard bemenet Környezeti változó

32 CGI programok

CGI 33 CGI kommunikációja környezeti változók standard bemenet és kimenet Programoknak tudnia kell környezeti változók értékeit lekérdezni olvasni a standard bemenetről írni a standard kimenetre

Adatok tipikus beolvasása 34 REQUEST_METHOD GET vagy POST GET QUERY_STRING POST CONTENT_LENGTH hosszan standard inputról olvasni QUERY_STRING is töltve lehet (URL függő)

Példa C++ program 35 Környezeti változó olvasása getenv(str) Standard bemenetről olvasás karakterenként fgetc(stdin) Szövegműveletek

Példa C++ program 36 request_method = getenv("request_method"); content_length_str = getenv("content_length"); content_length = atoi(content_length_str); query_string_get = getenv("query_string"); string query_string_post = ""; if (strcmp(request_method, "POST") == 0) { int db = 0; char c; while (db < content_length && EOF!= (c = fgetc(stdin))) { query_string_post += c; db++; } }

37 CGI és PHP

Leképezés 38 Szabad paraméterek QUERY_STRING $_GET Standard bemenet $_POST Egyéb adatok Környezeti változók $_SERVER Szuperglobális tömbök //kérésszöveg: alma=piros&korte=sarga $_GET['alma']; //"piros" $_GET['korte']; //"sarga" //kérésszöveg: alma=piros&korte=sarga $_POST['alma']; //"piros" $_POST['korte']; //"sarga"

Szuperglobális tömbök 39 $_GET: QUERY_STRINGben érkező név=érték pároknak megfelelő tömb, ahol a név az a kulcs. $_POST: a standard inputon érkező név=érték pároknak megfelelő tömb, ahol a név az a kulcs. $_SERVER: az összes környezeti változót tartalmazza $_FILES: a feltöltött fájlok helyét tartalmazza $_COOKIES: a kliensről érkező sütik jelennek meg benne

Összefoglalás 40 Böngésző 1 2 3 HTTP CGI PHP Címsor URL (query) QUERY_STRING $_GET[] Hivatkozás Űrlap Üzenettörzs Fejléc Standard bemenet Környezeti változó $_POST[] $_SERVER[] JavaScript Kérés módja

GET példa 41 Kliensen egy link <a href="adat.php?oldal=12&stilus=sotet">példa hivatkozás</a> PHP kód function kiirtomb($tomb) { echo '<pre>'; print_r($tomb); echo '</pre>'; } kiirtomb($_get); kiirtomb($_post);

POST példa 42 Űrlap <form action="adat.php?oldal=42" method="post"> Név: <input type="text" name="nev" value="valaki"> <br> Jelszó: <input type="password" name="jelszo" value="titkos"> <br> <input type="submit" name="gomb" value="bejelentkezés"> </form>

43 Bemeneti adatok feldolgozása

Példa 44 Kör kerületének kiszámítása Input: sugár Kötelező Output: kerület Valid oldalon jelenjen meg

Elvárt kimenet 45 <!doctype html> <html> <head> <meta charset="utf-8"> <title>kerület</title> </head> <body> <p>sugár = 10</p> <p>kerület = 62.83</p> </body> </html>

46 1. megoldás Az URL-ben adjuk át paraméterként <?php print_r($_get); print_r($_post);?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>kerulet</title> http://pelda.hu/kerulet.php?sugar=10 </head> <body> <?php //beolvasás $sugar = $_GET['sugar']; //feldolgozás $pi = pi(); $ker = 2 * $sugar * $pi; //kiiras echo "<p>sugár = {$sugar}</p>"; echo "<p>kerulet = {$ker}</p>";?> </body> </html>

1. megoldás 47 kerulet.php Megoldás

48 2. megoldás Feldolgozás kivétele a kiírásból Kiírás és PHP logika szétválasztása <?php print_r($_get); print_r($_post); //beolvasás $sugar = $_GET['sugar']; //feldolgozás $pi = pi(); $ker = 2 * $sugar * $pi; //kiiras?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>kerulet</title> </head> <body> <?php echo "<p>sugár = {$sugar}</p>"; echo "<p>kerulet = {$ker}</p>";?> </body> </html>

49 3. megoldás Kiírás csiszolása Csak a valóban dinamikus tartalom legyen PHP-ban <?php print_r($_get); print_r($_post); //beolvasás $sugar = $_GET['sugar']; //feldolgozás $pi = pi(); $ker = 2 * $sugar * $pi; //kiiras?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>kerulet</title> </head> <body> <p>sugár = <?php echo $sugar;?></p> <p>kerület = <?php echo $ker;?></p> </body> </html>

HTML sablon (alternatív szintaxis) 50 Kiírás Elágazás <?php echo $valtozó;?> Ciklus <?php if (felt) :?> HTML sablon kód <?php else :?> HTML sablon kód <?php endif;?> <?php foreach ($tomb as $valt) :?> HTML sablon kód <?php endforeach;?>

Input hiánya 51 http://pelda.hu/kerule t.php Kezelni kell az input hiányát Alapértelmezett érték Hibaüzenet kerulet.php nem Hiba helyes adatok? igen Megoldás

4. megoldás 52 Alapértelmezett érték //beolvasás $sugar = 0; if (isset($_get['sugar'])) { $sugar = $_GET['sugar']; } //beolvasás $sugar = (isset($_get['sugar'])? $_GET['sugar'] : 0);

5. megoldás 53 Hibaüzenet Kimenet <!doctype html> <html> <head> <meta charset="utf-8"> <title>kerulet</title> </head> <body> <?php if ($hiba) :?> <p><?php echo $hiba;?></p> <?php else :?> <p>sugár = <?php echo $sugar;?></p> <p>kerület = <?php echo $ker;?></p> <?php endif;?> </body> </html>

54 6. megoldás Hibaüzenet Beolvasás Ellenőrzés megadták? kitöltötték? szám? Több input esetén hibalista (PHP tömb) hibalista (HTML ul) //beolvasás $sugar = null; if (isset($_get['sugar'])) { $sugar = $_GET['sugar']; } //előfeltétel ellenőrzése $hiba = ''; if (is_null($sugar)) { $hiba = 'Sugár hiányzik!'; } else if ($sugar == '') { $hiba = 'Sugár üres!'; } else if (!is_numeric($sugar)) { $hiba = 'Sugár nem szám!'; } if (!$hiba) { //feldolgozás $pi = pi(); $ker = 2 * $sugar * $pi; }

56 Űrlapok

Űrlapok 57 Előző megoldás nem felhasználóbarát böngésző címsora URL Input megadás a felhasználó részéről általában űrlapokon keresztül történik

Tervezés 58 kerulet.html kerulet.php nem Hiba Űrlap helyes adatok? igen Megoldás

Űrlap 59 kerulet.html statikus oldal <!doctype html> <html> <head> <meta charset="utf-8"> <title>kerulet</title> </head> <body> <form action="kerulet.php" method="get"> Sugár: <input type="text" name="sugar"> <input type="submit"> </form> </body> </html>

Feldolgozó szkript 60 kerulet.php (ld. korábban) <?php print_r($_get); print_r($_post); //beolvasás $sugar = $_GET['sugar']; //előfeltétel ellenőrzése $hiba = ''; if (is_null($sugar)) { $hiba = 'Sugár hiányzik!'; } else if ($sugar == '') { $hiba = 'Sugár üres!'; } else if (!is_numeric($sugar)) { $hiba = 'Sugár nem szám!'; } if (!$hiba) { //feldolgozás $pi = pi(); $ker = 2 * $sugar * $pi; } //kiiras?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>kerulet</title> </head> <body> <?php if ($hiba) {?> <p><?php echo $hiba;?></p> <?php } else {?> <p>sugár = <?php echo $sugar;?></p> <p>kerület = <?php echo $ker;?></p> <?php }?> <a href="kerulet.html">vissza az űrlapra</a> </body> </html>

Ergonómiai megfontolások 61 Az alkalmazás funkcionálisan teljesíti az elvárásokat De nem ergonomikus a használata Felhasználó nem tudja, mit írt be Külön kattintásra (vissza) tud javítani újra számolni Jó lenne ott jelezni a hibát, ahol az űrlap van Jó lenne az űrlapon jelezni a megoldást is

Tervezés oldalak 62 kerulet.php nem Hiba Űrlap* 1 2 helyes 3 4 Űrlap adatok? Űrlap* igen Megoldás

Tervezés állomány szint 1 2 3 4 63 PHP kód 1: nincs input kerulet.php nem jött adat? igen beolvasás ellenőrzés kiírás (űrlap) 2, 3, 4, : nem helyes? igen beolvasás ellenőrzés feldolgozás kiírás (űrlap) Eldöntés Van-e POST adat Hiba (opc) Űrlap feldolgozás REQUEST_METHOD Megoldás (opc)

HTML rész 64 POST-ra átírva! <body> <?php if ($hiba) :?> <p><?php echo $hiba;?></p> <?php endif;?> <form action="kerulet.php" method="post"> Sugár: <input type="text" name="sugar"> <input type="submit"> </form> <?php if (isset($ker)) :?> <p>sugár = <?php echo $sugar;?></p> <p>kerület = <?php echo $ker;?></p> <?php endif;?> </body>

Feldolgozó rész 65 Lényeg: if ($_POST) { } $hiba kiemelve az elágazás elé $hiba = ''; if ($_POST) { //beolvasás //... //előfeltétel ellenőrzése //... if (!$hiba) { //feldolgozás //... } }

66 Képernyőképek

Űrlap állapottartása 67 Írjuk vissza a kitöltött adatokat, legalább hiba esetén! <form action="kerulet.php" method="post"> Sugár: <input type="text" name="sugar" value="<?php echo $sugar;?>"> <input type="submit"> </form> $hiba = ''; $sugar = ''; if ($_POST) { //beolvasás $sugar = $_POST['sugar']; //... }

Feldolgozó rész kiemelése 68 Függvénybe zárjuk a lényegi részt Elkülönítjük az adatok beolvasásától és kiírásától function kerulet($sugar) { $pi = pi(); $ker = 2 * $sugar * $pi; return $ker; } //... if ($_POST) { //... if (!$hiba) { //feldolgozás $ker = kerulet($sugar); } }

Szkript szerkezete 69 Három nagy részből áll Adatszerkezetek és ezeket feldolgozó függvények A kérés fogadásáért, beolvasásért, ellenőrzésért és kiírásért felelős rész Megjelenítendő HTML sablonja <?php //Adatok és függvények //--------------------------- //Beolvasás //Ellenőrzés //Feldolgozás meghívása //---------------------------?> <!doctype html> <html> <!-- HTML kód --> <html>

Összefoglalás 70 Adatok átadása URL? utáni része $_GET tömbbe kerül formok, name attribútum az elemeknél $_GET, $_POST tömbökbe, ahol a name attribútum a kulcs Űrlapok feldolgozása Önmaguknak küldik if ($_POST) megkülönböztetni az első hívást a többitől Minden szkript három részből áll: adat, beolv, HTML