test_form.html, all_request_vars.php

Podobné dokumenty
Koláčky, sezení. Martin Klíma

Návrh a tvorba WWW stránek 1/8. Formuláře

Internet cvičení. ZS 2009/10, Cvičení 4., PHP. Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

Základy webových aplikací ZWA Přednáška č. 3 tvorba formulářů na klientské straně. Martin Klíma

Formuláře. Aby nám mohli uživatelé něco hezného napsat třeba co si o nás myslí!

Internet cvičení. ZS 2009/10, Cvičení 3., Tomáš Pop. DISTRIBUTED SYSTEMS RESEARCH GROUP

Inovace a zkvalitnění výuky prostřednictvím ICT Tvorba webových stránek. Ing. Zelinka Pavel Číslo: VY_32_INOVACE_35 17 Anotace:

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Programování v PHP. Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze. Další možnosti formulářů

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Formuláře. neomezený počet formulářových polí v rámci HTML dokumentu může být více formulářů, nelze je ale do sebe vnořovat

Formuláře. Internetové publikování. Formuláře - příklad

Základy HTML, URL, HTTP, druhy skriptování, formuláře

K práci budeme využívat souborového manažeru Unreal Commander alespoň si ho procvičíme

Dynamika na straně serveru

Bottle -- příklad. Databáze. Testovací data. id Jedinečný identifikátor řádku: Bude typu INT s AUTO_INCREMENT a nastavíme ho jako primární klíč

XHTML 1. Formuláře. Element form. <form>... </form>

PHP. Čtvrtek 8. září. Čtvrtek 15. září. Anonymní test znalostí

Formuláře v HTML. Evropský sociální fond Praha a EU Investujeme do vaší budoucnosti

TNPW1 Cvičení aneta.bartuskova@uhk.cz

4. POČÍTAČOVÉ CVIČENÍ

PHP a Large Objecty v PostgreSQL

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

!!Via!AUREA,!s.r.o.!

Webové Aplikace (6. přednáška)

HTML Hypertext Markup Language

Atribut Význam Hodnoty

Popis XML rozhraní Veřejného webu RŽP

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

Co se v modulu dozvíte? Co jsou návrhové vzory? Ukázky návrhových vzorů Vytvoření databáze

Tvorba webových stránek

Informační systémy 2008/2009. Radim Farana. Obsah. Aktivní serverové stránky ASP. Active Server Pages. Activex Data Objects. LDAP database.

Aplikační vrstva. Úvod do Php. Ing. Martin Dostal

VYŠŠÍ ODBORNÁ ŠKOLA a STŘEDNÍ PRŮMYSLOVÁ ŠKOLA Mariánská 1100, Varnsdorf PROGRAMOVÁNÍ FUNKCE, REKURZE, CYKLY

Vyšší odborná škola a Střední škola,varnsdorf, příspěvková organizace. Šablona 13 VY 32 INOVACE

Protokol HTTP 4IZ228 tvorba webových stránek a aplikací

1 Webový server, instalace PHP a MySQL 13

podnikatele ve formě PDF dokumentu nebo budou jednotlivé datové položky rozvedeny v XML subelementech.

Pear - hruška Systém pro implementaci a distribuci znovupoužitelných komponent (v PHP) Strukturovaná knihovna open-source (PHP) skriptů Systém pro dis

DUM 14 téma: Interakce s uživatelem

Popis XML rozhraní Veřejného webu RŽP

Zpráva webmastera klubu pro členskou schůzi Radek Šíp, 7/2014 9/2015

Internet 2 css, skriptování, dynamické prvky

Webová stránka. Matěj Klenka

Přehled kapitol 1. Základní kostra HTML dokumentu 2. Členění dokumentu 3. Kaskádové styly - CSS 4. Pozadí stránky 5.

INFORMAČNÍ SYSTÉMY NA WEBU

Hitparáda webhackingu nestárnoucí hity. Roman Kümmel

Střední odborná škola a Střední odborné učiliště, Hořovice

WWW a HTML. Základní pojmy. Ivo Peterka

Formuláře. Internetové publikování

Základy HTML. Obecná syntaxe HTML. Struktura HTML

PHP. Středa 7. září. Středa 21. září. Anonymní test znalostí

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

HTTP. Webový server. generátor HTML stránek (CGI, Perl, PHP, Python, Ruby, Java, ASP.NET) zpracování požadavku/ odeslání odpovědi.

Ajax - úvod. Klíčové pojmy: Ajax, skriptování na straně klienta a serveru, objekt XMLHttpRequest, DOM model.

SAMUEL LEROY JACKSON. Projekt webové stránky. Programové vybavení Jáchym Kubáček, IT3B Brno 2016

03 - Základy editace dynamických stránek

Testování webových aplikací Seznam.cz

Sada 1 - PHP. 09. Formuláře

Problémy aplikace On-line testů a jejich řešení. Autor: Ing. Lukáš Trombik

Vstupní požadavky, doporučení a metodické pokyny

1. Webový server, instalace PHP a MySQL 13

Uspořádání klient-server. Standardy pro Web

TVORBA WEBOVÝCH STRÁNEK

Principy fungování WWW serverů a browserů. Internetové publikování

Jaku b Su ch ý 1

language="javascript">... </script>.

Kontakt Martin Klíma Místnost: KN-E319a Tel Konzultační hodiny v pondělí od 16:00

NSWI142 Webové aplikace Zkouškový test


Úvod do tvorby internetových aplikací

(X)HTML, CSS a jquery

WWW technologie. HTTP protokol

BI-AWD. Administrace Webového a Databázového serveru Virtualizace HTTP serveru

DYNAMICKÉ WEBOVÉ STRÁNKY

HTML - Úvod. Zpracoval: Petr Lasák

Instalace a konfigurace web serveru. WA1 Martin Klíma

Úvod do aplikací internetu a přehled možností při tvorbě webu

1 Základy programování v PHP

Tvorba webu. Úvod a základní principy. Martin Urza

Zabezpečení webové vrstvy a EJB projektu Část nastavení specifická pro Glassfish, část dána Java EE

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

XFORMS JAKO NÁHRADA WEBOVÝCH FORMULÁŘŮ XFORMS - WEB FORMS SUCCESSOR

12. Základy HTML a formuláře v HTML

Obsah. Úvodem 9. Kapitola 1 Než začneme 11. Kapitola 2 Dynamické zobrazování obsahu 25. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Zranitelnosti webových aplikací. Vlastimil Pečínka, Seznam.cz Roman Kümmel, Soom.cz

Internet WEB stránky HTML, Hypertext MarkUp Language - nadtextový jazyk - Místo příkazů obsahuje tagy - značky

Po stisku Next se nám objeví seznam dostupných tříd (naše zkompilovaná třída User.KBI), viz následující obrázek.

mistnost.class.php :40:04

PHP a bezpečnost. nejen veřejná

X36WWW. Vícevrstvá architektura webové aplikace Martin Klíma. Tvorba Webu 2 1

Střední odborná škola a Střední odborné učiliště, Hořovice

Základy programování v jazyce JAVA

Server-side technologie pro webové aplikace

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

Interaktivní = umožňující vzájemnou komunikaci, tj. přímý vstup do činnosti stroje nebo programu.

IE1 jazyk HTML a kaskádové styly

Transkript:

Obsluha formulářů v PHP, koláčky, sezení Martin Klíma

Proměnné prostředí $_SERVER: : pole hodnot nastavené serverem. $_GET: pole hodnot parametrů z HTTP GET $_POST: pole hodnot parametrů z HTTP POST $_SESSION: pole hodnot session proměnných $_COOKIE: pole hodnot cookie poslaných klientem $_REQUEST: sloučené pole $_GET, $_POST a $_COOKIE. Hodnoty se přepisují v pořadí určeném v php.ini $_ENV: pole hodnot systémových proměnných $_FILES: pole uploadnutých souborů

$_SERVER server_variables.php all_server_vars.php

$_POST, $_GET <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <meta http-equiv="content-type" type" content="text/html; charset=windows-1252" 1252"> <title>pokusny formular</title> </head> <body> <form method="get" action="all_request_vars.php" "all_request_vars.php"> <input type="hidden" name="skryte_pole1" value="hodnota_skryteho_pole" "hodnota_skryteho_pole"> <input type="text" name="text1" size="20" "20"><br> <textarea rows="2" name="textarea1" cols="20" "20"></textarea><br> <input type="checkbox" name="checkbox1" value="on" "on"><br> <input type="submit" value="odeslat" name="tlacitko_odeslat" "tlacitko_odeslat"> <input type="reset" value="obnovit" name="tlacitko_obnovit" "tlacitko_obnovit"> </form> </body> </html>

$_GET, $_POST pokrač. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>všechny request proměnné </title> </head> <body> <h1>post</h1> <table border="1" style="border-collapse: collapse"> <?php foreach ($_POST AS $key=>$value) { echo "<tr><td>$key</td><td>$value</td></tr>"; }?> </table> <h1>get</h1> <table border="1" style="border-collapse: collapse"> <?php foreach ($_GET AS $key=>$value) { echo "<tr><td>$key</td><td>$value</td></tr>"; }?> </table> test_form.html, all_request_vars.php! POZOR chyba ve výpisu nebezpečných znaků! POZOR chyba ve výpisu nebezpečných znaků <h1>request</h1> <table border="1" style="border-collapse: collapse"> <?php foreach ($_REQUEST AS $key=>$value) { echo "<tr><td>$key</td><td>$value</td></tr>"; }?> </table>! POZOR chyba ve výpisu nebezpečných znaků </body> </html>

Více hodnot se stejným jménem? také v test_form_2.html <select name="select_1[]" multiple="multiple"> <option value="1">okurky</option> <option value="2">jablka</option> <option value="3">brambory</option> </select> <br> <input type="checkbox" name="checkbox_m[]" value="a">a<br> <input type="checkbox" name="checkbox_m[]" value="b">b<br> <input type="checkbox" name="checkbox_m[]" value="c">c<br>

Úspěšná a neúspěšná pole Úspěšné: jeho hodnota se propaguje na server jako dvojice klíč hodnota Neúspěšné: server se o něm nic nedozví

Úspěšná a neúspěšná pole pokr. Atribut disabled="disabled" pole neúspěšné Atribut readonly="readonly" pole úspěšné Pozor na input typu radio co je zaškrtnuto? jak "odvybrat" položku? Při zpracování se nedozvím, která pole existovala, nevím tedy, z čeho se uživatel vybíral HTTP je bezestavový protokol => komplikace

Přiklad problému Vyberte svůj oblíbený film: Aplikační logika: vybraným zvýšíme ohodnocení o 1 nevybraným snížíme ohodnocení o 1 Které to jsou?

Možná řešení oblibene_filmy.html 1. Při zpracování se opět dotážeme na původní množinu externího zdroje (db) Co když se to mezitím změnilo? 2. V dotazu pošleme i celou množinu ze které uživatel vybíral Hidden pole <form method="post" action="oblibene_filmy.php"> <input type="hidden" name="vsechny_filmy" value="f1 f2 f3 f4"> <label for="f1">lásky jedné plavovlásky</label> <input type="checkbox" id="f1" name="oblibene_filmy[]" value="f1"><br> <label for="f2">s tebou mě baví svět</label> <input type="checkbox" id="f2" name="oblibene_filmy[]" value="f2"><br> <label for="f3">vesničko má středisková</label> <input type="checkbox" id="f3" name="oblibene_filmy[]" value="f3"><br> <label for="f4">jak vytrhnout velrybě stoličku</label> <input type="checkbox" id="f4" name="oblibene_filmy[]" value="f4"><br> <input type="submit" name="odeslat" value="odeslat"> </form>

Zpracování v php oblibene_filmy.php <?php $vsechny_filmy= split(" ", $_POST['vsechny_filmy']); foreach ($vsechny_filmy as $aktualni_film) { echo '<div>'.htmlspecialchars($aktualni_film); if (in_array($aktualni_film, $_POST['oblibene_filmy'])) { echo " +1 bod"; } else { echo "-1 bod"; } echo '</div>'; }?> } else { echo "Formulář dosud nebyl odeslán"; }

Wizardy wizard1-4.php Formulář1 Jméno text Submit jmeno Formulář 2 Jmeno hidden Příjmení text Submit jmeno prijmeni Formulář 3 Jmeno hidden Prijmeni hidden Adresa text Submit jmeno prijmeni adresa Formulář 4 Děkujeme!

Ukázka wizard 2/3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>wizard 2/3</title> </head> <body> <h1>krok 2/3</h1> <form method="post" action="wizard3.php"> <input type="hidden" value="<?php echo htmlspecialchars($_post['jmeno']);?>" name="jmeno"> <label for="prijmeni">příjmení</label> <input type="text" id="prijmeni" name="prijmeni"> <br> <input type="submit" name="odeslat" value="odeslat"> </form> </body> </html>

Ukázka wizard poděkování <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>wizard 3/3</title> </head> <body> <h1>děkujeme</h1> Jméno: <?php echo htmlspecialchars(($_post['jmeno']));?><br> Příjmení: <?php echo htmlspecialchars(($_post['prijmeni']));?><br> Adresa: <?php echo htmlspecialchars(($_post['adresa']));?><br> </body> </html>

Používání hodnot z formuláře Při používání hodnot z formuláře pozor na několik případů <input type="text" value="<?php echo $_POST['jmeno'];?>" name="jmeno"> Případ č.1 - špatně, post může obsahovat nebezpečné znaky <input type="text" value='<?php echo htmlspecialchars($_post['jmeno']);?>' name="jmeno"> Případ č.2 špatně, post může obsahovat znak ' <input type="text" value="<?php echo htmlspecialchars($_post['jmeno']);?>" name="jmeno"> Případ č.3 dobře <input type="text" value='<?php echo htmlspecialchars($_post['jmeno'], ENT_QUOTES);?>' name="jmeno">

Použávání hodnot z formuláře pokr. Magic quotes Myšlenka: z dat z formuláře se často sestavují SQL dotazy do MySQL databáze. magic_quotes ON ' -> \' " -> \" \ -> \\ Systém automaticky použije funkci addslashes() na GET, POST a COOKIES proměnné Opak addslashes je stripslashes

Životní cyklus formuláře 1. Zobrazení formuláře s iniciálními daty (nebo prázdného) 2. Uživatel vyplní (chybně) formulář a odešle 3. Zpracování na straně serveru 1. Ověření správnosti dat 2. Pokud OK, přechod dál 3. Pokud není OK, vygeneruj stejný formulář s vyplněnými daty

Životní cyklus formuláře <form method="post" action="<?echo $_SERVER["PHP_SELF"];?>"> Formulář se odesílá "sám na sebe", tj. na svojí <!-- formularova pole --> vlastní URL Jméno: <input type="text" name="jmeno"><br> Příjmení: <input type="text" name="prijmeni" ><br> </form> <!-- tlacitka --> <input type="submit" value="odeslat" name="odeslat"> <input type="reset" value="reset" name="tlacitko_obnovit"> Formulářová pole Odeslat

Životní cyklus formuláře Zpracování dat formuláře OK chyba Další stránka Formulářová pole Odeslat

Implementace v PHP <?php $hlaska = ""; if (isset($_post['odeslat'])) { if (over($_post['jmeno'], $_POST['prijmeni'])) { include ("dekujeme.php"); exit(); } else { $hlaska = "Špatně vyplněné položky, prosím opravte!"; } }?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>životní cyklus formuláře</title> </head> <body> <?php if ($hlaska!= "") echo htmlspecialchars($hlaska);?> <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>"> Jméno: <input type="text" name="jmeno" value="<?php echo vratzpost("jmeno");?>"><br> Příjmení: <input type="text" name="prijmeni" value="<?php echo vratzpost("prijmeni");?>" ><br> function over($jmeno, $prijmeni) { $jm = trim($jmeno); $pr = trim($prijmeni); return (strlen($jm)>=4 && strlen($pr)>=4); } function vratzpost($co) { if (isset($_post[$co])) return htmlspecialchars($_post[$co]); return ""; } <input type="submit" value="odeslat" name="odeslat"> <input type="reset" value="reset" name="tlacitko_obnovit"> </form></body></html>

Práce se soubory Možnost uploadu souborů <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <title>upload souborů</title> </head> <body> <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data"> Zadejte soubor: <input type="file" name="soubor1"><br> <input type="submit" name="odeslat" value="odeslat"> </form> </body> </html>

Práce se soubory Existuje superglobální proměnná $_FILES, která obsahuje 2D pole hodnot $_FILES['userfile']['name'] původní jméno souboru $_FILES['userfile']['type'] mime type souboru $_FILES['userfile']['size'] velikost souboru $_FILES['userfile']['tmp_name'] jméno docasné souboru na serveru, kam byl soubor uložen $_FILES['userfile']['error'] chyba, ke které případně došlo

Práce se soubory (upload) <?php if (isset($_post['odeslat'])) { // obsluha formulare upload.php $jmeno_souboru = $_FILES['soubor1']['name']; $tmp_jmeno = $_FILES['soubor1']['tmp_name']; $velikost = $_FILES['soubor1']['size']; $typ_souboru = $_FILES['soubor1']['type']; if (!move_uploaded_file($tmp_jmeno, "c:".directory_separator.$jmeno_souboru)) { $hlaska = "error ".$_FILES['soubor1']['error']; } }?>

Dvojí odeslání dat Uživatel vícekrát stisknul tlačítko submit Uživatel se vrátil funkcí zpět Někdo nás chce hacknout Ochrana: docela problém, máme bezestavový protokol, tj. nikdo si nic nepamatuje.

Řešení č.1 ne zcela správné, ale časté Klient Server 1. POST GET (data) 2. Redirect (3xx) 3. GET 4. GET!!! = NO PROBLEM

Řešení správné Klient Server ID="XXX" 1. POST GET (data, XXX) 2. Response (HTML, YYY) 3. POST GET (data, XXX) XXX YYY

UDRŽOVÁNÍ STAVU APLIKACE

Udržování stavu aplikace 1. Pomocí skrytých polí (viz příklad wizard) 2. Pomocí obohacování odkazů 3. Pomocí cookies 4. Pomocí sessions

Obohacování odkazů Veškeré odkazy z dokumentu budou obohaceny o identifikátor s daty sezení Není to moc elegantní Může to selhat Pokud se děje automaticky, náročné na výkon <a href="dalsi_stranka.php">další stránka</a> <form action="obsluha.php" method="post"> </form> <a href="dalsi_stranka.php?session_id=xxx">další stránka</a> <form action="obsluha.php?session_id=xxx" method="post"> </form>

Pomocí cookies Informace uložená serverem na klientovi Klient posílá tuto informaci zpět pokud URI spadá do vymezeného rozsahu Doména odpovídá Nevypršela platnost Využití: Počítadlo přístupů Další statistiky Udržování stavu aplikace

Cookies <? set_cookie.php pocitadlo.php setcookie("mojecookie1","hodnota1"); setcookie("mojecookie2","hodnota2");?> <!doctype html public "-//w3c//dtd html 4.0 transitional// //en"> <html> <head> <title>nastav Cookie</ </title> </head> <body> <p>tento skript nastavi cookie a přečte existující cookie.</p> <? foreach ($_COOKIE AS $key=>$ =>$value) { echo "$key = $value <br>"; }?> </body> </html>

Sessions Zjednodušení práce Podpora stavu Kombinace cookies a lokální databáze Klient PHPSESSID 1. nastav cookie PHPSESSID=1 2. pošli cookie Server 1: $x=5; $y=7 PHPSESSID=1

Příklad SESSIONS sessions.php <? session_start(); $_SESSION['x'] = 5; $_SESSION['y'] = 7;?> <!doctype html public "-//w3c//dtd html 4.0 transitional// //en"> <html> <head> <title>sessions</ </title> </head> <body> <p>tento skript vypise seznam session promennych.</p> <? foreach ($_SESSION AS $key=>$ =>$value) { echo "$key = $value <br>"; }?> </body> </html>

Dotazy? DĚKUJI ZA POZORNOST