Kéri a hozzászólást, és kapja meg, mi más. Tanulás, hogy dolgozzon a Get és a Post kérésekkel

Két koncepció van, amelyek szinte minden program számára gyakoriak - ez a bemeneti adatok és a kimeneti kimenet feldolgozása. Ezen az oldalon összpontosítunk a CGI programbevitel feldolgozására. Először is, ahol a bemeneti adatok származnak, és másrészt a bemeneti adatok továbbítása a szerverre. Hatékony CGI programok írása érdekében világos elképzelése van ezekről a dolgokról.

Egy kicsit a http.

A kiszolgáló háromféle kéréseket kap: Get, Post és Head. A webszerver programkérelme a következő:

Get /index.html http / 1.0

Első rész ez az eset A lekérdezési módszer, a második, az index.html, a kért URL, a harmadik, http / 1.0, az ügyfél által használt protokoll.

Két fő lekérdezési módszer érkezik és hozzászólás. Ezek a legtöbb módszer, amely elérhető az Ön számára létrehozásakor. A fejezési módszert ritkán használják a böngésző, mivel csak válaszadatokat kér, és a válasz szerv nem kerül továbbításra ebben az esetben. Például annak ellenőrzésére, hogy az oldal nem változott-e, a böngésző megkapja a címet, de nem generál egy teljes körű adatcserét.

Szerezzen módszert

Alapértelmezés szerint a Get módszert kéréskor használják. A POST módszert csak akkor használjuk, ha az űrlapkérelemben egyértelműen feltüntetik. A CGI programozó számára nagyon fontos, hogy megértsük, hogy a szerkesztési módszer igénylése során ezeket az űrlapokat az URL-vel együtt továbbítják a kiszolgálónak. CGI támogató webszerverek Másolja ezeket az adatokat a Query_String nevű környezeti változónak. Ezután a környezeti változóból származó adatok megszerzésének aggodalma és feldolgozása a CGI programhoz van hozzárendelve.

A lekérdezési karakterlánc URL-je így néz ki:

Http://www.domen-name.com/login.pl?nick\u003dmaks&psw\u003dparol

Jel? elválasztja a lekérdezési karakterláncot az erőforrás URL-ről; Nick és PSW - a szerverre, a MAKS és a PAROL-hoz továbbított változók - értékük.

Postos módszer

A POST módszert akkor alkalmazzák, ha kifejezetten a módszer formanyomtatvány-attribútumban van feltüntetve. Ellentétben a szerkezeti módszerrel, a postai helyeket nem az URL-ben, hanem a lekérdezési testben. A közzétételi lekérdezés nagyrészt hasonló a HTTP válaszhoz. Az első sor egy szabvány lekérdezés http.amelyben a poszt-módszer meg van adva. Lehet, hogy a szükséges további címsorok elválaszthatók a kérés testétől egy üres karakterlánc.

A lekérdezési testet a POST módszer használatakor a program szabványos bemeneti adatfolyamként továbbítja.

Választás a Get és a Post között

Nyilvánvaló, hogy a CGI programozó előtti formák kialakításakor a kérdés a következőképpen szól: melyik módszer alkalmazható. A legtöbb esetben mindkét módszer alkalmazható, és mindkettő jól működik. Vannak azonban olyan helyzetek, ahol egy vagy másik módszer használata bizonyos előnyöket ad.

Tekintsünk több olyan helyzetet, ahol érdemes előnyben részesíteni a kaput vagy a post módszert.

  • Ha azt szeretné, hogy a programot referenciaként hívják, akkor a preferencia meg kell adnia a Get módszert.
  • Ha nem szeretné, hogy a program által továbbított érvek a kiszolgálói jelentésfájlban rögzítsék, használja a Post módszert. Például, ha a forma igényli meghatározó felhasználónevét és jelszavát, akkor nem valószínű, hogy szeretné, hogy a nevek és jelszavak kerülnek a jelentésben fájlt. Ezenkívül nem indokolt az URL részeként átadni a jelszót.
  • Ha az űrlap jelentős méretű, akkor nem szöveges doboz jegyzetekkel és megjegyzésekkel, a poszt-módszert kell használni. Általánosságban elmondható, hogy lehetséges, és ebben az esetben használja a Get módszert, de akkor az URL méretének korlátozásával találkozhat, különbséget operációs rendszer és böngészők (korlátozás a környezeti változók méretének köszönhetően). Könnyebb használni a post módszert.
  • Ha az űrlap fájlmezőt tartalmaz, használja a Post módszert. Ezenkívül ebben az esetben be kell állítania az alapértelmezett attribútum értékét a multipart / űrlap-adatokban.

A böngésző ügyfelei információkat küldhetnek egy webszervernek.

Mielőtt a böngésző adatokat küld, ez kódolja az URL-kódolásnak nevezett sémát. Ebben a páros rendszerben a nevet / értéket egyenlő jelekkel kombinálják, és különböző párokat osztanak meg az ampersand.

NAME1 \u003d Value1 & Name2 \u003d Value2 & Name3 \u003d Value3

A tereket eltávolítják és kicserélik egy + szimbólummal, és bármely más, nem alfa-numerikus karaktereket hexadecimális értékekkel helyettesítik. Miután az információ kódolva van, a kiszolgálóra megy.

Szerezzen módszert

A GET módszer az oldal kérésére hozzáadott kódolt felhasználói információkat küld. Az oldalak és a kódolt információk egymástól elkülönülnek? írjon alá egy kérdést.

http://www.test.com/index.htm?name1\u003dValue1&name2\u003dvalue2.

  • A Get módszer létrehoz egy hosszú karakterláncot, amely a kiszolgálón megjelenik a böngésző "Hely" mezőjében.
  • A Get módszer csak 1024 karakterre korlátozódik.
  • Soha ne használja a Get módszert, ha van jelszó vagy más bizalmas információ a kiszolgálónak.
  • A bináris adatok, például képek vagy szöveges dokumentumok átvitelére nem használható a szerverre.
  • A Get módszer által küldött adatokhoz való hozzáférés a Query_String környezet változó segítségével érhető el.
  • A PHP egy Associative $ _get tömböt biztosít az összes küldött információ eléréséhez a Get módszerrel.

ha ($ _ get ["Név"] || $ _get ["Welcome". $ _get ["Név"]; echo "te vagy." $ _get ["életkor"]. "Évek () ;)

Név: Kor:

Postos módszer

Módszer Post. Információt küld a HTTP-címeken keresztül. Az információ kódolva van a módszer esetében Kap.és a címbe kerül Query_String..

  • A post módszernek nincs korlátozása a küldeni kívánt adatok méretére.
  • A POST módszer alkalmazható az ASCII küldésére, valamint a bináris adatokra.
  • A POST módszer által küldött adatok egy HTTP fejlécen keresztül haladnak át, így a biztonság a HTTP protokolltől függ. A Secure HTTP használatával győződjön meg róla, hogy az információ védett.
  • A PHP egy Associative $ _post tömböt biztosít az összes küldött információ eléréséhez a post módszerrel.

Próbálja ki a következő példát a forráskódot a teszt.php parancsfájlba.

if ($ _ POST [ "NAME"] || $ _POST [ "kor"]) (ha (preg_match ( "[^ a-za-Z" -] "$ _ utáni [" name „])) (DIE ("Érvénytelen név és név Alpha");) Echo "Welcome". $ _Post ["Név"]; echo "Te vagy. $ _Post [" életkor "]." Évek ();

Név: Kor:

Változó $ _Request

PHP változó $ _REQUEST Tartalmat tartalmaz $ _Get., $ _Post., Szóval én. $ _Cookie.. Meg fogjuk vitatni a változót $ _Cookie.Amikor megmondjuk a cookie-kat.

A PHP $ _REQUEST változó felhasználható a GET és POST módszerekkel küldött űrlapadatokból származó eredmény eléréséhez.

Közös közöttük, az a tény, hogy egyenlően dolgoznak. A különbség közöttük technikailag nem. De van ideológiai különbségek.

A PHP keretében elmondom őket. Kérjük, vegye figyelembe, hogy a PHP HTTP-protokollnak közvetett hozzáállása van, mert a csere hTML oldalak És a PHP egyszerűen kiterjeszti a lehetőséget és a másikat.

A lekérdezést az adatok küldéséhez használják. (Emlékeztetem, hogy technikailag ugyanúgy működik).

Ezért a PHP keretében az e-címre támaszkodva a következőképpen történt:
1. Minden alkalommal, amikor a PHP elindul, a Superglobal tömbök ($ _get, $ _post) alapértelmezés szerint jönnek létre.
2. Ha kérdésjel van a lekérdezési karakterláncban (?). Aztán mindent tekintenek utána paraméterek Kéréseket kapnak, amelyeket a "Key" formátumban mutatnak be \u003d "érték", és egy leválasztóként használnak egy ampersand jel (&)
Példa:
Get /index.php?name\u003dAndrey&surname\u003dhalkin
Ez egy lekérdezési karakterlánc, itt 2 paraméter. Ezek a paraméterek esnek a $ _get tömbbe.
3. $ _post tele van egy másik módon. A tömb tartalma kitölti a "kérés fejléceket". Vagyis a szemtől elrejtett helyről kifejezetten. Az egész rutin az ilyen címsorok létrehozásához egy böngészőt vesz igénybe. Bár néha valami kézikönyvben szerkesztik a címsorokat.

Leggyakrabban a postai kérelmet az űrlapok (adatok küldése) használják.

Például van egy űrlapunk, hogy bejelentkezzen 2 mezőbe Bejelentkezés és jelszó.

Képzeld el, hogy a GET módszert használjuk. Majd ha küld egy űrlapot, mi pedig a következő címre /Login.php?Login\u003dandrey&password\u003d123 Elfogadom, hogy ez nem biztos, hogy az ilyen információkat. Bárki megnyithatja a böngészőt, és elindíthatja a webhely címét. Láthatja a jelszavát és bejelentkezését.

De ha a post módszerrel megadjuk, akkor a következő kérést kapjuk:
Post /login.php (login \u003d andrey & password \u003d 123) A zárójelben elrejthető, és nem kerül mentésre a böngészőben.

Általában összefoglalva:
Szerezd meg egy bizonyos oldalt egy adott formában (válogatás, az aktuális oldal a blogban, a keresési karakterlánc stb.).
Post - a mandreladatok esetében, amelyek nem befolyásolják az oldal megjelenítését, ahogyan ezek az adatok csak a szkript végrehajtásának eredményét befolyásolják (loginok, jelszavak, hitelkártyaszámok, üzenetek stb.).

És még egy jó hír kombinálható, például
Post /index.php?page\u003dlogin (login \u003d andrey & password \u003d 123) Azt hiszem, már elég elmagyaráztam, hogy kiderül, és milyen paraméterek, amelyekre tömb esik.

A modern webes források nem csak tájékoztatást adnak a látogatónak, hanem kölcsönhatásba lépnek vele is. A felhasználóval való kölcsönhatáshoz néhány információt kell kapnia tőle. Az adatok megszerzéséhez számos módszer létezik, nagyon gyakori módszerek. Kap. és Post.. És B. PHP. Az adatátviteli módszerek támogatása Kap. és Post.. Lássuk, hogyan működnek ezek a módszerek.
Szerezzen módszertAdat kAP. Továbbítják őket a hívott forgatókönyv URL-címéhez, amelyet a beérkezett információk feldolgozására szántak. A magyarázat ez a módszer Tárcsázza az erőforrás URL-címét a címsorban a címsorban, és adja hozzá a kérdőjel először (?), Majd a szám szám \u003d 10. például

http: //domure.ru/script.php? Num \u003d 10


Ha van helyi szerver, akkor általában a domain lesz a localhost, majd az előző bejegyzés megjelenik

http: //localhost/script.php? Num \u003d 10


Ebben az esetben a számparamétert 10-re továbbítjuk. A következő paraméterek hozzáadásához a szkriptet kell használni - ampersant (&), például

http: //domure.ru/script.php? Num \u003d 10 & Type \u003d New & V \u003d Szöveg


Ebben az esetben három paramétert továbbítottunk a szkripthez: NUM 10 értékkel, írja be az "Új" és V értéket a "szöveg" értékkel.
Ahhoz, hogy ezeket a paramétereket a szkriptben be kell használni, beépített tömböt kell használnia. $ _Get. $ _Get ["num"], $ _get ["Type"], $ _ get ['v]]. Ezek a tömbelemek tartalmazzák a továbbított paraméterek értékeit. A példa bemutatásához hozzon létre egy script.php fájlt az alábbiak szerint.



A GET módszer ellenőrzése PHP-ben


echo ($ _get ["szám"]. "
");
echo ($ _get ["Type"]. "
");
echo ($ _get ["v"]);
?>


És hívja ezt a fájlt a böngészőbe

http: //at/script.php? NUM \u003d 10 & TYPE \u003d Új & V \u003d szöveg


És megjelenik a továbbított paraméterek a böngészőablakban. De ha ezt a fájlt hívja további paraméterek http: ////script.php, akkor látni fogja a hibákat, amelyek tolmácsot adnak PHP.Hogy nincs ilyen elem a $ _get. Ezeknek az adatoknak a felhasználó ellenőrzése nem egy cikket is kiemelhet, így ebben a cikkben nem fogok megérinteni ezt a pillanatot.
Ahogy valószínűleg megérti, hogy kényszerítse a felhasználót, hogy tárcsázza az adatokat a címsorban nem túl jó és teljesen kényelmetlen. Ezért, hogy adatokat fogadjon el a felhasználónak, a HTML-formátumot kell használnia. Írjon egy egyszerű HTML-formát.


Adja meg a számot

Van számítógéped?

A te hozzászólásod:





Megjegyzem a létrehozott űrlapot. Formákat hoznak létre az űrlapcímke. Az űrlap mezők által létrehozott INPUT, SELECT, textarea címkék (akkor tovább). A Form tag, az URL-t a szkript meghatározott cselekvési tulajdonság, amit kapnak ezek a formák. A mi esetünkben már megadtuk a már meglévő script.php fájlt. A módszer attribútum beállítja az adatküldés módját. Jelzük a módszert Kap.. Most már tudjuk, hogy milyen fájlokat fognak továbbítani, és milyen módon kell kitalálni, hogy hol keressük őket?!
Ez az űrlapadatok átkerülnek a webes erőforrás-böngészőbe az URL-hez való hozzáadásával: Először kérdőjel (?), Majd a paraméterek elválaszthatók az ampersant (és) elválasztva. A paraméter nevét a név attribútumból fogják venni, amelyet bármely mező mezőből ki kell írni. A paraméter értéke a mező típusától függ. Ha a mező szöveges, a felhasználó által megadott szöveg lesz a felhasználó. Ha a mező listája lesz, a kapcsolók vagy zászlók csoportja, akkor a kiválasztott elem értékének értéke a paraméter értéke lesz. Megmagyarázom a formájunk példáját. Ha a felhasználó belép a 10-es számba a beviteli mezőbe, akkor a paraméter neve Num lesz (a bemeneti címke név attribútumának értéke), és az érték lesz az érték (felhasználó által megadott szám). Ennek megfelelően a böngésző egy "szám \u003d 10" párot alkot. Ha a felhasználó közül a felhasználó kiválasztja az "Igen" opciót, akkor a paraméter neve lesz (a névcímke érték attribútuma), és az érték értéke lesz (az értékcímke értékének értéke) ). Ennek megfelelően a böngésző "típusa \u003d igen" párot alkot.
Most ezt az űrlapot a forma.php oldalra helyezik.



Adatátviteli űrlap a Get és a PHP használatával



Adja meg a számot

Van számítógéped?

A te hozzászólásod:







Adjon meg minden értéket az űrlap mezőkbe, és kattintson a "Küldés" gombra. A böngésző gomb megnyomása után megjelenik egy másik oldal (Script.php), és megjelenik a böngészőablak megadott adatai. Úgy gondolom, hogy világos, miért: A böngésző adatátviteli adatokat a Script.php-hez, és a szkriptben ezeket az adatokat feldolgozzák és megjelenítik.
Postos módszerNézzük meg, hogyan működik a módszer Post..
Ezeket a módszereket Post. HTML-űrlapot kell használnia. Hogyan emlékezzünk arra, hogy az űrlap módja felelős az űrlap adatlapjának elküldésének módjáért. Ezért meg kell adnia a hozzászólás értékét a módszer attribútumában. Ellenkező esetben az űrlap lehet ugyanaz, mint a szerkezeti módszer. Megváltoztatjuk az alakunkat, amelyet már használtunk az adatok átvitelére a Post módszerrel történő átvitelhez.


Adja meg a számot

Van számítógéped?

A te hozzászólásod:





Amint láthatja, az űrlap ugyanaz marad, kivéve a módszer és a művelet attribútumait. Most az adatok átkerülnek a Script_Post.php parancsfájlba. Helyezze el az űrlapot a forma_post.php oldalra.



Posta és PHP adatátviteli űrlap



Adja meg a számot

Van számítógéped?

A te hozzászólásod:







Most írjon egy parancsfájlt, amely feldolgozza az űrlapadatokat.
Az adatszkriptben átvitt módszer beszerzése Post. Be kell használni a beépített tömböt $ _Post.. A tömb gombjai a paraméterek nevei lesznek. A mi esetünkben használni kell $ _Post ["Num"], $ _post ["Type"], $ _ Post ["V"]. Ezek a tömbelemek tartalmazzák a továbbított adatok értékeit. Ahogy látja a különbséget a Get módszer használatával, csak csak egy sor $ _post használatával fejeződik ki. Ezért nem lesz nehéz írni egy script_post.php fájlt:



A PLP POST módszer ellenőrzése


echo ($ _post ["szám"]. "
");
echo ($ _post ["Type"]. "
");
echo ($ _post ["V"]);
?>


Most nyissa meg a Forma_Post.php fájlt a böngészőben. Adjon meg néhány adatot az űrlap mezőbe, és nyomja meg a "Küldés" gombot. Most, valószínűleg észrevette, hogy a különbség a post módszer között a Get - ezek a formák nem jelennek meg a böngésző címsávában. Adatmód Post. Nem adhatja át a böngésző címsávján. Ezt az alapvető különbséget meg kell emlékezni.
BAN BEN PHP. A függetlenségben milyen módszer adatokat küldtek - a post módszerrel vagy a szerkezeti módszerrel - az adatok beszerzése $ _REQUEST tömb használatával. A GET és POST módszerek összehasonlításaA GET módszer használata esetén az adatokat az URL-hez adjuk hozzá. Így láthatóak lesznek a felhasználó számára, hogy a biztonság szempontjából nem mindig jó. Továbbá a továbbított adatok maximális mennyisége a böngészőtől függ a böngésző címsorának legnagyobb megengedett számából.
A POST módszer használata esetén az adatok nem lesznek láthatóak a felhasználó számára (a böngésző címsorában nem jelennek meg). És ezért védettek, ezért az adatok feldolgozása jobban védett a biztonság szempontjából. Továbbá a továbbított adatok mennyisége gyakorlatilag nem korlátozott.
Az adatátvitel módjának kiválasztásakor figyelembe kell vennie a leginkább elfogadható módszerrel megadott és leállási funkciókat.

HTML űrlap. Arrays $ _post és $ _get

HTML űrlap. Az adatok küldésére szolgáló módszerek a szerverre

A HTML-formákkal valószínűleg már találkozott:

Adja meg nevét:

A kód mentése a HTML fájlban, és megtekintheti kedvenc böngészőjével, megjelenik a szokásos HTML űrlap:

Címke

páros végső címke
Valójában megkérdezi az űrlapot. Az jellemzői mindkettő választható:

  • action - jelzi az URL-t (teljes vagy rokon), amelyhez az űrlapot elküldi. Ha ez az attribútum nem határozza meg, a legtöbb böngésző (pontosabban szólva, az összes böngésző által ismert böngésző) küldjön egy űrlapot az aktuális dokumentumnak, azaz "maguk". Ez egy kényelmes csökkentés, de a HTML szabvány szerint a cselekvési attribútum szükséges.
  • a módszer az űrlap küldésének módja. Két közülük van.
    • Get - Küldés űrlapadatok a címsorban.
      Észrevenné a jelenlétét a szimbólum URL-jének végén "?" És a következő adatok a formátum paraméter \u003d érték. Itt a "Paraméter" megfelel az űrlapelemek név attribútumának értékének (lásd az alábbiakban: Teg ), és az "érték" - az érték attribútumának tartalma (például például tartalmazza a felhasználói bemenetet az azonos címke szövegmezőbe ).
      Például próbáljon meg valamit keresni a Yandexben, és figyeljen a böngésző címsávára. Ez egy szerkezeti módszer.
    • Post - forma Ezeket a lekérdezési testbe küldjük. Ha nem teljesen tisztázott (vagy teljesen tisztázott), mi az is - ne aggódj, hamarosan visszatérünk erre a kérdésre.
    Ha a módszer attribútum nincs megadva - a juttatás.

Címke - Megadja a Típus attribútum által meghatározott űrlapelemet:

  • A "szöveg" érték egy sor bemeneti mezőt állít be
  • Az "Submit" érték beállítja a gombot, amikor az űrlapot a kiszolgálóra megnyomja

Más értékek lehetségesek (és - nem az egyetlen címke, amely meghatározza az űrlap elemet).

Tehát mi történik, amikor megnyomjuk az "OK" gombot?

  1. A böngésző az alakban szereplő elemek böngészése és a nevükből és az értéktől származik ezek az űrlapok. Tegyük fel, hogy a VASYA név bevezetésre került. Ebben az esetben ezek az űrlapok - NAME \u003d VASYA & OKBUTTON \u003d OK
  2. A böngésző létrehozza a kapcsolatot a kiszolgálóhoz, kérést küld az Action tag attribútumban megadott kiszolgálóra
    A küldő megadott módszer Method jellemzőt (ebben az esetben - el), adatátvitel a lekérdezés.
  3. A szerver elemzi a fogadott lekérdezést, válaszoljon, elküldi azt a böngészőnek, és bezárja a kapcsolatot
  4. A böngésző megjeleníti a kapott dokumentumot a kiszolgálón.

Ugyanazt a lekérdezést manuálisan küldjük (a Telnet segítségével) így néz ki (feltételezzük, hogy domain név Site - www.example.com):

Telnet www.example.com 80 get /cgi-bin/form_handler.cgi?name\u003dvasya&okbutton\u003dok http / 1.0 \\ r host: www.example.com \\ r \\ n

Ahogyan, valószínűleg azt találtuk, már kitalálták, megnyomva a küldött gombot az űrlapon a "Get" küldésének módjával hasonló a megfelelő URL bemenetéhez (kérdőjel és űrlap adatok a végén) a böngésző címében rúd:

Http://www.example.com/cgi-bin/form_handler.cgi?name\u003dvasya&okbutton\u003dok

Valójában a Get módszer mindig akkor használható, ha dokumentumot kér a kiszolgálóról, egyszerűen az URL-jének megadásával, vagy a linkre kattintva. Használ Az URL egyszerűen adjon hozzá kérdőjeleket és adatait.

Talán mindezek műszaki adatait és gyakorlat a Telnet-Ohm tűnik hihetetlenül unalmas, sőt szükségtelen ( „és mi van a PHP?”). És hiába. :) Ezek a munka alapjai a HTTP protokollon, amelyet minden webes programozónak tudnia kell, és ez nem az elméleti tudás - mindez hasznos a gyakorlatban.

Most cserélje ki az űrlapunk első karakterláncát a következőkre:

Rámutattunk a "posta" küldési módjára. Ebben az esetben az adatokat több más módon küldjük el a szervernek:

Telnet www.example.com 80 Post /cgi-bin/form_handler.cgi http / 1.0 \\ r \\ n host: www.example.com \\ r \\ n Tartalom típus: Alkalmazás / X-www-form-urlencoded \\ N tartalomhossz: 41263 \\ r \\ r \\ n név \u003d VASYA & OKBUTTON \u003d OK

A post módszer használatakor ezeket az űrlapokat a "két belépés" után küldjük el - a lekérdezési testben. Mindezek a fentiek szerint egy lekérdezési fejléc (és amikor a szerkezeti módszert használtuk, ezeket a formákat elküldték a címben). Annak érdekében, hogy a szerver tudja, hogyan kell befejezni a kérés testületeinek olvasását, a cím a tartalomhossz-vonalban jelen van; Körülbelül ugyanez, hogy az űrlapadatokat a paraméter1 \u003d érték1 \u003d Value1 és paraméter2 \u003d Value2 ... és az értékek URLENCODE-ként továbbítják - azaz a szerver, de a lekérdezési testben, Jelentések A tartalom fejléc -típus: Alkalmazás / X-www-form-urlencoded.

A post módszer előnye a korlátozás hiánya a karakterlánc hosszában az űrlapadatokkal.

A post módszer használatakor lehetetlen küldeni egy űrlapot, csak "a linken megy", ahogy a Get.

A post-formátum használata esetén a cselekvési attribútumban megadhatja a kérdőjel és a paraméterek elérését. Így a post módszer mind a Get módszert is tartalmazza.

Arrays $ _get és $ _post

Tehát, a formák a fő út közötti adatcserét a webszerver és a böngésző, vagyis biztosítani interakció a felhasználó - sőt, amelyre szüksége van, webes programozás.

Tekintsünk egy egyszerű példát:



ha ($ _server ["request_method"] \u003d\u003d "posta") (
Echo "

Helló, "$ _Post [" Név "]."

!" ;
}
?>
">
Adja meg nevét:




A 8-12 vonalak formája két elemet tartalmaz: név és okkutton. A módszer attribútum a POST form method, a cselekvési attribútum jelöli az URL-t, amely az űrlap elküldése van töltve a PHP_SELF szerver változó értékét - a címe a forgatókönyvet abban a pillanatban.

- A felvétel rövidített formája .

Tegyük fel, hogy a Név mezőben lépett be a Vasya értékét, és megnyomta az OK gombot. Ugyanakkor a böngésző elküldi a kiszolgálót. Lekérdezés test: NAME \u003d VASYA & OKBUTTON \u003d OK. A PHP automatikusan kitölti a $ _post tömböt:

$ _POST ["NAME"] \u003d "VASYA"
$ _POST [OKBUTTON] \u003d "OK"

Valójában a "Vasya" értékét elküldjük a böngészőnek az URLENCODE-formában; Windows-1251 kódolás esetén ez az érték% C2% E0% F1% FF. De mivel a PHP automatikusan elvégzi a szükséges dekódolást, akkor „elfelejti” ezt a funkciót -, amíg meg kell dolgozni HTTP lekérdezés kézzel.

Mivel a lekérdezési testületben csak nevek és értékek jelennek meg, de nem az űrlapelemek típusát, a PHP-nek nincs ötlete, megfelel a $ _post ["NAME"] bemeneti sor, gomb vagy a lista. De ez az információ általában nem szükséges. :)

Mivel tudod, hogy mi van a Submit gombon, opcionális, a 11. sorban törölheti a név attribútumot, rövidzárlat a gomb leírásához . Ebben az esetben a böngésző elküldi a nevet \u003d Vasya-Vasya.

És most - ugyanaz, de a get alakú:



ha (BETSET ($ _ get ["Név]))) (
Echo "

Helló, "$ _Get [" Név "].

!" ;
}
?>
">
Adja meg nevét:





A 8. sorban ugyanazt a sikert is lehet írni

: Get - az alapértelmezett módszer. Ezúttal a böngésző elküldi a Get-kérést, amely egyenértékű a címjegyzékbe való belépéshez: http: //adress-site./mety-script.php? Név \u003d Vasya.

PHP GET-Forms belép ugyanúgy, mint a POST, azzal a különbséggel, hogy a $ _GET tömb van töltve.

A bíboros különbség a sorban 4. Mivel az egyszerű input a címet a böngésző string egy Get-queuity, check if ($ _SERVER [ "REQUEST_METHOD"] \u003d\u003d "Get") értelmetlen. Ezért a DETSET () design, amely igaz, ha ezt a változót definiáljuk (azaz értéket kaptak), és hamis - ha a változó nincs meghatározva. Ha az űrlapot megtöltötték - ahogy már megértették, a PHP automatikusan hozzárendeli a $ _get ["nevet"] a megfelelő értéket.

Az ellenőrzést a BETSET () - Univerzális használatával használják, amelyet utólag használhatunk. Ezenkívül előnyös, mivel lehetővé teszi, hogy megtudja, melyik űrlap kitöltése van.

Egy kicsit összetettebb példa.




Echo "Adja meg a nevet!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
Visszhang.
"
;
) MÁS (

" ;

Echo "te. $ Kor. " évek
" ;
}
Echo "


" ;
}
?>
">
Adja meg nevét:


Adja meg születési évét:





Itt nem használnak új technikákat. Tartsa be, hajtsa végre a kódot, próbálja meg módosítani ...

Módosítsa az utolsó példát, hogy a felhasználó ne legyen újratöltse a mezőket. Ehhez töltse ki a formanyomtatvány-elemek értéktulajdonságok értékét.



$ NAME \u003d BETSET ($ _ POST ["NAME"])? $ _Post ["Név"]: "";
$ Év \u003d Isset ($ _ Post ["Év"])? $ _Post ["Év"]: "";

Ha (PONTSET ($ _ POST ["NAME"], $ _POST ["Év"])) (
ha ($ _post ["Név"] \u003d\u003d "") (
Echo "Adja meg a nevet!
" ;
) Más, ha ($ _post ["év"]< 1900 || $_POST [ "year" ] > 2004 ) {
Visszhang. "Adja meg a születési év! Érvényes értéktartomány: 1900..2004
"
;
) MÁS (
Echo "hello". $ _POST ["NAME"]. "!
" ;
$ Kor \u003d 2004 - $ _Post ["Év"];
Echo "te. $ Kor. " évek
" ;
}
Echo "


" ;
}
?>
">
Adja meg nevét:


Adja meg születési évét:





Néhány értelemszerűen 4 és 5. Minden nagyon egyszerű: a 4. sor így rögzíthető:

ha (PONTSET ($ _ POST ["NAME"]))))
$ NAME \u003d $ _POST ["NAME"];
mÁS.
$ NAME \u003d "";

Egy kérdés merülhet fel - miért ne dobja el a húrokat 4-5, és ne írjon:

Adja meg nevét: ">

Adja meg születési évét: ">

A tény az, hogy ha ezek a bejegyzések nem meghatározott - és ez lesz, ha a forma még nem töltött, - PHP fog kiadni figyelmeztetések használatát inicializált változók (és megalapozott: Egy ilyen üzenet lehetővé teszi, hogy gyorsan Keressen keményen rögzített hibákat változó nevekben, és figyelmezteti a lehetséges "lyukakat" a webhelyen). Természetesen a kódot közvetlenül az űrlapba helyezheti, de túlságosan nehézkes.

Kitalált? És most próbálja meg hibát találni az alábbi kódban. Nos, nem teljesen hiba, de hibák.

htmlspecialchars ()

Nem találtam? Majd szólok. Írja be például a "Név" mező kettős idézeteket és néhány szöveget, például VA "SIA-t. Küldjön egy űrlapot, és nézze meg az oldal forráskódját. A negyedik sorban valami ilyesmi lesz :

Adja meg nevét:

Ez - semmi jó. És ha a ravasz felhasználó belépett a JavaScript kódba?

Ahhoz, hogy megoldja ezt a problémát, meg kell használni a htmlspecialchars () függvény, amely felváltja a szolgáltatás karakterek a HTML-ábrázolás (például idézetek - be „):



$ NAME \u003d BETSET ($ _ POST ["NAME"])? Htmlspecialchars ($ _post ["Név"]): "";
$ Év \u003d Isset ($ _ Post ["Év"])? Htmlspecialchars ($ _post ["év"]): "";

Ha (PONTSET ($ _ POST ["NAME"], $ _POST ["Év"])) (
ha ($ _post ["Név"] \u003d\u003d "") (
Echo "Adja meg a nevet!
" ;
) Más, ha ($ _post ["év"]< 1900 || $_POST [ "year" ] > 2004 ) {
Visszhang. "Adja meg a születési év! Érvényes értéktartomány: 1900..2004
"
;
) MÁS (
Echo "hello". $ Név. "!
" ;
$ Kor \u003d 2004 - $ _Post ["Év"];
Echo "te. $ Kor. " évek
" ;
}
Echo "


" ;
}
?>
">
Adja meg nevét:


Adja meg születési évét:





Ismételje meg a tapasztalatot, és győződjön meg róla, hogy a HTML-kód helyes.

Ne feledje - a HTMLSpecialchars () függvényt mindig akkor kell használni, ha a HTML-speciálisan jelen lévő változó tartalma jelenik meg.

phpinfo ()

A PHPInfo () függvény az egyik legfontosabb a PHP-ben. Megjeleníti a PHP beállításokról szóló információkat, az összesféle konfigurációs változók értékeit ...

Miért említem őt a formanyomtatványon? PHPINFO () - kényelmesebb hibakeresési eszköz. PhpInfo () Többek között megjeleníti az összes $ _get, $ _post és $ _server változók értékeit. Tehát, ha a változó formák „elveszett”, a legegyszerűbb módja, hogy megállapítsa, mi a helyzet - használja a phpinfo () függvényt. Annak érdekében, hogy a funkció csak a változók értékeit jelenítse meg (és nem kellett görgetnie egy tíz oldalt), azt a következőképpen kell felhívni: phpinfo (info_variables); , vagy - ez teljesen ugyanaz - phpinfo (32);.



">
Adja meg nevét:


phpinfo (32);
?>

Vagy például ez a helyzet: tudni szeretné a látogató IP-címét. Emlékszel, hogy a megfelelő változót tömb tárolja a $ _SERVER, de - ez nem elég - ők elfelejtették pontosan a változó neve. Ismét hívja a phpinfo-t (32); Keresünk az IP-címet a lemezen, és találja meg - a $ _SERVER string [ „REMOTE_ADDR”].