Jakou metodu použít? Jak přenést data do jiného souboru přímo z těla PHP programu pomocí metod GET a POST

Vytvářím web, kde mohou moji uživatelé hodnotit nahrané obrázky. V současné době používám přepínače a tlačítko Odeslat k získání uživatelského hodnocení a jeho uložení do systému. Chtěl bych to změnit tak, aby kód k získávání uživatelských hodnocení používal kliknutí na obrázek. Zatím mám následující kód, ale funguje pouze pro jedno obrázkové tlačítko. Existuje způsob, jak to změnit, abyste získali výsledek v závislosti na tom, na který obrázek jste klikli.

If (isset($_POST["flag_submit_x"])) ( //Proveďte proces hodnocení. )

Existuje způsob, jak bych mohl vytvořit více obrázkových tlačítek a v kódu PHP zjistit, na které tlačítko obrázku bylo kliknuto?

5 odpovědí

Změňte název na název pole name="flag_submit" . Každému obrázku přiřaďte jinou hodnotu a máte to.

Přečtěte si to jako pole na straně php: if (isset($_POST["flag_submit"])) .

Nebo by bylo lepší projít, když $_POST["flag_submit"] a najít všechny hodnoty:

Foreach ($_POST["flag_submit"] jako $value) ( ​​echo $value . " byl kliknuto."; ) T T T T

Ve vašem případě je vám jedno, jakou hodnotu odesílá, stačí vám klíč, který byl použit k odeslání formuláře, protože vždy bude existovat pouze jedna sada klíčů.

První kód mi funguje dobře, změňte název na pole name="flag_submit". Každému obrázku přiřaďte jinou hodnotu a máte to.

Přečtěte si to jako pole na straně php:

If (isset($_POST["flag_submit"]))

Zde je trik, který by mohl pomoci:

Vytvořil jsem HTML stránku formuláře:

Skript, který formulář prezentuje, show_post.php, zní:

Když kliknu na první obrázek, zobrazí se:

Pole ( => Pole ( => 21))

Když kliknu na druhý obrázek, zobrazí se:

Pole ( => Pole ( => 15))

Funguje s Opera, IE a Mozilla.

Můžete mít více prvků se stejným názvem, ale s různé významy, který může obsahovat obrázky, bude odeslána pouze hodnota toho, na který bylo kliknuto.

Pro získání dodatečné informace viz specifikace:

Pro přenos parametrů ze sil se používají především metody POST a GET. Hlavním rozdílem mezi metodami POST a GET je způsob přenosu informací. U metody GET se parametry předávají přes adresní řádek (URL), tzn. v hlavičce HTTP požadavku, zatímco u metody POST jsou parametry přenášeny přes tělo HTTP požadavku a nijak se neprojevují v adresní řádek.

1. Tlačítka - Tag

Tag vytváří tlačítka na webové stránce a jeho akce se podobá výsledku získanému pomocí tagu (s parametrem type="button | reset | submit"). Na rozdíl od tohoto tagu nabízí pokročilé možnosti tvorby tlačítek. Například na takové tlačítko můžete umístit jakékoli HTML prvky, včetně obrázků. Pomocí stylů můžete definovat vzhled tlačítka změnou písma, barvy pozadí, velikosti a dalších parametrů.

Teoreticky by značka měla být umístěna uvnitř formuláře nastaveného prvkem. Prohlížeče však nezobrazují chybovou zprávu a pracují správně se značkou, pokud na ni narazí samostatně. Pokud však potřebujete odeslat výsledek kliknutí na tlačítko na server, musí být umístěn v kontejneru. Závěrečná značka je povinná.

Možnosti:

zakázáno - blokuje přístup a úpravu prvku.

typ - typ tlačítka

value - Hodnota tlačítka, která bude odeslána na server nebo načtena pomocí spritů.

Tlačítko s textem

Parametr DISABLED Blokuje přístup a úpravu tlačítka. V tomto případě se zobrazí šedě a uživatel jej nemůže aktivovat. Navíc takové tlačítko nemůže získat fokus stisknutím klávesy Tab, pomocí myši nebo jinak. Tento stav tlačítka však lze změnit pomocí skriptů.

Aktivní tlačítko Neaktivní tlačítko

Parametr TYP Určuje typ tlačítka, který nastavuje jeho chování ve formuláři. Podle vzhled tlačítka odlišné typy se nijak neliší, ale každé takové tlačítko má své vlastní funkce. Výchozí hodnota: tlačítko.

Argumenty:

tlačítko - běžné tlačítko.

reset - Tlačítko pro vymazání zadaných údajů formuláře a vrácení hodnot do původního stavu.

Odeslat - Tlačítko pro odeslání dat formuláře na server.

Vymazat formulář Odeslat formulář

Parametr VALUE Určuje hodnotu tlačítka, které bude odesláno na server. Na server je odeslána dvojice „jméno=hodnota“, kde je název specifikován parametrem název štítku a hodnota je parametr value. Význam se může shodovat s textem na tlačítku nebo být nezávislý. Parametr value se také používá pro přístup k datům prostřednictvím skriptů.

Odeslat formulář

1.1. Tlačítko (typ vstupu=tlačítko) 1.2. Tlačítko s obrázkem (typ vstupu = obrázek) Tlačítko s obrázkem

Tlačítka s obrázky jsou podobná tlačítku Odeslat, ale představují obrázek. Chcete-li to provést, nastavte type=image a src="image.gif" .

Když uživatel klikne kamkoli na obrázek, na server se odešle příslušný formulář se dvěma dalšími proměnnými - sub_x a sub_y . Obsahují souřadnice uživatele, který kliknul na obrázek. Zkušení programátoři Můžete si všimnout, že názvy proměnných odesílané prohlížečem ve skutečnosti obsahují tečku spíše než podtržítko, ale PHP tečku automaticky převede na podtržítko.

1.3. Tlačítko odeslání formuláře (typ vstupu=odeslat)

Slouží k odeslání formuláře do skriptu. Při vytváření tlačítka pro odeslání formuláře musíte zadat 2 atributy: type="submit" a value="Button text" . Атрибут name необходим, если кнопка не одна, а несколько и все они созданы для !} různé operace, například tlačítka "Uložit", "Smazat", "Upravit" atd. Po kliknutí na tlačítko je skriptu předán řetězec název=text tlačítka.

Není potřeba žádný PHP skript.

1.4. Řada tlačítek (odeslat) pro výběr možnosti akce 2. Tlačítko resetování formuláře (Reset)

Když kliknete na tlačítko reset, všechny prvky formuláře se nastaví do stavu, který byl zadán ve výchozích atributech, a formulář se neodešle.

Není potřeba žádný PHP skript.

3. Zaškrtávací políčko

Zaškrtávací políčka nabízejí uživateli řadu možností a umožňují libovolný výběr (žádná, jedna nebo více z nich).

Bílý
Zelená
Modrý
Červené
Černá

// první sada tlačítek
// druhá sada tlačítek
// třetí sada tlačítek

5. Textové pole (text)

Při vytváření běžného textového pole velikost velikost a maximální povolená délka maxdélka znaků, atribut typu přebírá text hodnoty . Pokud je zadán parametr value, pole zobrazí hodnotu zadanou v proměnné. Při vytváření pole nezapomeňte uvést název pole, protože... tento atribut je povinný.

6. Pole hesla

Úplně stejné jako textové pole, až na to, že znaky zadané uživatelem se na obrazovce nezobrazí.

7. Skryté textové pole (skryté)

Umožňuje předat skriptu některé informace o službě, aniž by se zobrazily na stránce.

8. Rozbalovací seznam (vyberte)

Značka je rozevírací nebo rozbalený seznam a lze vybrat jeden nebo více řádků současně. Hodnota však bude předána poslednímu vybranému tlačítku.

Seznam začíná spárovanými značkami. Tagy umožňují definovat obsah seznamu a parametr value definuje hodnotu řetězce. Pokud je vybraný parametr specifikován v tagu, bude řádek nejprve vybrán. Parametr size určuje, kolik řádků bude seznam zabírat. Pokud je velikost 1 , bude seznam rozbalovací. Pokud je zadán atribut multiple, lze vybrat více prvků ze seznamu. Toto schéma se ale prakticky nepoužívá a s velikostí = 1 nedává smysl.

Bílá Zelená Modrá Červená Černá

Pokud potřebujete vytvořit rozevírací seznam s předvídatelnou sekvencí. Například seznam s roky od 2000 do 2050. Pak se použije následující technika.

9. Víceřádkové pole pro zadávání textu (textová oblast)

Víceřádkové textové vstupní pole umožňuje odeslat nejen jeden řádek, ale několik najednou. V případě potřeby můžete zadat atribut readonly, který zakazuje upravovat, mazat a měnit text, tzn. text bude pouze pro čtení. Pokud je nutné, aby byl text zpočátku zobrazen ve víceřádkovém vstupním poli, musí být umístěn mezi značky.

Je zde parametr zalamování – nastavení zalamování řádků. Možné hodnoty:

vypnuto - deaktivuje zalamování řádků;

virtuals - zobrazí zalomení řádků, ale odešle text tak, jak byl zadán;

fyzické - konce řádků jsou ponechány v původní podobě.

Ve výchozím nastavení značka vytvoří prázdné pole, které je široké 20 znaků a skládá se ze 2 řádků.


Aby víceřádkové textové pole vyhovovalo formátování html (zalomení řádků pomocí značky
nebo
), pak použijte funkci nl2br():

Původně vložený řádek 1 Původně vložený řádek 2 Původně vložený řádek 3

10. Tlačítko pro nahrávání souborů (procházet)

Slouží k implementaci nahrávání souborů na server. Při vytváření textového pole musíte také určit typ typ polí jako "soubor".

Nahrát soubor:

ZPŮSOBY KOMUNIKACE PROHLÍŽEČE SE SERVEREM

Poskytnuté metody HTTP protokol, Trochu. Tento důležitá informace. Jiné cesty nejsou. V praxi se používají dva: GET je přenos dat v adresním řádku, například když uživatel klikne na odkaz. POST - když klikne na tlačítko ve formuláři.

metoda GET

K přenosu dat metoda GET nepotřebujete vytvářet formulář na HTML stránce (nikdo vám nezakazuje používat formuláře pro GET požadavky - to je ale hloupost) - stačí odkaz na dokument s přidáním řetězce dotazu, který může vypadat jako proměnná = páry hodnot jsou kombinovány pomocí ampersandu & a to URL stránkyřádek je doplněn otazníkem "? "

Ale nemusíte používat páry klíč=hodnota, pokud k tomu potřebujete předat pouze jednu proměnnou, musíte za otazník napsat VALUE (ne název).

Výhodou předávání parametrů tímto způsobem je, že klienti, kteří nemohou použít metodu POST (např. vyhledávače) bude stále moci jednoduše předat parametry skriptu pomocí odkazu a získat obsah.

Nevýhodou je, že pouhou změnou parametrů v adresním řádku může uživatel skript otočit nepředvídatelným způsobem, což vytváří obrovskou bezpečnostní díru v kombinaci s nedefinovanými proměnnými a register_globals nebo by někdo mohl zjistit hodnotu důležité proměnné. (jako ID relace) pouhým pohledem na obrazovku monitoru.

Přístup k veřejným stránkám předáním parametrů (vyšší funkčnost)

Přenos informací, které neovlivňují úroveň zabezpečení

Přístup k chráněným stránkám se zadanými parametry

K přenosu informací ovlivňujících úroveň zabezpečení

K přenosu informací, které uživatel nemůže změnit (některé přenášejí text SQL dotazů.

Metoda POST

Přenos dat Metoda POST možné pouze pomocí formuláře na HTML stránku. Hlavní rozdíl mezi POST a GET je v tom, že data se nepřenášejí v hlavičce požadavku, ale v těle, takže je uživatel nevidí. Lze jej upravit pouze změnou samotného formuláře.

Výhoda:

Větší zabezpečení a funkčnost pro požadavky pomocí formulářů POST.

Vada:

Menší dostupnost.

Na co byste jej měli použít:

Přenášet velké množství informací (text, soubory..);

Předávat jakékoli důležité informace;

Chcete-li omezit přístup (použijte například pouze formulář pro navigaci – tato možnost není dostupná pro všechny programy robotů nebo chytače obsahu).

Na co by se nemělo používat:

Bez omezení.

Nahrávání souborů metodou POST

PHP je schopno přijmout soubor stažený pomocí libovolného prohlížeče. To umožňuje stahovat jak text, tak binární soubory. Spolu s PHP autentizací a funkcemi pro práci s souborový systém dostáváte plná kontrola nad tím, kdo smí nahrávat soubory a nad tím, co dělat se souborem po jeho nahrání.

Stránka pro nahrávání souboru může být implementována pomocí speciální formulář, který vypadá asi takto:

//Formulář pro nahrávání souborů Odeslat tento soubor:

Ve výše uvedeném příkladu je třeba "_URL_" nahradit odkazem na skript PHP. Skryté pole MAX_FILE_SIZE (hodnota musí být zadána v bajtech) musí předcházet poli pro výběr souboru a jeho hodnota je maximální přípustná velikost přijatý soubor. Měli byste se také ujistit, že v atributech formuláře zadáte enctype="multipart/form-data", jinak nebudou soubory nahrány na server.

Pozornost

Možnost MAX_FILE_SIZE je doporučení prohlížeče, i když PHP by tuto podmínku také zkontrolovalo. Obejít toto omezení na straně prohlížeče je poměrně snadné, takže byste se neměli spoléhat na všechny soubory větší velikost bude pomocí této funkce zablokován. Nicméně, Omezení PHP ohledně maximální velikost nemožné obejít. Měli byste v každém případě přidat proměnnou ve tvaru MAX_FILE_SIZE, protože to zabrání uživatelům v nervózním čekání při přenosu velkých souborů, jen aby zjistili, že soubor je příliš velký a přenos ve skutečnosti selhal.

Jak definovat metodu požadavku?

Přímo:

Getenv("POŽADAVKA_METODA");

vrátí GET nebo POST.

Jakou metodu použít?

Pokud formulář slouží k vyžádání nějaké informace, například při vyhledávání, pak by měl být odeslán metodou GET. Chcete-li stránku aktualizovat, můžete si ji uložit do záložek a nebo poslat odkaz příteli.

Pokud jsou v důsledku odeslání formuláře zaznamenána nebo změněna data na serveru, měla by být odeslána metodou POST a po zpracování formuláře je nutné přesměrovat prohlížeč metodou GET. POST může být také potřeba, pokud potřebujete převést velký objem data (u GET je to velmi omezené), a také pokud byste si neměli „prosvítit“ přenášená data do adresního řádku (např. při zadávání přihlašovacího jména a hesla).

V každém případě po zpracování POSTu byste měli prohlížeč vždy přesměrovat na nějakou stránku, byť stejnou, ale bez údajů formuláře, aby se při obnovení stránky znovu nezaznamenaly.

Jak přenést data do jiného souboru přímo z těla PHP programu pomocí metod GET a POST? Příklad demonstruje odesílání dat pomocí metod POST a GET současně a přijímání odpovědi ze serveru.

Poslední aktualizace: 1.11.2015

Jedním z hlavních způsobů, jak webová stránka přenáší data, je zpracování formulářů. Formuláře představují speciální prvky HTML značky, které obsahují různé prvky vstup - textová pole, tlačítka atd. A pomocí těchto formulářů můžeme zadat nějaká data a odeslat je na server. A server tato data již zpracovává.

Vytváření formulářů se skládá z následujících aspektů:

    Vytvoření prvku ve značce HTML

    Přidejte k tomuto prvku jedno nebo více vstupních polí

    Nastavení způsobu přenosu dat: GET nebo POST

    Nastavení adresy, na kterou budou zasílány zadané údaje

Pojďme tedy tvořit nová uniforma. K tomu definujeme nový soubor form.php , do kterého umístíme následující obsah:

Přihlášení na stránku Přihlášení:

Heslo:

Atribut action="login.php" formulářový prvek označuje, že data formuláře budou zpracována skriptem login.php, který bude umístěn se souborem formulář.php v jedné složce. A atribut method="POST" označuje, že jako metoda přenosu dat bude použita metoda POST.

Nyní vytvoříme soubor login.php, který bude mít následující obsah:

K získání dat formuláře se používá globální proměnná $_POST. Ona zastupuje asociativní pole data přenášená metodou POST. Pomocí klíčů můžeme získat odeslané hodnoty. Klíče v tomto poli jsou hodnoty atributů názvu vstupních polí formuláře.

Protože atribut názvu vstupní pole login má hodnotu login(), pak v poli $_POST bude hodnota tohoto pole představovat klíč "login": $_POST["login"]

A protože mohou nastat situace, kdy vstupní pole nebude nastaveno, například při přechodu přímo do skriptu: http://localhost:8080/login.php. V tomto případě je vhodné před zpracováním dat zkontrolovat dostupnost dat pomocí funkce isset(). A pokud je proměnná nastavena, pak funkce isset() vrátí true .

Nyní máme přístup k formuláři:

A po stisku tlačítka se zadaná data odešlou do skriptu metodou POST. login.php:

Není nutné odesílat data formuláře do jiného skriptu, data formuláře můžete zpracovat ve stejném souboru formuláře. Chcete-li to provést, změňme soubor formulář.php následujícím způsobem:

Přihlášení na stránku Přihlášení:

Heslo:

Bezpečnost dat

Bezpečnost dat je v PHP velmi důležitá. Podívejme se na několik jednoduchých mechanismů, které mohou zlepšit zabezpečení našeho webu.

Nejprve si ale vezměme formulář z předchozího tématu a zkusme do něj zadat nějaké údaje. Zadejte například „alert(hi);“ do pole přihlášení a „heslo“ do pole hesla:

Po odeslání dat na html označení vůle implementován kód javascript, který zobrazí okno se zprávou.

Vyhnout se podobné problémy Abyste byli v bezpečí, měli byste použít funkci htmlentities():

If(isset($_POST["login"]) && isset($_POST["heslo"]))( $login=htmlentities($_POST["login"]); $password = htmlentities($_POST["heslo" ]); echo "Vaše přihlašovací údaje: $login
Vaše heslo: $password";)

A to i po vstupu html kód nebo javascript budou všechny značky escapovány a dostaneme následující výstup:

Další funkce - funkce strip_tags() umožňuje zcela vyloučit html značky:

If(isset($_POST["login"]) && isset($_POST["heslo"]))( $login=strip_tags($_POST["login"]); $password = strip_tags($_POST["heslo" ]); echo "Vaše přihlašovací údaje: $login
Vaše heslo: $password";)

Výsledkem jeho činnosti se stejným vstupem bude následující výstup.




Horní