Učíme se PHP online a nekupujem knihy :o)

>> Pro všechny, kdo mají rádi tento jazyk nebo pro ty, kteří se v něm chějí zdokonalit.



Lekce 7: Dotazy GET a POST




- Příkazy $_GET a $_POST se používají při práci s formuláři.
- Jedinej rozdíl mezi GET a POST je ten, že přes metodu POST se data přenášejí v HTTP objektu, takže nejsou vidět v URL adrese.
- Přes GET jak už nejspíš tušíte, se data přenášejí jako text a jsou vidět v URL.
- Pro práci s těmito metodami je nutné zvládat jazyk HTML (aspoň znát tvorbu formulářů).


Tvorba formulářů


- Jako první si ukážeme, jak vytvořit formulář v HTML.
- Nebudu se moc zabývat a komentovat HTML, budu předpokládat, že máte potřebné znalosti.

// tento HTML kod je psany v souboru index.php na prvnich par radcich
- Jen tak okrajově... form parametr action určuje php soubor, kde je logika dotazu (co se má vykonat). A method je právě metoda, která má být použita pro přenos dat.
- V input parametr name určuje název dotazu, který se bude používat jako proměnná.
- Takže máme jednoduchý formulář a teď si ukážem, jak použít metodu GET v PHP.
if (isset($_GET['submit'])) // pokud se stiskne tlacitko odeslat
{
    $jmeno = $_GET['jmeno']; // priradime jmeno do nove promenne
    $heslo = $_GET['heslo']; // priradime heslo do nove promenne
    
    echo "Vaše jméno je $jmeno a heslo $heslo"; // vypiseme
}
- Celkem nic težkého že? Jinak příkaz isset(), který je v podmínce si přeložte jako - pokud je nastaven.
- A do hranatých závorek se píše název toho objektu, ze kterého chceme získat informace.
- Ale toto bych osobně moc nepoužil, protože přánášet jméno a heslo přes metodu GET není moc bezpečné. Spíš tedy vůbec, protože vše po odeslání vidíte jako text v URL! Proto použijeme metodu POST.

Pozor: Nikdy nepoužívejte metodu GET pro odesílání citlivých informací. Vše je vidět v URL!
// zde staci zamenit $_GET za $_POST
$jmeno = $_POST['jmeno'];
$heslo = $_POST['heslo'];
- Dále je nutné ještě v HTML formuláři nastavit jako metodu POST.
- Je ještě možné použít příkaz $_REQUEST, který nerozlišuje mezi GET a POST, ale určuje se automaticky podle metody formuláře.
// opet by stacilo zamenit $_GET za $_REQUEST
$jmeno = $_REQUEST['jmeno'];
$heslo = $_REQUEST['heslo'];
- Zde se metoda přenosu bude řídit podle formuláře.

Pozor: Jak vidíte, tak všechny metody $_GET, $_POST a $_REQUEST musí být velkými pismeneny!


Práce s URL


- Určitě jste si všimli, že některé weby mají URL trochu jinou, delší a někdy dost nesrozumitelnou.
- Například http://mujweb.cz/index.php?id=10 nebo něco podobného.
- Když si to rozeberem, tak předpokládám, že toto http://mujweb.cz/index.php chápete bez problémů a nyní nastavá ta část dotazu (metoda GET) ?id=10.
- Jak tedy vytvořit takovou URL? Tak se na to podiváme z pohledu kódu.

if (isset($_GET['moje'])) // pokud bude GET dotaz s nazvem "moje"
{
    echo "Můj tajný text!"; // vypise text
}
- Teď stačí do URL doplnit: http://mujweb.cz/index.php?moje a zobrazí se tajný text.
- Můžeme udělat dotaz takový jako v úvodu, že tam budě nějaké id s hodnotou.
// pokud bude identifikator "moje" a bude se rovnat "auto"
if (isset($_GET['moje']) && $_GET['moje'] == "auto")
{
    echo "Moje tajné auto"; // vypise text
}
- Po takové úpravě bude URL pro vypsání vypadat takto: http://mujweb.cz/index.php?moje=auto.
- Dále pak máme spojování více dotazů. Co třeba, aby auto mohlo být bílé nebo černé?
// pokud bude identifikator "moje" a bude se rovnat "auto"
if (isset($_GET['moje']) && $_GET['moje'] == "auto")
{
    if (isset($_GET['bile'])) // pridame dalsi dotaz na barvu "bile"
    {
	    echo "Auto je bílé";
    }
    
    if (isset($_GET['cerne'])) // pridame dalsi dotaz na barvu "cerne"
    {
	    echo "Auto je černé";
    }
}
- Je to vlastně taková nástavba původního dotazu. Takže URL bude vypadat: http://mujweb.cz/index.php?moje=auto&bile.
- Všimněte si, že dotazy se spojujou pomocí ampersandu &.


Odkazy


- Každého snad napadlo mít nějaké menu a po kliknutí na odkaz by se měnila URL na index.php?id=0 na index.php?id=1.
- Tady už nastává trochu komplikovanější část. Budeme mít index.php, kde bude hlavní stránka s menu.
- Víme, že v menu budou 3 odkazy.

Odkaz A
Odkaz B
Odkaz C
- V odkazu stačí zadat pouze samotný dotaz, není nutné zadávat celý, protože se bude měnit pouze dotaz.
- Teď, můžeme použít třeba switch na změnu stránek.
// pokud bude nastaven dotaz "id" a nebude prazdny (bude mit hodnotu)
if (isset($_GET['id']) && !empty($_GET['id']))
{
    switch ($_GET['id']) // projdeme stranky
    {
	    // seznam stranek
	    case "aaa": echo "A"; break;
	    case "bbb": echo "B"; break;
	    case "ccc": echo "C"; break;
    }
}
- Místo echo ve switch si můžete dát cokoliv. Nejspíše nějaký include.
- Teď se dostáváme k bodu, kdy se naučíme další příkazy - include, include_once, require a require_once.
- Příkaz include vkládá soubor (většinou PHP soubor) do stránky. Pomocí přípony _once se vloží pouze jednou.
- U příkazu require je to stejné, jen s tím rozdílem, že soubor je pro stránku potřebný. Takže pokud někde v souboru, který vkládáme přes require nastane chyba, tak to vypíše fatal error. U include to vypíše pouze error v místu, kam vkládáme soubor.
- Dále je tu další příkaz empty(), který nám kontroluje, zda dotaz bude mít nějakou hodnotu

Dodatek: Používejte require_once než klasický require. A pouze na soubory, které nutně stránka potřebuje (nastavení, knihovny apod.).

- Nyní se vrátíme opět k našim odkazům. Jak jsem předtím řekl, tak echo nahradíme za include_once, ale musíme ošetřit, aby ten soubor existoval.
// pokud bude nastaven dotaz "id" a nebude prazdny (bude mit hodnotu)
if (isset($_GET['id']) && !empty($_GET['id']))
{
    $soubor = null; // uklada nazev stranky, pro kterou je dotaz
    
    switch ($_GET['id']) // // projdeme stranky
    {
	    // seznam stranek
	    case "aaa": $soubor = "A"; break;
	    case "bbb": $soubor = "B"; break;
	    case "ccc": $soubor = "C"; break;
    }
    
    if ($soubor) // pokud dotaz bude stejny jak nazev dotazu z odkazu
    {
	    // pokud stranka bude existovat, tak ji nacte, jinak nacte hlavni stranku
	    include_once ((file_exists($soubor)) ? $soubor : "main").".php";
    }
}
else include_once 'main.php'; // pokud dotaz bude spatny nebo zadny
- Jak vidíte, tak to moc těžké není. Jen se tu objevil nový příkaz (funkce) file_exists(), který ještě neznáme. Ale jen název napovídá, tak tato původní funkce zjišťuje, jestli soubor existuje nebo ne a vrací true nebo false.
- Můžete si všimnout, že u proměnné $soubor je přiřazena hodnota null. To znamená, že proměnná je pouze nadeklarována (vytvořena).
- Jinak pokud stránka nebude existovat, tak stránka main.php nesmí být stejná, ve které je tento kód! To znamená, že to bude jiná stránka, třeba novinky, ale né index, ve kterém je tento kód.


Dobrovolný domácí úkol


1) Vytvořte GET funkci (dotaz), která bude mít 2 číselné parametry, které se sečtou a vypíšou na stránku. Tedy URL bude vypadat takto - index.php?a=10&b=20 a na stránku se vypíše součet, takže 30.

if (isset($_GET['a']) && !empty($_GET['a'])) // dotaz A
{
    if (isset($_GET['b']) && !empty($_GET['b'])) // dotaz B
    {
	    echo $_GET['a'] + $_GET['b']; // vypise vysledek
    }
}
2) Vytvořte PHP soubor, kde na prvních řádcích bude v proměnné uložené heslo. Potom vytvořte jednoduchý formulář, kde uživatel zadá jméno, heslo a icq. Toto vše se bude přenášet přes metodu POST a pokud uživatel zadá správné heslo, tak to napíše na stránku jeho jméno a icq. A pokud uživatel zapomene zadat nejaký údaj nebo heslo bude špatně, tak tuto informaci vypíše na stránku.
Jméno: Heslo: ICQ:
$tajneHeslo = "mimic"; // tajne heslo

if (isset($_POST['submit'])) // po zmacknuti tlacitka odeslat
{
    if ($_POST['jmeno'] && $_POST['icq'] && $_POST['heslo']) // pokud vstup nebude prazdny
    {
	    if ($_POST['heslo'] == $tajneHeslo) // pokud heslo bude spravne
	    {
		    echo $_POST['jmeno']." má icq: ".$_POST['icq']; // vypise
	    }
	    else echo "Heslo není správné!";
    }
    else echo "Nevyplnili jste všechny údaje!";
}
3) Pomocí URL vypisujte text na stránku. Pokud zadám do URL index.php?vypis=ahoj svete, tak to vypíše "ahoj svete".
if (isset($_GET['vypis'])) echo $_GET['vypis']; // jednoduche ze?


This page was loaded in 0.36479 seconds. © 2011-2025 by mimic | mimic.php5.cz
ICQ contact is 204-517-399