Php barcha get parametrlarini oladi. Tashqi o'zgaruvchilar (PHP dan tashqaridagi o'zgaruvchilar). O'zgaruvchilarni POST usuli yordamida PHP ga o'tkazish

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, ikkala misolda ham u 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" => // Foydalaniladigan o'rash 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. Shunday qilib, faylning oxirigacha kontentni kichikroq bo'laklarga bo'lib o'qish uchun stream_get_contents funktsiyasidan (file_get_contents ga o'xshash) yoki while tsiklidan foydalanishingiz kerak:

PHP POST so'rovini qayta ishlashda fread funksiyasining oxirgi argumenti fragment hajmiga teng bo'ladi. Qoida tariqasida, u 8192 (8 * 1024) dan katta bo'lmasligi kerak.

olishdan (9)

Bu kabi formatlangan URL so'rovlar qatoridan parametrlarni olishning "kamroq kod" usuli qanday?

www.mysite.com/category/subcategory?myqueryhash

Chiqish quyidagicha bo'lishi kerak: myqueryhash

Men bu haqda bilaman:

www.mysite.com/category/subcategory?q=myquery

Javoblar

Bu kod va belgi meniki emas. Evan K bir xil nomdagi ko'p qiymatli ishni foydalanuvchi tomonidan belgilangan funksiya bilan hal qiladi;) quyidagilardan olingan:

Yuqoridagi misol quyidagi natijalarni beradi:

Salom Hannes!

Agar siz butun so'rovlar qatorini olishni istasangiz:

$_SERVER["QUERY_STRING"]

Bundan tashqari, agar siz so'rovlar qatori bilan birga joriy fayl nomini izlayotgan bo'lsangiz, sizga quyidagilar kerak bo'ladi

Asosiy nom($_SERVER["REQUEST_URI"])

Bu sizga quyidagi misol kabi ma'lumotlarni beradi

file.php? arg1 = qiymat va arg2 = qiymat

Agar sizga ildizdan boshlanadigan faylga toʻliq yoʻl kerak boʻlsa, masalan, /folder/folder2/file.php?arg1=val&arg2=val, shunchaki basename() funksiyasini olib tashlang va shunchaki qoplamadan foydalaning.

$_SERVER["REQUEST_URI"]

Rahmat @K. Shahzad Bu so'rovlar qatorini hech qanday qo'shimchalarsiz qayta yozishni xohlaganingizda yordam beradi. Aytaylik, siz /test/ni qayta yozdingizmi? index.php da X = y? Q = test & x = y va siz so'rovlar qatorini olishni xohlaysiz.

Get_query_string())( $arr = explode("?",$_SERVER["REQUEST_URI"]); if (count($arr) == 2)( return ""; )else( return "?".end( $ arr)."
"; ) ) $query_string = get_query_string();

Buning uchun PHP usuli URLni tahlil qiluvchi va uning komponentlarini qaytaruvchi parse_url funksiyasidan foydalanishdir. Shu jumladan so'rovlar qatori.

$url = "www.mysite.com/category/subcategory?myqueryhash"; echo parse_url($url, PHP_URL_QUERY); # chiqish "myqueryhash"

Mana REFERRER so'rovlar qatorining qismlarini tiklash uchun mening funksiyam.

Agar qo'ng'iroq qiluvchi sahifada allaqachon o'ziga xos so'rovlar qatori bo'lsa va siz o'sha sahifaga qaytishingiz kerak bo'lsa va o'sha $_GET parametrlarining hammasini emas, bir qismini yubormoqchi bo'lsangiz (masalan, sahifa raqami).

Misol: Referrer so'rovlar qatori edi?foo=1&bar=2&baz=3 chaqiruvchi refererQueryString("foo" , "baz") foo=1&baz=3" ni qaytaradi:

Function refererQueryString(/* var args */) ( //Agar referer mavjud boʻlmasa yoki $_GET mavjud boʻlmasa, boʻsh satrni qaytaring: agar (!isset($_SERVER["HTTP_REFERER"]) || empty($_SERVER["HTTP_REFERER) " "]) || empty(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) ( ""; qaytaring) //Refererning URL so'rovini olish ("threadID=7&page=8" kabi) $refererQueryString = parse_url ( urldecode($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //Qaysi qiymatlarni chiqarmoqchisiz? (Ularning nomlarini o'zgaruvchi sifatida ko'rsatgansiz.) $args = func_get_args(); //"" satrlarini chiqarib oling of referer" ning URL manzili: $pairs = explode("&",$refererQueryString); //Keyinroq qaytasiz satr: $return = ""; //Olingan satrlarni tahlil qiling va qiziqtirganlarini qidiring: foreach ($pairs) sifatida $pair ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //Agar siz nomni arg sifatida o'tkazgan bo'lsangiz, qaytarish qatoriga joriy juftlikni biriktiring : if( in_array($key,$args)) ( $return .= "&". $key . "=" .$val; ) ) //Mana "&" bilan yopishtirilgan qaytarilgan "kalit=value" juftlari. ": return ltrim($return,"&"); ) //Agar sizning refereringiz "page.php?foo=1&bar=2&baz=3" bo'lsa //va siz "page.php?foo=1&baz=3" ga sarlavha() ni qaytarishni xohlasangiz //("bar" yo'q, faqat foo va baz), keyin amal qiling: header("Joylashuv: page.php?".refererQueryString("foo","baz"));

Microsoft qo'llab-quvvatlash markazi: "Maksimal URL uzunligi Internet Explorer-da 2083 belgidan iborat."

IE uzoq vaqtdan beri URL manzillari bilan bog'liq muammolarga duch kelmoqda. Firefox> 4k belgilar bilan yaxshi ishlaydi.

Ko'pincha veb-dasturlash - bu foydalanuvchi tomonidan kiritilgan turli xil ma'lumotlarni qayta ishlash, ya'ni HTML shakllarini qayta ishlash.
Ehtimol, PHP kabi qayta ishlash va tahlil qilish vazifasini siz uchun juda osonlashtiradigan boshqa til yo'q, ya'ni. kelgan o'zgaruvchilar (foydalanuvchi brauzeridan). Gap shundaki, barcha kerakli imkoniyatlar PHP tiliga o‘rnatilgan, shuning uchun siz HTTP protokolining imkoniyatlari haqida o‘ylashingiz va POST shakllarini qanday yuborish va qabul qilish, hattoki fayllarni yuklab olish haqida o‘ylashingiz shart emas.PHP ishlab chiquvchilari. hamma narsa bilan ta'minlangan.

Bu erda biz ma'lumotlarni brauzerdan serverga va orqaga etkazish uchun mas'ul bo'lgan HTTP protokoli mexanizmi haqida batafsil to'xtalib o'tmaymiz, maxsus bo'lim ushbu PHP va HTTP-ga bag'ishlangan. HTML shakllari bilan ishlash tamoyillari ham chuqur muhokama qilinadi.

Endi biz ushbu mexanizmlarni nazariyaga kirmasdan, faqat amaliy nuqtai nazardan ko'rib chiqamiz.

Foydalanuvchilardan ma'lumotlarni olish uchun biz ular bilan interaktiv aloqaga muhtojmiz.

Endi parametr va chiqish sifatida foydalanuvchi nomini oladigan skript yozishga harakat qilaylik:

"Salom, !".

Birinchidan, skriptga nom berishning eng oddiy usulini ko'rib chiqamiz - uni URL manziliga ? - masalan, name=name formatida. Mana bir misol:

http://localhost/script.php?name=name

Bizning skriptimiz nom parametrini tan olishi kerak. Ya'ni, sodda qilib aytganda, skript (skript) nom parametrini nom o'zgaruvchisi ko'rinishida qabul qilishi va keyin foydalanuvchi brauzerida "Salom, !" qatorini ko'rsatishi kerak. Buni shunday qilishingiz mumkin:

Biz nom parametrini oladigan va natijani foydalanuvchi brauzerida ko'rsatadigan skript yozamiz va keyin uni script.php nomi ostida saqlaymiz:

Bizning misolimizda nom parametrini "qabul qilish" uchun oldindan belgilangan $_GET["name"] o'zgaruvchisidan foydalandik. Endi GET so'rovi orqali name=Sasha parametrini o'tkazish orqali biz quyidagi natijaga erishamiz:

Salom Sasha!

Endi nom parametrini brauzer so'rovlar qatoridan emas, balki HTML formasi orqali o'tkazishga harakat qilaylik. Biz quyidagi tarkibga ega HTML hujjat yaratamiz:


Nomi:

Keling, ushbu HTML hujjatni test serverimizda (localhost) send.html nomi ostida skript.php skriptini allaqachon saqlagan katalogga saqlaymiz.

Endi biz HTML hujjatni brauzerda ishga tushiramiz:

http://localhost/send.html

Maydonga nomni kiriting va “GO!” tugmasini bosing. Shakl nom parametrini GET so'rovi orqali bizning script.php skriptimizga o'tkazadi. Agar siz hamma narsani to'g'ri bajargan bo'lsangiz va veb-serveringiz normal ishlayotgan bo'lsa, forma maydonida siz kiritgan nomni ko'rasiz! Brauzerning manzil satrida siz o'tgan yo'l va nom parametrini ko'rasiz.

Endi biz ko'p parametrlarni qanday o'tkazishimiz mumkinligini tushunishimiz kerak, kamida ikkitadan boshlash uchun.

Shunday qilib, biz quyidagilarni chiqarish uchun skriptga muhtojmiz:

"Salom! Siz qarib qoldingiz!"

Ya'ni, biz skriptga 2 parametrni o'tkazishimiz kerak: ism va yosh.

Endi biz ikkita parametrni qabul qiladigan script.php ni yozamiz: ism va yosh, shuningdek, ushbu ikki parametrni yangi skriptimizga o'tkazadigan formaga ega HTML hujjat:

Mana send.html HTML hujjati, uning yordamida biz skriptimizga nom va yosh parametrlarini o'tkazamiz:



Ismingizni kiriting:

Yoshni kiriting:



Endi bizning skriptimiz nomi va yoshi ikkita parametrni oladi va natijani brauzerda quyidagi formatda ko'rsatadi: "Salom, qarimisan!"

Parametrlarni skriptga o'tkazgandan so'ng brauzerning manzil satriga e'tibor bering, u shunday ko'rinadi (kirilcha URL kodlashsiz):

http://localhost/script.php?name=Sasha&age=23

Tarjimon sozlamalaringizga qarab, HTML formalaringizdagi ma'lumotlarga kirishning bir necha yo'li mavjud. Mana bir nechta misollar:

//Formada get usulidan foydalanib, 1 qiymatini yashirin maydon orqali yuboramiz So'rov yuborish

get.php fayli

Php so'rov posti

Php post so'rovi ham forma orqali yuboriladi, faqat forma tegidagi atribut method="post" bo'ladi. Va biz ko'rsatilgan fayldagi ma'lumotlarni $_POST["search"] postidan olamiz va darhol misol keltiramiz.

Vazifa: index.php dan ma'lumotlarni POST usuli yordamida get.php faylidagi serverga yuboring va uni qaytarib oling, agar ma'lumotlarni yuborish maydoni bo'sh bo'lsa, bo'sh maydon haqida xabarni ko'rsating. Keling, yechimni index.php dan boshlaylik

Qidiruv so'rovi

So'rov maydonini to'ldiring

Kiritilgan so'rov:

So'rov yuboring

get.php fayli

AJAX massividan o'tish

Keling, xuddi shu vazifani ajax yordamida bajaramiz. Aslida, ajax JavaScript bilan bog'liq texnologiya, ammo serverga ma'lumotlarni uzatish bo'yicha eslatmaning bir qismi sifatida biz ushbu texnologiyaga ham to'xtalamiz. Albatta, ajax alohida maqola uchun mavzu. So'rov jarayonida biz yuklash indikatorining gifini ham ko'rsatamiz. Bizda ikkita index.php va get.php fayli ham bor. Index.php fayli. Jquery-ni ulashni unutmang. Esda tutingki, sahifa birinchi marta yuklanganda gif-ni yashirish uchun uslublar ko'rinishini belgilang: quti blokiga hech biri

$(document).ready(function())( //biz hodisani yuborish tugmasiga biriktiramiz $(".submit").click(function())( $.ajax(( //maʼlumotlar turini qanday oʻtkazamiz) : "GET", / /url manzilini o'tkazamiz: "get.php", //qanday ma'lumotlarni uzatamiz: (bayroq: 1), //ajaxni yuborishdan oldingi voqea beforeSend: function())( //gifni ko'rsatish $(".box").show( ); ), //javob olingandan so'ng, //ma'lumotlar muvaffaqiyatida massivni oling: function(data)( //gifni yashirish $(".box"). hide (); var html = ""; //f- i JSON.parse json ma'lumotlarini ob'ektga aylantiradi var dt=JSON.parse(data); for (var i = 0; i

get.php fayli. Biz get massividan ma'lumotlarni faylga olamiz va massivni php dan javascriptga o'tkazamiz. Massivni php-dan js-ga o'tkazish uchun uni json formatiga aylantirish kerak. Buning uchun php json_encode funksiyasidan foydalanamiz. Qayta kodlashdan so'ng, json PHP vositalari orqali yuboriladi, xususan echo chaqiradi.

Menda so'rovlar qatori va pozitsiya deb nomlangan parametrga ega URL tuzilmasi bor.

Http://computerhelpwanted.com/jobs/?occupation=administrator&position=network+administrator

Bundan tashqari, menda forma tanlash nomi pozitsiyasi bilan ochiladigan ro'yxat mavjud.

Kasb ma'murini tanlang Tarmoq ma'muri pozitsiyasini tanlang

Foydalanuvchi tanlov qilganda, u parametr qiymatlarini so'rovlar qatorida foydalanish uchun parametr sifatida select name = "pozitsiya" bilan harakat atributiga yuboradi.

Mening savolim, so'rovlar qatori qiymatlaridan alohida shakl tanlash qiymatlariga qanday kirishim mumkin?

Men so'rovlar qatori parametridan qiymatni chaqirish uchun _GET usulidan foydalanmoqdaman.

$position = isset($_GET["pozitsiya"]) ? ($_GET["pozitsiya"]) : "";

Shubhasiz, bu o'z qiymatini shakl elementidan emas, balki URL tuzilishidan oladi. Yoki shundaydir, aniq emas. Ammo uni sinab ko'rib, men uni shakl bo'yicha emas, balki URL orqali oladi degan xulosaga keldim.

PHP da solishtirganda formaning tanlangan qiymatiga qanday kira olaman?

Yangilash

Sarlavhada ko'rsatilgan kanonik URL bilan muammo bor.

Shunday bo'lishi kerak

yagona farq so'rovlar qatoridagi - va + belgilaridir.

Mening barcha so'rovlarimda + mavjud emas. Ba'zilarida -. Lekin men ikkala URLda kontentni ko'rsataman, unda - yoki + bormi. Qanday bo'lmasin, ikkala URL ham bir xil sahifa mazmunini oladi.

Ammo kanonik shakl elementi qiymatidan emas, balki URI dan dinamik ravishda yaratilganligi sababli, ikkala kontent sahifasida 2 xil kanonik belgilar mavjud.

_Get('value') dan foydalanish shakl elementi o'rniga so'rovlar qatoridan qiymatni oladi. Men buni bilaman, chunki forma elementi qiymatida tarmoq administratori oʻrtasida boʻsh joy mavjud boʻlib, forma tarmoq+administrator sifatida yuborilganda urlenkodlanadi.Shunday qilib, agar forma elementi qiymati bilan solishtirsam, toʻgʻri kanonik qiymatni oʻrnatishim mumkin.