Taotlused Postita ja saada, mida veel tulevad. Õppimine töötada saada ja postitaotlustega

On kaks kontseptsioone, mis on peaaegu kõigi programmide jaoks tavalised - see on sisendandmete ja väljundi väljundi töötlemine. Sellel lehel keskendume CGI programmi kande töötlemisele. Esiteks, kui sisendandmed pärinevad ja teiseks, kuna sisendandmed edastatakse serverisse. Tõhusate CGI-programmide kirjutamiseks peab teil olema nende asjade selge idee.

Veidi http.

Server saab kolme tüüpi taotlusi: saada, postitada ja pea. Veebiserveri programmitaotlus on järgmine:

HET /INDEX.HTML HTTP / 1.0

Esimene osa sel juhul Hankige päringumeetod, teine, index.html, on taotletud URL, kolmas, http / 1.0, kliendi poolt kasutatav protokoll.

Kaks peamist päringu meetodi on saada ja postitada. Need on kõige rohkem meetodeid, mis on teile kättesaadavad vormi loomisel. Peameetodit kasutatakse harva brauseri poolt, kuna ta taotleb ainult vastuse pealkirja ja vastuse keha ei edastata sel juhul. Näiteks, et kontrollida, kas leht ei ole muutunud, saab brauser taotleda pealkirja, kuid see ei tekita täieõigusliku andmevahetuse.

Hangi meetodit

Vaikimisi kasutatakse soovi korral saada meetodit. Postimeetodit kasutatakse ainult siis, kui see on vormi taotlusel selgelt märgitud. CGI programmeerija jaoks on väga oluline mõista, et saamise meetodi taotlemisel edastatakse need vormid serverile koos URL-iga. CGI toetus Web Servers kopeerib need andmed keskkonnamuutuja nimega Query_String. Pärast seda on CGI programmile antud keskkonnamuutuja ja nende töötlemise andmete hankimise probleem.

Päringu stringi URL näeb välja selline:

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

Märk? eraldab päringu stringi ressursside URL-st; Nick ja PSW - serverile, Maksile ja parolile edastatud muutujad vastavalt nende väärtused.

Postimeetod

Postimeetodit kasutatakse siis, kui see on selgesõnaliselt näidatud meetodi vormi atribuutis. Erinevalt saada meetodist postitab postitused andmeid mitte URL-is, vaid päringu korpuses. Postitamispäring on suures osas sarnane HTTP-vastusega. Esimene rida on standard päring http.kus postitusmeetod on määratud. See võib olla vajalikud täiendavad pealkirjad eraldatud keha taotluse tühja string.

Päringu keha, kui kasutate postimeetodit, edastatakse programmile standardse sisendvooguna.

Saate ja postituse vahel valik

On selge, et CGI programmeerija ees olevate vormide väljatöötamisel on küsimus järgmine: millist neist meetoditest kohaldatakse. Enamikul juhtudel on mõlemad meetodid kohaldatavad ja mõlemad toimivad hästi. Siiski on olukordi, kus ühe või teise meetodi kasutamine annab teatud eeliseid.

Mõtle mitmeid olukordi, kus on mõttekas eelistada saada või postitusmeetodit.

  • Kui soovite, et teie programm oleks viidates, tuleks eelistus anda meetodit.
  • Kui te ei soovi teie programmi edastatud argumente salvestada serveri aruandefailis, kasutage postimeetodit. Näiteks, kui vorm nõuab kasutajanime ja parooli täpsustamist, siis ei ole tõenäoline, et nimed ja paroolid salvestatakse aruandefailis. Lisaks ei ole mõistlik parool URL osana läbida.
  • Kui teie vormil on märkimisväärsed suurused, ei ole märkmete ja kommentaaridega tekstikaster, tuleks postimeetodit kasutada. Üldiselt kasutage ja sel juhul kasutage meetodit, kuid siis võib tekkida piirangud URL suuruse suurusega, erinevad erinevad operatsioonisüsteemid ja brauserid (keskkonda muutujate suuruse tõttu). Postimeetodi kasutamist on lihtsam kasutada.
  • Kui teie vorm sisaldab faili välja, kasutage postimeetodit. Lisaks peate käesoleval juhul määrama Encüübi atribuudi väärtuse mitmeosalise / vormi andmetes.

Brauseri kliendid saavad veebiserverisse teavet saata.

Enne brauserit saadab teavet, see kodeerib seda kasutades skeemi nimega URL kodeering. Selles paari skeemis on nimi / väärtus kombineeritakse võrdsete märkidega ja erinevad paarid jagatud ampersandiga.

Name1 \u003d väärtus1 & name2 \u003d väärtus2 ja nimi3 \u003d väärtus3

Ruumid eemaldatakse ja asendatakse + sümboliga ja mis tahes muud mitte-alfa-numbrilised tähemärgid asendatakse kuueteistkümnendate väärtustega. Pärast teabe kodeerimist läheb see serverisse.

Hangi meetodit

Hangi meetod saadab lehekülje taotlusele lisatud kodeeritud kasutajainfo. Leheküljed ja kodeeritud teave eraldatakse üksteisest? Sign küsimus.

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

  • Hangi meetod loob pika stringi, mis kuvatakse teie serverilogides brauseri "asukoha" valdkonnas.
  • Hangi meetod on piiratud ainult 1024 tähemärgi saatmiseks.
  • Ärge kunagi kasutage saada meetodit, kui teil on serverisse saata parool või muu konfidentsiaalne teave.
  • Get ei saa kasutada binaarsete andmete edastamiseks, näiteks piltide või tekstisõnumite edastamiseks serverisse.
  • Juurdepääs GET-meetodiga saadetud andmetele saab saada Query_String keskkonnamuutuja abil.
  • PHP pakub assotsiatiivne $ _get massiivi, et pääseda kõik saadetud teabele kasutades saada meetodit.

kui ($ _ saada [nimi "] || $ _get [" teretulnud ". $ _Get [" nimi "]; kaja" sa oled. "$ _Get [" vanus "]." Aastad "."; Välju () ;)

Nimi: Vanus:

Postimeetod

Meetod Postitus. Saadab teavet HTTP pealkirjade kaudu. Teave kodeeritakse meetodi puhul kirjeldatud viisil Saada.ja asetatakse pealkirja Query_String..

  • Postimeetodil ei ole piiranguid andmete suurusele, mida soovite saata.
  • Postimeetodit saab kasutada ASCII ja binaarsete andmete saatmiseks.
  • Postimeetodi poolt saadetud andmed läbivad HTTP-päise kaudu, nii et ohutus sõltub HTTP-protokollist. Turvalise HTTP kasutamine saate veenduda, et teie teave on kaitstud.
  • PHP pakub assotsiatiivne $ _post massiivi, et pääseda kõigile saadetud teabele postimeetodi abil.

Proovige järgmist näidet, asetades lähtekoodi test.php skripti.

kui ($ _ Post ["nimi"] || $ _POST ["AGE"]) (kui (PREG_MATCH ("[^ A-ZA-Z" -] ", $ _ Post [" nimi "]))) (die ("Kehtetu nimi ja nimi peaks olema Alpha");) ECHO "Tere tulemast". $ _POST ["NAME"]; ECHO "Sa oled. $ _POST [" AGE "]." Aastad. "; Välju ();)

Nimi: Vanus:

Muutuja $ _Request

PHP muutuja $ _Request Sisaldab sisu nagu $ _Get., $ _POST., seega ma. $ _Cookie.. Me arutame muutujat $ _Cookie.Kui me küpsiste kohta räägime.

PHP $ _Request muutuja saab kasutada tulemuse saamiseks saadud vormi andmetest saada ja postimeetodeid.

Ühine nende vahel, asjaolu, et nad töötavad võrdselt. Nende vahe on tehniliselt ei. Aga seal on ideoloogilised erinevused.

Ma räägin neist PHP kontekstis. Pange tähele, et PHP HTTP-protokollil on kaudne suhtumine, sest see loodi vahetamiseks hTML-leheküljed Ja PHP lihtsalt laiendab võimalusi ja teist.

Andmete saatmise postituse saamiseks kasutatakse päringut. (Ma tuletan teile meelde, et tehniliselt töötada võrdselt).

Seetõttu tehti PHP kontekstis tuginedes sellele ideoloogiale järgmiselt: \\ t
1. Iga kord PHP käivitatakse superglobal massiivid ($ _Get, $ _post) luuakse vaikimisi.
2. Kui päringu stringis on küsimärk (?). Siis kõik kaalutakse pärast seda parameetrid Hankige taotlusi, mida nad on esitatud "Key" formaadis \u003d "Väärtus" ja Ampersandi allkirja (&) kasutatakse eraldajana
Näide:
Hangi /index.php?name\u003dandrey&surname\u003dHalkin
See on päringu string, siin 2 parameetrit. Need parameetrid langevad $ _get massiivi.
3. $ _POST on täis muul viisil. Selle massiivi sisu täidetakse "päringu päiste". See tähendab, et silmadest peidetud kohast selgesõnaliselt. Kogu rutiinne selliste pealkirjade loomiseks võtab brauseri. Kuigi mõnikord on käsiraamatusse ümber midagi redigeeritakse.

Kõige sagedamini kasutatakse postitaotlust vormides (andmete saatmiseks).

Näiteks on meil vorm sisse logida 2 väljad sisselogimise ja parooli.

Kujutage ette, et me kasutame saada meetodit. Seejärel pöördume vormi saatmisel järgmisel aadressil /login.php?login\u003dandrey&password\u003d123 nõus, et see ei ole sellise teabe edastamiseks ohutu. Igaüks saab oma brauseri avada ja alustada saidi aadressi sisestamist. See näeb teie paroole ja sisselogimist.

Aga kui me nimetame postitusmeetodiga, siis saame järgmise taotluse:
Post /login.php (Logi sisse \u003d Andrey & Parool \u003d 123) Mis sulgudes oleks peidetud ja mitte brauserisse salvestatud.

Üldiselt kokkuvõtlikult:
Get on saada teatud lehekülje konkreetses vormis (sortimine, praegune lehekülg blogi, otsingu string jne).
Post - mandreli andmed, mis ei mõjuta lehekülje kuva, nii et need andmed mõjutavad ainult skripti täitmise tulemust (sisselogimised, paroolid, krediitkaardi numbrid, sõnumid jne).

Ja veel üks hea uudis saab kombineerida näiteks
Postitus /index.php?page\u003dlogin (sisselogimine \u003d Andrey & parool \u003d 123) Ma arvan, et olen juba piisavalt selgitanud, et selgub ja millised parameetrid langevad.

Kaasaegsed veebiressursid ei anna ainult külastajale teavet, vaid ka sellega suhelda. Kasutajaga suhtlemiseks peate sellest teavet saama. Andmete saamiseks on mitmeid meetodeid, väga ühiseid meetodeid. Saada. ja Postitus.. Ja vastavalt B. PHP. Nende andmeedastusmeetodite toetamine on toetatud Saada. ja Postitus.. Vaatame, kuidas need meetodid töötavad.
Hangi meetoditAndmed saada. Saadud teabe töötlemiseks mõeldud stsenaariumi URL-i aadressile lisades. Selgituse jaoks see meetod Dial ressursi URL aadressiriba aadressiriba aadressiriba ja lisada küsimuse kaubamärgi esimene (?) Ja seejärel number Num \u003d 10. näiteks

http: //domeure.ru/Script.php? Num \u003d 10


Kui teil on kohalik server, siis tavaliselt domeen on localhost ja siis eelmise kirje vaatab

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


Sellisel juhul edastame Num parameetri 10. Et lisada järgmised parameetrid, tuleb skripti kasutada - ampersant (&), näiteks

http: //domeure.ru/Script.php? Num \u003d 10 & Type \u003d New & V \u003d Tekst


Sellisel juhul edastasime skriptile kolm parameetrit: Num väärtusega 10, tüüp "Uus" ja V väärtus "teksti" väärtusega.
Nende parameetrite saamiseks skriptis on vaja kasutada sisseehitatud massiivi. $ _Get. $ _Get ["Num"], $ _Get ["Type"], $ _ Get ["V"]. Need massiivi elemendid sisaldavad edastatud parameetrite väärtusi. Selle näite näitamiseks looge skript.php fail järgmiselt.



Hangi meetodi kontrollimine PHP-s


eCHO ($ _Get ["Num"]. "
");
echo ($ _Get ["tüüp"]. "
");
eCHO ($ _Get ["V"]);
?>


Ja nüüd helistage sellele failile brauseris

http: //at/Script.php? Num \u003d 10 & Type \u003d New & V \u003d Tekst


ja näete edastatud parameetreid brauseri aknas. Aga kui te seda faili helistate ilma täiendavad parameetrid http: /////Script.php, näete vigu, mis annavad tõlgi PHP.Et massiivi $ _get ei ole selliseid elemente. Nende andmete kontrollimine kasutajalt saab esile toota mitte ühte artiklit, nii et käesolevas artiklis ma ei puuduta seda hetke.
Nagu te ilmselt aru, et sundida kasutaja dial andmeid aadress baar ei ole väga hea ja täiesti ebamugav. Seetõttu, et saada andmeid kasutajalt, peate kasutama HTML-vormi. Kirjutage lihtne html -form.


Sisestage number

Kas sul on arvuti?

Sinu kommentaar:





Ma kommenteerin loodud vormi kohta. Vormid on loodud vormi tag. Vormiväljad on loodud sisendi abil, valige, Textarea Sildid (saate lugeda rohkem). Vormi sildis on skripti URL täpsustatud atribuutis, mis need vormid saavad. Meie puhul oleme juba määranud juba olemasoleva Script.php-faili. Meetodi atribuut Määrab andmete saatmise meetodi. Me märkisime meetodi Saada.. Nüüd me teame, millist faili need fail edastatakse ja millisel viisil jääb välja selgitada, kuhu neid otsida?!
See vormiandmed edastatakse veebiressursside brauserile, lisades need URL-ile: on kõigepealt küsimärk (?), Siis parameetrid eraldatakse ambersandiga (&). Parameeter nimi võetakse nimi atribuut, mis tuleb kirjutada välja mis tahes valdkonnas välja. Parameetri väärtus sõltub väli tüübist. Kui väli on tekstiline, on kasutaja sisestatud tekst kasutaja. Kui väli on nimekiri, lülitite või lippude rühm, siis väärtuse väärtuse väärtus Valitud elemendi väärtus on parameetri väärtus. Ma selgitan meie vormi näitel. Kui kasutaja sisestab sisendvälja number 10, siis parameetri nimi on Num (sisendmärgise nimetuse väärtus) ja väärtus on väärtus (kasutaja sisestatud number). Seega moodustab brauser paari "Num \u003d 10". Kui loendist kasutaja valib valiku "Jah", siis parameetri nimi on tüüp (nime sildi väärtuse atribuut) ja väärtus on väärtus (väärtus väärtuse väärtuse väärtuse väärtuse väärtus) ). Seega moodustab brauser paari "Type \u003d YES".
Nüüd asetatakse see vorm forma.php lehele.



Andmeedastusvorm kasutades saada ja PHP



Sisestage number

Kas sul on arvuti?

Sinu kommentaar:







Sisestage vormi väljade väärtused ja klõpsake nuppu "Esita". Pärast brauseri nupu vajutamist avab teise lehekülje (Script.php) ja kuvatakse brauseri aknas sisestatud andmed. Ma arvan, et on selge, miks: brauser edastab andmeid skripti skripti.php-le ja skriptis töödeldakse neid andmeid ja kuvatakse.
PostimeetodNüüd vaatame, kuidas meetod töötab Postitus..
Nende meetodite saatmiseks Postitus. Te peate kasutama HTML-vormi. Kuidas me mäletame, et vormi meetod vastutab vormi andmete vormi saatmise meetodi eest. Seetõttu peate täpsustama meetodi atribuudi postiväärtuse. Vastasel juhul võib vorm olla sama, mis saada meetodil. Me muudame meie kuju, mida oleme juba kasutanud andmete edastamiseks postimeetodi edastamise meetodile.


Sisestage number

Kas sul on arvuti?

Sinu kommentaar:





Nagu näete, jääb vorm samaks, välja arvatud meetodi ja tegevuse atribuudid. Nüüd edastatakse andmed skripti_post.php skriptile. Asetage meie vorm forma_post.php lehel.



Post ja PHP andmeedastusvorm



Sisestage number

Kas sul on arvuti?

Sinu kommentaar:







Nüüd peate kirjutama skripti, mis töötleb meie vormi andmeid.
Saada edastatud meetodi andmete skripti Postitus. Vajadus kasutada sisseehitatud massiivi $ _POST.. Selle massiivi võtmed on parameetrite nimed. Meie puhul peate kasutama $ _POST ["Num"], $ _post ["Type"], $ _ Postitus ["V"]. Need massiivi elemendid sisaldavad edastatud andmete väärtusi. Nagu näete erinevust saada meetodit kasutades ainult ekspresseeritud ainult kasutamisel massiivi $ _post. Seetõttu me ei ole raske kirjutada script_post.php faili:



Kontrollimismeetodi kontrollimine PHP-s


echo ($ _post ["Num"]. "
");
echo ($ _POST [tüüp "]."
");
eCHO ($ _POST ["V"]);
?>


Nüüd avage brauseris forma_post.php-fail. Sisestage mõningad andmed kujul väljale ja vajutage nuppu "Saada". Nüüd, ilmselt märkasite erinevust Postimeetodi vahel saada - need vormid ei ilmunud brauseri aadressiribal. Andmemeetod Postitus. Sa ei saa läbida brauseri aadressiriba. Seda olulist erinevust tuleb meeles pidada.
Sisse PHP. Iseseisvus, milliseid meetodi andmeid saadeti - postimeetodi või saada meetodil - andmete saamiseks, kasutades $ _Request massiivi. Võrdlus saada ja postmeetodeidKui kasutate saada meetodit, edastatakse andmed URL-i lisamisega. Seega on nad nähtavad kasutajale, et ohutuse seisukohalt ei ole alati hea. Samuti sõltub edastatud andmete maksimaalne summa brauserist - brauseri aadressiriba tegelaste maksimaalsest lubatud arvust.
Kui kasutate postimeetodit, ei ole andmed kasutajale nähtavad (ei kuvata brauseri aadressiribal). Ja seetõttu on nad kaitstuna ja seetõttu programmi töötlemise programmi töötlemine on ohutuse seisukohalt kaitstum. Samuti on edastatud andmete hulk praktiliselt piiratud.
Kui valite andmeedastuse viisi, peate kaaluma kõige vastuvõetavam meetodis antud ja peatumisomadusi ja peatuma.

HTML-vorm. Massiivid $ _post ja $ _get

HTML-vorm. Andmete saatmise meetodid serverisse

HTML-vormidega olete ilmselt juba kohtunud:

Sisestage oma nimi:

Selle koodi salvestamine HTML-failis ja selle vaatamine oma lemmikbrauseriga, näete tavalist HTML-vormi:

Tag

Paari lõpliku sildiga
Tegelikult küsib vormi. Tema atribuudid on mõlemad vabatahtlikud:

  • tegevus - näitab URL-i (täis või suhteline), millele vorm saadetakse. Kui see atribuut ei täpsusta enamik brausereid (täpsemalt öeldes, kõik mulle teadaolevad brauserid) saatke vorm praegusele dokumendile, mis tähendab "iseendalt". See on mugav vähendamine, kuid HTML-i standardi kohaselt on vaja atribuut.
  • meetod on viis vormi saatmiseks. Neist on kaks.
    • Saate saatmise vormi andmed aadressiribal.
      Kas te märkate sümboli URL-i lõpus olevat kohalolekut "?" Ja järgmised andmed formaadis parameetris \u003d väärtus. Siin "parameeter" vastab vormi elementide nimetuse atribuudi väärtusele (vt allpool Teada ) ja "väärtus" - väärtuse atribuudi sisu (näiteks sisaldab kasutaja sisendit sama tabeli tekstiväljale ).
      Näiteks proovige otsida midagi Yandexis ja pöörake tähelepanu brauseri aadressiribale. See on saada meetod.
    • Post - hallituse need saadetakse päringu keha. Kui see ei ole täiesti selge (või see on täiesti ebaselge), siis see, mis see on - ärge muretsege, peame peagi tagasi selle küsimuse juurde.
    Kui meetodi atribuut ei ole määratud - Gett on mõeldud.

Tag - Määrab vormi elemendi määratletud tüüpi atribuut:

  • "Tekst" väärtus seab ühe rea sisendvälja
  • Väärtus "Esita" Määrab nupule, kui vorm on serverisse vajutatud

Muud väärtused on võimalikud (ja - mitte ainus vorm, mis määrab vormi elementi).

Mis juhtub, kui vajutame nuppu "OK"?

  1. Brauser sirvides kuju kaasatud elemente ja genereerib nende nime ja väärtuse omaduste need vormid. Oletame, et nimi Vasya on kasutusele võetud. Sel juhul need vormid - nimi \u003d VASYA & OKBUTTON \u003d OK
  2. Brauser loob serveriga ühendamise, saadab taotluse meriseerimismärgis määratud serverisse taotluse
    Meetodi atribuutil määratud saatmismeetodi kasutamine (antud juhul - GET), andmete edastamine päringus.
  3. Server analüüsib vastuvõetud päringu, moodustab vastuse, saadab selle brauserile ja sulgeb ühenduse
  4. Brauser kuvab serverist saadud dokumendi.

Sama päringu saatmine käsitsi (Telneti abiga) näeb välja selline (oletame seda domeeninimi Sait - www.example.com):

Telnet www.example.com 80 Get /cgi-bin/form_handler.cgi?name\u003dvasya&okbutton\u003dok http / 1.0 r \\ t Host: www.example.com \\ r \\ t

Nagu te tõenäoliselt olete juba arvanud, vajutades vormi esitamise nupule "Get" saatmise meetodit sarnane vastava URL-i sisendiga (küsimuse kaubamärgi ja vormiandmetega) brauseri aadressil Bar:

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

Tegelikult kasutatakse Hanki meetodit alati dokumendis serverist, lihtsalt sisestades oma URL-i või klõpsates lingil. Kasutades URL lihtsalt lisab küsimärgi ja vormi andmed.

Võib-olla tunduvad kõik need tehnilised üksikasjad ja harjutused telnet-oomiga uskumatult igav ja isegi tarbetu ("ja mis on PHP?"). Ja asjata. :) Need on HTTP-protokolli töö põhitõdesid, mida peate iga veebiprogrammiga teadma ja see ei ole teoreetiline teadmine - kõik see on praktikas kasulik.

Nüüd vahetage meie vormi esimene string järgmistele:

Me märkisime "postituse" saatmismeetodi. Sellisel juhul saadetakse andmed serverile mitmel teisel viisil:

Telnet www.example.com 80 postitus /cgi-bin/form_handler.cgi http / 1.0 r \\ t Host: www.example.com \\ n sisu-tüüpi: rakendus / x-www-vormi-urlencoder N Content-Pikkus: 41263 r \\ r \\ n n nimi \u003d VASYA & OKBUTTON \u003d OK

Kui kasutate postimeetodit, saadetakse need vormid pärast "Kahe sisenemist" - päringu korpuses. Kõik, mis eespool on tegelikult päringu päis (ja kui me kasutasime saada meetodit, need vormid saadeti pealkirja). Selleks, et server teaks, kuidas taotluse asutuste lugemist lõpetada, on pealkiri sisu pikkuse joonis; Umbes sama, et vormi andmed edastatakse parameeter1 \u003d väärtus1 ja parameeter2 \u003d väärtus2 ... ja väärtused edastatakse urlentodena - see tähendab, et just nagu saada meetod, kuid päringu korpus, server Aruanded sisu päise -Type: rakendus / X-www-vorm-urlentoded.

Postimismeetodi eeliseks on vormi andmetega piirangu puudumine.

Kui kasutate postimeetodit, on vormi saatmine võimatu saata, lihtsalt "link", sest see oli Get.

Kui kasutate post-vormi, oma tegevuse atribuut saate määrata pärast küsimärk ja parameetrid saada-vorm. Seega hõlmab postitusmeetod nii meetodit.

Massiivid $ _get ja $ _post

Niisiis, vormid on peamine võimalus vahetada andmeid veebiserveri ja brauseri vahel, mis on koostoime kasutajaga - tegelikult, mille jaoks vajate veebiprogramme.

Kaaluge lihtsat näidet:



kui ($ _server ["päringu_method"] \u003d\u003d Post ") (
ECHO "

Tere, "$ _POST [" NAME "]."

!" ;
}
?>
">
Sisestage oma nimi:




Vorm read 8-12 sisaldab kahte elementi: nimi ja okbutton. Meetodi atribuut määrab posti vormi meetodi, tegevus atribuut, mis näitab URL-i, millele vorm on saadetud, täidetakse PHP_CEL-serveri muutuva väärtusega - hetkel skripti aadressi.

- lühendatud vorm salvestamise .

Oletame, et nimi väljale sisenesime Vasya väärtusele ja vajutati OK nuppu. Samal ajal saadab brauser postiserverisse. Päringu keha: nimi \u003d Vasya & Okbutton \u003d OK. PHP täidab automaatselt $ _post massiivi:

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

Tegelikult saadetakse Brauserile "Vasya" väärtus urlentode vormis; Windows-1251 jaoks kodeerimiseks näeb see väärtus% C2% E0% F1% ff. Aga kuna PHP täidab automaatselt vajaliku dekodeerimise, saame selle funktsiooni kohta "unustada" - kuni peate töötama HTTP-päringute käsitsi.

Kuna päringu korpuses on näidatud ainult nimed ja väärtused, kuid mitte vormide elementide liigid, PHP-l pole aimugi, vastab $ _POST ["NAME"] sisendarja, nupule või loendile. Kuid see teave üldiselt ei ole absoluutselt vajalik. :)

Kuna te teate, mis on kirjutatud nupule Esita, oleme vabatahtlikud, rida 11 saate kustutada nime atribuudi, lühendada nupu kirjeldus . Sellisel juhul saadab brauser nime \u003d Vasya-Vasya.

Ja nüüd - sama, kuid saada-kujuline:



iF (ISSTE ($ _ Get ["nimi"]))) (
ECHO "

Tere, "$ _Get [" nimi "]."

!" ;
}
?>
">
Sisestage oma nimi:





Line 8 oleks võimalik kirjutada sama edu

: Get - vaikimisi meetod. Seekord, brauser saadab saada-taotluse, mis on samaväärne sisenemisega aadressiriba aadressiriba aadress: http: //adress-site./mety-sercript.php? Nimi \u003d Vasya.

PHP Get-vormidega siseneb samamoodi nagu postitusega, vahe, et $ _get massiivi täidetakse.

Kardinaalne erinevus on liinil 4. Kuna aadress brauseri stringiaadressi lihtne sisend on gets-subjektiivsus, kontrollige, kas ($ _server ["päringu_metod"] \u003d\u003d "Get") on mõttetu. Seetõttu järgime ISSETi () disaini, mis tagastab tõsi, kui see muutuja on määratletud (st määrati väärtus) ja vale - kui muutuja ei ole määratletud. Kui vorm on täidetud - nagu te juba aru saanud, määrab PHP automaatselt $ _Get ["NAME"] vastava väärtuse.

Kontrolli kasutatakse ISSETi () - universaalse kasutamisega, mida saab kasutada post-vormis. Veelgi enam, see on eelistatav, sest see võimaldab teil teada saada, millised vormi väljad on täidetud.

Veidi keerulisem näide.




ECHO "Määrake nimi!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
ECHO.
"
;
) Muud (

" ;

ECHO "Sina. $ Vanus. "aastat
" ;
}
ECHO "


" ;
}
?>
">
Sisestage oma nimi:


Sisestage oma sünniaasta:





Siin ei kasutata uusi tehnikaid. Jälgige, käivitage kood, proovige muuta ...

Muutke viimast eeskuju nii, et kasutaja ei pea väljad uuesti täitma. Selleks täitke vormielementide väärtuse atribuudid just sisestatud väärtused.



$ NAME \u003d ISSET ($ _ Post ["nimi"])? $ _POST [nimi "]:" ";
$ Aasta \u003d ISSET ($ _ Post ["aasta"])? $ _POST ["AASTA"]: "";

IF (ISSTET ($ _ Post ["nimi"], $ _POST ["aasta"]))) (
kui ($ _post [nimi "] \u003d\u003d" ")
ECHO "Määrake nimi!
" ;
) Else kui ($ _post ["aasta"]< 1900 || $_POST [ "year" ] > 2004 ) {
ECHO. "Määrake sünniaasta! Kehtiv väärtuste valik: 1900..2004
"
;
) Muud (
ECHO "Tere,". $ _POST ["NAME"]. "!
" ;
$ Vanus \u003d 2004 - $ _POST ["aasta"];
ECHO "Sina. $ Vanus. "aastat
" ;
}
ECHO "


" ;
}
?>
">
Sisestage oma nimi:


Sisestage oma sünniaasta:





Mõned arusaamatu read 4 ja 5. Kõik on väga lihtne: rida 4 võib salvestada sellisena:

kui (ISSTE ($ _ Post ["nimi"])))
$ NAME \u003d $ _POST ["NAME"];
muidu.
$ Nimi \u003d "";

Küsimus võib tekkida - miks mitte visata stringid 4-5 ja mitte kirjutada:

Sisestage oma nimi: ">

Sisestage oma sünniaasta: ">

Fakt on see, et kui need ametikohad ei ole määratletud - ja see on, kui vorm ei ole veel täidetud, - PHP väljastab hoiatusi Uninitsiooniliste muutujate kasutamise kohta (ja põhjendatud: selline sõnum võimaldab teil kiiresti Leia kõva kinnitatud kirjade muutuja nimed ja hoiatab ka võimalikke "augud" kohapeal). Loomulikult saate koodi otse vormisse otse vormisse, kuid see osutub liiga tülikas.

Välja nuputama? Ja nüüd proovige leida vea allpool toodud kood. Noh, mitte päris viga, vaid defektid.

htmlspecialchars ()

Ei leidnud? Ma ütlen teile. Sisestage näiteks "Nimi" valdkonnas topelt hinnapakkumisi ja mõned tekstid, näiteks VA SIA. Saada vormi ja vaadake saadud lehe lähtekoodi. Neljandal joonel on midagi sellist :

Sisestage oma nimi:

See on - midagi head. Ja kui salakaval kasutaja sisestas JavaScripti koodi?

Selle probleemi lahendamiseks on vaja kasutada HTMLspecialchars () funktsiooni, mis asendab oma HTML-i esinduse teenindusmärgid (näiteks tsitaadid - ON "):



$ NAME \u003d ISSET ($ _ Post ["nimi"])? Htmlspecialchars ($ _POST [nimi "]):" ";
$ Aasta \u003d ISSET ($ _ Post ["aasta"])? Htmlspecialchars ($ _POST ["aasta"]): "";

IF (ISSTET ($ _ Post ["nimi"], $ _POST ["aasta"]))) (
kui ($ _post [nimi "] \u003d\u003d" ")
ECHO "Määrake nimi!
" ;
) Else kui ($ _post ["aasta"]< 1900 || $_POST [ "year" ] > 2004 ) {
ECHO. "Määrake sünniaasta! Kehtiv väärtuste valik: 1900..2004
"
;
) Muud (
ECHO "Tere,". $ Nimi. "!
" ;
$ Vanus \u003d 2004 - $ _POST ["aasta"];
ECHO "Sina. $ Vanus. "aastat
" ;
}
ECHO "


" ;
}
?>
">
Sisestage oma nimi:


Sisestage oma sünniaasta:





Korrake kogemusi ja veenduge, et HTML-kood on nüüd õige.

Pea meeles - HTMLspecialchars () funktsiooni tuleb alati kasutada siis, kui kuvatakse muutuja sisu, milles HTML-i eriline võib esineda.

phpinfo ()

PHPINFO () funktsioon on PHP üks tähtsamaid. See näitab teavet PHP seadete kohta, igasuguste konfiguratsioonimuutujate väärtused ...

Miks ma mainida teda artiklis vormide kohta? Phpinfo () - mugavam silumisvahend. PHPINFO () muu hulgas kuvab kõigi $ _Get'i väärtused, $ _post ja $ _server muutujad. Niisiis, kui muutujavormide "kaotatud", kõige lihtsam viis tuvastada, mis on juhtum - kasutage PHPINFO () funktsiooni. Selleks, et funktsioon kuvada ainult muutujate väärtused (ja te ei pidanud kümneid lehti sirvima), tuleks seda nimetada järgmiselt: PHPINFO (info_Variables); või - see on absoluutselt sama - phpinfo (32);.



">
Sisestage oma nimi:


phpinfo (32);
?>

Või näiteks selline olukord: soovite teada külastaja IP-aadressi. Sa mäletad, et vastav muutuja salvestatakse massiivis $ _server, kuid - see pole piisav - nad unustasid täpselt, kuidas muutuja nimetatakse. Jällegi helistage Phpinfo (32); Otsid oma IP-aadressi plaadil ja leida see - $ _server string ["comed_addr"].