Biz PHP da POST so'rovlarini qayta ishlaymiz. NodeJS. POST so'rovlarini qanday qayta ishlash kerak http so'rovlarini qayta ishlash php

Brauzer mijozlari veb-serverga ma'lumot yuborishlari mumkin.

Brauzer ma'lumot yuborishdan oldin uni URL kodlash deb nomlangan sxema yordamida kodlaydi. Ushbu sxemada ism/qiymat juftliklari teng belgilar bilan birlashtiriladi va turli juftliklar ampersand bilan ajratiladi.

Name1=qiymat1&name2=qiymat2&name3=qiymat3

Bo'shliqlar olib tashlanadi va o'rniga + belgisi qo'yiladi va boshqa harf-raqamli bo'lmagan belgilar o'n oltilik qiymatlar bilan almashtiriladi. Ma'lumot kodlangandan so'ng u serverga yuboriladi.

GET usuli

GET usuli sahifa so'roviga qo'shilgan kodlangan foydalanuvchi ma'lumotlarini yuboradi. Sahifalar va kodlangan ma'lumotlar bir-biridan ajratilganmi? so'roq belgisi.

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

  • GET usuli brauzerning "Joylashuv" maydonida server jurnallarida ko'rinadigan uzun qatorni ishlab chiqaradi.
  • GET usuli faqat 1024 belgigacha yuborish bilan cheklangan.
  • Agar sizda serverga yuborish uchun parol yoki boshqa maxfiy ma'lumotlar bo'lsa, hech qachon GET usulidan foydalanmang.
  • GET-dan ikkilik ma'lumotlarni, masalan, tasvirlar yoki matnli hujjatlarni serverga o'tkazish uchun foydalanib bo'lmaydi.
  • GET usuli bilan yuborilgan ma'lumotlarga QUERY_STRING muhit o'zgaruvchisi yordamida kirish mumkin.
  • PHP GET usuli yordamida yuborilgan barcha ma'lumotlarga kirish uchun $_GET assotsiativ massivini taqdim etadi.

if($_GET["name"] || $_GET["age"]) ( echo "Xush kelibsiz ". $_GET["name"]; echo "Siz ". $_GET["yosh"]siz. " yoshda "; Chiqish(); )

Nomi: Yosh:

POST usuli

Usul POST HTTP sarlavhalari orqali ma'lumotlarni uzatadi. Ma'lumotlar usul misolida ta'riflanganidek kodlangan OLISH, va sarlavhaga joylashtirilgan QUERY_STRING.

  • POST usuli yuborilishi kerak bo'lgan ma'lumotlarning hajmi bo'yicha hech qanday cheklovga ega emas.
  • POST usuli ASCII va ikkilik ma'lumotlarni yuborish uchun ishlatilishi mumkin.
  • POST usuli yordamida yuborilgan ma'lumotlar HTTP sarlavhasi orqali o'tadi, shuning uchun xavfsizlik HTTP protokoliga bog'liq. Xavfsiz HTTP-dan foydalanib, ma'lumotlaringiz himoyalanganligiga ishonch hosil qilishingiz mumkin.
  • PHP POST usuli yordamida yuborilgan barcha ma'lumotlarga kirish uchun $_POST assotsiativ massivini taqdim etadi.

Manba kodini test.php skriptiga joylashtirish orqali quyidagi misolni sinab ko'ring.

if($_POST["name"] || $_POST["age"]) ( agar (preg_match("[^A-Za-z"-]",$_POST["name"])) ( o'lib (" noto'g'ri ism va ism alfa bo'lishi kerak"); ) echo "Xush kelibsiz". $_POST["name"]; echo "Siz ". $_POST["yosh"]siz. "yoshda."; exit(); )

Nomi: Yosh:

$_REQUEST o'zgaruvchisi

PHP o'zgaruvchisi $_REQUEST kabi tarkiblarni o'z ichiga oladi $_GET, $_POST, shunday $_COOKIE. Biz o'zgaruvchini muhokama qilamiz $_COOKIE biz kukilar haqida gapirganda.

PHP $_REQUEST o'zgaruvchisi GET va POST usullari yordamida yuborilgan shakl ma'lumotlaridan natijani olish uchun ishlatilishi mumkin.

PHP POST so'rovini bajarishning birinchi usuli file_get_contents dan foydalanishdir. Ikkinchi usulda fread bir nechta boshqa funktsiyalar bilan birgalikda ishlatiladi. Har ikkala variant ham kerakli so‘rov sarlavhasi maydonlarini to‘ldirish uchun stream_context_create funksiyasidan foydalanadi.

Kod tushuntirish

$sPD o'zgaruvchisi uzatiladigan ma'lumotlarni o'z ichiga oladi. U HTTP so'rovi satri formatida bo'lishi kerak, shuning uchun ba'zi maxsus belgilar kodlangan bo'lishi kerak.

file_get_contents funksiyasida ham, fread funksiyasida ham ikkita yangi parametr mavjud. Birinchisi use_include_path . Biz HTTP so'rovini yuborayotganimiz sababli, u ikkala misolda ham noto'g'ri bo'ladi. Mahalliy resursni o'qish uchun "true" qiymati o'rnatilganda, funktsiya include_path manzilidagi faylni qidiradi.

Ikkinchi parametr kontekst bo'lib, u oqim_context_create qaytaruvchi qiymati bilan to'ldirilgan bo'lib, u $aHTTP massivining qiymatini oladi.

POST so'rovlarini bajarish uchun file_get_contents dan foydalanish

PHP da file_get_contents yordamida POST soʻrovini yuborish uchun siz sarlavha maydonlarini qoʻlda toʻldirish uchun stream_context_create dan foydalanishingiz va qaysi “oʻrash”dan foydalanishni belgilashingiz kerak – bu holda HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST ma'lumotlari $aHTTP = array("http" => // Foydalanadigan sarlavha array("method" => "POST", // So'rov usuli // So'rov sarlavhalari "sarlavha" ostida o'rnatilgan => "Kontent - turi: application/x-www-form-urlencoded", "content" => $sPD)); $kontekst = stream_context_create($aHTTP); $contents = file_get_contents($sURL, noto'g'ri, $kontekst); echo $contents;

POST so'rovlarini bajarish uchun freaddan foydalanish

POST so'rovlarini bajarish uchun fread funktsiyasidan foydalanishingiz mumkin. Quyidagi misol kerakli HTTP so'rov sarlavhalarini yaratish uchun stream_context_create dan foydalanadi:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST ma'lumotlari $aHTTP = array("http" => // Ishlatiladigan o'ram array("method" => "POST", // So'rov usuli // So'rov sarlavhalari "sarlavha" ostida o'rnatilgan => "Kontent - turi: application/x-www-form-urlencoded", "content" => $sPD)); $kontekst = stream_context_create($aHTTP); $handle = fopen($sURL, "r", noto'g'ri, $kontekst); $contents = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $contents;

PHP bilan GET so'rovlarini amalga oshirish

Endi biz HTTP va HTTPS orqali internetdan tarkibni yuklab olish uchun fread va file_get_contents dan foydalanishga e'tibor qaratamiz. Ushbu maqolada tasvirlangan usullardan foydalanish uchun fopen wrappers opsiyasini yoqishingiz kerak. Buning uchun php.ini faylida allow_url_fopen parametrini On ga o'rnatishingiz kerak.

PHP da POST va GET so'rovlarini bajarish veb-saytlarga kirish, veb-sahifa tarkibini olish yoki ilovalarning yangi versiyalarini tekshirish uchun ishlatiladi. Biz oddiy HTTP so'rovlarini qanday qilishni ko'rib chiqamiz.

Internet orqali fayllarni yuklab olish yoki qabul qilish uchun fread-dan foydalanish

Esda tutingki, veb-sahifani o'qish paketning kirish mumkin bo'lgan qismi bilan cheklangan. Shuning uchun siz stream_get_contents funktsiyasidan foydalanishingiz kerak ( file_get_contents ga o'xshash) yoki faylning oxiriga yetguncha tarkibni kichikroq bo'laklarga bo'lib o'qish uchun bir oz vaqt oralig'i:

PHP POST so'rovini qayta ishlashda fread funksiyasining oxirgi argumenti fragment hajmiga teng bo'ladi. Odatda 8192 dan oshmasligi kerak ( 8*1024 ).

Shuni yodda tutingki, u kattaroq yoki kichikroq bo'lishi mumkin, shuningdek, PHP ishlayotgan tizim sozlamalari bilan cheklanishi mumkin.

Saytning URL manzilini olish uchun file_get_contents dan foydalanish

HTTP orqali faylni o'qishda bu usuldan foydalanish yanada qulayroq, chunki bo'laklarga bo'lingan holda o'qish haqida tashvishlanishingiz shart emas - hamma narsa PHP da ishlaydi.

Ushbu nashr do'stona loyiha jamoasi tomonidan tayyorlangan "PHP bilan POST so'rovlarini yaratish" maqolasining tarjimasi.

PHP hozirda veb-ilovalarni amalga oshirish uchun eng mashhur tillardan biri hisoblanadi. Ushbu kurs uning asoslarini o'rganishga bag'ishlangan. O'zlashtirilgan ko'nikmalarni amalda qo'llashga e'tibor beriladi.

PHP tili Internetdagi muayyan amaliy masalani hal qilish uchun yaratilgan (buni kursning birinchi ma'ruzasini o'qish orqali bilib olish mumkin). Biz ham nazariy mulohazalar bilan chalg‘itmaslikka harakat qilamiz va har bir ma’ruzada muayyan muammoni hal qilishga intilamiz. Ko'pgina misollar haqiqiy hayot tizimidan olingan: kompyuter fanlari tarixining virtual muzeyi. Kursning birinchi qismi sintaksis va boshqaruv tuzilmalari asoslarini o'rganishga bag'ishlangan. Shundan so'ng mijoz-server texnologiyasi PHP tilining asosiy dastur sohasi sifatida qaraladi. Keyin bizning fikrimizcha, eng foydali o'rnatilgan funktsiyalarni o'rganishga va ularning yordami bilan amaliy muammolarni hal qilishga o'tamiz. PHP tilidagi ob'ekt modeli eng boy bo'lmasa-da, uning fundamental mavjudligi ob'ekt ma'lumotlar modellarini tabiiy ravishda tasvirlash imkonini beradi. Asosiy model sifatida virtual informatika muzeyining hujjat modeli ko'rib chiqiladi. Shundan so'ng, bir qator amaliy jihatlar ko'rib chiqiladi: fayl tizimi, ma'lumotlar bazasi, satrlar, seanslar, DOM XML bilan ishlash - bularning barchasi tildan amaliy foydalanishning asosiy vazifalarini ko'rib chiqishga imkon beradi.

Yuqoridagi jadvaldan ko'rinib turibdiki, Apache serveri yetakchi o'rinni egallaydi. Agar boshqacha ko'rsatilmagan bo'lsa, veb-serverlar haqida biz aytadigan hamma narsa Apache-markazli. Biz uni kompyuteringizga qanday o'rnatish haqida birinchi ma'ruzada gaplashdik. Va endi, va'da qilinganidek, HTTP protokoliga murojaat qilaylik.

HTTP protokoli va ma'lumotlarni serverga uzatish usullari

Internet ikkilik axborotni uzatishning fizik jihatlari bilan shug'ullanuvchi fizik qatlamdan foydalanuvchi va tarmoq o'rtasidagi interfeysni ta'minlovchi amaliy qatlamgacha bo'lgan ko'p qatlamli printsip asosida qurilgan.

HTTP (HyperText Transfer Protocol) - bu Internetda gipermatnli ma'lumotlarni almashish uchun mo'ljallangan amaliy qatlam protokoli.

HTTP serverga yuborilgan so'rovning maqsadini aniqlash uchun usullar to'plamini taqdim etadi. Ushbu usullar mos yozuvlar intizomiga asoslanadi, bunda universal manba identifikatori yoki Universal Resurs Locator (URL) yoki Universal Resurs Nomi sifatida usul qo'llanilishi kerak bo'lgan manbani ko'rsatish uchun ishlatiladi. ,URN).

HTTP protokolidan foydalanganda tarmoq orqali xabarlar Internet pochta xabari formatiga (RFC-822) yoki MIME (Ko'p maqsadli Internet Mail Exchange) xabar formatiga o'xshash formatda uzatiladi.

HTTP turli xil foydalanuvchi dasturlari va SMTP (Email Protocol), NNTP (News Transfer Protocol), FTP (Fayl uzatish protokoli), Gopher va WAIS kabi mavjud Internet protokollariga kirishni ta'minlaydigan shlyuz dasturlari o'rtasidagi aloqa uchun ishlatiladi. HTTP bunday shlyuzlarga ma'lumotlarni yo'qotmasdan proksi-serverlar orqali uzatish imkonini berish uchun mo'ljallangan.

Protokol so'rov/javob tamoyilini amalga oshiradi. So'rovchi dastur - mijoz javob beruvchi dastur - server bilan o'zaro aloqani boshlaydi va quyidagilarni o'z ichiga olgan so'rov yuboradi:

Kirish usuli;

URI manzili;

Protokol versiyasi;

O'tkazilayotgan ma'lumotlar turi, so'rov yuborgan mijoz haqidagi ma'lumotlar va ehtimol xabarning mazmuni (tanasi) haqida ma'lumotni o'z ichiga olgan xabar (shakl bo'yicha MIMEga o'xshash).

Serverning javobi quyidagilarni o'z ichiga oladi:

Protokol versiyasi va qaytarish kodini o'z ichiga olgan holat qatori (muvaffaqiyat yoki xato);

Server ma'lumotlarini, meta-ma'lumotni (ya'ni, xabar mazmuni haqidagi ma'lumotlarni) va xabar tanasini o'z ichiga olgan xabar (MIME-ga o'xshash shaklda).

Protokol mijoz va server o'rtasidagi aloqani kim ochishi va yopishi kerakligini aniqlamaydi. Amalda, ulanish odatda mijoz tomonidan ochiladi va server javobni yuborgandan so'ng uni tugatishni boshlaydi.

Keling, serverga so'rovlar yuboriladigan shaklni batafsil ko'rib chiqaylik.

Mijoz so'rov shakli

Mijoz so'rovni serverga ikkita shakldan birida yuboradi: to'liq yoki qisqartirilgan. Birinchi shakldagi so'rov to'liq so'rov, ikkinchi shaklda esa oddiy so'rov deb ataladi.

Oddiy so'rov kirish usuli va manba manzilini o'z ichiga oladi. Rasmiy ravishda, buni quyidagicha yozish mumkin:

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

Usul GET, POST, HEAD, PUT, DELETE va boshqalar bo'lishi mumkin. Ularning eng keng tarqalgani haqida biroz keyinroq gaplashamiz. So'ralgan URI ko'pincha manbaning URL manzilidir.

Oddiy so'rovga misol:

http://phpbook.info/ OSHIRISH

Bu erda GET kirish usuli, ya'ni. so'ralgan manbaga qo'llanilishi kerak bo'lgan usul va http://phpbook.info/ so'ralgan manbaning URL manzilidir.

To'liq so'rovda holat qatori, bir nechta sarlavhalar (so'rov sarlavhasi, umumiy sarlavha yoki kontent sarlavhasi) va ehtimol so'rovning asosiy qismi mavjud. Rasmiy ravishda, to'liq so'rovning umumiy shakli quyidagicha yozilishi mumkin:

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

Bu yerdagi kvadrat qavslar sarlavhaning ixtiyoriy elementlarini ko'rsatadi va muqobil variantlar vertikal chiziq orqali ko'rsatiladi. Element<Строка состояния>so'rov usuli va resurs URI (xuddi oddiy so'rov kabi) va qo'shimcha ravishda ishlatiladigan HTTP protokoli versiyasini o'z ichiga oladi. Masalan, tashqi dasturga qo'ng'iroq qilish uchun siz quyidagi holat qatoridan foydalanishingiz mumkin:

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

Bunday holda, POST usuli va HTTP 1.0 versiyasi qo'llaniladi.

So'rovning ikkala shaklida ham so'ralgan resursning URI muhim rol o'ynaydi. Eng keng tarqalgan URI manba URL manzili shaklida qo'llaniladi. Serverga kirishda siz URLning to'liq shaklidan ham, soddalashtirilganidan ham foydalanishingiz mumkin.

To'liq shakl kirish protokoli turini, resurs serverining manzilini va serverdagi resurs manzilini o'z ichiga oladi (4.2-rasm).

Qisqartirilgan shaklda protokol va server manzili o'tkazib yuboriladi, bu faqat server ildizidan resursning joylashishini ko'rsatadi. Agar so'rovni boshqa serverga yo'naltirish mumkin bo'lsa, to'liq shakl ishlatiladi. Agar ish faqat bitta server bilan amalga oshirilsa, ko'pincha qisqartirilgan shakl ishlatiladi.


Guruch. 4.2. To'liq URL shakli

Usullari

Yuqorida aytib o'tilganidek, mijozning serverga so'rovi usul spetsifikatsiyasi bilan boshlanishi kerak. Usul mijozning so'rovining maqsadini bildiradi. HTTP protokoli bir nechta usullarni qo'llab-quvvatlaydi, lekin faqat uchtasi qo'llaniladi: POST, GET va HEAD. GET usuli resurs so'rovida URI tomonidan aniqlangan har qanday ma'lumotlarni olish imkonini beradi. Agar URI dasturga ishora qilsa, u holda uning matni emas, balki dasturning ishlash natijasi qaytariladi (agar, albatta, matn uning ishlashi natijasi bo'lmasa). So'rovni qayta ishlash uchun zarur bo'lgan qo'shimcha ma'lumotlar so'rovning o'zida (holat qatorida) kiritilgan. GET usulidan foydalanganda, so'ralgan haqiqiy ma'lumot (masalan, HTML hujjatining matni) resurs tanasi maydoniga qaytariladi.

GET usulining o'zgarishi mavjud - shartli GET. Bu usul serverga so'rov sarlavhasining if-Modified-Since maydonidagi shart to'g'ri bo'lsagina javob berilishi kerakligini aytadi. Aniqroq aytganda, agar resurs agar-Modified-Since-da ko'rsatilgan sanadan boshlab o'zgartirilgan bo'lsa, so'rovga javoban resurs tanasi uzatiladi.

HEAD usuli GET usuliga o'xshaydi, lekin resurs tanasini qaytarmaydi va shartli o'xshashiga ega emas. HEAD usuli resurs haqida ma'lumot olish uchun ishlatiladi. Bu, masalan, gipermatnli havolalarni sinab ko'rish muammosini hal qilishda foydali bo'lishi mumkin.

POST usuli resurs izohlari, yangiliklar va pochta xabarlari, ma'lumotlar bazasiga qo'shiladigan ma'lumotlar kabi ma'lumotlarni serverga o'tkazish uchun mo'ljallangan, ya'ni. katta hajmli va juda muhim ma'lumotlarni uzatish uchun. GET va HEAD usullaridan farqli o'laroq, POST resurs tanasini uzatadi, bu shakl maydonlaridan yoki boshqa kirish manbalaridan olingan ma'lumotdir.

Hozirgacha biz faqat nazariya qilib, asosiy tushunchalar bilan tanishdik. Endi bularning barchasini amalda qo'llashni o'rganish vaqti keldi. Keyinchalik ma'ruzada biz serverga so'rovlarni qanday yuborish va uning javoblarini qanday qayta ishlashni ko'rib chiqamiz.

Serverga ma'lumotlarni yuborish uchun HTML shakllaridan foydalanish

Ma'lumotlarni serverga qanday o'tkazish mumkin? Buning uchun HTML tilida maxsus konstruktsiya - formalar mavjud. Shakllar foydalanuvchidan ma'lumot olish uchun mo'ljallangan. Masalan, foydalanuvchining saytning qaysi sahifalariga kirishiga ruxsat berilishi mumkinligini aniqlash uchun uning login va parolini bilishingiz kerak. Yoki u bilan bog'lanish uchun sizga foydalanuvchining shaxsiy ma'lumotlari kerak bo'ladi. Shakllar bunday ma'lumotlarni kiritish uchun aniq ishlatiladi. Siz ularga matn kiritishingiz yoki ro'yxatdan mos variantlarni tanlashingiz mumkin. Shaklda yozilgan ma'lumotlar serverdagi maxsus dasturga (masalan, PHP skripti) ishlov berish uchun yuboriladi. Foydalanuvchi tomonidan kiritilgan ma'lumotlarga qarab, ushbu dastur turli xil veb-sahifalarni yaratishi, ma'lumotlar bazasiga so'rovlar yuborishi, turli xil ilovalarni ishga tushirishi va hokazo.

Keling, HTML shakllarining sintaksisini tushunaylik. Ko'pchilik u bilan tanish bo'lishi mumkin, lekin biz hali ham asosiy fikrlarni takrorlaymiz, chunki bu muhim.

Demak, HTMLda forma yaratish uchun FORM tegidan foydalaniladi. Uning ichida bir yoki bir nechta INPUT buyruqlari mavjud. FORM tegining harakat va usul atributlaridan foydalanib, mos ravishda forma ma'lumotlarini qayta ishlovchi dastur nomini va so'rov usulini belgilaysiz. INPUT buyrug'i so'ralgan ma'lumotlarning turini va har xil xususiyatlarini belgilaydi. Shakl ma'lumotlari yuborish turini kiritish tugmasi bosilgandan so'ng yuboriladi. Dasturlashning sirtqi maktabida ishtirokchilarni ro'yxatdan o'tkazish uchun shakl yarataylik.

Brauzer tomonidan qayta ishlangandan so'ng, bu fayl quyidagicha ko'rinadi:


Guruch. 4.3. Misol html shakli

HTML formalari shunday yaratiladi va ko'rinadi. Biz ularni qanday yaratishni o'rgandik yoki esladik deb taxmin qilamiz. Ko'rib turganimizdek, formada ma'lumotlarni uzatish usulini belgilashingiz mumkin. Keling, GET yoki POST usulini belgilasangiz nima bo'lishini va farq nima bo'lishini ko'rib chiqamiz.

GET usuli uchun

Shakl ma'lumotlarini GET usulidan foydalangan holda jo'natishda shakl mazmuni URL manziliga savol belgisidan keyin ism=qiymat juftlari va belgisi bilan biriktirilgan holda qo'shiladi:

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

Bu yerda harakat shaklga ishlov berishi kerak boʻlgan dasturning URL manzilidir (shakl tegining harakat atributida koʻrsatilgan dastur yoki bu atribut oʻtkazib yuborilgan boʻlsa joriy dasturning oʻzi). Name1, name2, name3 nomlari shakl elementlarining nomlariga, qiymat1, qiymat2, qiymat3 esa ushbu elementlarning qiymatlariga mos keladi. Barcha maxsus belgilar, jumladan = va &, ushbu parametr nomlari yoki qiymatlaridan olib tashlanadi. Shuning uchun siz ushbu belgilarni va kirill harflarini shakl elementlarining nomlari yoki qiymatlaridagi identifikatorlarda ishlatmasligingiz kerak.

Agar siz kiritish maydoniga biron bir xizmat belgisini kiritsangiz, u o'zining o'n oltilik kodida uzatiladi, masalan, $ belgisi %24 bilan almashtiriladi. Rus harflari ham xuddi shu tarzda uzatiladi.

Matn va parol kiritish maydonlari uchun (bular type=text va type=password atributiga ega boʻlgan kiritish elementlari), foydalanuvchi kiritgan narsadan qatʼiy nazar qiymat boʻladi. Agar foydalanuvchi bunday maydonga hech narsa kiritmasa, so'rovlar qatorida name= elementi mavjud bo'ladi, bu erda nom ushbu forma elementining nomiga mos keladi.

Belgilash katakchasi va radio tugma tugmalari uchun qiymat tugma belgilanganda VALUE atributi bilan aniqlanadi. Belgilanmagan tugmalar so'rovlar qatorini tuzishda butunlay e'tiborga olinmaydi. Agar kerak bo'lsa, bir nechta belgilash katakchalari tugmalari bir xil NAME atributiga (va turli VALUE) ega bo'lishi mumkin. Radio tugma turidagi tugmalar barcha taklif qilingan variantlardan biri uchun moʻljallangan va shuning uchun ular bir xil NAME atributiga va turli VALUE atributlariga ega boʻlishi kerak.

Aslida, GET usuli yordamida ma'lumotlarni uzatish uchun HTML formasini yaratish shart emas. Siz shunchaki kerakli o'zgaruvchilar va ularning qiymatlarini URL satriga qo'shishingiz mumkin.

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

Shu munosabat bilan, GET usuli yordamida ma'lumotlarni uzatish bitta muhim kamchilikka ega - har kim parametr qiymatlarini soxtalashtirishi mumkin. Shuning uchun biz parol bilan himoyalangan sahifalarga kirish yoki dastur yoki server xavfsizligiga ta'sir qiluvchi ma'lumotlarni uzatish uchun ushbu usuldan foydalanishni tavsiya etmaymiz. Bundan tashqari, foydalanuvchi o'zgartirishi mumkin bo'lmagan ma'lumotlarni uzatish uchun GET usulidan foydalanmasligingiz kerak.

Ushbu kamchiliklarga qaramay, GET usulidan foydalanish skriptlarni disk raskadrovka qilishda (keyin siz uzatilayotgan o'zgaruvchilarning qiymatlari va nomlarini ko'rishingiz mumkin) va xavfsizlikka ta'sir qilmaydigan parametrlarni o'tkazish uchun juda qulaydir.

POST usuli uchun

Shakl mazmuni GET usuli bilan bir xil tarzda kodlangan (yuqoriga qarang), lekin URL manziliga satr qo'shish o'rniga, so'rov mazmuni POST operatsiyasining bir qismi sifatida ma'lumotlar bloki sifatida yuboriladi. Agar ACTION atributi mavjud bo'lsa, u erda joylashgan URL qiymati ushbu ma'lumotlar blokini qaerga yuborishni aniqlaydi. Ushbu usul, yuqorida aytib o'tilganidek, katta ma'lumotlar bloklarini uzatish uchun tavsiya etiladi.

Foydalanuvchi tomonidan kiritilgan va POST usuli yordamida serverga yuborilgan ma'lumotlar, harakat atributi tomonidan ko'rsatilgan dasturga yoki ushbu atribut o'tkazib yuborilgan bo'lsa, joriy skriptga standart kiritishda taqdim etiladi. Yuborilgan fayl uzunligi CONTENT_LENGTH muhit o'zgaruvchisiga, ma'lumotlar turi esa CONTENT_TYPE o'zgaruvchisiga uzatiladi.

Siz faqat POST usuli yordamida ma'lumotlarni HTML formasidan foydalanib yuborishingiz mumkin, chunki ma'lumotlar GETdagi kabi sarlavhada emas, so'rovning asosiy qismida yuboriladi. Shunga ko'ra, siz parametrlarning qiymatini faqat shaklga kiritilgan qiymatni o'zgartirish orqali o'zgartirishingiz mumkin. POST-dan foydalanganda foydalanuvchi serverga yuborilgan ma'lumotlarni ko'rmaydi.

POST so'rovlarining asosiy afzalligi ularning GET so'rovlariga nisbatan ko'proq xavfsizligi va funksionalligidir. Shuning uchun POST usuli ko'proq muhim ma'lumotlarni, shuningdek, katta hajmdagi ma'lumotlarni uzatish uchun ishlatiladi. Biroq, siz ushbu mexanizmning xavfsizligiga to'liq tayanmasligingiz kerak, chunki POST so'rovi ma'lumotlari, masalan, kompyuteringizda HTML faylini yaratish va kerakli ma'lumotlar bilan to'ldirish orqali ham soxta bo'lishi mumkin. Bundan tashqari, barcha mijozlar POST usulidan foydalana olmaydi, bu esa undan foydalanish holatlarini cheklaydi.

Serverga har qanday usul bilan ma'lumotlarni yuborishda nafaqat foydalanuvchi tomonidan kiritilgan ma'lumotlar, balki mijozni, uning ishlash tarixini, fayl yo'llarini va boshqalarni tavsiflovchi muhit o'zgaruvchilari deb ataladigan bir qator o'zgaruvchilar uzatiladi. Bu erda atrof-muhit o'zgaruvchilarining ba'zilari:

REMOTE_ADDR – so‘rov yuboruvchi xostning (kompyuterning) IP manzili;

REMOTE_HOST – so‘rov yuborilgan xost nomi;

HTTP_REFERER - joriy skriptga bog'langan sahifaning manzili;

REQUEST_METHOD – so‘rov yuborishda foydalanilgan usul;

QUERY_STRING – savol belgisidan keyin URL manzilida joylashgan ma’lumot;

SCRIPT_NAME – bajarilishi kerak bo‘lgan dasturga virtual yo‘l;

HTTP_USER_AGENT - mijoz foydalanadigan brauzer haqida ma'lumot

Hozircha biz faqat mijoz so'rovlari maxsus dastur yordamida serverda qayta ishlanishini aytib o'tdik. Aslida, biz ushbu dasturni o'zimiz, shu jumladan PHPda ham yozishimiz mumkin va u olingan ma'lumotlar bilan biz xohlagan narsani qiladi. Ushbu dasturni yozish uchun siz PHP bu maqsadda taklif qiladigan ba'zi qoidalar va vositalar bilan tanishishingiz kerak.

PHP skriptida mijoz tomonidan HTTP orqali yuborilgan ma'lumotlarga kirishning bir necha usullari mavjud. PHP 4.1.0 dan oldin bunday ma’lumotlarga kirish o‘tkazilgan o‘zgaruvchilar nomlari orqali amalga oshirilgan (esda tutingki, ma’lumotlar “o‘zgaruvchi nomi, “=” belgisi, o‘zgaruvchi qiymati” juftliklari ko‘rinishida uzatiladi). Shunday qilib, agar, masalan, first_name=Nina uzatilgan bo'lsa, skript ichida Nina qiymatiga ega $first_name o'zgaruvchisi paydo bo'ldi. Agar ma'lumotlar qanday usul bilan uzatilganligini ajratish kerak bo'lsa, u holda $HTTP_POST_VARS va $HTTP_GET_VARS assotsiativ massivlari ishlatilgan, ularning kalitlari uzatilgan o'zgaruvchilarning nomlari va qiymatlar mos ravishda qiymatlar edi. bu o'zgaruvchilardan. Shunday qilib, agar first_name=Nina juftligi GET usuli bilan uzatilsa, $HTTP_GET_VARS["first_name"]="Nina".

O'tkazilgan o'zgaruvchilar nomlarini bevosita dasturda ishlatish xavfsiz emas. Shuning uchun, PHP 4.1.0 dan boshlab, HTTP so'rovlari orqali uzatiladigan o'zgaruvchilarga kirish uchun maxsus massiv - $_REQUEST - foydalanishga qaror qilindi. Ushbu massivda POST va GET usullari, shuningdek, HTTP cookie-fayllari yordamida uzatiladigan ma'lumotlar mavjud. Bu superglobal assotsiativ massiv, ya'ni. uning qiymatlarini kalit sifatida tegishli o'zgaruvchining nomi (shakl elementi) yordamida dasturning istalgan joyidan olish mumkin.

4.2-misol. Aytaylik, biz yuqoridagi misoldagi kabi dasturlash sirtqi maktabi ishtirokchilarini ro'yxatdan o'tkazish uchun shakl yaratdik. Keyin ushbu shaklni qayta ishlaydigan 1.php faylida siz quyidagilarni yozishingiz mumkin:

$str = "Salom,
".$_REQUEST["first_name"]."
".$_REQUEST["familiya_ism"]."!
";
$str .="Siz kursni oʻqishni tanladingiz
".$_REQUEST["kurs"];
echo $str;
?>

Keyin formaga “Vasya” familiyasini, “Petrov” familiyasini kiritsak va barcha kurslar orasidan PHP kursini tanlasak, brauzer ekranida quyidagi xabarni olamiz:

Salom, Vasya Petrov!

$_REQUEST massivi kiritilgandan so'ng, $HTTP_POST_VARS va $HTTP_GET_VARS massivlari mos ravishda $_POST va $_GET deb nomlandi, lekin ularning o'zlari PHP ning oldingi versiyalari bilan mosligi sababli foydalanishdan yo'qolmadi. Oldingi massivlardan farqli o'laroq, $_POST va $_GET massivlari super-globalga aylandi, ya'ni. bevosita va ichki funksiyalar va usullardan foydalanish mumkin.

Keling, ushbu massivlardan foydalanishga misol keltiramiz. Faraz qilaylik, nom, familiya, kurs nomli kiritish elementlarini o'z ichiga olgan formani qayta ishlashimiz kerak (masalan, yuqoridagi form.html). Ma'lumotlar POST usuli yordamida uzatildi va biz boshqa usullar bilan uzatilgan ma'lumotlarni qayta ishlashni xohlamaymiz. Buni quyidagicha amalga oshirish mumkin:

$str = "Salom,
".$_POST ["first_name"]."
".$_POST ["familiya_ism"] ."!
";
$str .= "Siz " kursini o'rganishni tanladingiz.
$_POST["kurs"];
echo $str;
?>

Keyin brauzer ekranida, agar biz "Vasya" nomini, "Petrov" familiyasini kiritsak va barcha kurslar orasida PHP kursini tanlagan bo'lsak, oldingi misoldagi kabi xabarni ko'ramiz:

Salom, Vasya Petrov!
Siz PHP kursini o'rganishni tanladingiz

Skriptlarni PHP 4.1.0 dan avvalroq qayta ishlash imkoniyatini saqlab qolish uchun register_globals direktivasi kiritildi, bu o'zgaruvchilarga to'g'ridan-to'g'ri ularning nomlari bo'yicha kirishga ruxsat beradi yoki rad etadi. Agar register_globals=On parametri PHP sozlamalari faylida boʻlsa, GET va POST usullari yordamida serverga uzatilgan oʻzgaruvchilarga oddiygina nomlari orqali kirish mumkin (yaʼni $first_name yozishingiz mumkin). Agar register_globals=Off bo'lsa, $_REQUEST["first_name"] yoki $_POST["first_name"], $_GET["first_name"], $HTTP_POST_VARS["first_name"], $HTTP_GET_VARS["first_name"] yozishingiz kerak. Xavfsizlik nuqtai nazaridan ushbu direktivani o'chirib qo'yish yaxshiroqdir (masalan, register_globals=Off). Register_globals direktivasi yoqilgan bo'lsa, yuqorida sanab o'tilgan massivlar mijoz tomonidan uzatilgan ma'lumotlarni ham o'z ichiga oladi.

Ba'zan siz so'rovni yuborish uchun ishlatiladigan usul yoki so'rovni yuborgan kompyuterning IP manzili kabi muhit o'zgaruvchisining qiymatini bilishingiz kerak. Ushbu ma'lumotni getenv() funksiyasidan foydalanib olishingiz mumkin. U parametr sifatida nomi berilgan muhit o'zgaruvchisining qiymatini qaytaradi.

getenv("REQUEST_METHOD");
// ishlatilgan usulni qaytaradi
echo getenv("REMOTE_ADDR");
// foydalanuvchining IP manzilini ko'rsatadi,
// so'rovni kim yubordi
?>

Aytganimizdek, agar GET usuli qo'llanilsa, u holda ma'lumotlar manba URL manziliga o'zgaruvchan_name=qiymat juftlari ko'rinishidagi so'rovlar qatorini qo'shish orqali uzatiladi. URLdagi savol belgisidan keyin hamma narsa buyruq yordamida olinishi mumkin

getenv("QUERY_STRING");

Buning yordamida GET usuli yordamida ma'lumotlarni boshqa shaklda uzatish mumkin. Misol uchun, siz ortiqcha belgisi yordamida faqat bir nechta parametrlarning qiymatlarini belgilashingiz mumkin va skriptda so'rovlar qatorini qismlarga ajratishingiz yoki faqat bitta parametrning qiymatini o'tkazishingiz mumkin. Bunday holda, $_GET massivida shu qiymatga teng kalitga ega bo'sh element (butun so'rovlar qatori) paydo bo'ladi va so'rovlar qatorida uchraydigan "+" belgisi pastki chiziq "_" bilan almashtiriladi.

POST usuli bilan ma'lumotlar faqat formalar yordamida uzatiladi va foydalanuvchi (mijoz) serverga qanday ma'lumotlar yuborilganligini ko'rmaydi. Ularni ko'rish uchun xaker bizning shaklimizni o'zi bilan almashtirishi kerak. Keyin server noto'g'ri shaklni qayta ishlash natijalarini noto'g'ri joyga yuboradi. Bunga yo'l qo'ymaslik uchun siz ma'lumotlar yuborilgan sahifaning manzilini tekshirishingiz mumkin. Buni getenv() funksiyasi yordamida yana bajarish mumkin:

getenv("HTTP_REFERER");

Endi ma'ruza boshida tuzilgan muammoni hal qilish vaqti keldi.

PHP yordamida so'rovni qayta ishlashga misol

Keling, vazifa nima ekanligini eslaylik va uning formulasini aniqlaylik. Dasturlashning sirtqi maktabida ishtirokchilarni ro'yxatdan o'tkazish uchun ariza yozishingiz va ro'yxatdan o'tgandan so'ng ishtirokchiga xabar yuborishingiz kerak. Biz bu xabarni universal xat deb nomladik, lekin u avvalgi ma'ruzada tuzgan xatimizdan biroz farq qiladi. Bu erda biz spamerlarga o'xshamaslik uchun elektron pochta orqali hech narsa yubormaymiz, shunchaki ushbu xabarni yaratamiz va uni brauzer ekranida ko'rsatamiz. Biz yuqorida ro'yxatdan o'tish shaklining dastlabki versiyasini taqdim etdik. Biz uni har bir registrator o‘zi istagancha kurs tanlashi uchun o‘zgartiramiz va biz ro‘yxatdan o‘tish shaklini olganimizni tasdiqlamaymiz.

Bu erda hamma narsa juda oddiy va tushunarli. E'tiborga olish kerak bo'lgan yagona narsa - tasdiqlash qutisi elementining qiymatlarini o'tkazish usuli. Element nomiga kurs yozganimizda, bu birinchi belgilangan katakcha elementi kurs massivining birinchi elementiga, ikkinchi belgilangan katakcha ikkinchi massiv elementiga yoziladi va hokazo. Siz, albatta, tasdiqlash qutisi elementlariga oddiygina turli nomlar berishingiz mumkin, ammo bu kurslar ko'p bo'lsa, ma'lumotlarni qayta ishlashni murakkablashtiradi.

Bularning barchasini tahlil qiladigan va qayta ishlovchi skript 1.php deb ataladi (shakl, xususan, uning action atributida yozilgan ushbu faylga tegishli). Odatiy bo'lib, uzatish uchun GET usuli qo'llaniladi, ammo biz POSTni belgiladik. Ro'yxatdan o'tgan shaxsdan olingan ma'lumotlarga asoslanib, skript tegishli xabarni yaratadi. Agar biror kishi ba'zi kurslarni tanlagan bo'lsa, u o'tkaziladigan vaqt va ularni o'rgatadigan o'qituvchilar haqida xabar oladi. Agar biror kishi biror narsani tanlamagan bo'lsa, u holda dasturchilarning sirtqi maktabining (ZSH) keyingi yig'ilishi haqida xabar ko'rsatiladi.

HTML shakllari foydalanuvchi kiritgan ma'lumotlarni serverga jo'natish imkonini beradi va u erda keyinchalik qayta ishlanishi mumkin. Shaklni saqlash ikki bosqichda amalga oshiriladi. Shakl birinchi navbatda foydalanuvchiga taqdim etilishi kerak, u uni o'z ma'lumotlari bilan to'ldiradi va keyin uni serverga yuboradi. Har bir shaklda foydalanuvchi tomonidan taqdim etilgan ma'lumotlarni qayta ishlash uchun yuklanishi kerak bo'lgan ochilish veb-sahifasi mavjud. Bu ko'pincha shaklni yaratadigan bir xil skript fayli. Bunday holda, PHP kodi forma yaratish uchun skriptga qayta qo'ng'iroq qilishni yoki qabul qilingan ma'lumotlarni qayta ishlashni boshlashni aniqlash uchun formadagi ma'lumotlarni tekshiradi.

Diqqat! Dars eskirgan. Ushbu mavzu bo'yicha yangi darslar yangi boshlanuvchilar uchun PHP kursida mavjud.

Ko'pgina hollarda, formalarni serverga yuborish ma'lumotlar bazasida qandaydir ishlarni o'z ichiga oladi. Misol uchun, ma'lumotlar bazasini qidirish operatsiyasi turli xil ilovalar uchun zarur bo'lgan harakatdir, xoh u forum xabarlarini, foydalanuvchilar yoki blogni qidirish. Har holda, bu operatsiya foydalanuvchining hayotini osonlashtirishi mumkin. Chunki Ayni paytda biz hali PHP va MySQL DBMS ning o'zaro ta'siri bilan tanishganimiz yo'q, bu maqolada biz shakllarni qayta ishlashning oddiy misollarini ko'rib chiqamiz va men uchun asosiy vazifa PHP tili yordamida ma'lumotlar qanday uzatilishini ko'rsatishdir. .

PHP tilidan foydalangan holda ma'lumotlarni uzatish

Ushbu bo'limda veb-sahifalar o'rtasida ma'lumotlarni qanday o'tkazish mumkinligi haqida asosiy ma'lumotlar keltirilgan. Ushbu ma'lumotlarning ba'zilari faqat PHP texnologiyasiga taalluqli emas, balki PHP va HTML vositalarining o'zaro ta'sirini tavsiflaydi yoki HTTP protokolining o'ziga tegishli.

HTTP protokolida davlat yordamining yo'qligi

Har qanday veb-texnologiyaning har doim yodda tutilishi kerak bo'lgan eng muhim xususiyati HTTP protokolining o'zi fuqaroligi yo'qligidir. Bu shuni anglatadiki, har bir HTTP so'rovi (ko'p hollarda HTML sahifasi, .jpg fayli, uslublar jadvali va boshqalar kabi bitta resursni olish va yetkazib berish so'rovini tashkil qiladi) boshqa barcha so'rovlardan mustaqil emasligini anglatadi. mijozning identifikatsiyasi haqidagi har qanday ma'lumotni o'z ichiga oladi va kompyuter xotirasida iz qoldirmaydi.

Sayt shunday tuzilgan bo'lsa ham, navigatsiya, ya'ni. bir sahifadan ikkinchisiga o'tish qat'iy bir yo'nalishda sodir bo'ladi (aytaylik, 1-sahifa faqat 2-sahifaga olib keladi, bu faqat 3-sahifaga olib keladi va hokazo), HTTP protokolini qo'llab-quvvatlash vositalari ma'lumotlarga ega emas va foydalanuvchi foydalanuvchi ekanligini hisobga olmaydi. 2-sahifani ko'rish 1-sahifaga avval tashrif buyurgan bo'lishi kerak. Siz 1-sahifadagi o'zgaruvchiga qiymat bera olmaysiz va uni HTML-ning o'zidan foydalanib 2-sahifaga import qilinishini kuta olmaysiz. HTML koddan shaklni ko'rsatish uchun foydalanish mumkin va bu kod hatto ma'lumot kiritish uchun ham ishlatilishi mumkin, ammo kiritilgan ma'lumotlarni boshqa sahifa yoki dasturga o'tkazish uchun ba'zi qo'shimcha vositalar ishlatilmasa, o'zgaruvchiga tayinlangan qiymat ko'chirilgandan so'ng yo'qoladi. boshqa sahifaga.

PHP kabi shakllarni qayta ishlash texnologiyalari aynan shu muammoni hal qilish uchun yaratilgan. PHP oldingi sahifadan keyingi sahifaga oʻtilayotgan oʻzgaruvchining qiymatini ushlab turish va bu qiymatni keyinchalik foydalanish uchun foydalanish imkonini beradi. Ma'lum bo'lishicha, PHP texnologiyasi ushbu turdagi ma'lumotlarni uzatish funktsiyalarini juda yaxshi bajarish imkoniyatini beradi, shuning uchun veb-saytning ishlashini ta'minlash bilan bog'liq turli xil muammolarni hal qilish uchun kerakli vositalarni tez va oson joylashtirish imkonini beradi.

HTML shakllari ma'lum bir sahifadan veb-saytdagi istalgan boshqa sahifaga oz sonli qiymatlarni o'tkazishning qulay usulini ta'minlaydi. Ko'p sahifa ko'rinishlari holatini saqlab qolishning boshqa usullari ham bor, ular uzoq muddatli, masalan, cookie-fayllar va sessiyalar, ular keyingi maqolada muhokama qilinadi. Ushbu maqola, asosan, dinamik ravishda yaratilgan sahifalarni yaratish va shakl ma'lumotlarini qayta ishlash uchun HTTP protokoli bilan birgalikda GET va POST usullaridan foydalanadigan veb-sahifalar o'rtasida ma'lumot uzatishning eng oddiy usullariga qaratilgan.

GET parametrlari

GET usuli parametrlarni oldingi sahifadan keyingi sahifaga yagona resurs identifikatori URI formatida taqdim etilgan so'rovlar qatorining bir qismi sifatida o'tkazadi. Shaklni qayta ishlash uchun GET usulidan foydalansangiz, formaning harakat atributi bilan aniqlangan URL manzilidan so‘ng chegaralovchidan keyin savol belgisi, so‘ngra belgilangan o‘zgaruvchi nomi(lar)i va qiymat(lar) keladi, so‘ngra butun qator bo‘ladi. qayta ishlash agentiga (bu holda, veb-server) uzatiladi.

Quyida GET usulidan foydalanadigan HTML formasiga misol keltirilgan (bu belgini kiriting va faylni sportselect.html sifatida saqlang):

PHP asoslari

Sevimli sport turini tanlang

Foydalanuvchi o‘z tanlovini amalga oshirib, “Yuborish” tugmasini bosgandan so‘ng, brauzer quyidagi elementlarni ko‘rsatilgan tartibda bog‘laydi, elementlar orasida bo‘sh joy qolmaydi:

  • Harakat so'zidan keyin tirnoq ichidagi URL (http://localhost/sports.php).
  • Quyidagi belgilar GET satrini tashkil etishini bildiruvchi savol belgisi (?).
  • Nom o'zgaruvchisi, tenglik belgisi (=) va mos keladigan qiymat parametri (qiymat = Xokkey).
  • Amersand (&) va undan keyin nom=qiymat juftligi (agar mavjud bo'lsa).

Shunday qilib, brauzer quyidagi URL qatorini yaratadi:
http://localhost/sports.php?sport=Xokkey

Brauzer natijada olingan URL satrini yangi so'rov sifatida o'zining manzil maydoniga yo'naltiradi. Shakl yuborilgan quyidagi PHP skripti (sports.php) so'rovlar qatorining oxirgi qismidan GET o'zgaruvchisi qiymatlarini oladi, ushbu o'zgaruvchilar va o'zgaruvchilar qiymatlarini $_GET superglobal massiviga kiritadi (bo'lishi kerak). qisqacha tasvirlangan) va ushbu qiymatlar bilan ba'zi kerakli harakatlarni amalga oshiradi; bu holda, kiritish matn qatorida sodir bo'ladi.

Quyida yuqoridagi HTML formasi uchun PHP forma ishlov beruvchisini ko'rsatadigan kod misoli keltirilgan:

Sevimli sport

Sizning sevimli sportingiz

Oldingi sahifadagi name="sport" atributi bilan HTML forma maydoniga kiritilgan qiymat endi $_GET["sport"] nomli PHP o'zgaruvchisi sifatida mavjud ekanligini unutmang. Quyidagi rasm ushbu misol qanday ishlashini ko'rsatadi:

Endi biz sahifadan sahifaga o'tkazilgan qiymatlarga qanday kirishingiz mumkinligini aniq tushuntirishimiz kerak. Ushbu maqolada shakllarda ishlatiladigan qiymatlarni uzatishning ikkita asosiy usuli - GET va POST muhokama qilinadi. Har bir usul u bilan bog'langan superglobal massivga ega. Superglobal massivlar "O'zgaruvchilar va doimiylar" maqolasida batafsil tavsiflangan. Superglobal massivlarning boshqa massivlardan o'ziga xos xususiyati pastki chiziq shaklida nomdagi prefiksning mavjudligidir.

Shakl protsessori GET usuli yordamida yuborilgan har bir elementga $_GET massiviga kirish orqali va POST usuli yordamida yuborilgan har bir elementga $_POST massiviga kirish orqali kiradi. Superglobal massivning har qanday elementiga kirish uchun ishlatiladigan sintaktik tuzilma oddiy va butunlay bir xil:

$_array_name["index_name"]

Bu yerda indeks_nomi nom-qiymat juftligining nom qismi (GET usuli uchun) yoki HTML forma maydonining nomi (POST usuli uchun). Oldingi misoldan so'ng, $_GET["sport"] formaning "sport" nomli tanlash elementining qiymatini belgilaydi; bu qiymat asl faylda bajarilgan GET operatsiyasi yordamida o'tkazildi. Shakl ishlov beruvchisi ma'lumotlar yuborilgan usulga mos keladigan massivdan foydalanishi kerak. Xususan, ushbu misolda $_POST["sport"] qiymati aniqlanmagan, chunki asl shakl POST usuli yordamida hech qanday ma'lumot taqdim etmagan.

GET formasini qayta ishlash usuli POST usuliga nisbatan bir muhim afzalliklarga ega - u har safar joriy vaziyatga mos keladigan yangi URL so'rovlar qatorini yaratishga imkon beradi. Keyin foydalanuvchilar ushbu sahifani belgilashlari mumkin. Boshqa tomondan, POST usuli yordamida ariza topshirish natijalarini xatcho'p qilib bo'lmaydi.

GET parametrlari yordamida kerakli funksionallikka erishish mumkinligi GET usulidan foydalanish kerak degani emas. Shakllarni qayta ishlashning aksariyat turlarida uchraydigan GET usulining kamchiliklari juda katta. 1997 yilda nashr etilgan asl HTML 4.0 ishchi spetsifikatsiyasi bu usulni tavsiya etmagan. GET usulining asosiy kamchiliklari quyida keltirilgan:

  • GET usuli ro'yxatga olish oynalarini yaratishda qo'llanilmaydi, chunki foydalanuvchi nomi va parol ekranda to'liq ko'rinadi va bu ma'lumotlar tashrif buyurilgan sahifa haqida ma'lumot sifatida mijoz brauzeri xotirasida saqlanishi ham mumkin.
  • Har bir GET uzatish operatsiyasi, shu jumladan ma'lumotlar to'plamining o'zi veb-serverda qayd etiladi.
  • GET usuli ma'lumotlarni server muhiti o'zgaruvchisiga tayinlaydi, shuning uchun URL uzunligi cheklangan. GET usuli yordamida uzatilganda juda uzun URL-manzillar qanday ko'rinishini ko'rgan bo'lishingiz mumkin va haqiqatan ham hech kim ushbu usul yordamida 300 so'zli HTML matnini yuborishni xohlamasligi dargumon.

Asl HTML spetsifikatsiyasi so'rovlar qatorining uzunligi 255 belgidan oshmasligi kerakligini aytdi. Albatta, bu cheklov keyinchalik olib tashlandi va faqat 255 belgi chegarasiga rioya qilish tavsiyasi qoldi, ammo uzunroq satrlardan foydalanish hali ham buzilishlarga olib kelishi mumkin.

POST parametrlari

Hozirgi vaqtda shakl ma'lumotlarini yuborishning afzal usuli POST (ayniqsa, amallarni bajarish doimiy o'zgarishlarga olib keladigan holatlarda, masalan, ma'lumotlar bazasiga ma'lumotlarni kiritish). Shakl ma'lumotlar to'plami formani qayta ishlash agentiga (bu holda PHP tarjimoniga) yo'naltirilganda shakl tanasiga kiritiladi. URL satri uzatilayotgan maʼlumotlarning xilma-xilligini aks ettirish uchun koʻrinadigan oʻzgarishlarga duchor boʻlmaydi.

Ishlab chiquvchilar orasida POST usuli GETga qaraganda xavfsizroq degan asossiz fikr keng tarqalgan. Aslida, hech bir usul boshqasidan ko'ra ko'proq yoki kamroq xavfsiz emas. Tashrifchi POST usuli yordamida yuborilgan o'zgaruvchilar va ma'lumotlarni GET usuli yordamida ham ko'rishi mumkin. Yagona farq shundaki, birinchi holatda uzatilgan ma'lumotlar manzil satrida topilmaydi. Ammo bu ular yashiringan degani emas. POST usuli yordamida yuborilgan ma'lumotlarni veb-sayt foydalanuvchisi ko'rishi va o'zgartirishi mumkin.

Dasturlashning birinchi va eng muhim qoidasi, ayniqsa tarmoq dasturlash, bu:
Hech qachon kiritilgan maʼlumotlarga ishonmang.

Siz har doim tashrif buyuruvchi ma'lum bir ilovaga uzatilayotgan ma'lumotlarni yomon niyat bilan yoki hatto tasodifan o'zgartirgan bo'lishi mumkinligini taxmin qilishingiz kerak, shuning uchun siz ushbu ma'lumotlarni diqqat bilan tekshirishingiz kerak.

Agar so'rov SSL, TLS yoki boshqa shifrlash usuli yordamida himoyalangan bo'lsa, uzatilgan shakl ma'lumotlari ko'proq yoki kamroq xavfsiz bo'ladi. Ammo ma'lumotlar hali ham oxirgi foydalanuvchi yoki tashrif buyuruvchiga aniq shaklda etib boradi, shuning uchun u hali ham ma'lumotlarni u yoki bu tarzda ko'rish va o'zgartirish imkoniyatiga ega. Gap shundaki, SSL protokoli tarmoq orqali uzatiladigan ma'lumotlarni shunchaki shifrlaydi, bu esa ma'lumotlarni jo'natuvchidan qabul qiluvchiga o'tish bosqichida aniq matnda ko'rishga imkon bermaydi. Tashrifchining ma'lumotlarni shakllantirishga o'zgartirish kiritish qobiliyatiga kelsak, SSL protokoli buni oldini olish uchun hech narsa bermaydi.

Oldingi misolda ma'lumotlarni uzatish usulini o'zgartirish uchun siz quyidagi o'zgarishlarni kiritishingiz kerak:

...

Bir nechta qiymatlar bilan ishlash

Agar formada tasdiqlash qutilari yoki radio tugmalari bo'lsa, yangi muammo paydo bo'ladi. Masalan, foydalanuvchi formada bir vaqtning o'zida ikkita qiymatni tanlashi mumkin, lekin o'zgaruvchi bir nechta qiymatni saqlay olmaydi, shuning uchun massivdan foydalanish kerak bo'ladi. Bu holat quyidagi misolda ko'rsatilgan:

" usuli = "post">
Sevimli uy hayvonlaringizni tanlang

Tanlangan hayvonlar: "; foreach ($animal sifatida $a) ( echo " ".htmlentities($a).""; } } ?>

Ushbu shakl foydalanuvchiga sevimli uy hayvonlarini tanlash imkonini beradi. Ushbu misolda foydalanuvchi bir vaqtning o'zida bir nechta katakchalarni tanlashi mumkin. Bu shuni anglatadiki, PHP skriptida shakl ma'lumotlarini qayta ishlashda bitta nom yordamida bir nechta qiymatlarga kirish imkoniyatini ta'minlash kerak. Bir nechta tanlovni massiv sifatida yuborish imkoniyati uchun name atributidagi nomdan keyin bir juft kvadrat qavs () qo‘ydik. Agar kvadrat qavslar o'tkazib yuborilsa va foydalanuvchi bir nechta katakchalarni belgilagan bo'lsa, ularning tanlovi oxirgi belgilangan katakchaga yoziladi. Nomdan keyin kvadrat qavslar qo'yish orqali biz qiymatlar massiv sifatida saqlanishi kerakligini ko'rsatdik.

Ishlovchida massiv $animal o'zgaruvchisida saqlanadi va oddiy massiv kabi foreach tsikli yordamida sanab o'tiladi.

Shaklni tekshirish va shakl o'zgaruvchilarni formatlash

Ilova foydalanuvchidan ma'lumot olganida, u har safar uning to'g'riligini tekshirishi kerak. Agar siz foydalanuvchi tomonidan kiritilgan ma'lumotlarni tekshirmasangiz, siz ko'plab muammolarga, shu jumladan xavfsizlik xavflariga duch kelishingiz mumkin. Fon tekshiruvini amalga oshirish ko'rinadigan darajada qiyin emas.

Foydalanuvchilar uchun JavaScript-dan foydalangan holda mijoz tomonidan tekshirish qulayroq, ammo bu tekshiruvdan foydalanilganligidan qat'i nazar, server tomonidan tekshirish amalga oshirilishi kerak.

HTML shakllarini yaratishda e'tiborga olish kerak bo'lgan yana bir narsa shundaki, agar forma oldindan to'ldirilgan ma'lumotlarni ko'rsatishi kerak bo'lsa, u holda qiymat atributi o'rnatilishi kerak. Bu nuqta, ayniqsa, ikki turdagi shakllarga to'g'ri keladi - ma'lumotlar bazasidan olingan ma'lumotlarni tahrirlash uchun ishlatiladigan va ma'lumotlarni bir necha marta yuborish uchun mo'ljallangan. Oxirgi holat, oldindan to'ldirilgan ma'lumotlarda xatolar aniqlangandan so'ng, ariza qayta ko'rsatilishi kerak bo'lgan holatlarda juda keng tarqalgan. Misol tariqasida, foydalanuvchi to'g'ri elektron pochta manzilini yoki boshqa kerakli ma'lumotlarni taqdim etmaguncha ma'lumotlarni qayta ishlash uchun qabul qilmaydigan ro'yxatga olish shaklidir.

Quyidagi misolda formani qanday qayta ishlash, shu jumladan server tomonidan tekshirish va bir xil forma sahifasida ishlov berish ko'rsatilgan:

PHP asoslari

" usuli = "post">
Bog'lanish uchun ma'lumot "sinf="">
"sinf="">

Bu misolda filter_var() funksiyasidan foydalaniladi, u filtr yordamida oʻzgaruvchini tekshiradi va ikkita parametrni oladi – manba qatori va filtr turini koʻrsatuvchi doimiy. Elektron pochta manzillarini (FILTER_VALIDATE_EMAIL) tekshirishdan tashqari, bu funksiya quyidagi konstantalarni qo‘llab-quvvatlaydi: FILTER_VALIDATE_URL - qiymatni URL manzilining to‘g‘riligini tekshiradi (masalan), FILTER_VALIDATE_IP - IP manzillarning to‘g‘riligini tekshiradi, FILTER_VALIDATE_REGEXP - qiymatni tekshiradi is_bool(), is_float(), is_int() va hokazo funksiyalarga muqobil boʻlgan muntazam ifoda sintaksisi va boshqa bir qancha konstantalarning toʻgʻriligi uchun.

Ushbu va keyingi bo'limlar PHP yordamida asosiy veb-ilovalarni qanday yaratishni qisqacha yoritadi. Bo'limda muhokama qilingan narsa sizning ilovangiz foydalanuvchi bilan bog'lanishi va u bajargan harakatlariga yoki u kiritgan parametrlarga qarab shakllantirishi uchun etarli emas. Nima etishmayapti? Foydalanuvchi ma'lumotlarini kiritish va ushbu ma'lumotlarni serverga o'tkazishni tashkil etish bo'yicha etarli bilim yo'q. Xo'sh, siz allaqachon serverda olingan ma'lumotlarni dasturiy ravishda qayta ishlash haqida asosiy bilimlarga ega bo'lishingiz kerak.

HTTP so'rov usullari va ularning parametrlari

Har qanday dinamik veb-ilova foydalanuvchi tomonidan kiritilgan parametrlarga yoki mijoz tomonidan bajarilgan harakatlarga muvofiq javob beradi. Server bilan bog'lanish ko'pincha ikki turdagi so'rovlarga to'g'ri keladi: GET usuli yoki POST usulidan foydalanish. Ushbu ikki turdagi so'rovlar o'rtasidagi farqlar haqida bir necha so'z.

GET usuli:

    Parametrlar HTTP so'rovi sarlavhasida uzatiladi, shuning uchun ular buyruq satrida ko'rinadi va bunday so'rov xatcho'plar sifatida saqlanishi mumkin. Sarlavhaning umumiy uzunligi cheklanganligi sababli, GET yordamida uzatiladigan parametrlar soni va uzunligi ham cheklangan.

    Ketma-ket bajarilgan bir nechta bir xil GET so'rovlarining natijalari bir xil bo'lishi kerak deb ishoniladi.

POST usuli:

    So'rov parametrlari HTTP so'rovining asosiy qismida uzatiladi, shuning uchun ular buyruq satrida mavjud emas. Parametrlarning soni va hajmi cheklanmagan.

    Bir nechta bir xil POST so'rovlarining natijalari turli qiymatlarni qaytarishi mumkin, chunki ular maqsadli ob'ekt xususiyatlarini o'zgartirishi mumkin.

GET usulidan maqsadli resursning ma'lumotlar tuzilmalariga o'zgartirishlar kiritishning hojati bo'lmaganda parametrlar bo'yicha axborot resursi tarkibini olish uchun foydalanish kerak va so'rovni (URL) xatcho'plarda saqlash mantiqiy. GET usuli POST usuli yordamida o'xshash so'rovlarga qaraganda tezroq bo'lishi mumkin.

POST usulidan serverga uzatilgan parametrlarni URL manzilidan yashirish kerak bo'lganda foydalanish kerak. Ushbu usul, shuningdek, parametrlarda (so'rovning tanasida) ushbu o'zgarishlarning tavsifini o'tkazib, maqsadli resurs tarkibiga o'zgartirish kiritish so'rovlarida ham qo'llanilishi kerak.

Resursga yoʻl?parameter1=value1¶meter2=value2&…

Agar sizda parametrlarni to'ldirish uchun maxsus HTML formangiz bo'lmasa, test parametrlarini to'g'ridan-to'g'ri brauzer buyruq satriga o'tkazish orqali PHP ilovangiz ishini disk raskadrovka qilishingiz mumkin, masalan:

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

Server tomonidagi so'rov parametrlariga kirish uchun siz global massivlardan foydalanishingiz kerak $_GET Va $_POST mos ravishda. Agar ilovangiz qaysi usul bilan kirishiga ahamiyat bermasa, siz massivdan foydalanishingiz kerak $_REQUEST, bu $_GET va $_POST massivlarining ma'lumotlarini birlashtiradi, masalan, quyidagicha:

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

Ushbu misolda dastur "sql" parametri o'tkazilganligini aniqlaydi: agar shunday bo'lsa, u o'z qiymatini mos keladigan o'zgaruvchiga beradi, agar bo'lmasa, unga bo'sh qiymat beradi.

HTML formasi orqali HTTP so'rov parametrlarini aniqlash

Albatta, parametrlarni to'g'ridan-to'g'ri brauzer buyruq qatorida qo'lda aniqlash juda qulay emas. Ushbu usul veb-ilovalar bir-biri bilan aloqa qilganda HTTP so'rovlarini dasturiy ravishda bajarish uchun javob beradi. Mijoz tomonidan dastlabki ma'lumotlarni tekshirishni kiritish va amalga oshirish uchun siz HTML shakllari va . Quyida matn parametri (qiymati) kiritiladigan, keyinchalik POST usuli parametri sifatida serverga uzatiladigan eng oddiy shaklning namunasi keltirilgan.

usuli "post" harakat =’sql.php’ > SQL:

Shakl elementining metod atributi ma'lumotlarni serverga (olish yoki post) uzatish usulini belgilaydigan usulni belgilaydi. Harakat atributi belgilaydi php fayli, bu so'rovni qayta ishlaydi. Agar ishlov beruvchi joriy fayl bo'lishi kerak bo'lsa, unda action atributini qo'shish shart emas. Qiymati HTTP so'rovi parametri sifatida o'tkazilishi kerak bo'lgan barcha elementlar uchun nom atributi uchun noyob qiymatni belgilashingiz kerak. Bu atribut qiymati nomi bo'ladi indeks$_GET, $_POST yoki $_REQUEST massivlarida (yuqoridagi misolga qarang). Bir tugmani bosish topshirish formani barcha kiritilgan qiymatlar bilan serverga yuboradi.