Předávání dat mezi skripty - Český PHP manuál

PHP Manuál Pole Předávání dat mezi skripty - Český PHP manuál

Metoda GET

Data předávaná přes adresní řádek. Třeba http://www.stranka.cz/index.php?…. Tím jsme skriptu index.php předali proměnnou "clanek" s hodnotou 10 a proměnnou "jazyk" s hodnotou "cesky".

Kromě přímého napsání adresy nebo kliknutí na odkaz se dají data pro GET vygenerovat i formulářem.

Výhody GETu:
  • Jednoduchost - stačí obyčejný odkaz.
  • Adresa se dá z adresního řádku zkopírovat a následně uložit, poznamenat, přidat do záložek nebo někomu poslat.
Nevýhody:
  • Data je potřeba zapsat v takovém formátu, jaký se dá v adrese použít, tj. všechny nepovolené znaky nahradit procentem a jejich ASCII kódem v hexadecimálním tvaru (např. mezera je %20).
  • Délka dat je omezená. Nevím kolik to přesně je, ale megabajt takhle asi nepošlete.
  • Data jsou součástí adresy, takže se nedají nijak skrýt a navíc si je prohlížeče cachují. Takže je nemůžeme použít pro posílání hesel a podobných citlivých údajů.
Použití:
  • Kódy stránek a článků, souřadnice na mapách a podobné věci.

Metoda POST

Data z formulářů posílaná z prohlížeče na server samostatným kanálem, nezávisle na adrese. Čtou se obdobným způsobem jako při metodě Get, ale používají pole $_POST. Posílat se dají pouze z formulářů, podrobně si to vysvětlíme za chvíli.

Výhody:
  • Data jsou skrytá, prohlížeče je necachují a za určitých okolností se dají i šifrovat - vhodné i pro hesla.
  • Bez omezení typu dat - poslat jde cokoli od jednoduchých slov přes víceřádkové texty až po celé soubory.
Nevýhody:
  • Na stránku vygenerovanou POSTem se nedá nijak odkázat, je potřeba vždycky znovu vyplnit formulář.
  • Refresh se chová na různých prohlížečích různě: některé nabídnou znovuodeslání dat, některé stránku načtou jen tak bez ničeho.
Použití:
  • Přihlašovací formuláře, návštěvní knihy, fóra, posílání souborů a tak.

Cookies

Data ukládaná do speciálních souborů na počítač uživatele (konkrétní podoba závisí na prohlížeči, uživatel do nich obvykle nevidí). S formuláři nemají nic společného, skripty je vytvářejí pomocí speciálních funkcí.

Výhody:
  • Relativně trvalé úložiště, které přežije i vypnutí prohlížeče.
  • Celé to je na straně návštěvníka, na serveru se nemusí nic ukládat.
  • Celkem jednoznačná identifikace počítačů (pokud vím, přenášet nejdou).
Nevýhody:
  • Dají se zakázat, takže se na ně nedá spolehnout.
  • Dají se kdykoli smazat, takže se na ně nedá spolehnout.
  • S trochou šikovnosti se dají ručně otevřít, takže bych je radši nepoužíval na hesla a jiné citlivé věci.
Použití:
  • Uživatelské nastavení stránek, trvalé přihlašování, datum poslední návštěvy apod..

Sessions

Data krátkodobě uložená někde na serveru, po zavření prohlížeče obvykle zmizí. Opět nejsou vázána na formuláře. Použití si předvedeme až jindy, zatím je nebudeme potřebovat.

Výhody:
  • Fungují vždycky, bez ohledu na nastavení prohlížeče.
  • Nedá se do nich koukat.
  • Nezanechávají stopy v počítačích návštěvníků ani na serveru.
Nevýhody:
  • Existují jenom do zavření prohlížeče.
Použití:
  • Přihlašování uživatelů a různé krátkodobé nastavení, které nechceme ukládat na jindy.

Soubory

PHP má na práci se soubory na serveru sadu funkcí podobnou Céčku, ale je to docela komplikované. V praxi asi využijete jenom funkci file(), která načte daný textový soubor do pole.

Výhody:
  • Nevyžadují žádnou infrastrukturu (databázi apod.).
Nevýhody:
  • Možnost kolize, když se víc uživatelů snaží současně zapisovat do stejného souboru - je potřeba nějak vyřešit zamykání, nebo to risknout. Také pozor na přístupová práva k adresářům (chmod).
Použití:
  • Hlavně pro větší množství trvalých dat, která tvoříme offline a ve skriptech je potřebujeme jenom číst: texty článků, různé seznamy a podobně.

Databáze

Asi nejpoužívanější způsob trvalého ukládání dat. Obsluhuje se pomocí speciálního dotazovacího jazyka, nejčastěji SQL (Structured Query Language). Úvod do databází zabere několik dalších dílů tohoto seriálu, tady jenom stručně shrnu základní vlastnosti.

Výhody:
  • Spolehlivé a relativně pohodlné trvalé ukládání dat libovolného typu.
  • Kolize uživatelů nehrozí, současné přístupy ke stejným datům řeší databázový program automaticky a bezpečně.
  • Možnost výběru dat podle různých kritérií, hledání, třídění, kombinování...
Nevýhody:
  • Špatně ošetřené vstupy se dají snadno nabourat a kdokoli dostatečně šikovný se tak může dostat k datům ve vaší databázi. To je ovšem problém programátora, ne databáze. O tom, jak vstupy zabezpečit, si taky povíme.
Použití:
  • Pro trvalé ukládání věcí, které pošlou návštěvníci: texty ve fórech, články atd.

 

  Aktivity (1)

Manuál pro vás napsal Mircosoft
Avatar
Autor je amatérský pascalista, assemblerista a bastlíř. Profesionálně psal nebo píše v HLASM, Rexxu, Cobolu, ST, LAD, FBD, PHP, SQL, JS, Basicu a pár dalších jazycích, které kupodivu stále existují a používají se :-).

Miniatura
Všechny články v sekci
Pole - Český PHP manuál

 

 

Komentáře

Avatar
Kit
Redaktor
Avatar
Kit:

Hlavní rozdíl mezi metodou GET a POST je ten, že GET používáme při získávání obsahu a POST používáme při odesílání.

Odpovědět 12.9.2012 14:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

To mi úplně nesedí, obojím odesílám i získávám.

Odpovědět 12.9.2012 15:22
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Metodou GET oznámím serveru, kterou stránku chci zobrazit, ale zpravidla se tato informace nikam neukládá. Samozřejmě kromě logů. Metodou POST se posílají data, která se mají serverem nějak zpracovat. To znamená uložit, smazat, modifikovat.

Není to striktní, ale mělo by se to dodržovat. Dokonce se to dá i kombinovat, ale moc se to nedoporučuje.

Jestliže pošlu slovo "heslo" vyhledávači, měl bych použít GET. Pokud bych slovo "heslo" chtěl uložit do DB, měl bych použít POST.

Editováno 12.9.2012 16:15
Odpovědět 12.9.2012 16:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Jo takhle, ok, to zní dobře :)

Odpovědět 12.9.2012 16:50
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Petr Čech (czubehead):

Zdá se mi, že nemůžu na lokálním serveru (XAMPP) číst cookies. Jak to dělám:

<?php
    print_r($_COOKIE);
?>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <link rel="stylesheet" href="etc/style.css">
        <title>Titulek</title>
    </head>

    <body>

    </body>
</html>

Ty cookies mám uložené, to vím.

Odpovědět 17.9.2013 19:12
Why so serious? -Joker
Avatar
Petr Čech (czubehead):

Už jsem to zpravil. Ty cookies šly číst jen z jedné složky a já je chtěl číst z indexu...

Odpovědět 19.9.2013 20:27
Why so serious? -Joker
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.