Mēs apstrādājam POST pieprasījumus PHP. NodeJS. Kā apstrādāt POST pieprasījumus Apstrādājot http pieprasījumus php

Pārlūka 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ā shēmā vārda/vērtības pāri ir savienoti ar vienādības zīmēm, un dažādi pāri ir atdalīti ar & zīmi.

Name1=value1&name2=value2&name3=value3

Atstarpes tiek noņemtas un aizstātas ar rakstzīmi +, un visas citas rakstzīmes, kas nav burtciparu rakstzīmes, tiek aizstātas ar heksadecimālajām vērtībām. Kad informācija ir kodēta, tā tiek nosūtīta uz serveri.

GET metode

GET metode nosūta kodētu lietotāja informāciju, kas pievienota lapas pieprasījumam. Vai lapas un kodētā informācija ir atdalītas viena no otras? jautājuma zīme.

http://www.test.com/index.htm?name1=value1&name2=value2

  • GET metode rada garu virkni, kas tiek parādīta jūsu servera žurnālos pārlūkprogrammas laukā "Atrašanās vieta".
  • GET metode ir ierobežota, lai nosūtītu tikai līdz 1024 rakstzīmēm.
  • Nekad neizmantojiet GET metodi, ja jums ir parole vai cita sensitīva informācija, ko nosūtīt serverim.
  • GET nevar izmantot bināro datu, piemēram, attēlu vai teksta dokumentu, pārsūtīšanai uz serveri.
  • Datiem, kas nosūtīti, izmantojot GET metodi, var piekļūt, izmantojot vides mainīgo QUERY_STRING.
  • PHP nodrošina asociatīvo masīvu $_GET, lai piekļūtu visai nosūtītajai informācijai, izmantojot GET metodi.

if($_GET["vārds"] || $_GET["vecums"]) ( echo "Laipni lūdzam ". $_GET["vārds"]; echo "Jūs esat ". $_GET["vecums"]. " gadi "; Izeja(); )

Vārds: Vecums:

POST metode

Metode POSTĪT pārsūta informāciju, izmantojot HTTP galvenes. Informācija tiek kodēta, kā aprakstīts metodes gadījumā GŪT, un ievietots galvenē QUERY_STRING.

  • POST metodei nav ierobežojumu nosūtāmo datu lielumam.
  • POST metodi var izmantot, lai nosūtītu ASCII, kā arī bināros datus.
  • Dati, kas nosūtīti, izmantojot POST metodi, iet caur HTTP galveni, tāpēc drošība ir atkarīga no HTTP protokola. Izmantojot drošu HTTP, jūs varat nodrošināt, ka jūsu informācija ir aizsargāta.
  • PHP nodrošina asociatīvu masīvu $_POST, lai piekļūtu visai informācijai, kas nosūtīta, izmantojot POST metodi.

Izmēģiniet šo piemēru, ievietojot avota kodu skriptā test.php.

if($_POST["vārds"] || $_POST["vecums"]) (if (preg_match("[^A-Za-z"-]",$_POST["vārds"])) ( mirst (" nederīgs nosaukums, un vārdam jābūt alfabētam"); ​​) echo "Laipni lūdzam ". $_POST["vārds"]; echo "Jūs esat ". $_POST["vecums"]. " gadus vecs."; iziet(); )

Vārds: Vecums:

$_REQUEST mainīgais

PHP mainīgais $_REQUEST satur tādu saturu kā $_GET, $_POST, tātad $_COOKIE. Mēs apspriedīsim mainīgo $_COOKIE kad mēs runājam par cepumiem.

PHP $_REQUEST mainīgo var izmantot, lai izgūtu rezultātu no veidlapas datiem, kas iesniegti, izmantojot GET un POST metodes.

Pirmā metode PHP POST pieprasījuma izpildei ir izmantot file_get_contents . Otrā metode izmantos fread kombinācijā ar pāris citām funkcijām. Abās opcijās tiek izmantota funkcija stream_context_create, lai aizpildītu nepieciešamos pieprasījuma galvenes laukus.

Koda skaidrojums

Mainīgais $sPD satur pārsūtāmos datus. Tam ir jābūt HTTP pieprasījuma virknes formātā, tāpēc dažām īpašām rakstzīmēm ir jābūt kodētām.

Gan funkcijā file_get_contents, gan funkcijā fread mums ir divi jauni parametri. Pirmais ir use_include_path . Tā kā mēs veicam HTTP pieprasījumu, abos piemēros tas būs nepatiess. Ja ir iestatīta vērtība True, lai lasītu vietējo resursu, funkcija meklēs failu ar include_path .

Otrais parametrs ir konteksts, kas tiek aizpildīts ar stream_context_create atgriešanās vērtību, kas iegūst $aHTTP masīva vērtību.

File_get_contents izmantošana, lai veiktu POST pieprasījumus

Lai nosūtītu POST pieprasījumu, izmantojot file_get_contents PHP, jums ir jāizmanto stream_context_create, lai manuāli aizpildītu galvenes laukus un norādītu, kuru "iesaiņojumu" izmantot — šajā gadījumā HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST dati $aHTTP = array("http" => // Iesaiņotājs, kas tiks izmantots array("method" => "POST", // Pieprasījuma metode // Pieprasījuma galvenes ir iestatītas zem "header" => "Saturs - tips: application/x-www-form-urlencoded", "saturs" => $sPD)); $konteksts = straumes_konteksta_izveide($aHTTP); $contents = file_get_contents($sURL, false, $konteksts); atbalss $saturs;

Fread izmantošana POST pieprasījumu izpildei

Varat izmantot fread funkciju, lai veiktu POST pieprasījumus. Šajā piemērā tiek izmantots stream_context_create, lai izveidotu nepieciešamās HTTP pieprasījuma galvenes:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST dati $aHTTP = array("http" => // Iesaiņotājs, kas tiks izmantots array("method" => "POST", // Pieprasījuma metode // Pieprasījuma galvenes ir iestatītas zem "header" => "Saturs - tips: application/x-www-form-urlencoded", "saturs" => $sPD)); $konteksts = straumes_konteksta_izveide($aHTTP); $rokturis = fopen($sURL, "r", false, $konteksts); $contents = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); atbalss $saturs;

GET pieprasījumu veikšana, izmantojot PHP

Tagad mēs koncentrēsimies uz fread un file_get_contents izmantošanu, lai lejupielādētu saturu no interneta, izmantojot HTTP un HTTPS. Lai izmantotu šajā rakstā aprakstītās metodes, ir jāiespējo opcija fopen wrappers. Lai to izdarītu, failā php.ini ir jāiestata parametrs allow_url_fopen uz On.

POST un GET pieprasījumu izpilde PHP tiek izmantota, lai pieteiktos vietnēs, izgūtu tīmekļa lapas saturu vai pārbaudītu jaunas lietojumprogrammu versijas. Mēs apskatīsim, kā veikt vienkāršus HTTP pieprasījumus.

Fread izmantošana, lai lejupielādētu vai saņemtu failus internetā

Atcerieties, ka tīmekļa lapu lasīšana ir ierobežota ar pieejamo paketes daļu. Tātad jums ir jāizmanto funkcija stream_get_contents ( līdzīgi kā file_get_contents) vai kamēr cilpa, lai lasītu saturu mazākās daļās, līdz tiek sasniegtas faila beigas:

Šajā gadījumā, apstrādājot PHP POST pieprasījumu, pēdējais fread funkcijas arguments ir vienāds ar fragmenta lielumu. Parasti tam nevajadzētu būt lielākam par 8192 ( 8*1024 ).

Ņemiet vērā, ka tas var būt lielāks vai mazāks, un to var ierobežot arī tās sistēmas iestatījumi, kurā darbojas PHP.

Izmantojot failu_get_contents, lai iegūtu vietnes URL

Vēl vienkāršāk ir izmantot šo metodi, lasot failu, izmantojot HTTP, jo jums nav jāuztraucas par lasīšanu pa daļām - viss tiek apstrādāts PHP.

Šī publikācija ir draudzīgās projekta komandas sagatavotā raksta “Making POST Requests With PHP” tulkojums

PHP šobrīd ir viena no populārākajām valodām tīmekļa lietojumprogrammu ieviešanai. Šis kurss ir veltīts tā pamatu apguvei. Uzsvars tiek likts uz iegūto prasmju praktisko pielietošanu.

PHP valoda tika izveidota, lai atrisinātu konkrētu praktisku problēmu internetā (kuru var uzzināt, izlasot pirmo kursa lekciju). Mēs arī centīsimies pārāk nenovirzīties no teorētiskās spriešanas, un katrā no lekcijām centīsimies atrisināt kādu konkrētu problēmu. Lielākā daļa piemēru ir ņemti no reālās dzīves sistēmas: virtuālā datorzinātņu vēstures muzeja. Kursa pirmā daļa ir veltīta sintakses un vadības struktūru pamatu apguvei. Pēc tam klienta-servera tehnoloģija tiek uzskatīta par galveno PHP valodas lietojuma jomu. Pēc tam mēs pārejam pie mūsuprāt visnoderīgāko iebūvēto funkciju izpētes un praktisku problēmu risināšanas ar to palīdzību. Lai gan objekta modelis PHP valodā nav pats bagātākais, tā fundamentālā klātbūtne ļauj dabiski aprakstīt objektu datu modeļus. Kā pamatmodelis tiks aplūkots virtuālā datorzinātņu muzeja dokumenta modelis. Pēc tam tiks izskatīti vairāki pielietotie aspekti: darbs ar failu sistēmu, ar datu bāzi, virknēm, sesijām, DOM XML - tas viss ļaus mums apsvērt valodas praktiskās lietošanas galvenos uzdevumus.

Kā redzams no iepriekšējās tabulas, Apache serveris ieņem vadošo pozīciju. Viss, ko mēs kādreiz teiksim par tīmekļa serveriem, ir vērsts uz Apache, ja vien nav norādīts citādi. Par to, kā to instalēt savā datorā, mēs jau runājām pašā pirmajā lekcijā. Un tagad, kā solīts, pievērsīsimies HTTP protokolam.

HTTP protokols un metodes datu pārsūtīšanai uz serveri

Internets ir veidots pēc daudzslāņu principa, sākot no fiziskā slāņa, kas nodarbojas ar binārās informācijas pārsūtīšanas fiziskajiem aspektiem, līdz lietojumprogrammu slānim, kas nodrošina saskarni starp lietotāju un tīklu.

HTTP (HyperText Transfer Protocol) ir lietojumprogrammu slāņa protokols, kas paredzēts hiperteksta informācijas apmaiņai internetā.

HTTP nodrošina metožu kopu, lai norādītu serverim nosūtītā pieprasījuma mērķi. Šīs metodes ir balstītas uz atsauces disciplīnu, kur universālais resursa identifikators, vai nu kā universālais resursa vietrādis (URL) vai universālais resursa nosaukums, tiek izmantots, lai norādītu resursu, kuram šī metode ir jāpiemēro. ,URN.

Ziņojumi tīklā, izmantojot HTTP protokolu, tiek pārsūtīti formātā, kas ir līdzīgs interneta pasta ziņojumu formātam (RFC-822) vai MIME (Multipurpose Internet Mail Exchange) ziņojumu formātam.

HTTP tiek izmantots saziņai starp dažādām lietotāju programmām un vārtejas programmām, kas nodrošina piekļuvi esošajiem interneta protokoliem, piemēram, SMTP (e-pasta protokols), NNTP (ziņu pārsūtīšanas protokols), FTP (failu pārsūtīšanas protokols), Gopher un WAIS. HTTP ir paredzēts, lai ļautu šādām vārtejām bez zaudējumiem pārsūtīt datus caur starpniekserveriem.

Protokols īsteno pieprasījuma/atbildes principu. Pieprasītāja programma — klients uzsāk mijiedarbību ar atbildīgo programmu — serveri un nosūta pieprasījumu, kas satur:

Piekļuves metode;

URI adrese;

Protokola versija;

Ziņojums (formā līdzīgs MIME), kas satur informāciju par pārsūtāmo datu veidu, informāciju par klientu, kas veic pieprasījumu, un, iespējams, ziņojuma saturu (pamattekstu).

Servera atbilde satur:

Statusa rinda, kas ietver protokola versiju un atgriešanas kodu (veiksme vai kļūda);

Ziņojums (MIME līdzīgā formā), kas ietver servera informāciju, meta informāciju (tas ir, informāciju par ziņojuma saturu) un ziņojuma pamattekstu.

Protokols nenorāda, kam ir jāatver un jāaizver savienojums starp klientu un serveri. Praksē savienojumu parasti atver klients, un serveris pēc atbildes nosūtīšanas iniciē tā pārtraukšanu.

Apskatīsim sīkāk, kādā formā pieprasījumi tiek nosūtīti serverim.

Klienta pieprasījuma veidlapa

Klients nosūta pieprasījumu serverim vienā no diviem veidiem: pilns vai saīsināts. Pieprasījums pirmajā formā tiek saukts par pilnu pieprasījumu, bet otrajā formā par vienkāršu pieprasījumu.

Vienkāršs pieprasījums satur piekļuves metodi un resursa adresi. Formāli to var uzrakstīt šādi:

<Простой-Запрос> := <Метод> <символ пробел>
<Запрашиваемый-URI> <символ новой строки>

Metode var būt GET, POST, HEAD, PUT, DELETE un citi. Par visizplatītākajiem no tiem mēs runāsim nedaudz vēlāk. Pieprasītais URI visbiežāk ir resursa URL.

Vienkārša pieprasījuma piemērs:

IEGŪT http://phpbook.info/

Šeit GET ir piekļuves metode, t.i. metode, kas jāpiemēro pieprasītajam resursam, un http://phpbook.info/ ir pieprasītā resursa URL.

Pilns pieprasījums satur statusa rindiņu, vairākas galvenes (pieprasījuma galvene, vispārīgā galvene vai satura galvene) un, iespējams, pieprasījuma pamattekstu. Formāli pilnīga pieprasījuma vispārējo formu var uzrakstīt šādi:

<Полный запрос> := <Строка Состояния>
(<Общий заголовок>|<Заголовок запроса>|
<Заголовок содержания>)
<символ новой строки>
[<содержание запроса>]

Kvadrātiekavas šeit norāda neobligātos galvenes elementus, un alternatīvās opcijas ir norādītas vertikālā joslā. Elements<Строка состояния>satur pieprasījuma metodi un resursa URI (tāpat kā vienkāršs pieprasījums) un papildus izmantotā HTTP protokola versiju. Piemēram, lai izsauktu ārēju programmu, varat izmantot šādu statusa rindiņu:

POST http://phpbook.info/cgi-bin/test HTTP/1.0

Šajā gadījumā tiek izmantota POST metode un HTTP versija 1.0.

Abos pieprasījuma veidos pieprasītā resursa URI ir svarīga loma. Visizplatītākais URI tiek izmantots kā resursa URL. Piekļūstot serverim, varat izmantot gan pilno URL formu, gan vienkāršoto.

Pilnajā veidlapā ir norādīts piekļuves protokola veids, resursa servera adrese un serverī esošā resursa adrese (4.2. attēls).

Saīsinātajā formā protokols un servera adrese ir izlaisti, norādot tikai resursa atrašanās vietu no servera saknes. Pilna forma tiek izmantota, ja ir iespējams pārsūtīt pieprasījumu uz citu serveri. Ja darbs notiek tikai ar vienu serveri, tad bieži tiek izmantota saīsinātā forma.


Rīsi. 4.2. Pilna URL veidlapa

Metodes

Kā jau minēts, jebkuram klienta pieprasījumam serverim jāsākas ar metodes specifikāciju. Metode paziņo klienta pieprasījuma mērķi. HTTP protokols atbalsta vairākas metodes, taču faktiski tiek izmantotas tikai trīs: POST, GET un HEAD. GET metode ļauj izgūt visus datus, ko resursa pieprasījumā identificējis URI. Ja URI norāda uz programmu, tad tiek atgriezts programmas darbības rezultāts, nevis tās teksts (ja vien teksts, protams, nav tās darbības rezultāts). Papildu informācija, kas nepieciešama pieprasījuma apstrādei, ir iebūvēta pašā pieprasījumā (statusa rindā). Izmantojot GET metodi, faktiski pieprasītā informācija (piemēram, HTML dokumenta teksts) tiek atgriezta resursa pamatteksta laukā.

Ir GET metodes variācija - nosacījuma GET. Šī metode norāda serverim, ka uz pieprasījumu ir jāatbild tikai tad, ja pieprasījuma galvenes laukā if-Modified-Since ietvertais nosacījums ir patiess. Precīzāk, resursa pamatteksts tiek nodots, atbildot uz pieprasījumu, ja resurss ir mainīts kopš datuma, kas norādīts sadaļā if-Modified-Since.

HEAD metode ir līdzīga GET metodei, taču neatgriež resursa pamattekstu un tai nav nosacīta līdzinieka. HEAD metode tiek izmantota, lai iegūtu informāciju par resursu. Tas var būt noderīgi, piemēram, risinot hiperteksta saišu pārbaudes problēmu.

POST metode ir paredzēta tādas informācijas pārsūtīšanai uz serveri kā resursu anotācijas, ziņas un pasta ziņas, datu bāzei pievienojamie dati, t.i. liela apjoma un diezgan svarīgas informācijas pārsūtīšanai. Atšķirībā no GET un HEAD metodēm, POST pārsūta resursa pamattekstu, kas ir informācija, kas saņemta no veidlapas laukiem vai citiem ievades avotiem.

Līdz šim esam tikai teorētiski un iepazinušies ar pamatjēdzieniem. Tagad ir laiks iemācīties to visu izmantot praksē. Vēlāk lekcijā apskatīsim, kā nosūtīt pieprasījumus serverim un kā apstrādāt tā atbildes.

HTML veidlapu izmantošana datu iesniegšanai serverī

Kā pārsūtīt datus uz serveri? Šim nolūkam HTML valodai ir īpaša konstrukcija - formas. Veidlapas ir paredzētas informācijas saņemšanai no lietotāja. Piemēram, jums ir jāzina lietotāja pieteikumvārds un parole, lai noteiktu, kurām vietnes lapām viņam ir atļauts piekļūt. Vai arī jums ir nepieciešami lietotāja personas dati, lai varētu ar viņu sazināties. Šādas informācijas ievadīšanai tiek precīzi izmantotas veidlapas. Tajās varat ievadīt tekstu vai atlasīt atbilstošās opcijas no saraksta. Veidlapā ierakstītie dati tiek nosūtīti apstrādei uz īpašu programmu (piemēram, PHP skriptu) serverī. Atkarībā no lietotāja ievadītajiem datiem šī programma var ģenerēt dažādas tīmekļa lapas, nosūtīt vaicājumus uz datu bāzi, palaist dažādas lietojumprogrammas utt.

Izpratīsim HTML formu sintaksi. Iespējams, ka daudziem tas ir zināms, bet mēs tomēr atkārtosim galvenos punktus, jo tas ir svarīgi.

Tātad, lai izveidotu veidlapu HTML, tiek izmantots tags FORM. Tā iekšpusē ir viena vai vairākas INPUT komandas. Izmantojot FORM taga darbības un metodes atribūtus, jūs norādāt programmas nosaukumu, kas apstrādās veidlapas datus, un pieprasījuma metodi. Komanda INPUT norāda pieprasītās informācijas veidu un dažādus raksturlielumus. Veidlapas dati tiek nosūtīti pēc iesniegšanas veida ievades pogas nospiešanas. Izveidosim formu dalībnieku reģistrēšanai neklātienes programmēšanas skolā.

Pēc pārlūkprogrammas apstrādes šis fails izskatīsies apmēram šādi:


Rīsi. 4.3. Html formas piemērs

Šādi tiek veidotas un izskatās HTML formas. Mēs pieņemsim, ka esam iemācījušies vai atcerējušies, kā tos izveidot. Kā redzam, veidlapā varat norādīt datu pārsūtīšanas metodi. Apskatīsim, kas notiks, ja norādāt GET vai POST metodi, un kāda būs atšķirība.

GET metodei

Iesniedzot veidlapas datus, izmantojot GET metodi, veidlapas saturs tiek pievienots vietrādim URL aiz jautājuma zīmes kā pāri name=value, kas savienoti ar & &:

action?name1=value1&name2=value2&name3=value3

Šeit darbība ir tās programmas URL, kurai jāapstrādā forma (vai nu programma, kas norādīta formas taga atribūtā action, vai pati pašreizējā programma, ja šis atribūts ir izlaists). Nosaukumi name1, name2, name3 atbilst formas elementu nosaukumiem, un vērtība1, vērtība2, vērtība3 atbilst šo elementu vērtībām. Šajos parametru nosaukumos vai vērtībās tiks izlaistas visas īpašās rakstzīmes, tostarp = un &. Tāpēc nevajadzētu izmantot šos simbolus un kirilicas rakstzīmes identifikatoros veidlapas elementu nosaukumos vai vērtībās.

Ja ievades laukā ievadīsiet kādu pakalpojuma rakstzīmi, tā tiks pārsūtīta heksadecimālajā kodā, piemēram, simbols $ tiks aizstāts ar %24. Tādā pašā veidā tiek pārraidīti arī krievu burti.

Teksta un paroles ievades laukiem (tie ir ievades elementi ar atribūtu type=text un type=password) vērtība būs neatkarīgi no lietotāja ievadītā. Ja lietotājs neko neievada šādā laukā, tad vaicājuma virknē būs elements name=, kur nosaukums atbilst šī formas elementa nosaukumam.

Izvēles rūtiņām un radiopogu pogām vērtību nosaka atribūts VALUE, kad poga ir atzīmēta. Neatzīmētās pogas tiek pilnībā ignorētas, veidojot vaicājuma virkni. Ja nepieciešams, vairākām izvēles rūtiņu pogām var būt viens un tas pats atribūts NAME (un dažādas VĒRTĪBAS). Radiopogas tipa pogas ir paredzētas vienai no visām piedāvātajām opcijām, tāpēc tām ir jābūt vienādam NAME atribūtam un dažādiem VALUE atribūtiem.

Principā nav nepieciešams izveidot HTML veidlapu, lai pārsūtītu datus, izmantojot GET metodi. Varat vienkārši pievienot vēlamos mainīgos un to vērtības URL virknei.

http://phpbook.info/test.php?id=10&user=pit

Šajā sakarā datu pārraidei, izmantojot GET metodi, ir viens būtisks trūkums - ikviens var viltot parametru vērtības. Tāpēc mēs neiesakām izmantot šo metodi, lai piekļūtu ar paroli aizsargātām lapām vai pārsūtītu informāciju, kas ietekmē programmas vai servera drošību. Turklāt nevajadzētu izmantot GET metodi, lai pārsūtītu informāciju, kuru lietotājam nav atļauts mainīt.

Neskatoties uz visiem šiem trūkumiem, GET metodes izmantošana ir diezgan ērta, atkļūdojot skriptus (tad varat redzēt nodoto mainīgo vērtības un nosaukumus) un nododot parametrus, kas neietekmē drošību.

POST metodei

Veidlapas saturs tiek kodēts tieši tādā pašā veidā kā GET metodei (skatiet iepriekš), taču tā vietā, lai URL pievienotu virkni, pieprasījuma saturs tiek nosūtīts kā datu bloks POST darbības ietvaros. Ja ir atribūts ACTION, tad tur atrastā URL vērtība nosaka, kur nosūtīt šo datu bloku. Šī metode, kā jau minēts, ir ieteicama lielu datu bloku pārsūtīšanai.

Lietotāja ievadītā informācija, kas tiek nosūtīta serverim, izmantojot POST metodi, tiek pasniegta standarta ievadē programmā, kas norādīta darbības atribūtā, vai pašreizējā skriptā, ja šis atribūts ir izlaists. Nosūtītā faila garums tiek nodots vides mainīgajā CONTENT_LENGTH, un datu tips tiek nodots mainīgajā CONTENT_TYPE.

Datus var nosūtīt tikai, izmantojot POST metodi, izmantojot HTML veidlapu, jo dati tiek nosūtīti pieprasījuma pamattekstā, nevis galvenē, kā GET. Attiecīgi jūs varat mainīt parametru vērtību, tikai mainot formā ievadīto vērtību. Lietojot POST, lietotājs neredz serverim nosūtītos datus.

Galvenā POST pieprasījumu priekšrocība ir to lielāka drošība un funkcionalitāte salīdzinājumā ar GET pieprasījumiem. Tāpēc POST metodi biežāk izmanto svarīgas informācijas, kā arī liela mēroga informācijas pārsūtīšanai. Tomēr nevajadzētu pilnībā paļauties uz šī mehānisma drošību, jo POST pieprasījuma datus var arī viltot, piemēram, izveidojot savā datorā HTML failu un aizpildot to ar nepieciešamajiem datiem. Turklāt ne visi klienti var izmantot POST metodi, kas ierobežo tās lietošanas gadījumus.

Nosūtot datus uz serveri ar jebkuru metodi, tiek pārsūtīti ne tikai lietotāja ievadītie dati, bet arī virkne mainīgo, ko sauc par vides mainīgajiem, kas raksturo klientu, tā darbības vēsturi, failu ceļus utt. Šeit ir daži vides mainīgie:

REMOTE_ADDR – pieprasījumu nosūtošā resursdatora (datora) IP adrese;

REMOTE_HOST – resursdatora nosaukums, no kura tika nosūtīts pieprasījums;

HTTP_REFERER – tās lapas adrese, kas novirza uz pašreizējo skriptu;

REQUEST_METHOD – metode, kas tika izmantota, nosūtot pieprasījumu;

QUERY_STRING – informācija, kas atrodas URL aiz jautājuma zīmes;

SCRIPT_NAME – virtuālais ceļš uz programmu, kas jāizpilda;

HTTP_USER_AGENT – informācija par pārlūkprogrammu, kuru izmanto klients

Līdz šim esam minējuši tikai to, ka klientu pieprasījumi tiek apstrādāti serverī, izmantojot īpašu programmu. Faktiski šo programmu varam uzrakstīt paši, tai skaitā PHP, un tā ar saņemtajiem datiem darīs visu, ko gribēsim. Lai rakstītu šo programmu, jums ir jāiepazīstas ar dažiem noteikumiem un rīkiem, ko PHP piedāvā šim nolūkam.

PHP skriptā ir vairāki veidi, kā piekļūt datiem, ko klients nosūtījis, izmantojot HTTP. Pirms PHP 4.1.0 piekļuve šādiem datiem tika nodrošināta pēc pārsūtīto mainīgo nosaukumiem (atcerieties, ka dati tiek pārsūtīti pāru veidā “mainīgā nosaukums, “=” simbols, mainīgā vērtība). Tādējādi, ja, piemēram, tika nodots pirmais_nosaukums=Nina, tad skripta iekšpusē parādījās mainīgais $first_name ar vērtību Nina. Ja bija nepieciešams atšķirt, ar kādu metodi dati tika pārsūtīti, tad tika izmantoti asociatīvie masīvi $HTTP_POST_VARS un $HTTP_GET_VARS, kuru atslēgas bija pārsūtīto mainīgo nosaukumi, bet vērtības attiecīgi vērtības no šiem mainīgajiem. Tādējādi, ja pāris first_name=Nina tiek nodots ar GET metodi, tad $HTTP_GET_VARS["first_name"]="Nina".

Nav droši izmantot nodoto mainīgo nosaukumus tieši programmā. Tāpēc tika nolemts, sākot ar PHP 4.1.0, izmantot īpašu masīvu – $_REQUEST –, lai piekļūtu mainīgajiem, kas tiek pārraidīti caur HTTP pieprasījumiem. Šajā masīvā ir dati, kas pārsūtīti, izmantojot POST un GET metodes, kā arī HTTP sīkfailus. Šis ir superglobāls asociatīvais masīvs, t.i. tās vērtības var iegūt jebkurā programmas vietā, izmantojot kā atslēgu atbilstošā mainīgā (formas elementa) nosaukumu.

Piemērs 4.2. Pieņemsim, ka mēs izveidojām veidlapu, lai reģistrētu dalībniekus programmēšanas korespondences skolai, kā parādīts iepriekš minētajā piemērā. Pēc tam 1.php failā, kas apstrādā šo veidlapu, varat ierakstīt sekojošo:

$str = "Sveiki!
".$_REQUEST["first_name"]. "
".$_REQUEST["uzvārds"]."!
";
$str .="Jūs esat izvēlējies studēt kursu
".$_REQUEST["kurs"];
echo $str;
?>

Pēc tam, ja formā ievadīsim vārdu “Vasya”, uzvārdu “Petrov” un starp visiem kursiem izvēlēsimies PHP kursu, pārlūkprogrammas ekrānā tiks parādīts šāds ziņojums:

Labdien, Vasja Petrovs!

Pēc $_REQUEST masīva ieviešanas masīvi $HTTP_POST_VARS un $HTTP_GET_VARS konsekvences labad tika pārdēvēti attiecīgi par $_POST un $_GET, taču tie paši nepazuda no lietošanas, lai nodrošinātu saderību ar iepriekšējām PHP versijām. Atšķirībā no saviem priekšgājējiem, $_POST un $_GET masīvi ir kļuvuši superglobāli, t.i. pieejama tieši un funkcijās un metodēs.

Sniegsim piemēru šo masīvu izmantošanai. Pieņemsim, ka mums ir jāapstrādā veidlapa, kurā ir ievades elementi ar nosaukumu first_name, last_name, kurs (piemēram, forma.html iepriekš). Dati tika pārsūtīti, izmantojot POST metodi, un mēs nevēlamies apstrādāt ar citām metodēm pārsūtītos datus. To var izdarīt šādi:

$str = "Sveiki!
".$_POST ["first_name"]."
".$_POST ["uzvārds"] ."!
";
$str .= "Jūs esat izvēlējies studēt kursu par ".
$_POST["kurs"];
echo $str;
?>

Pēc tam pārlūkprogrammas ekrānā, ievadot vārdu “Vasya”, uzvārdu “Petrov” un starp visiem kursiem atlasot PHP kursu, mēs redzēsim ziņojumu, tāpat kā iepriekšējā piemērā:

Labdien, Vasja Petrovs!
Jūs esat izvēlējies apgūt PHP kursu

Lai saglabātu iespēju apstrādāt skriptus, kas ir vecāki par PHP 4.1.0, tika ieviesta direktīva register_globals, kas ļauj vai liedz piekļuvi mainīgajiem tieši pēc to nosaukumiem. Ja PHP iestatījumu failā ir parametrs register_globals=On, tad mainīgajiem, kas tiek nodoti serverim, izmantojot GET un POST metodes, var piekļūt vienkārši pēc to nosaukumiem (t.i., varat ierakstīt $first_name). Ja register_globals=Off, tad jāieraksta $_REQUEST["first_name"] vai $_POST["first_name"], $_GET["first_name"], $HTTP_POST_VARS["first_name"], $HTTP_GET_VARS["first_name"]. No drošības viedokļa labāk ir atspējot šo direktīvu (t.i. register_globals=Off). Ja ir iespējota direktīva register_globals, iepriekš uzskaitītie masīvi saturēs arī klienta nodotos datus.

Dažreiz jums ir jāzina vides mainīgā vērtība, piemēram, pieprasījuma nosūtīšanas metode vai tā datora IP adrese, kas nosūtīja pieprasījumu. Šo informāciju var iegūt, izmantojot funkciju getenv (). Tas atgriež vides mainīgā vērtību, kura nosaukums tam tiek nodots kā parametrs.

getenv("PIEPRASĪJUMA_METODĒ");
// atgriezīs izmantoto metodi
echo getenv ("ATTĀLĀ_ADDR");
// parādīs lietotāja IP adresi,
// kurš nosūtīja pieprasījumu
?>

Kā jau teicām, ja tiek izmantota GET metode, dati tiek pārsūtīti, resursa URL pievienojot vaicājuma virkni mainīgā_nosaukums=vērtības pāru formā. Jebko, kas atrodas aiz jautājuma zīmes URL, var izgūt, izmantojot komandu

getenv("VAUKĀJUMS_STRING");

Pateicoties tam, ir iespējams pārsūtīt datus citā formā, izmantojot GET metodi. Piemēram, varat norādīt tikai vairāku parametru vērtības, izmantojot plus zīmi, un skriptā varat parsēt vaicājuma virkni daļās vai arī nodot tikai viena parametra vērtību. Šajā gadījumā masīvā $_GET parādīsies tukšs elements ar atslēgu, kas vienāda ar šo vērtību (visa vaicājuma virkne), un vaicājuma virknē esošā rakstzīme “+” tiks aizstāta ar pasvītrojumu “_”.

Izmantojot POST metodi, dati tiek pārsūtīti tikai, izmantojot formas, un lietotājs (klients) neredz, kādi dati tiek nosūtīti uz serveri. Lai tos redzētu, hakeram ir jāaizstāj mūsu forma ar savējo. Pēc tam serveris nosūtīs nepareizās veidlapas apstrādes rezultātus uz nepareizo vietu. Lai no tā izvairītos, varat pārbaudīt tās lapas adresi, no kuras tika nosūtīti dati. To var izdarīt vēlreiz, izmantojot funkciju getenv():

getenv("HTTP_REFERER");

Tagad ir pienācis laiks atrisināt lekcijas sākumā formulēto problēmu.

Pieprasījuma apstrādes piemērs, izmantojot PHP

Atcerēsimies, kāds bija uzdevums, un precizēsim tā formulējumu. Jāuzraksta anketa, lai reģistrētu dalībniekus programmēšanas neklātienes skolā, un pēc reģistrācijas jānosūta ziņa dalībniekam. Šo vēstījumu esam nosaukuši par universālo vēstuli, taču tas nedaudz atšķirsies no vēstules, ko sacerējām iepriekšējā lekcijā. Šeit mēs arī neko nesūtīsim pa e-pastu, lai nebūtu kā surogātpasta izplatītāji, bet vienkārši ģenerēsim šo ziņojumu un parādīsim to pārlūkprogrammas ekrānā. Iepriekš jau esam nodrošinājuši reģistrācijas veidlapas sākotnējo versiju. Mēs to mainīsim, lai katrs reģistrators varētu izvēlēties tik daudz kursu, cik vēlas apmeklēt, un mēs neapstiprināsim reģistrācijas anketas saņemšanu.

Šeit viss ir diezgan vienkāršs un skaidrs. Vienīgais, kas jāņem vērā, ir veids, kā tiek nodotas izvēles rūtiņas elementa vērtības. Kad elementa nosaukumā ierakstām kurs, tas nozīmē, ka pirmais atzīmētais izvēles rūtiņas elements tiks ierakstīts kurs masīva pirmajā elementā, otrā atzīmētā izvēles rūtiņa tiks ierakstīta otrajā masīva elementā utt. Protams, izvēles rūtiņas elementiem var vienkārši piešķirt dažādus nosaukumus, taču tas sarežģīs datu apstrādi, ja kursu ir daudz.

Skripts, kas to visu analizēs un apstrādās, tiek saukts par 1.php (forma attiecas tieši uz šo failu, kas ir ierakstīts tā darbības atribūtā). Pēc noklusējuma pārraidei tiek izmantota GET metode, taču mēs norādījām POST. Pamatojoties uz informāciju, kas saņemta no reģistrētās personas, skripts ģenerē atbilstošu ziņojumu. Ja cilvēks būs izvēlējies kādus kursus, viņš saņems ziņu par to norises laiku un pasniedzējiem, kas tos pasniedz. Ja cilvēks neko nav atlasījis, tad tiek parādīts ziņojums par Programmētāju korespondences skolas (ZSH) nākamo tikšanos.

HTML veidlapas ļauj lietotāja ievadītos datus nosūtīt uz serveri, kur tos var tālāk apstrādāt. Veidlapu apkope tiek veikta divos posmos. Vispirms veidlapa ir jāuzrāda lietotājam, kurš to aizpildīs ar saviem datiem un pēc tam iesniegs serverī. Katrai veidlapai ir galvenā tīmekļa lapa, kas jāielādē, lai apstrādātu lietotāja iesniegtos datus. Bieži vien tas ir tas pats skripta fails, kas ģenerē veidlapu. Šajā gadījumā PHP kods vienkārši pārbauda veidlapā esošos datus, lai noteiktu, vai vēlreiz izsaukt skriptu, lai izveidotu veidlapu, vai sākt apstrādāt saņemtos datus.

Uzmanību! Nodarbība ir novecojusi. Jaunas nodarbības par šo tēmu ir ietvertas kursā PHP iesācējiem.

Vairumā gadījumu veidlapu iesniegšana serverim ir saistīta ar kādu datu bāzes darbu. Piemēram, datubāzes meklēšanas darbība ir nepieciešama visdažādākajām lietojumprogrammām, neatkarīgi no tā, vai tā ir foruma ierakstu, lietotāju vai emuāra meklēšana. Jebkurā gadījumā šī darbība var atvieglot lietotāja dzīvi. Jo Šobrīd mēs vēl neesam iepazinušies ar PHP un MySQL DBVS mijiedarbību, šajā rakstā aplūkosim vienkāršus veidlapu apstrādes piemērus, un man galvenais uzdevums ir parādīt, kā tiek pārsūtīta informācija, izmantojot PHP valodu. .

Informācijas pārsūtīšana, izmantojot PHP valodu

Šajā sadaļā ir sniegta pamatinformācija par to, kā datus var pārsūtīt starp tīmekļa lapām. Daļa šīs informācijas neattiecas tikai uz PHP tehnoloģiju, bet apraksta PHP un HTML rīku mijiedarbību vai attiecas uz pašu HTTP protokolu.

Valsts atbalsta trūkums HTTP protokolā

Jebkuras tīmekļa tehnoloģijas vissvarīgākā iezīme, kas vienmēr jāpatur prātā, ir tā, ka pats HTTP protokols ir bezvalsts. Tas nozīmē, ka katrs HTTP pieprasījums (kas vairumā gadījumu ir pieprasījums saņemt un piegādāt vienu resursu, piemēram, HTML lapu, .jpg failu, stila lapu utt.) ir neatkarīgs no visiem citiem pieprasījumiem. ietver jebkādu informāciju par klienta identifikāciju un neatstāj pēdas datora atmiņā.

Arī tad, ja vietne ir veidota tā, ka navigācija, t.i. pāreja no vienas lapas uz otru notiek stingri vienā virzienā (pieņemsim, ka 1. lapa ved tikai uz 2. lapu, kas ved tikai uz 3. lapu utt.), HTTP protokola atbalsta rīkiem nav informācijas un netiek ņemts vērā, ka lietotājs skatot 2. lapu, ir jābūt iepriekš apmeklētai 1. lapai. Jūs nevarat piešķirt vērtību mainīgajam 1. lapā un sagaidīt, ka tā tiks importēta 2. lapā, izmantojot pašu HTML. HTML kodu var izmantot, lai parādītu formu, un šo kodu var izmantot pat informācijas ievadīšanai, taču, ja vien netiek izmantoti kādi papildu līdzekļi ievadītās informācijas pārsūtīšanai uz citu lapu vai programmu, mainīgajam piešķirtā vērtība pēc pārvietošanas vienkārši pazudīs. uz citu lapu.

Veidlapu apstrādes tehnoloģijas, piemēram, PHP, ir paredzētas tieši šīs problēmas risināšanai. PHP ļauj pārtvert mainīgā vērtību, kas tiek pārsūtīta no iepriekšējās lapas uz nākamo, un padarīt šo vērtību pieejamu vēlākai lietošanai. Kā izrādās, PHP tehnoloģija nodrošina iespēju ārkārtīgi labi veikt šāda veida datu pārraides funkcijas, tāpēc tā ļauj ātri un ērti izvietot nepieciešamos rīkus, lai atrisinātu visdažādākās problēmas, kas saistītas ar vietnes funkcionēšanas nodrošināšanu.

HTML veidlapas nodrošina ērtu veidu, kā nodot nelielu skaitu vērtību no noteiktas lapas uz jebkuru citu atsevišķu vietnes lapu. Ir arī citi veidi, kā saglabāt statusu daudzos lapu skatījumos, kas ir ilgstošāki, piemēram, sīkfaili un sesijas, kas tiks aplūkoti nākamajā rakstā. Šajā rakstā galvenā uzmanība pievērsta vienkāršākajiem informācijas pārsūtīšanas veidiem starp tīmekļa lapām, kas izmanto GET un POST metodes kombinācijā ar HTTP protokolu, lai izveidotu dinamiski ģenerētas lapas un apstrādātu veidlapu datus.

GET parametrus

GET metode nodod parametrus no iepriekšējās lapas uz nākamo kā daļu no vaicājuma virknes, kas tiek attēlota vienotā resursa identifikatora URI formātā. Kad veidlapas apstrādei izmantojat metodi GET, URL, kas identificēts ar veidlapas darbības atribūtu, aiz atdalītāja tiek pievienota jautājuma zīme, kam seko norādītais(-ie) mainīgā(-i) nosaukums(-i) un vērtība(-s), un pēc tam tiek rādīta visa virkne. nodots apstrādes aģentam (šajā gadījumā tīmekļa serverim).

Tālāk ir sniegts HTML veidlapas piemērs, kurā tiek izmantota GET metode (ievadiet šo marķējumu un saglabājiet failu kā sportselect.html):

PHP pamati

Izvēlieties savu iecienītāko sporta veidu

Kad lietotājs veic atlasi un noklikšķina uz pogas Iesniegt, pārlūkprogramma savienos tālāk norādītos elementus norādītajā secībā bez atstarpēm starp elementiem:

  • URL pēdiņās aiz vārda darbība (http://localhost/sports.php).
  • Jautājuma zīme (?), kas norāda, ka šādas rakstzīmes veido GET virkni.
  • Nosaukuma mainīgais, vienādības zīme (=) un atbilstošais vērtības parametrs (vērtība=hokejs).
  • & , kam seko pāris nosaukums=vērtība (ja tāds ir).

Tātad pārlūkprogramma ģenerēs šādu URL virkni:
http://localhost/sports.php?sport=Hockey

Pēc tam pārlūkprogramma novirza iegūto URL virkni savā adrešu telpā kā jaunu pieprasījumu. Tālāk esošais PHP skripts (sports.php), kuram tiek iesniegta veidlapa, ienes GET mainīgā vērtības no vaicājuma virknes pēdējās daļas, ievieto šos mainīgos un mainīgo vērtības $_GET superglobālajā masīvā (jābūt īsi aprakstīts) un veic dažas nepieciešamās darbības ar šīm vērtībām; šajā gadījumā ievietošana notiek teksta virknē.

Tālāk ir sniegts koda piemērs, kas parāda PHP veidlapu apstrādātāju iepriekšminētajai HTML veidlapai:

Mīļākais sporta veids

Tavs mīļākais sporta veids ir

Ņemiet vērā, ka vērtība, kas ievadīta HTML veidlapas laukā ar atribūtu name="sport" iepriekšējā lapā, tagad ir pieejama kā PHP mainīgais ar nosaukumu $_GET["sports"]. Nākamajā attēlā parādīts, kā šis piemērs darbojas:

Tagad mums ir precīzi jāpaskaidro, kā jūs varat piekļūt vērtībām, kas tiek nodotas no vienas lapas uz otru. Šajā rakstā ir apskatītas divas galvenās veidlapās izmantotās vērtību nodošanas metodes - GET un POST. Katrai metodei ir saistīts superglobāls masīvs. Superglobālie masīvi ir sīkāk aprakstīti rakstā "Mainīgie un konstantes". Superglobālo masīvu atšķirīga iezīme no citiem masīviem ir prefiksa klātbūtne nosaukumā pasvītras veidā.

Veidlapas procesors piekļūst katram elementam, kas iesniegts, izmantojot GET metodi, piekļūstot masīvam $_GET, un katram elementam, kas iesniegts, izmantojot POST metodi, piekļūstot masīvam $_POST. Sintaktiskā struktūra, ko izmanto, lai piekļūtu jebkuram superglobāla masīva elementam, ir vienkārša un pilnīgi vienota:

$_masīva_nosaukums["indeksa_nosaukums"]

Šeit indeksa_nosaukums ir nosaukuma un vērtības pāra nosaukuma daļa (GET metodei) vai HTML formas lauka nosaukums (POST metodei). Pēc iepriekšējā piemēra $_GET["sports"] norāda formas atlases elementa vērtību ar nosaukumu "sports"; šī vērtība tika nodota, izmantojot GET darbību, kas veikta sākotnējā failā. Veidlapu apstrādātājam ir jāizmanto masīvs, kas atbilst metodei, ar kuru dati tika iesniegti. Konkrēti, šajā piemērā $_POST["sports"] vērtība nav definēta, jo sākotnējā veidlapā netika iesniegti nekādi dati, izmantojot POST metodi.

Veidlapu apstrādes metodei GET ir viena būtiska priekšrocība salīdzinājumā ar POST metodi – tā faktiski ļauj katru reizi ģenerēt jaunu URL vaicājuma virkni, kas ir piemērota pašreizējai situācijai. Pēc tam lietotāji var pievienot šai lapai grāmatzīmi. No otras puses, veidlapu iesniegšanas rezultātus, izmantojot POST metodi, nevar pievienot grāmatzīmēm.

Tas, ka vēlamo funkcionalitāti var sasniegt, izmantojot GET parametrus, nenozīmē, ka ir jāizmanto GET metode. GET metodes trūkumi, kas sastopami lielākajā daļā veidlapu apstrādes veidu, ir tik būtiski. Sākotnējā HTML 4.0 darba specifikācijā, kas publicēta 1997. gadā, šī metode netika ieteikta. Galvenie GET metodes trūkumi ir uzskaitīti zemāk:

  • GET metode nav piemērojama reģistrācijas logu izveidei, jo lietotājvārds un parole ir pilnībā redzami ekrānā, kā arī ir iespējams, ka šie dati tiek saglabāti klienta pārlūkprogrammas atmiņā kā informācija par apmeklēto lapu.
  • Katra GET pārsūtīšanas darbība, tostarp pati datu kopa, tiek reģistrēta tīmekļa serverī.
  • GET metode piešķir datus servera vides mainīgajam, tāpēc URL garums ir ierobežots. Iespējams, esat redzējis, kā izskatās ļoti garie URL, izmantojot GET metodi, un patiešām maz ticams, ka kāds vēlēsies nosūtīt 300 vārdu HTML teksta fragmentu, izmantojot šo metodi.

Sākotnējā HTML specifikācijā bija norādīts, ka vaicājuma virknes garums nedrīkst pārsniegt 255 rakstzīmes. Protams, vēlāk šis ierobežojums tika noņemts un palika tikai ieteikums ievērot 255 rakstzīmju ierobežojumu, taču garāku rindu izmantošana joprojām var radīt traucējumus.

POST parametri

Šobrīd vēlamā metode veidlapas datu iesniegšanai ir POST (īpaši gadījumos, kad darbību veikšanas rezultātā tiek veiktas pastāvīgas izmaiņas, piemēram, informācijas ievadīšana datu bāzē). Veidlapas datu kopa tiek iekļauta veidlapas pamattekstā, kad veidlapa tiek novirzīta uz apstrādes aģentu (šajā gadījumā uz PHP tulku). URL virknē netiek veiktas nekādas redzamas izmaiņas, kas atspoguļotu pārsūtāmo datu dažādību.

Izstrādātāju vidū ir plaši izplatīts nepamatots uzskats, ka POST metode ir drošāka nekā GET. Patiesībā neviena no metodēm nav vairāk vai mazāk droša par otru. Apmeklētājs var skatīt mainīgos lielumus un datus, kas nosūtīti, izmantojot POST metodi, tāpat kā izmantojot GET metodi. Vienīgā atšķirība ir tāda, ka pirmajā gadījumā pārsūtītie dati adreses joslā netiek atrasti. Bet tas nenozīmē, ka tie ir paslēpti. Datus, kas nosūtīti, izmantojot POST metodi, vietnes lietotājs var apskatīt un mainīt.

Pirmais un vissvarīgākais programmēšanas, īpaši tīkla programmēšanas, noteikums ir šāds:
Nekad neuzticieties ievades datiem.

Jums vienmēr vajadzētu pieņemt, ka apmeklētājs, iespējams, ir ļaunprātīgi vai pat nejauši mainījis konkrētai lietojumprogrammai nosūtītos datus, tāpēc jums šie dati ir rūpīgi jāpārbauda.

Pārsūtītie veidlapas dati ir vairāk vai mazāk droši tikai tad, ja pieprasījums ir aizsargāts, izmantojot SSL, TLS vai kādu citu šifrēšanas metodi. Taču dati vienalga nonāk pie galalietotāja vai apmeklētāja skaidrā veidā, tāpēc viņam joprojām ir iespēja datus skatīt un tā vai citādi mainīt. Fakts ir tāds, ka SSL protokols vienkārši šifrē tīklā pārsūtītos datus, kas neļauj skatīt datus skaidrā tekstā to pārejas posmā no sūtītāja uz adresātu. Runājot par iespēju apmeklētājam veikt izmaiņas veidlapas datos, SSL protokols neko nenodrošina, lai to novērstu.

Lai mainītu datu pārsūtīšanas veidu iepriekšējā piemērā, jāveic šādas izmaiņas:

...

Darbs ar vairākām vērtībām

Ja veidlapā ir izvēles rūtiņas vai radio pogas, rodas jauna problēma. Piemēram, lietotājs formā var atlasīt divas vērtības vienlaikus, bet mainīgais nevar saglabāt vairāk nekā vienu vērtību, tāpēc būs jāizmanto masīvs. Šī situācija ir parādīta zemāk esošajā piemērā:

" method="post">
Izvēlieties savus iecienītākos mājdzīvniekus

Atlasītie dzīvnieki: "; foreach ($animal kā $a) ( atbalss " ".htmlentities($a).""; } } ?>

Šī veidlapa ļauj lietotājam izvēlēties savus iecienītākos mājdzīvniekus. Šajā piemērā lietotājs var vienlaikus atlasīt vairākas izvēles rūtiņas. Tas nozīmē, ka, apstrādājot veidlapas datus PHP skriptā, ir jānodrošina iespēja piekļūt vairākām vērtībām, izmantojot vienu nosaukumu. Mēs esam ievietojuši kvadrātiekavās () aiz nosaukuma atribūtā name, lai varētu nosūtīt vairākas izvēles iespējas kā masīvu. Ja kvadrātiekavas tiktu izlaistas un lietotājs atzīmēja vairākas izvēles rūtiņas, to atlase tiks pārrakstīta ar pēdējo atzīmēto izvēles rūtiņu. Ievietojot kvadrātiekavas aiz nosaukuma, mēs norādījām, ka vērtības ir jāsaglabā kā masīvs.

Apdarinātājā masīvs tiek saglabāts mainīgajā $animal un uzskaitīts, izmantojot foreach cilpu, tāpat kā parastā masīvā.

Veidlapu validācija un veidlapu mainīgo formatēšana

Kad lietojumprogramma saņem datus no lietotāja, tai katru reizi ir jāpārbauda to pareizība. Ja nepārbaudīsit lietotāja ievadītos datus, var rasties daudzas problēmas, tostarp drošības riski. Iepriekšējās darbības pārbaudes veikšana nav tik sarežģīta, kā varētu šķist.

Lietotājiem ērtāk ir pārbaudīt klienta pusē, izmantojot JavaScript, taču neatkarīgi no tā, vai šī pārbaude tiek izmantota, ir jāveic servera puses pārbaude.

Vēl viena lieta, kas jāņem vērā, veidojot HTML veidlapas, ir tāda, ka, ja veidlapā ir jāparāda iepriekš aizpildīta ievade, ir jāiestata vērtības atribūts. Šis punkts īpaši attiecas uz divu veidu veidlapām – tām, kuras tiek izmantotas no datu bāzes saņemto datu rediģēšanai, un tām, kas paredzētas, lai, iespējams, iesniegtu datus vairākkārt. Pēdējais gadījums ir ļoti izplatīts situācijās, kad veidlapa ir atkārtoti jāparāda pēc tam, kad jau iepriekš aizpildītajos datos ir konstatētas kļūdas. Piemērs ir reģistrācijas veidlapa, kas nepieņem datus apstrādei, kamēr lietotājs nenorāda derīgu e-pasta adresi vai citus nepieciešamos datus.

Tālāk esošajā piemērā parādīts, kā apstrādāt veidlapu, tostarp servera puses validāciju un apstrādi tajā pašā veidlapas lapā.

PHP pamati

" method="post">
Kontaktinformācija "class="">
"class="">

Šajā piemērā tiek izmantota funkcija filter_var(), kas pārbauda mainīgo, izmantojot filtru, un ņem divus parametrus - avota virkni un konstanti, kas norāda filtra veidu. Papildus e-pasta adrešu apstiprināšanai (FILTER_VALIDATE_EMAIL), šī funkcija atbalsta šādas konstantes: FILTER_VALIDATE_URL - pārbauda URL pareizības vērtību (piemēram), FILTER_VALIDATE_IP - pārbauda IP adrešu vērtību, FILTER_VALIDATE_REGEXP - pārbauda vērtību. regulārās izteiksmes sintakses pareizībai un vairākām citām konstantēm, kas ir alternatīvas funkcijām is_bool(), is_float(), is_int() utt.

Šajā un nākamajās sadaļās īsi tiks apskatīts, kā izveidot pamata tīmekļa lietojumprogrammas, izmantojot PHP. Ar to, kas tika apspriests sadaļā, acīmredzami nepietiek, lai jūsu lietojumprogramma sazinātos ar lietotāju un formulētu atkarībā no viņa veiktajām darbībām vai ievadītajiem parametriem. Kas pietrūkst? Nav pietiekamu zināšanu, kā organizēt lietotāja datu ievadi un šo datu pārsūtīšanu uz serveri. Nu jau vajadzētu būt pamatzināšanām par to, kā programmatiski apstrādāt serverī saņemto informāciju.

HTTP pieprasījuma metodes un to parametri

Jebkura dinamiska tīmekļa lietojumprogramma ģenerē lietotājam atbildi atbilstoši viņa ievadītajiem parametriem vai klienta pusē veiktajām darbībām. Sazināšanās ar serveri visbiežāk notiek divu veidu pieprasījumos: izmantojot GET metodi vai POST metodi. Daži vārdi par atšķirībām starp šiem diviem pieprasījumu veidiem.

GET metode:

    Parametri tiek nodoti HTTP pieprasījuma galvenē, tāpēc tie ir redzami komandrindā, un šādu pieprasījumu var saglabāt kā grāmatzīmes. Tā kā galvenes kopējais garums ir ierobežots, ir ierobežots arī ar GET nodoto parametru skaits un garums.

    Tiek uzskatīts, ka vairāku identisku GET pieprasījumu rezultātiem, kas izpildīti pēc kārtas, jābūt vienādiem.

POST metode:

    Pieprasījuma parametri tiek nodoti HTTP pieprasījuma pamattekstā, tāpēc tie nav atrodami komandrindā. Parametru skaits un lielums ir neierobežots.

    Tiek uzskatīts, ka vairāku identisku POST pieprasījumu rezultāti var atgriezt dažādas vērtības, jo tie var mainīt mērķa objekta īpašības.

GET metode ir jāizmanto informācijas resursa satura izgūšanai pēc parametriem, kad nav nepieciešams veikt izmaiņas mērķa resursa datu struktūrās un pieprasījumu (URL) ir lietderīgi saglabāt grāmatzīmēs. GET metode var būt ātrāka nekā līdzīgi pieprasījumi, izmantojot POST metodi.

POST metode ir jāizmanto, ja ir jāslēpj serverim nosūtītie parametri no URL. Šī metode ir jāizmanto arī mērķa resursa satura izmaiņu pieprasījumos, nododot šo izmaiņu aprakstu parametros (pieprasījuma pamattekstā).

Ceļš uz resursu?parameter1=value1¶meter2=value2&…

Ja jums nav īpašas HTML veidlapas parametru aizpildīšanai, varat atkļūdot PHP lietojumprogrammas darbību, nododot testa parametrus tieši pārlūkprogrammas komandrindā, piemēram:

Http://site/php-samples/sql.php?sql=select * no d_staff

Lai piekļūtu pieprasījuma parametriem servera pusē, jāizmanto globālie masīvi $_GET Un $_POST attiecīgi. Ja jūsu lietojumprogrammai nav vienalga, ar kuru metodi tai piekļūst, jums vajadzētu izmantot masīvu $_REQUEST, kas apvieno $_GET un $_POST masīvu datus, piemēram, šādi:

$sql = isset($_REQUEST["sql"])? $_REQUEST["sql"]: "";

Šajā piemērā programma nosaka, vai parametrs “sql” tika nodots: ja jā, tā piešķir tā vērtību attiecīgajam mainīgajam, un, ja nē, tā piešķir tam tukšu vērtību.

HTTP pieprasījuma parametru noteikšana, izmantojot HTML formu

Protams, manuāli definēt parametrus tieši pārlūkprogrammas komandrindā nav īpaši ērti. Šī metode ir piemērota programmatiskai HTTP pieprasījumu izpildei, kad tīmekļa lietojumprogrammas sazinās savā starpā. Lai ievadītu un veiktu sākotnējo datu verifikāciju klienta pusē, jāizmanto HTML formas un . Tālāk ir sniegts vienkāršākās formas piemērs, kurā tiek ievadīts teksta parametrs (vērtība), kas pēc tam tiek nodots serverim kā POST metodes parametrs.

metodi ="post" darbība ='sql.php' > SQL:

Formas elementa atribūts method norāda metodi, kas nosaka datu pārsūtīšanas uz serveri metodi (get vai post). Darbības atribūts norāda php failu, kas apstrādās pieprasījumu. Ja apstrādātājam ir jābūt pašreizējam failam, darbības atribūts nav jāpievieno. Visiem elementiem, kuru vērtība ir jānodod kā HTTP pieprasījuma parametrs, atribūtam name ir jādefinē unikāla vērtība. Tā ir atribūta vērtība nosaukums būs rādītājs$_GET, $_POST vai $_REQUEST masīvos (skatiet piemēru iepriekš). Nospiežot pogu Iesniegt nosūta serverim veidlapu ar visām ievadītajām vērtībām.