Pieprasa pastu un saņemt to, kas vēl nāk. Mācīšanās strādāt ar saņemt un pēc pieprasījumiem

Ir divas koncepcijas, kas ir kopīgas gandrīz visām programmām - tas ir ievades datu un izejas produkcijas apstrāde. Šajā lapā mēs koncentrējamies uz CGI programmas ieraksta apstrādi. Pirmkārt, kur ievades dati nāk no, un, otrkārt, kā ievades dati tiek nosūtīti uz serveri. Lai rakstītu efektīvas CGI programmas, jums ir jābūt skaidru priekšstatu par šīm lietām.

Nedaudz par http.

Serveris saņem trīs veidu pieprasījumus: Get, Post un galvu. Programmas pieprasījums tīmekļa serverim ir šāds:

Get /index.html http / 1.0

Pirmā daļa Šis gadījums Get ir vaicājuma metode, otrais, index.html, ir pieprasītais URL, trešais, http / 1.0, protokols, ko klients izmanto.

Divas galvenās vaicājuma metodes ir iegūt un ziņas. Šīs ir lielākās metodes, kas ir pieejamas jums, veidojot veidlapu. Galvas metodi pārlūkprogrammā reti izmanto, jo tā pieprasa tikai atbildes virsrakstu, un atbildes iestāde netiek nosūtīta šajā lietā. Piemēram, lai pārliecinātos, vai lapa nav mainījusies, pārlūkprogramma var pieprasīt nosaukumu, bet tas nerada pilnvērtīgu datu apmaiņu.

Iegūt metodi

Pēc noklusējuma saņemšanas metode tiek izmantota, pieprasot. Post metode tiek izmantota tikai tad, ja tā ir skaidri norādīta veidlapas pieprasījumā. CGI programmētājam ir ļoti svarīgi saprast, ka, pieprasot iegūt metodi, šīs veidlapas tiek pārraidītas uz serveri kopā ar URL. CGI atbalsta tīmekļa serverus kopēt šos datus vides mainīgajam nosaukumam vaicājumam_string. Pēc tam bažas par datu iegūšanu no vides mainīgā un to apstrāde ir piešķirta CGI programmai.

URL no vaicājuma virknes izskatās šādi:

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

? atdala vaicājuma virkni no pašu resursu urāla; Nick un PSW - mainīgie pārsūtīti uz serveri, MAKS un PAROL - to vērtības attiecīgi.

Post metode

Post metode tiek izmantota, ja tas ir skaidri norādīts metodes veidlapas atribūtā. Atšķirībā no iegūt metodi, ievietojiet vietas datus ne URL, bet vaicājuma korpusā. Pēc vaicājums lielā mērā ir līdzīgs HTTP atbildei. Pirmā līnija ir standarta vaicājums http.kurā ir norādīta pasta metode. Tam var būt nepieciešamie papildu virsraksti, kas atdalīti no pieprasījuma, izmantojot tukšu virkni.

Vaicājuma korpuss, izmantojot pasta metodi, tiek pārraidīta programmā kā standarta ievades plūsmu.

Izvēle starp saņemt un post

Ir skaidrs, ka, izstrādājot veidlapas CGI programmētāja priekšā, jautājums būs šāds: Kura no šīm metodēm attiecas. Vairumā gadījumu ir piemērojamas abas metodes, un abi darbosies labi. Tomēr ir situācijas, kad vienas vai citas metodes izmantošana dod noteiktas priekšrocības.

Apsveriet vairākas situācijas, ja ir lietderīgi izvēlēties iegūt vai post metodi.

  • Ja vēlaties, lai jūsu programma tiktu izsaukta, izvēle jāpiešķir iegūt metodi.
  • Ja nevēlaties, lai jūsu programmas nosūtītie argumenti tiktu ierakstīti servera pārskata failā, izmantojiet pasta metodi. Piemēram, ja veidlapai ir nepieciešama lietotājvārda un paroles norādīšana, jums ir maz ticams, ka vēlaties, lai vārdi un paroles tiek saglabātas ziņojuma failā. Turklāt nav pamatoti nodot paroli kā daļu no URL.
  • Ja jūsu veidlapā ir ievērojami izmēri, tas nav teksta lodziņš ar piezīmēm un komentāriem, jāizmanto pasta metode. Vispārīgi runājot, tas ir iespējams un šajā gadījumā, izmantojiet iegūt metodi, bet tad jūs varat saskarties ar ierobežojumiem uz lieluma URL, kas atšķiras no dažādiem operētājsistēmas un pārlūkprogrammas (ierobežojums, kas saistīts ar vides mainīgo lielumu). Tas ir vieglāk izmantot pasta metodi.
  • Ja jūsu veidlapā ir faila lauks, izmantojiet pasta metodi. Turklāt šajā gadījumā, jums ir nepieciešams, lai iestatītu vērtību Enype atribūta multipart / veidlapas datiem.

Pārlūkprogrammas klienti var nosūtīt informāciju tīmekļa serverim.

Pirms pārlūkprogramma nosūta informāciju, tā to kodē, izmantojot shēmu, ko sauc par URL kodējumu. Šajā pāra shēmā nosaukums / vērtība ir apvienota ar vienādām zīmēm, un dažādi pāri tiek dalīti ar ampersand.

Vārds1 \u003d vērtība1 un nosaukums2 \u003d vērtība2 un nosaukums3 \u003d vērtība3

Telpas tiek noņemtas un aizstāt ar A + simbolu, un jebkuras citas ne-alfa ciparu rakstzīmes tiek aizstātas ar heksadecimālajām vērtībām. Pēc informācijas kodēšanas tas dodas uz serveri.

Iegūt metodi

Get metode nosūta kodētu lietotāja informāciju, kas pievienota lapas pieprasījumam. Lapas un kodēta informācija ir atdalīta viens no otra? parakstīt jautājumu.

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

  • Get metode izveido garu virkni, kas tiek parādīta jūsu servera žurnālos pārlūkprogrammas "atrašanās vietas" laukā.
  • Get metode ir ierobežota, lai nosūtītu tikai 1024 rakstzīmes.
  • Nekad neizmantojiet iegūt veidu, ja jums ir parole vai cita konfidenciāla informācija, lai nosūtītu serverim.
  • Get nevar izmantot, lai pārsūtītu bināros datus, piemēram, attēlus vai teksta dokumentus uz serveri.
  • Piekļuvi datiem, ko nosūta iegūt metodi, var iegūt, izmantojot vaicājumu_string vides mainīgo.
  • PHP nodrošina asociatīvu $ _get masīvu, lai piekļūtu visai nosūtītajai informācijai, izmantojot iegūt metodi.

ja ($ _ Get ["Vārds") || $ _GET ["Welcome". $ _Get ["Vārds"]; atbalss "Tu esi." $ _GET ["AGE"]. "; Iziet (). ;)

Nosaukums: Vecums:

Post metode

Metode Post. Nosūta informāciju, izmantojot HTTP virsrakstus. Informācija tiek kodēta, kā aprakstīts metodes gadījumā Gūt.un ievietots nosaukumā Query_string..

  • Post metode nav ierobežojumu attiecībā uz izmēru datu vēlaties nosūtīt.
  • Post metodi var izmantot, lai nosūtītu ASCII, kā arī bināros datus.
  • Dati, kas nosūtīti pēc post metodes caur HTTP galveni, tāpēc drošība ir atkarīga no HTTP protokola. Izmantojot Secure HTTP, jūs varat pārliecināties, vai jūsu informācija ir aizsargāta.
  • PHP nodrošina asociācijas $ _post masīvu, lai piekļūtu visai nosūtītajai informācijai, izmantojot pasta metodi.

Izmēģiniet šādu piemēru, ievietojot avota kodu test.php skriptu.

ja ($ _ post ["Vārds"] || $ _post ["Vecums"]) (ja (preg_match ("[^ A-ZA-Z" -] ", $ _ post [" Vārds "])) (mirst ("Nederīgajam nosaukumam un nosaukumam jābūt alfa");) echo "laipni". $ _Post ["vārds"]; atbalss "jūs esat. $ _Post [" vecums "].".

Nosaukums: Vecums:

Mainīgais $ _request

PHP mainīgais $ _Request. Satur saturu kā $ _Get., $ _Post., tāpēc es. $ _Cookie.. Mēs apspriedīsim mainīgo $ _Cookie.Kad mēs sakām par sīkfailiem.

PHP $ _REQUEST mainīgo var izmantot, lai iegūtu rezultātu no veidlapas datiem, kas nosūtīti, izmantojot iegūt un post metodes.

Kopumā starp tām, tas, ka viņi strādā vienādi. Starpība starp tām ir tehniski nē. Bet ir ideoloģiskas atšķirības.

Es par tiem pastāstīšu PHP kontekstā. Lūdzu, ņemiet vērā, ka HTTP protokols PHP ir netieša attieksme, jo tas tika izveidots apmaiņai hTML lapas Un PHP vienkārši paplašina iespējas un otru.

Iegūstiet vaicājumu izmanto, lai iegūtu datus par sūtīšanu. (Es jums atgādinu, ka tehniski strādā vienādi).

Tāpēc kontekstā PHP, paļaujoties uz šo ideoloģiju tika veikta šādi:
1. Katru reizi, kad tiek uzsākta PHP, superglobālie bloki ($ _get, $ _post) tiek izveidoti pēc noklusējuma.
2. Ja vaicājuma virknē ir jautājuma zīme (?). Tad viss tiek izskatīts pēc tā parametri Iegūstiet pieprasījumus, ko tie tiek prezentēti "Key" formātā \u003d "Vērtība", un AMPERSAND zīmi (&) tiek izmantots kā atdalītājs
Piemērs:
Get /index.php?name\u003ddrey&surname\u003dhalkin
Tas ir vaicājuma virkne, šeit 2 parametri. Šie parametri nonāks $ _get masīvā.
3. $ _post ir piepildīta ar citu veidu. Šīs masīva saturs ir aizpildīts no "Pieprasījuma galvenes". Tas ir, no vietas, kas ir paslēpta no acīm skaidri. Visa rutīna, lai izveidotu tādas virsrakstus pārlūkprogrammā. Lai gan dažreiz kaut kas ir rediģēts virsrakstos rokasgrāmatā.

Visbiežāk pēc pieprasījuma tiek izmantots veidlapās (nosūtīt datus).

Piemēram, mums ir veidlapa, lai pieteiktos 2 lauku pieteikšanās un paroles.

Iedomājieties, ka mēs izmantojam iegūt metodi. Tad, nosūtot veidlapu, mēs pievēršam šādu adresi /login.php?login\u003ddrey&password\u003d123 piekrīt, ka tas nav droši nodot šādu informāciju. Ikviens var atvērt savu pārlūkprogrammu un sāk ievadīt vietnes adresi. Tā var redzēt jūsu paroles un pieteikšanās.

Bet, ja mēs norādījām pēc pasta metodi, tad mēs saņemtu šādu pieprasījumu:
Post /login.php (Pieteikšanās \u003d Andrejs un parole \u003d 123) Kas iekavās būtu paslēpts un netiek saglabāts pārlūkprogrammā.

Kopumā apkopojot:
Iegūstiet, lai iegūtu noteiktu lapu konkrētā formā (šķirošana, pašreizējā blogā, meklēšanas virkne utt.).
Post - par mandrel datiem, kas neietekmē lapas displeju, tādā veidā, ka šie dati ietekmē tikai skriptu izpildes rezultātus (pieteikšanās, paroles, kredītkaršu numurus, ziņas utt.).

Un vēl vienu labas ziņas var apvienot, piemēram,
Post /index.php?page\u003dlogin (Pieteikšanās \u003d Andrejs un parole \u003d 123) Es domāju, ka es jau esmu pietiekami paskaidrojis, ka izrādās, un kādi parametri, kuriem masīvs samazināsies.

Mūsdienu tīmekļa resursi ne tikai sniedz informāciju apmeklētājam, bet arī mijiedarboties ar to. Lai mijiedarbotos ar lietotāju, jums ir jāsaņem kāda informācija no tā. Ir vairākas metodes datu iegūšanai, ļoti bieži sastopamas metodes. Gūt. un Post.. Un attiecīgi B. PHP. Ir atbalsts šīm datu pārsūtīšanas metodēm Gūt. un Post.. Redzēsim, kā šīs metodes darbojas.
Iegūt metodiDati gŪT. Nosūta, pievienojot tos uz URL adresi saucamo scenāriju, kas paredzēts apstrādei saņemto informāciju. Paskaidrojums Šī metode Izsauciet resursu URL adrešu joslā adrešu joslā un pievienojiet pirmo jautājumu zīmi (?), Un pēc tam numurs num \u003d 10. piemēram

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


Ja Jums ir vietējais serveris, tad parasti domēns būs localhost, un tad iepriekšējais ieraksts izskatīsies

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


Šādā gadījumā mēs nosūtām NUM parametru līdz 10. Lai pievienotu šādus parametrus, skripts ir jāizmanto -, piemēram, AMPERSANT (&)

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


Šādā gadījumā mēs nodevām trīs parametrus uz skriptu: num ar 10 vērtību, ierakstiet ar "jaunu" un V vērtību ar "Teksta" vērtību.
Lai iegūtu šos parametrus skriptu, jums ir jāizmanto iebūvēts masīvs. $ _Get. $ _Get ["Num"], $ _get ["Type"], $ _ Get ["V"]. Šie masīva elementi satur nosūtīto parametru vērtības. Lai pierādītu šo piemēru, izveidojiet script.php failu šādi.



Get metodes pārbaude PHP


atbalss ($ _get ["num"]. "
");
echo ($ _get ["tips"). "
");
atbalss ($ _get ["V"]);
?>


Un tagad zvaniet uz šo failu pārlūkprogrammā

http: //at/script.php? Num \u003d 10 un tips \u003d jauns & v \u003d teksts


un jūs redzēsiet pārraides parametrus pārlūkprogrammas logā. Bet, ja jūs to saucat par šo failu bez papildu parametri http: ////script.php, jūs redzēsiet kļūdas, kas dos tulku PHP.Ka nav šādu elementu masīva $ _get. Šo datu pārbaude no lietotāja var izcelt ne vienu rakstu, tāpēc šajā rakstā es nepieskarsos šim brīdim.
Kā jūs, iespējams, saprotat, piespiest lietotājam zvanīt uz datu adreses joslā nav ļoti labs un pilnīgi neērts. Tāpēc, lai saņemtu datus no lietotāja, jums ir nepieciešams izmantot HTML formu. Uzrakstiet vienkāršu HTML -Form.


Ievadiet numuru

Vai tev ir dators?

Jūsu komentārs:





Es komentēju par radīto formu. Veidlapas izveido pēc veidlapas taga. Formas lauki tiek izveidoti pēc ievades, izvēlieties, Textarea tagus (varat lasīt vairāk). Veidlapas atzīmē skripta URL ir norādīts atribūtā, kas saņems šīs veidlapas. Mūsu gadījumā mēs jau esam norādījuši jau esošo Script.php failu. Atribūts metode nosaka datu nosūtīšanas metodi. Mēs norādījām metodi Gūt.. Tagad mēs zinām, kādu failu šie faili tiks nosūtīti, un kādā veidā paliek noskaidrot, kur meklēt tos?!
Šie veidlapas dati tiks pārsūtīti uz tīmekļa resursu pārlūku, pievienojot tos URL: vispirms būs jautājuma zīme (?), Tad parametri ir atdalīti ar ampersantu (&). Parametru nosaukums tiks ņemts no nosaukuma atribūts, kas ir jāpārbauda no jebkura lauka lauka. Parametra vērtība būs atkarīga no lauka veida. Ja lauks ir teksta, lietotāja ievadītais teksts būs lietotājs. Ja lauks būs saraksts, slēdžu vai karogu grupa, tad izvēlētā vienuma vērtības vērtības vērtība būs parametra vērtība. Es paskaidrošu par mūsu veidlapas piemēru. Ja lietotājs ievada numuru 10 ievades laukā, tad parametra nosaukums būs num (ievades taga nosaukuma atribūta vērtība), un vērtība būs vērtība (lietotāja ievadīts numurs). Attiecīgi pārlūks veidos pāris "num \u003d 10". Ja lietotājs no saraksta izvēlas opciju "Jā", tad parametra nosaukums būs tips (nosaukums atribūts nosaukuma atzīmes izvēle), un vērtība būs vērtība (vērtības vērtību vērtību atzīmes opciju ). Attiecīgi pārlūks veidos pāris "tipa \u003d jā".
Tagad šī veidlapa tiks ievietota Forma.php lapā.



Datu pārsūtīšanas veidlapa, izmantojot GET un PHP



Ievadiet numuru

Vai tev ir dators?

Jūsu komentārs:







Ievadiet jebkuras vērtības veidlapas laukos un noklikšķiniet uz pogas "Iesniegt". Pēc pārlūka pogas nospiešanas atver citu lapu (Script.php) un ievadītie dati tiks parādīti pārlūkprogrammas logā. Es domāju, ka ir skaidrs, kāpēc: pārlūkprogramma pārsūta datus uz skriptu script.php un skriptu, šie dati tiks apstrādāti un parādīti.
Post metodeTagad aplūkosim, kā metode darbojas Post..
Lai nosūtītu šīs metodes Post. Jums jāizmanto HTML forma. Kā mēs atceramies, ka veidlapas metode ir atbildīga par veidlapas datu veidlapas nosūtīšanas metodi. Tāpēc jums ir jānorāda pasta vērtības atribūtā. Pretējā gadījumā veidlapa var būt tāda pati kā iegūt metodi. Mēs mainīsim savu formu, ko mēs jau esam izmantojuši, lai pārsūtītu datus uz metodi pēcpasta metodes nosūtīšanai.


Ievadiet numuru

Vai tev ir dators?

Jūsu komentārs:





Kā redzat, veidlapa paliek tas pats, izņemot metodes un rīcības atribūtus. Tagad dati tiks nodoti skript_post.php skriptu. Novietojiet mūsu veidlapu Forma_post.php lapā.



Post un PHP datu pārsūtīšanas forma



Ievadiet numuru

Vai tev ir dators?

Jūsu komentārs:







Tagad jums ir nepieciešams uzrakstīt skriptu, kas apstrādās mūsu veidlapas datus.
Lai iegūtu pārraidīto metodi datu skriptu Post. nepieciešams izmantot iebūvētu masīvu $ _Post.. Šīs masīva atslēgas būs parametru nosaukumi. Mūsu gadījumā jums ir jāizmanto $ _Post ["num"], $ _post ["tips"], $ _ post ["V"]. Šie masīva elementi satur nosūtīto datu vērtības. Kā jūs redzat atšķirību no iegūt metodi, tas tiek izsaka tikai tikai ar masīva $ _post. Tāpēc mēs nebūsim grūti uzrakstīt script_post.php failu:



Postas metodes pārbaude PHP


atbalss ($ _post ["num"). "
");
echo ($ _post ["tips"). "
");
atbalss ($ _post ["V"]);
?>


Tagad atveriet Forma_post.php failu pārlūkprogrammā. Ievadiet dažus datus veidlapas laukā un nospiediet pogu "Iesniegt". Tagad, iespējams, jūs pamanījāt atšķirību starp pēcpārbaudes metodi - šīs veidlapas neparādījās pārlūkprogrammas adreses joslā. Datu metode Post. Jūs nevarat iziet cauri pārlūkprogrammas adreses joslai. Šī būtiskā atšķirība ir jāatceras.
Iebildums PHP. Neatkarīgi no tā, kādas metodes dati tika nosūtīti - pēc pasta metodes vai iegūt metodi - lai iegūtu datus, izmantojot $ _request masīvu. Saņemšanas un pasta metožu salīdzinājumsLietojot Get metodi, dati tiek pārraidīti, pievienojot URL. Tādējādi tie būs redzami lietotājam, ka drošības ziņā ne vienmēr ir labs. Arī maksimālais pārsūtīto datu apjoms būs atkarīgs no pārlūkprogrammas - no maksimālās pieļaujamā pārlūka adrešu joslas rakstzīmju skaita.
Lietojot Post metodi, dati netiks redzami lietotājam (nav parādīts pārlūkprogrammas adreses joslā). Tāpēc tie ir vairāk aizsargāti, un tāpēc programmas apstrāde šo datu apstrāde ir vairāk aizsargāta drošības ziņā. Arī pārraidīto datu apjoms ir praktiski ne ierobežots.
Izvēloties datu pārsūtīšanas veidu, jums ir jāapsver iezīmes un jāpārtrauc pēc pieņemamākās metodes.

HTML forma. Arrays $ _post un $ _get

HTML forma. Datu nosūtīšanas metodes serverim

Ar HTML veidlapām, jūs, iespējams, jau esat tikušies:

Ievadiet savu vārdu:

Saglabājot šo kodu HTML failā un apskatot to ar savu iecienītāko pārlūku, jūs redzēsiet parasto HTML formu:

Tag

ar pāris galīgo tagu
, Patiesībā, prasa veidlapu. Viņa atribūti ir izvēles:

  • rīcība - norāda URL (pilnu vai relatīvu), uz kuru tiks nosūtīta veidlapa. Ja šis atribūts nenorāda, lielākā daļa pārlūkprogrammu (precīzāk runājot, visas mani pārlūkprogrammas) nosūta veidlapu pašreizējam dokumentam, tas ir, "par sevi". Tas ir ērts samazinājums, bet saskaņā ar HTML standartu ir nepieciešama rīcības atribūts.
  • metode ir veids, kā nosūtīt veidlapu. Ir divi no tiem.
    • Saņemiet veidlapas datu nosūtīšanu adrešu joslā.
      Vai jūs varētu pamanīt klātbūtni simbola URL beigās "?" Un šādus datus formāta parametrā \u003d vērtība. Šeit "parametrs" atbilst formu elementu vārda atribūta vērtībai (skatīt zemāk par TEG ) un "Vērtība" - atribūta vērtības saturs (piemēram, tajā ir iekļauta lietotāja ievade viena taga teksta laukā ).
      Piemēram, mēģiniet meklēt kaut ko Yandex un pievērsiet uzmanību pārlūkprogrammas adreses joslai. Tas ir iegūt metodi.
    • Pēc - pelējuma tie tiek nosūtīti vaicājuma korpusā. Ja tas nav pilnīgi skaidrs (vai tas ir pilnīgi neskaidrs), kas tas ir - neuztraucieties, mēs drīz atgriezīsimies pie šī jautājuma.
    Ja atribūts metode nav norādīta - Get ir domāts.

Tag - Norāda formu elementu, ko nosaka tipa atribūts:

  • "Teksta" vērtība nosaka viena līnijas ievades lauku
  • Vērtība "Iesniegt" nosaka pogu, kad veidlapa tiek nospiesta serverī

Citas vērtības ir iespējamas (un. \\ T - ne vienīgais marķējums, kas norāda veidlapas elementu).

Tātad, kas notiek, kad mēs nospiežam pogu "OK"?

  1. Pārlūkprogramma pārlūko formā iekļautos elementus un rada no to nosaukuma un vērtības atribūtiem. Pieņemsim, ka nosaukums Vasya ir ieviesta. Šajā gadījumā šie veidlapas - Vārds \u003d Vasya & Okbutton \u003d OK
  2. Pārlūks izveido savienojumu ar serveri, nosūta pieprasījumu uz serveri, kas norādīts darbības tag atribūtā
    Izmantojot atribūtā norādīto sūtīšanas metodi (šajā gadījumā - Get), nosūtot datus vaicājumā.
  3. Serveris analizē saņemto vaicājumu, veido atbildi, nosūta to pārlūkprogrammā un aizver savienojumu
  4. Pārlūks parāda no servera saņemto dokumentu.

Sūtīt to pašu vaicājumu manuāli (ar Telnet palīdzību) izskatās šādi (Pieņemsim, ka domēna vārds Vietne - www.example.com):

Telnet www.example.com 80 get /cgi-bin/form_handler.cgi?name\u003dvasya&okbutton\u003dok http / 1,0 \\ r \\ n saimnieks: www.example.com \\ t n \\ r \\ n

Kā jūs, visticamāk, jau ir uzminējuši, nospiežot pogu Iesniegt formā ar "Get" sūtīšanas metodi, kas ir līdzīga atbilstošā URL (ar jautājuma zīmes un veidlapas datiem), pārlūkprogrammas adresē bārs:

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

Faktiski, saņemot metodi, vienmēr tiek izmantota, pieprasot dokumentu no servera, vienkārši ievadot URL, vai noklikšķinot uz saites. Izmantot URL vienkārši pievieno jautājumu zīmi un veidlapu datus.

Iespējams, visas šīs tehniskās detaļas un vingrinājumi ar Telnet-Ohm šķiet neticami garlaicīgi un pat nevajadzīgi ("un kas ir PHP?"). Un veltīgi. :) Tie ir darba pamati HTTP protokolā, kas jums ir jāzina katram tīmekļa programmētājam, un tas nav teorētiskas zināšanas - tas viss ir noderīgs praksē.

Tagad nomainiet pirmo virkni mūsu veidlapu šādā veidā:

Mēs norādījām uz sūtīšanas metodi "Post". Šajā gadījumā dati tiek nosūtīti uz serveri vairākos citā veidā:

Telnet www.example.com 80 post /cgi-bin/form_handler.cgi http / 1,0 \\ r \\ n saimnieks: www.example.com \\ r \\ n satura tipa: lietojumprogramma / x-www-form-urlencoded \\ r \\ N satura garums: 41263 r n r \\ n name \u003d vasya & okbutton \u003d ok

Izmantojot Post metodi, šīs veidlapas tiek nosūtītas pēc "diviem ievadiem" - vaicājuma korpusā. Viss, kas iepriekš ir faktiski vaicājuma galvene (un kad mēs izmantojām iegūt metodi, šīs veidlapas tika nosūtītas nosaukumā). Lai serveris uzzinātu, kā pabeigt pieprasījuma iestāžu lasīšanu, nosaukums ir satura garuma līnijā; Aptuveni tas pats, ka veidlapas dati tiks pārraidīti ar parametru1 \u003d vērtība1 un parametrs2 \u003d vērtība2 ..., un vērtības tiek pārraidītas kā urlencode - tas ir, tāpat kā ar iegūt metodi, bet vaicājuma korpusā, serverī Ziņojumi satura header -Type: pieteikumu / x-www-form-urlencoded.

Post metodes priekšrocība ir ierobežojuma trūkums uz virknes garuma ar veidlapas datiem.

Lietojot Post metodi, nav iespējams nosūtīt veidlapu, vienkārši "iet uz saiti", kā tas bija ar Get.

Izmantojot pēcformu, savā darbības atribūtā jūs varat norādīt pēc jautājuma zīmes un parametriem iegūt veidlapu. Tādējādi pasta metode ietver gan iegūto metodi.

Arrays $ _get un $ _post

Tātad, veidlapas ir galvenais veids, kā apmainīties ar datiem starp tīmekļa serveri un pārlūku, tas ir, sniedziet mijiedarbību ar lietotāju - patiesībā, par kuru jums ir nepieciešama tīmekļa programmēšana.

Apsveriet vienkāršu piemēru:



ja ($ _server ["pieprasījums_method"] \u003d\u003d "post") (
Atbalss "

Sveiki, "$ _Post [" vārds "]."

!" ;
}
?>
">
Ievadiet savu vārdu:




8. -2. Rindā veidlapā ir divi vienumi: vārds un Okbutton. Atribūts Metode norāda pasta veidlapas metodi, darbības atribūts, kas norāda URL, uz kuru tiek nosūtīts veidlapa, ir piepildīta ar PHP_self servera mainīgo vērtību - skripta adresi šobrīd.

- saīsināts ierakstīšanas veids .

Pieņemsim, ka nosaukuma laukā mēs ievadījām Vasya vērtību, un nospiesta OK poga. Tajā pašā laikā pārlūks nosūta uz pasta serveri. Vaicājuma korpuss: Vārds \u003d Vasya & Okbutton \u003d OK. PHP automātiski aizpilda $ _post masīvu:

$ _Post ["Vārds"] \u003d "Vasya"
$ _Post [Okbutton] \u003d "OK"

Faktiski "Vasya" vērtība tiek nosūtīta pārlūkprogrammā urlencode formā; Attiecībā uz Windows-1251 kodējumu šī vērtība izskatās kā% C2% E0% F1% FF. Bet, tā kā PHP automātiski veic nepieciešamo dekodēšanu, mēs varam "aizmirst" par šo funkciju - līdz brīdim, kad jums ir jāstrādā ar HTTP vaicājumiem manuāli.

Tā kā vaicājuma korpusā ir norādīti tikai vārdi un vērtības, bet ne veidlapu elementu veidi, PHP nav ne jausmas, atbilst $ _post ["Vārds"] ievades rindā, pogai vai sarakstam. Taču šī informācija kopumā ir absolūti nepieciešama. :)

Tā kā jūs zināt, kas ir uzrakstīts uz pogas Iesniegt, mēs esam izvēles, 11. rindā jūs varat izdzēst nosaukuma atribūtu, saīsinot pogas aprakstu uz . Šajā gadījumā pārlūks nosūtīs nosaukumu \u003d Vasya-Vasya.

Un tagad - tas pats, bet gan formas:



ja (amset ($ _ saņemt ["Vārds"))) (
Atbalss "

Sveiki, "$ _GET [" Vārds "]."

!" ;
}
?>
">
Ievadiet savu vārdu:





8. rindā būtu iespējams rakstīt ar tādu pašu panākumu

: Get - noklusējuma metode. Šoreiz pārlūks nosūta saņemšanas pieprasījumu, kas ir līdzvērtīgs adreses adrešu joslas ievadīšanai: http: //adress-site./mety-script.php? Vārds \u003d Vasya.

PHP ar Get-Forms nonāk tādā pašā veidā kā ar pastu, ar atšķirību, ka $ _get masīvs ir piepildīts.

Kardināla atšķirība ir 4. rindā. Tā kā vienkārša adreses ievade pārlūkprogrammā ir iegūt-oksitucy, pārbaudiet, vai ($ _server ["pieprasījums_method"] \u003d\u003d "get") ir bezjēdzīga. Tāpēc mēs izmantojam sižetu () dizainu, kas atgriežas taisnība, ja šis mainīgais ir definēts (I.E., tam tika piešķirta vērtība) un nepatiesa - ja mainīgais nav definēts. Ja veidlapa ir aizpildīta - kā jūs jau sapratāt, PHP automātiski piešķir atbilstošo vērtību $ _GET ["Vārds"].

Pārbaudi izmanto, izmantojot sīpakus () - universālu, to var izmantot pēcformas. Turklāt ir vēlams, jo tas ļauj jums noskaidrot, kuri veidlapas lauki ir aizpildīti.

Nedaudz sarežģītāks piemērs.




Echo "Norādiet vārdu!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
Atbalss.
"
;
) Cits (

" ;

Atbalss "jums. $ Vecums. "Gadus"
" ;
}
Atbalss "


" ;
}
?>
">
Ievadiet savu vārdu:


Ievadiet savu dzimšanas gadu:





Šeit nav izmantotas jaunas metodes. Ievērojiet, izpildiet kodu, mēģiniet modificēt ...

Mainiet pēdējo piemēru, lai lietotājam nav nepieciešams atkārtoti aizpildīt laukus. Lai to izdarītu, aizpildiet veidlapas elementu vērtības atribūtus tikai ievadītās vērtības.



$ Name \u003d amset ($ _ post ["Vārds"])? $ _Post ["Vārds"]: "";
$ year \u003d amset ($ _ post ["gads"])? $ _Post ["gads"]: "";

Ja (amset ($ _ post ["nosaukums"), $ _post ["gads"])) (
ja ($ _post ["nosaukums") \u003d\u003d ") (
Echo "Norādiet vārdu!
" ;
) Cits, ja ($ _post ["gads")< 1900 || $_POST [ "year" ] > 2004 ) {
Atbalss. "Norādiet dzimšanas gadu! Derīgs vērtību diapazons: 1900.2004
"
;
) Cits (
Echo "Sveiki". $ _Post ["Vārds"]. "!
" ;
$ Age \u003d 2004 - $ _post ["gads"];
Atbalss "jums. $ Vecums. "Gadus"
" ;
}
Atbalss "


" ;
}
?>
">
Ievadiet savu vārdu:


Ievadiet savu dzimšanas gadu:





Dažas nesaprotamas līnijas 4 un 5. Viss ir ļoti vienkāršs: 4. līniju var ierakstīt šādi:

ja (isset ($ _ post ["nosaukums")))
$ name \u003d $ _post ["Vārds"];
cits.
$ Nosaukums \u003d "";

Var rasties jautājums - kāpēc ne mest prom stīgas 4-5 un neraksta:

Ievadiet savu vārdu: ">

Ievadiet savu dzimšanas gadu: ">

Fakts ir tāds, ka, ja šīs ziņas nav definētas - un tas būs, ja veidlapa vēl nav piepildīta, - PHP izdos brīdinājumus par neinicializētu mainīgo (un, pamatotu: šāds ziņojums ļauj ātri ātri Atrodiet cietos stiprinājumus mainīgo nosaukumos, kā arī brīdina iespējamos "caurumus" uz vietas). Jūs, protams, varat ievietot kodu ar sižetu tieši formā, bet izrādās pārāk apgrūtinoša.

Sapratu? Un tagad mēģiniet atrast kļūdu tālāk norādītajā kodā. Nu, ne gluži kļūda, bet defektiem.

htmlspecialchars ()

Neatradīja? ES tev pateikšu. Ievadiet, piemēram, "Vārds" lauka dubultās kotējumos un kādu tekstu, piemēram, VA "SIA. Nosūtīt veidlapu un apskatiet saņemtās lapas avota kodu. Ceturtajā rindā būs kaut kas līdzīgs :

Ievadiet savu vārdu:

Tas ir - nekas labs. Un, ja viltīgs lietotājs ievadīja JavaScript kodu?

Lai atrisinātu šo problēmu, ir nepieciešams izmantot HTMLSpecialChars () funkciju, kas aizstās pakalpojumu rakstzīmes savā HTML pārstāvniecībā (piemēram, citāti - uz "):



$ Name \u003d amset ($ _ post ["Vārds"])? Htmlspecialchars ($ _post ["nosaukums"): "";
$ year \u003d amset ($ _ post ["gads"])? Htmlspecialchars ($ _post ["gads"): "";

Ja (amset ($ _ post ["nosaukums"), $ _post ["gads"])) (
ja ($ _post ["nosaukums") \u003d\u003d ") (
Echo "Norādiet vārdu!
" ;
) Cits, ja ($ _post ["gads")< 1900 || $_POST [ "year" ] > 2004 ) {
Atbalss. "Norādiet dzimšanas gadu! Derīgs vērtību diapazons: 1900.2004
"
;
) Cits (
Echo "Sveiki". $ Nosaukums. "!
" ;
$ Age \u003d 2004 - $ _post ["gads"];
Atbalss "jums. $ Vecums. "Gadus"
" ;
}
Atbalss "


" ;
}
?>
">
Ievadiet savu vārdu:


Ievadiet savu dzimšanas gadu:





Atkārtojiet pieredzi un pārliecinieties, vai HTML kods tagad ir pareizs.

Atcerieties - HTMLSPECIALCHARS () funkcija vienmēr ir jāizmanto, ja tiek parādīts mainīgā lieluma saturs, kurā ir redzams HTML īpašais HTML.

phpinfo ()

FPINFO () funkcija ir viens no svarīgākajiem PHP. Tas parāda informāciju par PHP iestatījumiem, vērtības visu konfigurācijas mainīgo ...

Kāpēc es minēšu viņu rakstā par veidlapām? phpinfo () - ērtāks atkļūdošanas rīks. Phpinfo (), cita starpā, parāda vērtības visu $ _get, $ _post un $ _server mainīgajiem. Tātad, ja mainīgās formas "zaudēja", vienkāršākais veids, kā atklāt, kas ir gadījums - izmantojiet phpinfo () funkciju. Lai funkcija parādītu tikai mainīgo lielumu vērtības (un jums nebija, lai ritinātu pa desmitiem lappušu), tas ir jāaicina šādi: phpinfo (info_variables); vai - tas ir absolūti tāds pats - phpinfo (32);.



">
Ievadiet savu vārdu:


phpinfo (32);
?>

Vai, piemēram, šī situācija: jūs vēlaties uzzināt apmeklētāja IP adresi. Jūs atceraties, ka atbilstošais mainīgais tiek saglabāts masīvā $ _Server, bet - tas nav pietiekami - viņi aizmirsa tieši to, kā mainīgais tiek saukts. Atkal, zvaniet phpinfo (32); , Mēs meklējam jūsu IP adresi plāksnē un atrast to - $ _server virknē ["Remote_addr"].