{"id":388,"date":"2024-02-12T09:04:01","date_gmt":"2024-02-12T08:04:01","guid":{"rendered":"https:\/\/gdm.sosthe.sk\/?page_id=388"},"modified":"2024-02-12T09:04:01","modified_gmt":"2024-02-12T08:04:01","slug":"spracovanie-formularov","status":"publish","type":"page","link":"https:\/\/gdm.sosthe.sk\/?page_id=388","title":{"rendered":"Spracovanie formul\u00e1rov"},"content":{"rendered":"<p>Jedna z najd\u00f4le\u017eitej\u0161\u00edch vlastnost\u00ed PHP je mo\u017enos\u0165 sprac\u00fava\u0165 d\u00e1ta z\u00edskan\u00e9 z HTML formul\u00e1rov (tag FORM). Va\u0161e skripty teraz kone\u010dne z\u00edskaj\u00fa pln\u00fd v\u00fdznam \u2013 budete m\u00f4c\u0165 reagova\u0165 na to, \u010do zad\u00e1 u\u017e\u00edvate\u013e (vol\u00e1 sa to tie\u017e \u201evstup\u201c).<\/p>\n<h3>Pr\u00edklad na za\u010diatok<\/h3>\n<p>Najsk\u00f4r si vysvetl\u00edme, ako formul\u00e1re funguj\u00fa. Dajme tomu, \u017ee m\u00e1me s\u00fabor zadaj.html s jednoduch\u00fdm formul\u00e1rom. V \u0148om s\u00fa dva textov\u00e9 pol\u00ed\u010dka s jedn\u00fdm odosielac\u00edm tla\u010didlom:<\/p>\n<pre>&lt;form action=\"spocitaj.php\" method=\"get\"&gt;\r\nPrv\u00e9 \u010d\u00edslo: &lt;input name=\"prve\"&gt;&lt;br&gt;\r\nDruh\u00e9 \u010d\u00edslo: &lt;input name=\"druhe\"&gt;&lt;br&gt;\r\n&lt;input type=\"submit\" value=\"Spo\u010d\u00edtaj\"&gt;\r\n&lt;\/form&gt;<\/pre>\n<form action=\"http:\/\/epu.sosthe.sk\/spocitaj.php\" method=\"get\">Prv\u00e9 \u010d\u00edslo:\u00a0<input name=\"prve\" type=\"text\" \/>&nbsp;<\/p>\n<p>Druh\u00e9 \u010d\u00edslo:\u00a0<input name=\"druhe\" type=\"text\" \/><\/p>\n<p><input type=\"submit\" value=\"Spo\u010d\u00edtaj\" \/><\/p>\n<\/form>\n<p>S\u00fabor spocitaj.php bude ma\u0165 za \u00falohu spo\u010d\u00edta\u0165 dva \u010d\u00edsla, zadan\u00e9 v textov\u00fdch pol\u00ed\u010dkach s n\u00e1zvami prve a druhe. Zatia\u013e v\u0161ak do\u0148ho nap\u00ed\u0161eme iba:<\/p>\n<pre>&lt;?php\r\n?&gt;<\/pre>\n<p>Otvorte str\u00e1nku zadaj.php v prehliada\u010di a sk\u00faste zada\u0165 napr\u00edklad \u010d\u00edsla 5 a 8. Stla\u010dte odosielacie tla\u010didlo. Zobraz\u00ed sa pr\u00e1zdna str\u00e1nka, \u010do je v poriadku. V\u0161imnite si v\u0161ak adresu str\u00e1nky, ktor\u00e1 sa v\u00e1m pr\u00e1ve na\u010d\u00edtala:<\/p>\n<p>http:\/\/sosthe.info.tm\/~meno\/spocitaj.php?prve=5&#038;druhe=8<\/p>\n<p>Za n\u00e1zvom s\u00faboru nasleduje ot\u00e1znik a p\u00e1ry n\u00e1zov=hodnota, oddelen\u00e9 znakom &amp;. Podobn\u00fdm sp\u00f4sobom m\u00f4\u017eete pou\u017e\u00edva\u0165 adresy aj sami (bez pomoci formul\u00e1rov), napr.:<\/p>\n<pre>&lt;a href=\"zobraz.php?id=vlaky\"&gt;Vlaky&lt;\/a&gt;<\/pre>\n<p>E\u0161te mus\u00edme poznamena\u0165, \u017ee ak d\u00e1me tla\u010didlu meno a hodnotu, tieto \u00fadaje sa tie\u017e odo\u0161l\u00fa.<\/p>\n<p>Teraz si uk\u00e1\u017eeme, ako tieto \u00fadaje z\u00edska\u0165 v jazyku PHP. Ke\u010f\u017ee ako met\u00f3du formul\u00e1ra (atrib\u00fat METHOD) sme zvolili GET, k \u00fadajom budeme pristupova\u0165 pomocou po\u013ea\u00a0<em>$_GET<\/em>. To obsahuje prvky s indexmi nazvan\u00fdmi pod\u013ea atrib\u00fatov NAME jednotliv\u00fdch pol\u00ed\u010dok. Napr\u00edklad tento k\u00f3d vyp\u00ed\u0161e hodnotu pol\u00ed\u010dka prve:<\/p>\n<pre>&lt;?php\r\necho $_GET['prve'];\r\n?&gt;<\/pre>\n<p>Ke\u010f\u017ee chceme hodnoty pol\u00ed\u010dok spo\u010d\u00edta\u0165, uprav\u00edme k\u00f3d takto:<\/p>\n<pre>&lt;?php\r\necho $_GET['prve'] + $_GET['druhe'];\r\n?&gt;<\/pre>\n<p>Met\u00f3da GET, ktor\u00fa sme pou\u017eili, je vhodn\u00e1 pre akcie, ktor\u00e9 nemenia stav servera, iba zobrazuj\u00fa inform\u00e1cie. Ak by sme ju pou\u017eili napr. na ulo\u017eenie hlasu do ankety, pri ka\u017edej n\u00e1v\u0161teve na\u0161ich str\u00e1nok indexovac\u00edm robotom (napr. Googlebotom) by sa zaznamenal nov\u00fd hlas. Aj preto existuje met\u00f3da POST. Medzi nev\u00fdhody GET-u patr\u00ed tie\u017e obmedzen\u00e1 d\u013a\u017eka parametrov.<\/p>\n<p>Met\u00f3du POST pou\u017eijeme jednoducho \u2013 zmen\u00edme atrib\u00fat METHOD formul\u00e1ra. D\u00e1ta tu nie s\u00fa ukladan\u00e9 do adresy. Pristupujeme k nim pomocou po\u013ea $_POST.<\/p>\n<h3>Za\u0161krt\u00e1vacie pol\u00ed\u010dko<\/h3>\n<p>Samozrejme, \u017ee textov\u00e9 pol\u00ed\u010dka nie s\u00fa jedin\u00fd sp\u00f4sob, ako z\u00edska\u0165 od u\u017e\u00edvate\u013ea inform\u00e1cie. Vezmime si napr. \u0161tvorcov\u00e9 za\u0161krt\u00e1vacie pol\u00ed\u010dko. To nastav\u00ed svoju hodnotu na on, ak je za\u0161krtnut\u00e9. V PHP m\u00e1 nepr\u00e1zdny re\u0165azec pravdiv\u00fa logick\u00fa hodnotu, \u010do sa d\u00e1 vyu\u017ei\u0165 pri tvorbe podmienky. Ako pr\u00edklad uvediem zdrojov\u00fd k\u00f3d s\u00faboru uvar.php:<\/p>\n<pre>&lt;form action=\"uvar.php\" method=\"post\"&gt;\r\n&lt;input type=\"checkbox\" name=\"cukor\"&gt; s cukrom\r\n&lt;input type=\"submit\" value=\"Uvar k\u00e1vu\"&gt;\r\n&lt;\/form&gt;<\/pre>\n<pre>&lt;?php\r\nif ($_POST['cukor'])\r\necho \"Prajete si k\u00e1vu s cukrom.\";\r\nelse\r\necho \"Prajete si k\u00e1vu bez cukru.\";\r\n?&gt;<\/pre>\n<p>Iste ste zistili, \u017ee odosielac\u00ed formul\u00e1r a prij\u00edmac\u00ed skript m\u00f4\u017eu by\u0165 t\u00e1 ist\u00e1 str\u00e1nka.<\/p>\n<h3>V\u00fdberov\u00e9 pol\u00ed\u010dko<\/h3>\n<p>Gu\u013eat\u00e9 v\u00fdberov\u00e9 pol\u00ed\u010dko je jednou z foriem, ako si u\u017e\u00edvate\u013e m\u00f4\u017ee vybra\u0165 jednu z pon\u00fakan\u00fdch mo\u017enost\u00ed.<\/p>\n<pre>&lt;form action=\"uvar.php\" method=\"post\"&gt;\r\n&lt;input type=\"radio\" name=\"napoj\" value=\"kava\"&gt; k\u00e1va\r\n&lt;input type=\"radio\" name=\"napoj\" value=\"caj\" checked=\"checked\"&gt; \u010daj\r\n&lt;input type=\"checkbox\" name=\"cukor\"&gt; s cukrom\r\n&lt;input type=\"submit\" value=\"Uvar\"&gt;\r\n&lt;\/form&gt;<\/pre>\n<pre>&lt;?php\r\n$napoj = ($_POST['napoj'] == \"kava\") ? \"k\u00e1vu\" : \"\u010daj\";\r\nif (isset($_POST['cukor']))\r\necho \"Prajete si $napoj s cukrom.\";\r\nelse\r\necho \"Prajete si $napoj bez cukru.\";\r\n?&gt;<\/pre>\n<h3>Viacn\u00e1sobn\u00fd v\u00fdber<\/h3>\n<p>Nasleduj\u00faci pr\u00edklad bude trochu n\u00e1ro\u010dnej\u0161\u00ed.<\/p>\n<p>Vysk\u00fa\u0161ajme v\u00fdberov\u00e9 pole (tag SELECT) s mo\u017enos\u0165ou v\u00fdberu viacer\u00fdch mo\u017enost\u00ed naraz (atrib\u00fat MULTIPLE). V tomto pr\u00edpade je nutn\u00e9 da\u0165 za n\u00e1zov SELECTu hranat\u00e9 z\u00e1tvorky, aby sa hodnoty ukladali do po\u013ea.<\/p>\n<pre>&lt;form action=\"vyskum.php\" method=\"post\"&gt; \r\n&lt;select multiple=\"multiple\" name=\"pouzivam[]\"&gt; \r\n&lt;option&gt;CD&lt;\/option&gt; \r\n&lt;option&gt;DVD&lt;\/option&gt; \r\n&lt;\/select&gt; \r\n&lt;input type=\"submit\" value=\"Hlasuj\"&gt; \r\n&lt;\/form&gt;<\/pre>\n<p>Napr\u00edklad, ak v prehliada\u010di vyberiete obidve mo\u017enosti (tla\u010didlom Ctrl),\u00a0<em>$_POST[\u201apouzivam\u2018][0]<\/em>\u00a0bude CD a\u00a0<em>$_POST[\u201apouzivam\u2018][1]<\/em>\u00a0bude DVD.<\/p>\n<p>Pomocou isset zist\u00edme, \u010di premenn\u00e1 existuje, a ak \u00e1no, prejdeme pole pr\u00edkazom foreach.<\/p>\n<pre>&lt;?php \r\nif (isset($_POST['pouzivam'])) \r\nforeach ($_POST['pouzivam'] as $medium) \r\necho \"Pou\u017e\u00edvam $medium. \"; \r\n?&gt;<\/pre>\n<h3>Obr\u00e1zkov\u00e9 tla\u010didlo<\/h3>\n<p>Obr\u00e1zkov\u00e9 tla\u010didlo m\u00e1 oproti be\u017en\u00e9mu jednu zvl\u00e1\u0161tnu vlastnos\u0165 \u2013 odosiela aj s\u00faradnice, kde u\u017e\u00edvate\u013e klikol.<\/p>\n<p>Napr\u00edklad, tla\u010didlo sa vol\u00e1 odosli a met\u00f3da formul\u00e1ra je GET. X-ov\u00e1 s\u00faradnica bude ulo\u017een\u00e1 v premennej\u00a0<em>$_GET[\u201aodosli_x\u2018]<\/em>, Y-ov\u00e1 v\u00a0<em>$_GET[\u201aodosli_y\u2018]<\/em>.<\/p>\n<h3>Bezpe\u010dnos\u0165<\/h3>\n<p>Predstavte si, \u017ee podobn\u00fdm sp\u00f4sobom vytvor\u00edte napr. diskusn\u00e9 f\u00f3rum. Pr\u00edspevky budete uklada\u0165 do s\u00faboru a potom ich vyp\u00ed\u0161ete. Na va\u0161u str\u00e1nku pr\u00edde nejak\u00fd u\u017e\u00edvate\u013e a ako text pr\u00edspevku vlo\u017e\u00ed:<\/p>\n<pre>&lt;script&gt; alert(\"Pozor!\"); \r\n&lt;\/script&gt; \r\n&lt;img src=\"http:\/\/hnusne-reklamy.com\/1.jpg\"&gt;<\/pre>\n<p>Ka\u017ed\u00e9mu n\u00e1v\u0161tevn\u00edkovi, ktor\u00fd sa potom dostane na va\u0161e f\u00f3rum, sa zjav\u00ed JavaScriptov\u00e9 v\u00fdstra\u017en\u00e9 okno a nejak\u00fd obr\u00e1zok (napr. reklama).<\/p>\n<p>To je samozrejme ne\u017eiad\u00face. Preto je potrebn\u00e9 nejako tieto d\u00e1ta zak\u00f3dova\u0165, aby sa z nich stal oby\u010dajn\u00fd text. Na to sl\u00fa\u017ei funkcia htmlspecialchars. Prevedie \u0161peci\u00e1lne HTML znaky na entity.<\/p>\n<p>$prispevok = htmlspecialchars($prispevok); \u2026<\/p>\n<p>Potom sa text na str\u00e1nke zobraz\u00ed doslovne a \u017eiaden skript ani obr\u00e1zok tam nebude.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jedna z najd\u00f4le\u017eitej\u0161\u00edch vlastnost\u00ed PHP je mo\u017enos\u0165 sprac\u00fava\u0165 d\u00e1ta z\u00edskan\u00e9 z HTML formul\u00e1rov (tag FORM). Va\u0161e skripty teraz kone\u010dne z\u00edskaj\u00fa pln\u00fd v\u00fdznam \u2013 budete m\u00f4c\u0165 reagova\u0165 na to, \u010do zad\u00e1 u\u017e\u00edvate\u013e (vol\u00e1 sa to tie\u017e \u201evstup\u201c). Pr\u00edklad na za\u010diatok Najsk\u00f4r si vysvetl\u00edme, ako formul\u00e1re funguj\u00fa. Dajme tomu, \u017ee m\u00e1me s\u00fabor zadaj.html s jednoduch\u00fdm formul\u00e1rom. V [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-388","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/gdm.sosthe.sk\/index.php?rest_route=\/wp\/v2\/pages\/388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gdm.sosthe.sk\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gdm.sosthe.sk\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gdm.sosthe.sk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gdm.sosthe.sk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=388"}],"version-history":[{"count":1,"href":"https:\/\/gdm.sosthe.sk\/index.php?rest_route=\/wp\/v2\/pages\/388\/revisions"}],"predecessor-version":[{"id":389,"href":"https:\/\/gdm.sosthe.sk\/index.php?rest_route=\/wp\/v2\/pages\/388\/revisions\/389"}],"wp:attachment":[{"href":"https:\/\/gdm.sosthe.sk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}