ითხოვს პოსტი და მიიღეთ რა მოდის. სწავლის მისაღებად და პოსტ მოთხოვნებს

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

ცოტა შესახებ http.

სერვერი იღებს სამი ტიპის მოთხოვნებს: მიიღეთ, პოსტი და ხელმძღვანელი. ვებ-სერვერზე პროგრამის მოთხოვნა შემდეგია:

მიიღეთ /index.html http / 1.0

პირველი ნაწილი ეს საქმე მიიღე შეკითხვის მეთოდი, მეორე, index.html, არის მოთხოვნილი URL, მესამე, HTTP / 1.0, პროტოკოლი კლიენტის მიერ.

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

მიიღეთ მეთოდი

მოთხოვნისთანავე გამოიყენება მეთოდი. პოსტის მეთოდი გამოიყენება მხოლოდ მაშინ, როდესაც აშკარად მითითებულია ფორმის მოთხოვნით. CGI პროგრამისთვის ძალიან მნიშვნელოვანია იმის გაგება, რომ მიღების მეთოდის მოთხოვნისას, ეს ფორმები სერვერზე გადადის URL- თან ერთად. CGI მხარდაჭერა ვებ სერვერები ასლი ამ მონაცემებს გარემოს ცვლადი დაასახელა Query_String. ამის შემდეგ, CGI პროგრამით გათვალისწინებული გარემოს ცვლადი და მათი გადამუშავების მონაცემების მოპოვების შეშფოთება.

URL შეკითხვის სტრიქონიდან გამოიყურება:

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

Ნიშანი? ჰყოფს შეკითხვის სიმებიანი რესურსი URL- სგან; ნიკ და PSW - სერვერზე გადაცემული ცვლადები, Maks და Parol - მათი ღირებულებები, შესაბამისად.

პოსტი მეთოდი

პოსტის მეთოდი გამოიყენება, როდესაც იგი მკაფიოდ მითითებულია მეთოდით ატრიბუტით. მიღება მეთოდისგან განსხვავებით, პოსტი არ არის URL- ში, მაგრამ შეკითხვის ორგანოში. პოსტი შეკითხვა დიდწილად HTTP რეაგირებისთვის. პირველი ხაზი არის სტანდარტული შეკითხვის http.რომელშიც მითითებულია პოსტი მეთოდი. მას შეიძლება ჰქონდეს საჭირო დამატებითი სათაურები, რომლებიც გამოყოფილია თხოვნის ორგანოსგან.

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

არჩევანი შორის და პოსტი

ნათელია, რომ CGI პროგრამის წინ ფორმების განვითარებისას, კითხვა იქნება შემდეგი: რომელი მეთოდების გამოყენება ვრცელდება. უმეტეს შემთხვევაში, ორივე მეთოდი გამოიყენება და ორივე კარგად იმუშავებს. თუმცა, არსებობს სიტუაციები, სადაც ერთი ან სხვა მეთოდის გამოყენება გარკვეულ უპირატესობას ანიჭებს.

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

  • თუ გსურთ თქვენი პროგრამა მოუწოდა მითითებას, უპირატესობა უნდა მიეცეს მეთოდს.
  • თუ არ გსურთ თქვენი პროგრამის მიერ გადაცემული არგუმენტები სერვერის ანგარიშის ფაილში ჩაწერილი, გამოიყენეთ პოსტი მეთოდი. მაგალითად, თუ ფორმა მოითხოვს მომხმარებლის სახელითა და პაროლის მითითებას, თქვენ ნაკლებად სავარაუდოა, რომ სახელები და პაროლები შეინახება ანგარიშში. გარდა ამისა, ეს არ არის გონივრული, რომ URL- ის ნაწილი გაიაროს.
  • თუ თქვენი ფორმა მნიშვნელოვანი ზომები აქვს, ეს არ არის ტექსტური ყუთი შენიშვნებით და კომენტარებით, უნდა იქნას გამოყენებული პოსტი მეთოდი. ზოგადად, ეს შესაძლებელია და ამ შემთხვევაში, გამოიყენეთ მეთოდი, მაგრამ შემდეგ შეგიძლიათ შეზღუდოს შეზღუდვები URL- ის ზომაზე, განსხვავდება სხვადასხვა ოპერატიული სისტემა და ბრაუზერები (შეზღუდვა გარემოს ცვლადების ზომის გამო). ადვილია გამოყენების მეთოდი.
  • თუ თქვენი ფორმა შეიცავს ფაილს, გამოიყენეთ პოსტი მეთოდი. გარდა ამისა, ამ შემთხვევაში, თქვენ უნდა დააყენოთ encype ატრიბუტის ღირებულება მრავალპარტიული / ფორმის მონაცემებში.

ბრაუზერის კლიენტებს შეუძლიათ ინფორმაციის გაგზავნა ვებ-სერვერზე.

სანამ ბრაუზერი აგზავნის ინფორმაციას, ის encodes ის გამოყენებით სქემა მოუწოდა URL კოდირება. ამ წყვილთა სქემაში, სახელი / ღირებულება კომბინირებულია თანაბარი ნიშნებით, და სხვადასხვა წყვილი დაყოფილია ამპერსანდის მიერ.

NAME1 \u003d VALUE1 & NAME2 \u003d VALUE2 & NAME3 \u003d VALUE3

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

მიიღეთ მეთოდი

GET მეთოდი აგზავნის კოდირებულ მომხმარებელ ინფორმაციას გვერდზე მოთხოვნით. გვერდები და კოდირებული ინფორმაცია ერთმანეთისგან გამოყოფილია? ხელი მოაწეროს კითხვას.

http://www.test.com/index.htm?name1\u003dvalue1&name2\u003dvalue2.

  • მიიღე მეთოდი, რომელიც ქმნის ხანგრძლივ სიმრავლეს, რომელიც თქვენს სერვერზე ბრაუზერის "ადგილმდებარეობის" სფეროში არის ნაჩვენები.
  • მიიღე მეთოდი შეზღუდულია მხოლოდ 1024 სიმბოლოზე.
  • არასოდეს გამოიყენოთ მეთოდი, თუ თქვენ გაქვთ პაროლი ან სხვა კონფიდენციალური ინფორმაცია სერვერზე გაგზავნის.
  • არ შეიძლება გამოყენებულ იქნას ორობითი მონაცემების გადაცემა, როგორიცაა სერვერის სურათები ან ტექსტური დოკუმენტები.
  • მიღებულ მეთოდით გაგზავნილი მონაცემების ხელმისაწვდომობა შესაძლებელია Query_String გარემოს ცვლადის გამოყენებით.
  • PHP უზრუნველყოფს Associative $ _get array- ს ყველა გაგზავნილი ინფორმაციის მიღების მეთოდის გამოყენებით.

თუ ($ _ მიიღეთ ["სახელი"] || $ _get ["გამარჯობა". $ _get ["სახელი"]; echo "თქვენ ხართ". $ _ "ასაკი"]. "წლის"; გასასვლელი () ;

სახელი: ასაკი:

პოსტი მეთოდი

მეთოდი პოსტი. აგზავნის ინფორმაციას HTTP სათაურების მეშვეობით. ინფორმაცია encoded როგორც აღწერილია შემთხვევაში მეთოდი მიიღეთ.და მოთავსებულია სათაურში Query_string..

  • პოსტის მეთოდს არ აქვს შეზღუდვები მონაცემების ზომაზე, რომელიც გსურთ.
  • პოსტის მეთოდი შეიძლება გამოყენებულ იქნას ASCII- ს, ასევე ორობითი მონაცემების გასაგზავნად.
  • პოსტი მეთოდის მიერ გაგზავნილი მონაცემები HTTP სათაურის მეშვეობით, ამიტომ უსაფრთხოება დამოკიდებულია HTTP პროტოკოლზე. უსაფრთხო HTTP- ის გამოყენებით, შეგიძლიათ დარწმუნდეთ, რომ თქვენი ინფორმაცია დაცულია.
  • PHP უზრუნველყოფს Associative $ _post array წვდომის ყველა გაგზავნილი ინფორმაცია გამოყენებით პოსტი მეთოდი.

სცადეთ შემდეგი მაგალითი კოდის კოდის განთავსებით.

თუ ($ _ პოსტი ["NAME"] || $ _post ["ასაკი"]) (თუ (Preg_match ("[^ a-za-z" -] ", $ _ პოსტი [" სახელი "])) (იღუპება ("არასწორი სახელი და სახელი უნდა იყოს ალფა");) ECHO "მისასალმებელი". $ _Post ["NAME"]; ECHO "თქვენ ხართ $ _post [" ასაკი "]." წლის "; გასასვლელი ();

სახელი: ასაკი:

ცვლადი $ _

PHP ცვლადი $ _ შეიცავს შინაარსს $ _Get., $ _Post., ასე რომ მე. $ _Cookie.. ჩვენ განვიხილავთ ცვლადს $ _Cookie.როდესაც ჩვენ გვეუბნებიან cookies.

PHP $ _Request ცვლადი შეიძლება გამოყენებულ იქნას მიღებული მონაცემების გამოყენებით გაგზავნილი ფორმის მონაცემებისგან მიღებული მონაცემებისგან.

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

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

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

აქედან გამომდინარე, PHP- ის კონტექსტში, ამ იდეოლოგიაზე დაყრდნობით გაკეთდა შემდეგნაირად:
1. ყოველ ჯერზე PHP იწყება, Superglobal Arrays ($ _get, $ _post) შექმნილია.
2. თუ კითხვის ნიშნის დროს კითხვის ნიშანია (?). მაშინ ყველაფერი მას შემდეგ ითვლება Პარამეტრები მიიღე მოთხოვნები, რომლებიც "გასაღები" ფორმატშია წარმოდგენილი \u003d "ღირებულება" და ამპერსანდის ნიშანი (&) გამოიყენება როგორც გამყოფი
მაგალითი:
მიიღეთ /index.php?name\u003dandrey&surname\u003dhalkin
ეს არის შეკითხვის სიმებიანი, აქ 2 პარამეტრი. ეს პარამეტრები მოხვდება $ _get მასივში.
3. $ _post ივსება სხვა გზით. ამ მასივის შინაარსი ივსება "თხოვნის სათაურებისგან". ანუ, თვალს ადიდებდეს თვალს ადიდებდნენ თვალს. მთელი რუტინული, რათა შეიქმნას ასეთი სათაურები ბრაუზერში. მიუხედავად იმისა, რომ ზოგჯერ რაღაც რედაქტირებულია სათაურებში სახელმძღვანელოში.

ყველაზე ხშირად, პოსტის მოთხოვნა გამოიყენება ფორმებში (გაგზავნის მონაცემები).

მაგალითად, ჩვენ გვყავს ფორმა 2 სფეროში შესვლა და პაროლი.

წარმოიდგინეთ, რომ ჩვენ ვიყენებთ მიღებას მეთოდით. შემდეგ, ფორმის გაგზავნისას, ჩვენ მივმართავთ შემდეგ მისამართზე /login.php?login\u003dandrey&password\u003d123 ეთანხმება, რომ ეს არ არის უსაფრთხო, რომ გადაცემა ასეთი ინფორმაცია. ნებისმიერ მსურველს შეუძლია გახსნას თქვენი ბრაუზერი და დაიწყოს საიტის მისამართი. მას შეუძლია ნახოს თქვენი პაროლები და შესვლა.

მაგრამ თუ პოსტ მეთოდით მითითებული, მაშინ ჩვენ მივიღებთ შემდეგ მოთხოვნას:
Post /login.php (შესვლა \u003d ანდრეი და პაროლი \u003d 123) Whats in ფრჩხილებში იქნება გადამალული და არ შენახული ბრაუზერში.

ზოგადად, შეჯამება:
მიიღეთ გარკვეული გვერდი კონკრეტული ფორმით (დახარისხება, მიმდინარე გვერდი ბლოგზე, ძებნის სიმებიანი და ა.შ.).
პოსტი - Mandrel მონაცემები, რომელიც გავლენას არ ახდენს გვერდზე ეკრანზე, ისე, რომ ეს მონაცემები მხოლოდ სკრიპტის შესრულების შედეგს იწვევს (logins, პაროლები, საკრედიტო ბარათის ნომრები, შეტყობინებები და ა.შ.).

და კიდევ ერთი კარგი ამბავი შეიძლება კომბინირებული, მაგალითად
Post /index.php?page\u003dlogin (შესვლა \u003d Andrey & Password \u003d 123) მე ვფიქრობ, რომ მე უკვე ავუხსენი, რომ აღმოჩნდება და რა პარამეტრებს, რომელთა მასივი დაეცემა.

თანამედროვე ვებ რესურსები არ არის მხოლოდ ინფორმაციისთვის ინფორმაციის მიწოდება, არამედ მასთან ურთიერთქმედება. მომხმარებელთან ურთიერთქმედება, თქვენ უნდა მიიღოთ გარკვეული ინფორმაცია. მონაცემების მოპოვების რამდენიმე მეთოდი, ძალიან ხშირია მეთოდები. მიიღეთ. და პოსტი.. და შესაბამისად ბ Php. ამ მონაცემთა გადაცემის მეთოდების მხარდაჭერა არსებობს მიიღეთ. და პოსტი.. მოდი ვნახოთ, როგორ ეს მეთოდები მუშაობს.
მიიღეთ მეთოდიმონაცემი მიიღეთ. გადაგზავნილი ინფორმაციის მიწოდების შესახებ მოქმედი სცენარის URL მისამართით. ახსნა-განმარტებისთვის ეს მეთოდი აკრიფეთ Resource URL მისამართების ბარი მისამართების ბარი და დაამატეთ კითხვა პირველი (?) და შემდეგ ნომერი num \u003d 10. მაგალითად

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


Თუ თქვენ გაქვთ ადგილობრივი სერვერი, მაშინ, როგორც წესი, დომენი იქნება ლოკალური, და შემდეგ წინა შესვლის გამოიყურება

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


ამ შემთხვევაში, ჩვენ გადავცემთ ნომრის პარამეტრს 10-მდე. შემდეგ პარამეტრების დამატება, სკრიპტი უნდა იყოს გამოყენებული - Ampersant (&), მაგალითად

http: //omure.ru/script.php? num \u003d 10 & type \u003d new & v \u003d ტექსტი


ამ შემთხვევაში, ჩვენ გადავედით სამი პარამეტრი სკრიპტში: რიცხვი 10-ის ღირებულებით, "ახალი" და V ღირებულებით "ტექსტური" ღირებულებით.
სცენარის ამ პარამეტრების მისაღებად თქვენ უნდა გამოიყენოთ ჩაშენებული მასივი. $ _Get. $ _Get ["Num"], $ _get ["ტიპი"], $ _ მიიღეთ ["V"]. ეს მასივი ელემენტები შეიცავს გადაცემულ პარამეტრების ღირებულებებს. ამ მაგალითის დემონსტრირება, Script.php ფაილი შემდეგნაირად.



შემოწმების მეთოდი PHP- ში


echo ($ _get ["Num"]. "
");
echo ($ _get ["ტიპი"]. "
");
echo ($ _get ["V"]);
?>


ახლა მოვუწოდებთ ამ ფაილს ბრაუზერში

http: //at/script.php? num \u003d 10 & type \u003d new & v \u003d ტექსტი


და თქვენ ნახავთ გადაცემულ პარამეტრებს ბრაუზერის ფანჯარაში. მაგრამ თუ ამ ფაილს უწოდებთ დამატებითი პარამეტრების http: ///script.php, თქვენ ნახავთ შეცდომებს, რომლებიც მისცემს თარჯიმანს Php.რომ არ არსებობს ასეთი ელემენტები მასივი $ _get. მომხმარებლის მონაცემების შემოწმება შეიძლება არ იყოს ერთი სტატია, ასე რომ ამ სტატიაში არ შევეხო ამ მომენტში.
როგორც თქვენ ალბათ გესმით, აიძულოს მომხმარებლის აკრიფეთ მონაცემების მისამართი ბარი არ არის ძალიან კარგი და სრულიად უხერხული. აქედან გამომდინარე, მომხმარებლისგან მიღებული მონაცემების მიღება თქვენ უნდა გამოიყენოთ HTML- ფორმა. დაწერეთ მარტივი HTML- ფორმა.


შეიყვანეთ ნომერი

Კომპიუტერი გაქვს?

Შენი კომენტარი:





მე კომენტარს აკეთებს შექმნილი ფორმით. ფორმები შექმნილია ფორმის ტეგით. ფორმა სფეროებში შეიქმნა შეყვანის, აირჩიეთ, Textarea tags (შეგიძლიათ დაწვრილებით). ფორმის ტეგში, სკრიპტის URL განსაზღვრულია სამოქმედო ატრიბუტში, რომელიც მიიღებს ამ ფორმებს. ჩვენს შემთხვევაში, ჩვენ უკვე მითითებული უკვე არსებული Script.Php ფაილი. მეთოდის ატრიბუტი ადგენს მონაცემთა გაგზავნის მეთოდს. ჩვენ მივუთითეთ მეთოდი მიიღეთ.. ახლა ჩვენ ვიცით, რა ფაილი ეს ფაილი იქნება გადაცემული, და რომელი გზა, ის რჩება გაერკვნენ სად უნდა ვეძებოთ მათ?!
ეს ფორმა მონაცემები გადაეცემა ვებ რესურსების ბრაუზერს, რომელიც მათ URL- ს დასძენს: პირველი იქნება კითხვის ნიშნის (?), მაშინ პარამეტრების გამოყოფა ამპერსანტით (&). პარამეტრის სახელი იქნება სახელით ატრიბუტიდან, რომელიც უნდა იყოს ჩაწერილი ნებისმიერი საველე ველიდან. პარამეტრის ღირებულება დამოკიდებულია სფეროში. თუ ველი ტექსტურია, მომხმარებლის მიერ შეყვანილი ტექსტი იქნება მომხმარებელი. თუ ველი იქნება სია, ჯგუფი კონცენტრატორები ან დროშები, მაშინ შერჩეული ნივთის ღირებულების ღირებულება იქნება პარამეტრის ღირებულება. მე ავუხსენი ჩვენს ფორმას. თუ მომხმარებელი შეყვანის ნომერზე 10 ნომერზე შედის, მაშინ პარამეტრის სახელი იქნება რიცხვი (შეყვანის ტეგიის სახელის ატრიბუტის ღირებულება) და ღირებულება იქნება ღირებულება (მომხმარებლის მიერ შეყვანილი ნომერი). შესაბამისად, ბრაუზერი ქმნის წყვილს "Num \u003d 10". იმ შემთხვევაში, თუ მომხმარებელი სიიდან ირჩევს "დიახ", მაშინ პარამეტრის სახელი იქნება ტიპი (სახელწოდების ღირებულების ატრიბუტი) და ღირებულება იქნება ღირებულება (ღირებულების ღირებულების ღირებულება ). შესაბამისად, ბრაუზერი ქმნის წყვილს "ტიპის \u003d დიახ".
ახლა ეს ფორმა განთავსდება Forma.php გვერდზე.



მონაცემთა გადაცემის ფორმა გამოყენებით და PHP



შეიყვანეთ ნომერი

Კომპიუტერი გაქვს?

Შენი კომენტარი:







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


შეიყვანეთ ნომერი

Კომპიუტერი გაქვს?

Შენი კომენტარი:





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



პოსტი და PHP მონაცემთა გადაცემის ფორმა



შეიყვანეთ ნომერი

Კომპიუტერი გაქვს?

Შენი კომენტარი:







ახლა თქვენ უნდა დაწეროთ სკრიპტი, რომელიც ჩვენი ფორმის მონაცემების დამუშავებას მიიღებს.
მონაცემთა სკრიპტის გადაცემული მეთოდის მისაღებად პოსტი. უნდა გამოვიყენოთ ჩაშენებული მასივი $ _Post.. ამ მასივის გასაღებები იქნება პარამეტრების სახელები. ჩვენს შემთხვევაში, თქვენ უნდა გამოვიყენოთ $ _Post ["Num"], $ _post ["ტიპი"], $ _ პოსტი ["V"]. ეს მასივი ელემენტები შეიცავდეს გადაცემული მონაცემების ღირებულებებს. როგორც ხედავთ განსხვავებას მიღების მეთოდის გამოყენებით, მხოლოდ ვრცელდება მხოლოდ array $ _post- ის გამოყენებისას. აქედან გამომდინარე, ჩვენ არ ვიქნებით რთული Script_post.php ფაილი:



PHP- ის პოსტის მეთოდის გადამოწმება


echo ($ _post ["Num"]. "
");
echo ($ _post ["ტიპი"]. "
");
echo ($ _post ["V"]);
?>


ახლა გახსენით Forma_post.php ფაილი ბრაუზერში. შეიყვანეთ გარკვეული მონაცემები ფორმის სფეროში და დააჭირეთ ღილაკს "წარუდგენს". ახლა, ალბათ, თქვენ შეამჩნიე განსხვავება პოსტი მეთოდს შორის - ეს ფორმები არ გამოჩენილა მისამართი ბარი ბრაუზერის. მონაცემთა მეთოდი პოსტი. ბრაუზერის მისამართების ბარი ვერ გაივლის. ეს არსებითი განსხვავება უნდა გაიხსენოს.
-ში Php. დამოუკიდებლობის შემთხვევაში, რა მეთოდის მონაცემები გაიგზავნა - პოსტის მეთოდით ან მეთოდით - მონაცემების მიღება $ _Request Array- ის გამოყენებით. მიღება და პოსტი მეთოდების შედარებამიღების მეთოდის გამოყენებისას მონაცემები გადაეცემა URL- ს დამატებით. ამდენად, ისინი ხილული იქნება მომხმარებლისთვის, რომ უსაფრთხოების თვალსაზრისით ყოველთვის არ არის კარგი. გარდა ამისა, გადაცემული მონაცემების მაქსიმალური რაოდენობა დამოკიდებულია ბრაუზერის შესახებ - ბრაუზერის მისამართების ბარის მაქსიმალური დასაშვები რაოდენობისაგან.
პოსტის მეთოდის გამოყენებისას, მონაცემები არ იქნება მომხმარებლისთვის (ბრაუზერის მისამართების ბარის არ არის ნაჩვენები). ამიტომ, ისინი უფრო დაცულია და, შესაბამისად, პროგრამის დამუშავება ამ მონაცემების უფრო დაცულია უსაფრთხოების თვალსაზრისით. ასევე, გადაცემული მონაცემების ოდენობა პრაქტიკულად არ არის შეზღუდული.
მონაცემთა გადაცემის გზების არჩევისას თქვენ უნდა განიხილონ ყველაზე მისაღები მეთოდით მოცემული თვისებები.

HTML ფორმა. Arrays $ _post და $ _get

HTML ფორმა. სერვერზე მონაცემების გაგზავნის მეთოდები

HTML- ის ფორმებით, ალბათ, უკვე უკვე შეხვდა:

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

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

ტაგ

წყვილი final tag
სინამდვილეში, სთხოვს ფორმას. მისი ატრიბუტები ორივე სურვილისამებრ არიან:

  • აქცია - მიუთითებს URL (სრული ან ნათესავი), რომელსაც ფორმა გაიგზავნება. თუ ეს ატრიბუტი არ აკონკრეტებს, ყველაზე ბრაუზერებს (უფრო სწორად ლაპარაკობს, ყველა ბრაუზერი, რომელიც ჩემთვის ცნობილია) გააგზავნეთ ფორმა მიმდინარე დოკუმენტში, ანუ, "საკუთარ თავს". ეს არის მოსახერხებელი შემცირება, მაგრამ HTML სტანდარტის მიხედვით, საჭიროა სამოქმედო ატრიბუტი.
  • მეთოდი არის ფორმის გაგზავნის გზა. არსებობს ორი მათგანი.
    • მიიღეთ - ფორმის მონაცემების გაგზავნა მისამართების ბარი.
      შეგიძლიათ შეამჩნევთ ყოფნა სიმბოლოების URL- ის ბოლოს "?" და შემდეგ მონაცემები ფორმატში პარამეტრების \u003d ღირებულება. აქ "პარამეტრი" შეესაბამება ფორმის ელემენტების სახელის ატრიბუტის ღირებულებას (იხ. ქვემოთ TEG ) და "ღირებულება" - ღირებულების ატრიბუტის შინაარსი (მასში, მაგალითად, შეიცავს მომხმარებლის შეყვანის ტექსტში იგივე ტეგით ).
      მაგალითად, სცადეთ მოძებნოთ რაღაც Yandex- ში და ყურადღება მიაქციეთ ბრაუზერის მისამართს. ეს არის მეთოდი.
    • პოსტი - mold ეს იგზავნება შეკითხვის ორგანოს. თუ ეს არ არის სრულიად ნათელი (ან მთლიანად გაურკვეველია), რა არის - არ ინერვიულოთ, ამ საკითხთან დაკავშირებით მალე დავბრუნდებით.
    თუ მეთოდი ატრიბუტი არ არის მითითებული - მიიღებს იგულისხმება.

ტაგ - განსაზღვრავს ტიპის ატრიბუტის მიერ განსაზღვრული ფორმის ელემენტს:

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

სხვა ფასეულობები შესაძლებელია (და - არ არის ერთადერთი საკითხი, რომელიც განსაზღვრავს ფორმის ელემენტს).

რა მოხდება, როდესაც ჩვენ დააჭირეთ "OK" ღილაკს?

  1. ბრაუზერი ათვალიერებს ფორმაში შედის ელემენტებს და ქმნის მათ სახელით და ღირებულებას ამ ფორმებს. დავუშვათ, რომ ვასას სახელი გააცნო. ამ შემთხვევაში, ეს ფორმები - სახელი \u003d Vasya & Okbutton \u003d OK
  2. ბრაუზერი ადგენს დაკავშირებას სერვერზე, აგზავნის მოთხოვნას სერვერზე მითითებულ სამოქმედო tag ატრიბუტში
    მეთოდის ატრიბუტით განსაზღვრული მეთოდის გამოყენებით (ამ შემთხვევაში - მიიღეთ), მონაცემთა გადაცემის მონაცემები.
  3. სერვერმა აანალიზებს მიღებული შეკითხვას, პასუხობს პასუხს, აგზავნის მას ბრაუზერს და უკავშირდება კავშირს
  4. ბრაუზერი აჩვენებს სერვერზე მიღებული დოკუმენტს.

იგივე შეკითხვის გაგზავნა ხელით (Telnet- ის დახმარებით) ასე გამოიყურება (ვფიქრობ, რომ დომენის სახელი საიტი - www.example.com):

Telnet www.example.com 80 get /cgi-bin/form_handler.cgi?name\u003dvasya&okbutton\u003dk http / 1.0 \\ r \\ n მასპინძელი: www.example.com \\ r \\ n \\ r \\ n

როგორც თქვენ, სავარაუდოდ, უკვე მიხვდა, დააჭირეთ ღილაკს "მისაღებად" ფორმით, რომელიც "მისაღებად" ფორმით არის მსგავსი URL- ის (დასასრულს კითხვის ნიშნისა და მონაცემების მიხედვით) ბრაუზერის მისამართზე ბარი:

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

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

ალბათ ყველა ეს ტექნიკური დეტალები და წვრთნები Telnet-Ohm, როგორც ჩანს, წარმოუდგენლად მოსაწყენი და კიდევ არასაჭირო ("და რა PHP?"). და უშედეგოდ. :) ეს არის HTTP პროტოკოლის მუშაობის საფუძვლები, რომელიც თქვენ უნდა იცოდეთ თითოეული ვებ პროგრამისტი, და ეს არ არის თეორიული ცოდნა - ეს ყველაფერი სასარგებლოა პრაქტიკაში.

ახლა შეცვალეთ ჩვენი ფორმის პირველი სტრიქონი:

ჩვენ აღვნიშნეთ "პოსტის" გამგზავნი მეთოდი. ამ შემთხვევაში, მონაცემთა გადაგზავნა სერვერზე რამდენიმე სხვა გზით:

Telnet www.example.com 80 post /cgi-bin/form_handler.cgi http / 1.0 \\ r \\ n მასპინძელი: www.example.com \\ r \\ n შინაარსის ტიპი: განცხადება / X-www-form-urlencoded \\ r \\ r \\ r \\ N შინაარსის სიგრძე: 41263 \\ r \\ n \\ r \\ n name \u003d vasya & okbutton \u003d ok

პოსტის მეთოდის გამოყენებისას ეს ფორმები იგზავნება "ორი შემოდის" შემდეგ - შეკითხვის ორგანოში. ყველაფერი, რაც ზემოთ, ფაქტობრივად, შეკითხვის სათაურია (და როდესაც ჩვენ მივიღეთ მეთოდი, ეს ფორმები გაიგზავნა სათაურში). იმისათვის, რომ სერვერზე იცოდეთ, თუ როგორ უნდა დასრულდეს თხოვნის ორგანოების კითხვა, სათაური იმყოფება შინაარსის სიგრძეზე; დაახლოებით იგივე, რომ ფორმის მონაცემები გადაეცემა Parameter1 \u003d Value1 და Parameter2 \u003d Value 2 ... და ღირებულებები გადაცემულია როგორც URLENCODE - ეს არის ისეთი მეთოდი, მაგრამ შეკითხვის ორგანოში, სერვერზე ანგარიშები Content Header -type: განაცხადის / X-www-Form-Urlencoded.

პოსტ მეთოდის უპირატესობა არის ფორმის მონაცემების სიგრძის ლიმიტის ნაკლებობა.

პოსტის მეთოდის გამოყენებისას შეუძლებელია ფორმის გაგზავნა, უბრალოდ "ბმულზე", რადგან ეს იყო მისაღებად.

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

Arrays $ _get და $ _post

ასე რომ, ფორმები არის ვებ-სერვერისა და ბრაუზერის მონაცემების გაცვლის მთავარი გზა, რომელიც არის მომხმარებლისთვის ურთიერთქმედება - ფაქტობრივად, რისთვისაც საჭიროა ვებ პროგრამირება.

განვიხილოთ მარტივი მაგალითი:



თუ ($ _Server ["quarity_method"] \u003d\u003d "პოსტი") (
Echo "

გამარჯობა, "$ _Post [" სახელი "]."

!" ;
}
?>
">
შეიყვანეთ თქვენი სახელი:




ფორმის ხაზები 8-12 შეიცავს ორი ელემენტი: სახელი და Okbutton. მეთოდი ატრიბუტი განსაზღვრავს პოსტის ფორმის მეთოდს, სამოქმედო ატრიბუტს, რომელიც მითითებულია URL- ს, რომლის ფორმაც იგზავნება PHP_Self Server ცვლადი ღირებულებით - სცენარის მისამართი მომენტში.

- ჩაწერილი ფორმა .

დავუშვათ, სახელი სფეროში, ვასას ღირებულებაში შევედით და OK ღილაკს დაჭერილი იყო. ამავე დროს, ბრაუზერი პოსტი სერვერს აგზავნის. შეკითხვის ორგანო: სახელი \u003d Vasya & Okbutton \u003d OK. PHP ავტომატურად ავსებს $ _post მასივს:

$ _Post ["სახელი"] \u003d "ვასია"
$ _Post [okbutton] \u003d "OK"

სინამდვილეში, "ვასის" ღირებულება urlencode- ის ფორმაში ბრაუზერში გადაეგზავნება; Windows-1251 კოდირებისთვის, ეს ღირებულება გამოიყურება C2% E0% F1% FF. მაგრამ, მას შემდეგ, რაც PHP ავტომატურად ასრულებს საჭირო დეკოდირებას, ჩვენ შეგვიძლია "დაივიწყოს" ამ ფუნქციის შესახებ - სანამ არ უნდა მუშაობდეთ http queries ხელით.

მას შემდეგ, რაც შეკითხვის ორგანოს, მხოლოდ სახელები და ღირებულებები მითითებულია, მაგრამ არა ფორმის ელემენტების ტიპები, PHP არ არის იდეა, შეესაბამება $ _post ["NAME"] შეყვანის რიგი, ღილაკი ან სია. მაგრამ ეს ინფორმაცია, ზოგადად, აბსოლუტურად არ არის საჭირო. :)

მას შემდეგ, რაც თქვენ იცით, რა წერია წარდგენის ღილაკს, ჩვენ ვართ სურვილისამებრ, ხაზი 11 შეგიძლიათ წაშალოთ სახელი ატრიბუტი, მოკლე აღწერა ღილაკს აღწერა . ამ შემთხვევაში, ბრაუზერი გამოგიგზავნით სახელს \u003d ვასია-ვასას.

და ახლა - იგივე, მაგრამ მისაღებად ფორმის:



თუ (ISSET ($ _ მიიღეთ ["სახელი"]))
Echo "

გამარჯობა, "$ _Get [" სახელი "]."

!" ;
}
?>
">
შეიყვანეთ თქვენი სახელი:





შეესაბამება 8-ში, იგივე წარმატებით დაწერა

: მიიღეთ - ნაგულისხმევი მეთოდი. ამჯერად, ბრაუზერი აგზავნის მისაღწევად მოთხოვნას, რომელიც უდრის მისამართის ბარის მისამართით: http: //adress-tsite.php? სახელი \u003d ვასია.

PHP Get- ფორმები შემოდის ისე, როგორც პოსტი, განსხვავებით, რომ $ _get მასივი ივსება.

კარდინალური განსხვავება არის ხაზი 4. მას შემდეგ, რაც ბრაუზერის სიმებიანი უბრალო შეყვანა არის მისაღებად- Queuity, შეამოწმეთ თუ ($ _Server ["quarity_method"] \u003d\u003d "Get") არის უაზრო. აქედან გამომდინარე, ჩვენ მივმართავთ Isset () დიზაინს, რომელიც დააბრუნებს ჭეშმარიტებას, თუ ეს ცვლადი განისაზღვრება (I.E., მას გადაეცა ღირებულება) და ცრუ - თუ ცვლადი არ არის განსაზღვრული. თუ ფორმა შევსებულია - როგორც უკვე გაგებული, PHP ავტომატურად ანიჭებს $ _get ["NAME"] შესაბამის ღირებულებას.

ინსპექტირება გამოიყენება ISET- ის გამოყენებით () - უნივერსალური, ის შეიძლება გამოყენებულ იქნას პოსტ-ფორმით. უფრო მეტიც, სასურველია, რადგან ის საშუალებას გაძლევთ გაირკვეს, თუ რომელი ფორმის ფორმა ივსება.

ცოტა უფრო რთული მაგალითი.




ეხო "მიუთითეთ სახელი!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
Echo.
"
;
) სხვაგან (

" ;

Echo "თქვენ. $ ასაკი. "წელი
" ;
}
Echo "


" ;
}
?>
">
შეიყვანეთ თქვენი სახელი:


შეიყვანეთ დაბადების წელი:





აქ არ არის ახალი ტექნიკა. დაიცვას, შეასრულოს კოდი, სცადეთ შეცვალოთ ...

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



$ Name \u003d isset ($ _ პოსტი ["სახელი"])? $ _Post ["სახელი"]: "";
$ წელი \u003d INSET ($ _ POST ["წელი"])? $ _Post ["წელი"]: "";

თუ (INSET ($ _ პოსტი ["სახელი"], $ _post ["წელი"]))
თუ ($ _post ["სახელი"] \u003d\u003d ") (
ეხო "მიუთითეთ სახელი!
" ;
) სხვა, თუ ($ _post ["წელი"]< 1900 || $_POST [ "year" ] > 2004 ) {
Echo. "დააკონკრეტეთ დაბადების წელი, ღირებულებების სწორი სპექტრი: 1900..2004
"
;
) სხვაგან (
ეხო "გამარჯობა". $ _Post ["სახელი"]. "
" ;
$ ასაკი \u003d 2004 - $ _post ["წელი"];
Echo "თქვენ. $ ასაკი. "წელი
" ;
}
Echo "


" ;
}
?>
">
შეიყვანეთ თქვენი სახელი:


შეიყვანეთ დაბადების წელი:





რამდენიმე გაუგებარი ხაზები 4 და 5. ყველაფერი ძალიან მარტივია: ხაზი 4 შეიძლება ჩაიწეროს:

თუ (ISSET ($ _ POST ["NAME"]))
$ name \u003d $ _post ["სახელი"];
სხვა.
$ სახელი \u003d "";

კითხვა შეიძლება წარმოიშვას - რატომ არ ჩააგდოს სიმები 4-5 და არ წერენ:

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

შეიყვანეთ დაბადების წელი: ">

ფაქტია, რომ თუ ეს პოსტი არ არის განსაზღვრული - და ეს იქნება, თუ ფორმა ჯერ არ არის შევსებული, - PHP გასცემს გაფრთხილებებს გამოყენების შესახებ uninitialized ცვლადების გამოყენება (და კარგად დაარსებული: ასეთი შეტყობინება საშუალებას გაძლევთ სწრაფად იპოვეთ მყარი fastened typos ცვლადი სახელები, ასევე აფრთხილებს შესაძლო "ხვრელები" ადგილზე). თქვენ შეგიძლიათ, რა თქმა უნდა, დააყენა კოდი გაეცანით პირდაპირ ფორმას, მაგრამ აღმოჩნდება ძალიან რთული.

Გამოირკვა? და ახლა ცდილობენ იპოვონ შეცდომა კოდი ქვემოთ. კარგად, არ არის საკმაოდ შეცდომა, მაგრამ დეფექტების.

htmlspecialchars ()

ვერ იპოვა? მე გეტყვით. მაგალითად, მაგალითად, "სახელი" საველე ორმაგი შეთავაზებები და ზოგიერთი ტექსტი, მაგალითად, VA "SIA. გამოაგზავნეთ ფორმა და შეხედეთ გვერდის კოდის კოდს. მეოთხე ხაზში იქნება რაღაც მსგავსი :

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

ეს არის - არაფერი კარგი. და თუ Cunning მომხმარებლის შევიდა JavaScript კოდი?

ამ პრობლემის მოსაგვარებლად აუცილებელია HTMLSpecialchars- ის ფუნქციის გამოყენება, რომელიც შეცვლის მომსახურების სიმბოლოებს მათი HTML- ის წარმომადგენლობაზე (მაგალითად, შეთავაზებები - "):



$ Name \u003d isset ($ _ პოსტი ["სახელი"])? Htmlspecialchars ($ _post ["სახელი"]): "";
$ წელი \u003d INSET ($ _ POST ["წელი"])? Htmlspecialchars ($ _post ["წელი"]): "";

თუ (INSET ($ _ პოსტი ["სახელი"], $ _post ["წელი"]))
თუ ($ _post ["სახელი"] \u003d\u003d ") (
ეხო "მიუთითეთ სახელი!
" ;
) სხვა, თუ ($ _post ["წელი"]< 1900 || $_POST [ "year" ] > 2004 ) {
Echo. "დააკონკრეტეთ დაბადების წელი, ღირებულებების სწორი სპექტრი: 1900..2004
"
;
) სხვაგან (
ეხო "გამარჯობა". $ სახელი. "
" ;
$ ასაკი \u003d 2004 - $ _post ["წელი"];
Echo "თქვენ. $ ასაკი. "წელი
" ;
}
Echo "


" ;
}
?>
">
შეიყვანეთ თქვენი სახელი:


შეიყვანეთ დაბადების წელი:





გაიმეორეთ გამოცდილება და დარწმუნდით, რომ HTML კოდი არის სწორი.

გახსოვდეთ - htmlspecialchars () ფუნქცია ყოველთვის უნდა იქნას გამოყენებული, როდესაც ცვლადის შინაარსი, რომელშიც HTML სპეციალური შეიძლება იყოს წარმოდგენილი.

phpinfo ()

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

რატომ უნდა აღვნიშნავ მას სტატიაში ფორმების შესახებ? Phpinfo () - უფრო კომფორტული გამართვის ინსტრუმენტი. Phpinfo (), სხვა საკითხებთან ერთად, აჩვენებს ყველა $ _ტის ღირებულებებს, $ _post და $ _Server ცვლადებს. ასე რომ, თუ ცვლადი ფორმები "დაკარგა", მარტივი გზა აღმოაჩინოს, რა არის საქმე - გამოიყენოთ phpinfo () ფუნქცია. იმისათვის, რომ ფუნქციონირებისთვის მხოლოდ ცვლადების ღირებულებების ჩვენება (და თქვენ არ გქონიათ ათობით გვერდის მეშვეობით), მას შემდეგ უნდა ეწოდოს შემდეგნაირად: Phpinfo (info_varibles); , ან - ეს აბსოლუტურად იგივეა - Phpinfo (32);.



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


phpinfo (32);
?>

ან, მაგალითად, ეს სიტუაცია: გსურთ გაიგოთ სტუმარი IP მისამართი. გახსოვთ, რომ შესაბამისი ცვლადი ინახება $ _Server- ის მასივში, მაგრამ ეს არ არის საკმარისი - ისინი დაავიწყდათ ზუსტად როგორ ცვლადი ეწოდება. კიდევ ერთხელ, მოვუწოდებთ phpinfo (32); , ჩვენ ვეძებთ თქვენს IP მისამართს ფირფიტაში და იპოვოთ ეს - $ _Server სიმებიანი ["Remote_addr"].