Php მიიღეთ ყველა მიიღეთ პარამეტრი. გარე ცვლადები (ცვლადები PHP-ს გარეთ). ცვლადების გადაცემა PHP-ზე POST მეთოდის გამოყენებით

PHP POST მოთხოვნის შესრულების პირველი მეთოდი არის file_get_contents გამოყენება. მეორე მეთოდი გამოიყენებს fread-ს რამდენიმე სხვა ფუნქციასთან ერთად. ორივე ვარიანტი იყენებს stream_context_create ფუნქციას მოთხოვნის სათაურის საჭირო ველების შესავსებად.

კოდის ახსნა

$sPD ცვლადი შეიცავს გადასაცემად მონაცემებს. ის უნდა იყოს HTTP მოთხოვნის სტრიქონის ფორმატში, ამიტომ ზოგიერთი სპეციალური სიმბოლო უნდა იყოს კოდირებული.

როგორც file_get_contents ფუნქციაში, ასევე fread ფუნქციაში გვაქვს ორი ახალი პარამეტრი. პირველი არის use_include_path. ვინაიდან ჩვენ ვაკეთებთ HTTP მოთხოვნას, ეს იქნება ყალბი ორივე მაგალითში. როდესაც დაყენებულია true-ზე ადგილობრივი რესურსის წასაკითხად, ფუნქცია მოძებნის ფაილს include_path-ზე.

მეორე პარამეტრი არის კონტექსტი, რომელიც სავსეა stream_context_create-ის დაბრუნებული მნიშვნელობით, რომელიც იღებს $aHTTP მასივის მნიშვნელობას.

file_get_contents გამოყენება POST მოთხოვნის გასაკეთებლად

POST მოთხოვნის გასაგზავნად file_get_contents PHP-ში, თქვენ უნდა გამოიყენოთ stream_context_create, რათა ხელით შეავსოთ სათაურის ველები და მიუთითოთ რომელი "wrapper" გამოიყენოთ - ამ შემთხვევაში HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST მონაცემები $aHTTP = array("http" => // Wrapper, რომელიც იქნება გამოყენებული array("method" => "POST", // მოთხოვნის მეთოდი // მოთხოვნის სათაურები დაყენებულია ქვემოთ "header" => "კონტენტი - ტიპი: განაცხადი/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $contents = file_get_contents ($sURL, false, $context); echo $შინაარსი;

Fread-ის გამოყენება POST მოთხოვნების შესასრულებლად

შეგიძლიათ გამოიყენოთ fread ფუნქცია POST მოთხოვნის შესაქმნელად. შემდეგი მაგალითი იყენებს stream_context_create-ს საჭირო HTTP მოთხოვნის სათაურების შესაქმნელად:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST მონაცემები $aHTTP = array("http" => // შესაფუთი, რომელიც იქნება გამოყენებული array("method" => "POST", // მოთხოვნის მეთოდი // მოთხოვნის სათაურები დაყენებულია ქვემოთ "header" => "შინაარსი - ტიპი: განაცხადი/x-www-form-urlencoded", "content" => $sPD)); $context = stream_context_create($aHTTP); $handle = fopen($sURL, "r", false, $context); $contents = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $შინაარსი;

GET მოთხოვნების გაკეთება PHP-ით

ახლა ჩვენ ყურადღებას გავამახვილებთ fread-ისა და file_get_contents-ის გამოყენებაზე HTTP-ისა და HTTPS-ის საშუალებით ინტერნეტიდან კონტენტის ჩამოსატვირთად. ამ სტატიაში აღწერილი მეთოდების გამოსაყენებლად, თქვენ უნდა ჩართოთ fopen wrappers ვარიანტი. ამისათვის თქვენ უნდა დააყენოთ allow_url_fopen პარამეტრი On-ზე php.ini ფაილში.

PHP-ში POST და GET მოთხოვნების შესრულება გამოიყენება ვებსაიტებში შესასვლელად, ვებ გვერდის შინაარსის მისაღებად ან აპლიკაციების ახალი ვერსიების შესამოწმებლად. ჩვენ განვიხილავთ, თუ როგორ უნდა გააკეთოთ მარტივი HTTP მოთხოვნები.

fread-ის გამოყენება ფაილების ინტერნეტით ჩამოსატვირთად ან მისაღებად

გახსოვდეთ, რომ ვებ გვერდის კითხვა შემოიფარგლება პაკეტის ხელმისაწვდომი ნაწილით. ასე რომ, თქვენ უნდა გამოიყენოთ stream_get_contents ფუნქცია (file_get_contents-ის მსგავსი) ან დროის მარყუჟი, რომ წაიკითხოთ შინაარსი მცირე ნაწილებად, სანამ ფაილის ბოლომდე არ მიიღწევა:

PHP POST მოთხოვნის დამუშავების შემთხვევაში, fread ფუნქციის ბოლო არგუმენტი უდრის ფრაგმენტის ზომას. როგორც წესი, ის არ უნდა იყოს 8192-ზე მეტი (8*1024).

მიღებიდან (9)

რა არის "ნაკლები კოდის" გზა პარამეტრების მისაღებად URL შეკითხვის სტრიქონიდან, რომელიც ასეა ფორმატირებული?

www.mysite.com/category/subcategory?myqueryhash

გამომავალი უნდა იყოს: myqueryhash

მე ვიცი ამის შესახებ:

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

პასუხები

ეს კოდი და აღნიშვნა ჩემი არ არის. Evan K წყვეტს ამავე სახელწოდების მრავალმნიშვნელოვან სამუშაოს მომხმარებლის მიერ განსაზღვრული ფუნქციით;) აღებული:

ზემოთ მოყვანილი მაგალითი გამოდის:

გამარჯობა ჰანეს!

თუ გსურთ მიიღოთ შეკითხვის მთელი სტრიქონი:

$_SERVER["QUERY_STRING"]

ასევე, თუ თქვენ ეძებთ მიმდინარე ფაილის სახელს მოთხოვნის სტრიქონთან ერთად, უბრალოდ გჭირდებათ შემდეგი

საბაზისო სახელი ($_SERVER["REQUEST_URI"])

ეს მოგცემთ ინფორმაციას, როგორიცაა შემდეგი მაგალითი

file.php? arg1 = ღირებულება & arg2 = მნიშვნელობა

და თუ თქვენ ასევე გჭირდებათ ფაილის სრული გზა დაწყებული root-დან, როგორიცაა /folder/folder2/file.php?arg1=val&arg2=val, უბრალოდ წაშალეთ basename() ფუნქცია და უბრალოდ გამოიყენეთ გადაფარვა.

$_SERVER["REQUEST_URI"]

მადლობა @K. შაჰზადი ეს დაგეხმარებათ, როდესაც გსურთ შეკითხვის სტრიქონის გადაწერა ყოველგვარი გადაწერის დამატებების გარეშე. ვთქვათ თქვენ გადაწერეთ /ტესტი/? X = y index.php-ში? Q = ტესტი & x = y და გსურთ მიიღოთ შეკითხვის სტრიქონი.

ფუნქცია get_query_string())($arr = აფეთქება("?",$_SERVER["REQUEST_URI"]); if (count($arr) == 2)( return ""; )else( return "?".end( $ arr)"
"; ) ) $query_string = get_query_string();

ამის გაკეთების გზა PHP არის parse_url ფუნქციის გამოყენება, რომელიც აანალიზებს URL-ს და აბრუნებს მის კომპონენტებს. შეკითხვის სტრიქონის ჩათვლით.

$url = "www.mysite.com/category/subcategory?myqueryhash"; echo parse_url($url, PHP_URL_QUERY); # გამომავალი "myqueryhash"

აქ არის ჩემი ფუნქცია REFERRER შეკითხვის სტრიქონის ნაწილების აღდგენისთვის.

თუ დარეკვის გვერდს უკვე ჰქონდა მოთხოვნის სტრიქონი თავისთავად, და თქვენ უნდა დაბრუნდეთ ამ გვერდზე და გსურთ გაგზავნოთ ზოგიერთი, არა ყველა, ამ $_GET ვარიაციებიდან (მაგ., გვერდის ნომერი).

მაგალითი: Referrer-ის მოთხოვნის სტრიქონი იყო?foo=1&bar=2&baz=3 დარეკვისას refererQueryString("foo" , "baz") აბრუნებს foo=1&baz=3" :

ფუნქცია refererQueryString(/* var args */) (//დააბრუნეთ ცარიელი სტრიქონი, თუ არ არის რეფერენტი ან $_GET ვარიაციები არ არის ხელმისაწვდომი: if (!isset($_SERVER["HTTP_REFERER"]) || ცარიელი($_SERVER["HTTP_REFERER" " "]) || ცარიელი(parse_url($_SERVER["HTTP_REFERER"], PHP_URL_QUERY))) (დაბრუნება ""; ) //მიიღეთ მიმართვის URL-ის მოთხოვნა (რაღაც "threadID=7&page=8") $refererQueryString = parse_url ( urldcode ($_SERVER["HTTP_REFERER"]), PHP_URL_QUERY); //რომელი მნიშვნელობების ამოღება გსურთ? (თქვენ გადაიტანეთ მათი სახელები ცვლადებად.) $args = func_get_args(); //მიიღეთ "" სტრიქონები რეფერენტის URL: $pairs = explode("&",$refererQueryString); //სტრიქონი, რომელსაც მოგვიანებით დააბრუნებთ: $return = ""; //გააანალიზეთ მოძიებული სტრიქონები და მოძებნეთ საინტერესოები: foreach ($pairs როგორც $pair ) ( $keyVal = explode("=",$pair); $key = &$keyVal; $val = urlencode($keyVal); //თუ სახელი გადაიტანეთ როგორც arg, მიამაგრეთ მიმდინარე წყვილი სტრიქონის დასაბრუნებლად : if( in_array($key,$args)) ($return .= "&". $key . "=" .$val; ) ) //აქ არის თქვენი დაბრუნებული "key=value" წყვილები, რომლებიც გაერთიანებულია "&"-ით. ": return ltrim($return,"&"); ) //თუ თქვენი რეფერენტი იყო "page.php?foo=1&bar=2&baz=3" //და გსურთ სათაური() დააბრუნოთ "page.php?foo=1&baz=3" //(არა "ზოლი", მხოლოდ foo და baz), შემდეგ ვრცელდება: header("Location: page.php?".refererQueryString("foo","baz"));

Microsoft Support აცხადებს: "URL-ის მაქსიმალური სიგრძე არის 2083 სიმბოლო Internet Explorer-ში."

IE-ს უკვე დიდი ხანია აქვს პრობლემები URL-ებთან. Firefox, როგორც ჩანს, კარგად მუშაობს >4k სიმბოლოზე.

ვებ პროგრამირება უმეტესწილად არის მხოლოდ მომხმარებლის მიერ შეყვანილი სხვადასხვა მონაცემების დამუშავება - ანუ HTML ფორმების დამუშავება.
ალბათ არ არსებობს PHP-ის მსგავსი სხვა ენა, რომელიც ასე გაგიადვილებთ დამუშავებას და ანალიზს, ე.ი. ცვლადები, რომლებიც მოვიდა (მომხმარებლის ბრაუზერიდან). ფაქტია, რომ ყველა საჭირო შესაძლებლობა ჩაშენებულია PHP ენაში, ასე რომ თქვენ არც კი გჭირდებათ ფიქრი HTTP პროტოკოლის მახასიათებლებზე და იმაზე ფიქრი, როგორ გაგზავნოთ და მიიღოთ POST ფორმები ან თუნდაც ჩამოტვირთოთ ფაილები. PHP დეველოპერებს აქვთ უზრუნველყოფილია ყველაფრისთვის.

აქ ჩვენ დეტალურად არ ვისაუბრებთ HTTP პროტოკოლის მექანიზმზე, რომელიც პასუხისმგებელია ბრაუზერის მონაცემების სერვერზე და უკან მიწოდებაზე; სპეციალური განყოფილება ეთმობა ამ PHP-ს და HTTP-ს. ასევე ღრმად არის განხილული HTML ფორმებთან მუშაობის პრინციპები.

ახლა ჩვენ განვიხილავთ ამ მექანიზმებს მხოლოდ გამოყენებითი თვალსაზრისით, თეორიაში ჩაღრმავების გარეშე.

მომხმარებლებისგან მონაცემების მისაღებად, ჩვენ გვჭირდება მათთან ინტერაქტიული ურთიერთქმედება.

ახლა შევეცადოთ დავწეროთ სკრიპტი, რომელიც იღებს მომხმარებლის სახელს პარამეტრებად და გამოსავალებად:

"გამარჯობა!".

პირველ რიგში, მოდით გადავხედოთ სკრიპტზე სახელის გადაცემის უმარტივეს გზას - პირდაპირ აკრიფეთ ის URL-ში ? - მაგალითად, ფორმატში name=name . აი მაგალითი:

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

ჩვენმა სკრიპტმა უნდა ამოიცნოს სახელის პარამეტრი. ანუ, მარტივად რომ ვთქვათ, სკრიპტმა (სკრიპტმა) უნდა მიიღოს სახელის პარამეტრი სახელის ცვლადის სახით და შემდეგ აჩვენოს სტრიქონი „Hello, !“ მომხმარებლის ბრაუზერში. ამის გაკეთება შეგიძლიათ ამ გზით:

ჩვენ ვწერთ სკრიპტს, რომელიც იღებს სახელის პარამეტრს და აჩვენებს შედეგს მომხმარებლის ბრაუზერში, შემდეგ კი ინახავს მას სახელწოდებით script.php:

ჩვენს მაგალითში, ჩვენ გამოვიყენეთ წინასწარ განსაზღვრული ცვლადი $_GET["name"] სახელის პარამეტრის "მიღებისთვის". ახლა, GET მოთხოვნის მეშვეობით პარამეტრის name=Sasha გადაცემით, მივიღებთ შემდეგ შედეგს:

გამარჯობა საშა!

ახლა შევეცადოთ სახელის პარამეტრი გადავიტანოთ არა ბრაუზერის მოთხოვნის სტრიქონიდან, არამედ HTML ფორმის საშუალებით. ჩვენ ვქმნით HTML დოკუმენტს შემდეგი შინაარსით:


სახელი:

ახლა მოდით შევინახოთ ეს HTML დოკუმენტი ჩვენს სატესტო სერვერზე (localhost) სახელწოდებით send.html იმავე დირექტორიაში, სადაც უკვე შენახული გვაქვს script.php სკრიპტი.

ახლა ჩვენ გავუშვით HTML დოკუმენტი ბრაუზერში:

http://localhost/send.html

შეიყვანეთ სახელი ველში და დააჭირეთ ღილაკს "GO!". ფორმა გადასცემს სახელის პარამეტრს ჩვენს script.php-ს GET მოთხოვნის მეშვეობით. თუ ყველაფერი სწორად გააკეთე და თქვენი ვებ სერვერი ნორმალურად მუშაობს, ფორმის ველში დაინახავთ შეყვანილ სახელს! ბრაუზერის მისამართების ზოლში ნახავთ გზას და სახელის პარამეტრს, რომელიც გაიარეთ.

ახლა ჩვენ უნდა გვესმოდეს, თუ როგორ შეგვიძლია გადავცეთ ბევრი პარამეტრი, დასაწყისისთვის მინიმუმ ორი.

ასე რომ, ჩვენ გვჭირდება სკრიპტი, რომ გამოვიტანოთ შემდეგი:

"გამარჯობა! ბებერი ხარ!"

ანუ სკრიპტს უნდა გადავცეთ 2 პარამეტრი: სახელი და ასაკი.

ახლა ჩვენ დავწერთ script.php-ს, რომელიც იღებს ორ პარამეტრს: სახელს და ასაკს, ასევე HTML დოკუმენტს ისეთი ფორმით, რომელიც გადასცემს ამ ორ პარამეტრს ჩვენს ახალ სკრიპტს:

და აქ არის HTML დოკუმენტი send.html, რომლითაც ჩვენს სკრიპტს გადავცემთ სახელსა და ასაკობრივ პარამეტრებს:



შეიყვანეთ თქვენი სახელი:

შეიყვანეთ ასაკი:



ახლა ჩვენი სკრიპტი იღებს ორ პარამეტრს სახელსა და ასაკს და აჩვენებს შედეგს ბრაუზერში ფორმატით: "გამარჯობა, ბებერი ხარ!"

ყურადღება მიაქციეთ ბრაუზერის მისამართის ზოლს სკრიპტზე პარამეტრების გადაცემის შემდეგ, ის ასე გამოიყურება (კირილიცის URL კოდირების გარეშე):

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

თქვენი თარჯიმნის პარამეტრებიდან გამომდინარე, თქვენი HTML ფორმებიდან მონაცემებზე წვდომის რამდენიმე გზა არსებობს. Აი ზოგიერთი მაგალითი:

//ფორმაში, get მეთოდის გამოყენებით, ვაგზავნით მნიშვნელობას 1 ფარული ველის მეშვეობით Send a request

get.php ფაილი

Php მოთხოვნის პოსტი

Php პოსტის მოთხოვნა ასევე იგზავნება ფორმის საშუალებით, მხოლოდ ატრიბუტი ფორმის ტეგში იქნება method="post" . და ჩვენ მივიღებთ მონაცემებს მითითებულ ფაილში პოსტის $_POST["ძებნა"] მასივიდან და მაშინვე მივცემთ მაგალითს.

დავალება: გაგზავნეთ მონაცემები index.php-დან POST მეთოდის გამოყენებით სერვერზე get.php ფაილში და მიიღეთ უკან, თუ მონაცემთა გაგზავნის ველი ცარიელია, აჩვენეთ შეტყობინება ცარიელი ველის შესახებ. დავიწყოთ ამოხსნა index.php-ით

საძიებო მოთხოვნა

შეავსეთ მოთხოვნის ველი

შეყვანილი შეკითხვა:

Მოთხოვნის გაგზავნა

get.php ფაილი

AJAX Array Passing

მოდით შევასრულოთ იგივე დავალება ajax-ის გამოყენებით. სინამდვილეში, ajax არის JavaScript-თან დაკავშირებული ტექნოლოგია, მაგრამ როგორც სერვერზე მონაცემების გადაცემის შენიშვნის ნაწილი, ჩვენ ასევე შევეხებით ამ ტექნოლოგიას. რა თქმა უნდა, ajax არის ცალკე სტატიის თემა. მოთხოვნის პროცესის დროს ჩვენ ასევე გამოვაჩენთ ჩატვირთვის ინდიკატორის gif-ს. ჩვენ ასევე გვაქვს ორი ფაილი index.php და get.php. Index.php ფაილი. არ დაგავიწყდეთ jquery-ის დაკავშირება. გთხოვთ გაითვალისწინოთ, რომ gif-ის დასამალად, როდესაც გვერდი პირველად ჩაიტვირთება, მიანიჭეთ სტილის ჩვენება: არცერთი ყუთის ბლოკს

$(დოკუმენტი).ready(function())( //ჩვენ ვამაგრებთ მოვლენას გაგზავნის ღილაკზე $(".submit"). დააწკაპუნეთ(function())($.ajax(( //როგორ გადავიტანთ მონაცემთა ტიპს : "GET", / /სადაც გადავცემთ url-ს: "get.php", //რა მონაცემებს გადავცემთ მონაცემებს: (დროშა: 1), //event ajax-ის გაგზავნამდე გაგზავნამდე: ფუნქცია())( //გიფ-ის ჩვენება $(".box").ჩვენება(); ), //მოვლენა პასუხის მიღების შემდეგ, //მიიღეთ მასივი მონაცემთა წარმატებაში: ფუნქცია(მონაცემები)( //დამალე gif $(".box").დამალე (); var html = ""; //f- i JSON.parse თარგმნის json მონაცემებს ობიექტად var dt=JSON.parse(data); for (var i = 0; i

get.php ფაილი. ჩვენ ვიღებთ მონაცემებს get array-დან ფაილში და გადავცემთ მასივს php-დან Javascript-ზე. მასივის php-ზე js-ზე გადასაცემად, საჭიროა მისი გადაყვანა json ფორმატში. ამისათვის ჩვენ ვიყენებთ php ფუნქციას json_encode. გადაკოდირების შემდეგ, json იგზავნება php საშუალებებით, კონკრეტულად ექოს გამოძახებით.

მე მაქვს URL-ის სტრუქტურა შეკითხვის სტრიქონით და პარამეტრით, რომელსაც ეწოდება პოზიცია.

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

ასევე მაქვს ჩამოსაშლელი ჩამოსაშლელი ჩამოსაშლელი ფორმა ფორმის არჩევა სახელის პოზიციით.

აირჩიეთ პროფესიის ადმინისტრატორი აირჩიეთ თანამდებობა ქსელის ადმინისტრატორი

როდესაც მომხმარებელი აკეთებს არჩევანს, ის აგზავნის პარამეტრის მნიშვნელობებს მოქმედების ატრიბუტზე, აირჩიეთ სახელი ==პოზიცია, როგორც პარამეტრი, რომელიც გამოიყენებს შეკითხვის სტრიქონში.

ჩემი შეკითხვაა, როგორ მივიღო წვდომა ფორმის შერჩევის მნიშვნელობებზე მოთხოვნის სტრიქონის მნიშვნელობებისგან განცალკევებით?

მე ვიყენებ _GET მეთოდს შეკითხვის სტრიქონის პარამეტრიდან მნიშვნელობის გამოსაძახებლად.

$position = isset($_GET["პოზიცია"]) ? ($_GET["პოზიცია"]) : "";

ცხადია, ეს თავის მნიშვნელობას იღებს URL სტრუქტურიდან და არა ფორმის ელემენტიდან. ან იქნებ ასეა, არ ვარ დარწმუნებული. მაგრამ მისი ტესტირებისას, როგორც ჩანს, მივედი დასკვნამდე, რომ ის იღებს მას URL-ით და არა ფორმით.

როგორ შემიძლია წვდომა ფორმის შერჩეულ მნიშვნელობაზე ჩემს PHP-ში შედარებისას?

განახლება

მე მაქვს პრობლემა სათაურში მითითებულ კანონიკურ URL-თან.

ასეც უნდა იყოს

ერთადერთი განსხვავება არის - და + შეკითხვის სტრიქონში.

ჩემს მოთხოვნის ყველა სტრიქონს არ აქვს +. ზოგს აქვს -. მაგრამ მე ვაჩვენებ კონტენტს ორივე URL-ზე, მიუხედავად იმისა აქვს თუ არა მას - ან +. ნებისმიერ შემთხვევაში, ორივე URL იღებს იმავე გვერდის შინაარსს.

მაგრამ ვინაიდან კანონიკური იქმნება დინამიურად URI-დან და არა ფორმის ელემენტის მნიშვნელობიდან, ორივე შინაარსის გვერდზე არის 2 განსხვავებული კანონიკური სიმბოლო.

_Get('value') გამოყენებით იბრუნებს მნიშვნელობას მოთხოვნის სტრიქონიდან ფორმის ელემენტის ნაცვლად. მე ვიცი ეს იმიტომ, რომ ფორმის ელემენტის მნიშვნელობას აქვს სივრცე ქსელის ადმინისტრატორს შორის, რომელიც ურლენკოდირდება, როდესაც ფორმა იგზავნება როგორც ქსელი+ადმინისტრატორი. ასე რომ, თუ შევადარებ ფორმის ელემენტის მნიშვნელობას, შემიძლია დავაყენო სწორი კანონიკური.