Бид POST хүсэлтийг PHP дээр боловсруулдаг. NodeJS. POST хүсэлтийг хэрхэн боловсруулах вэ http хүсэлтийг боловсруулах php

Хөтөч үйлчлүүлэгчид вэб сервер рүү мэдээлэл илгээх боломжтой.

Хөтөч мэдээлэл илгээхээсээ өмнө URL кодчилол гэж нэрлэгддэг схемийг ашиглан кодлодог. Энэ схемд нэр/утга хосыг тэнцүү тэмдгээр холбосон бөгөөд өөр хосыг тэмдэгт тэмдэгээр тусгаарлана.

Нэр1=утга1&нэр2=утга2&нэр3=утга3

Хоосон зайг арилгаж, + тэмдэгтээр солих ба бусад үсэг, тоон бус тэмдэгтүүдийг арван зургаатын тоогоор солино. Мэдээлэл кодлогдсоны дараа сервер рүү илгээгдэнэ.

GET арга

GET арга нь хуудасны хүсэлтэд хавсаргасан хэрэглэгчийн кодлогдсон мэдээллийг илгээдэг. Хуудас болон кодлогдсон мэдээлэл бие биенээсээ тусгаарлагдсан уу? асуултын тэмдэг.

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

  • GET арга нь хөтчийн "Байршил" талбарт серверийн бүртгэлд гарч ирэх урт мөр үүсгэдэг.
  • GET арга нь зөвхөн 1024 тэмдэгт хүртэл илгээхээр хязгаарлагддаг.
  • Хэрэв танд нууц үг эсвэл сервер рүү илгээх бусад нууц мэдээлэл байгаа бол GET аргыг хэзээ ч бүү ашиглаарай.
  • GET-ийг зураг, текст баримт зэрэг хоёртын өгөгдлийг сервер рүү шилжүүлэхэд ашиглах боломжгүй.
  • GET аргаар илгээсэн өгөгдөлд QUERY_STRING орчны хувьсагчийг ашиглан хандаж болно.
  • PHP нь GET аргыг ашиглан илгээсэн бүх мэдээлэлд хандахын тулд $_GET ассоциатив массиваар хангадаг.

if($_GET["name"] || $_GET["нас"]) ( "Тавтай морил". $_GET["нэр"] цуурай; цуурай "Та ". $_GET["нас"]. " нас "; гарах(); )

Нэр: Нас:

POST арга

Арга POST HTTP толгойгоор дамжуулан мэдээллийг дамжуулдаг. Мэдээллийг аргын хувьд тайлбарласны дагуу кодчилдог АВАХ, толгой хэсэгт байрлуулна QUERY_STRING.

  • POST арга нь илгээх шаардлагатай өгөгдлийн хэмжээг хязгаарлахгүй.
  • POST аргыг ASCII болон хоёртын өгөгдлийг илгээхэд ашиглаж болно.
  • POST аргыг ашиглан илгээсэн өгөгдөл HTTP толгойгоор дамждаг тул аюулгүй байдал нь HTTP протоколоос хамаарна. Secure HTTP-г ашигласнаар та өөрийн мэдээллийг хамгаалж чадна.
  • PHP нь POST аргыг ашиглан илгээсэн бүх мэдээлэлд хандахын тулд $_POST ассоциатив массиваар хангадаг.

Дараах жишээг test.php скриптэд эх кодыг байрлуулж үзээрэй.

if($_POST["нэр"] || $_POST["нас"]) (хэрэв (preg_match("[^A-Za-z"-]",$_POST["нэр"])) ( үхэх (" хүчингүй нэр, нэр альфа байх ёстой"); ) echo "Тавтай морил". $_POST["name"]; echo "Та ". $_POST["нас"]. "настай."; exit(); )

Нэр: Нас:

$_REQUEST хувьсагч

PHP хувьсагч $_REQUESTгэх мэт агуулгыг агуулдаг $_GET, $_POST, тийм $_Күүки. Бид хувьсагчийг хэлэлцэх болно $_Күүкибид жигнэмэгийн тухай ярихад.

PHP $_REQUEST хувьсагчийг GET болон POST аргыг ашиглан илгээсэн маягтын өгөгдлөөс үр дүнг гаргахад ашиглаж болно.

PHP POST хүсэлтийг гүйцэтгэх эхний арга бол file_get_contents ашиглах явдал юм. Хоёрдахь арга нь fread-ийг бусад хэд хэдэн функцтэй хослуулан ашиглах болно. Хоёр сонголт хоёулаа шаардлагатай хүсэлтийн толгойн талбаруудыг бөглөхийн тулд stream_context_create функцийг ашигладаг.

Кодын тайлбар

$sPD хувьсагч нь дамжуулах өгөгдлийг агуулна. Энэ нь HTTP хүсэлтийн мөр форматтай байх ёстой тул зарим тусгай тэмдэгтүүдийг кодлох шаардлагатай.

file_get_contents функц болон fread функцийн аль алинд нь бид хоёр шинэ параметртэй байна. Эхнийх нь use_include_path юм. Бид HTTP хүсэлт гаргаж байгаа тул энэ нь хоёр жишээн дээр худал байх болно. Орон нутгийн нөөцийг уншихын тулд үнэн гэж тохируулсан үед функц нь include_path дээрх файлыг хайх болно.

Хоёрдахь параметр нь $aHTTP массивын утгыг авдаг stream_context_create-ийн буцах утгаар дүүргэгдсэн контекст юм.

POST хүсэлт гаргахдаа file_get_contents ашиглах

PHP дээр file_get_contents ашиглан POST хүсэлт илгээхийн тулд та stream_context_create ашиглан толгой хэсгийн талбаруудыг гараар бөглөж, аль "боодол"-ыг ашиглахаа зааж өгөх хэрэгтэй - энэ тохиолдолд HTTP:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST өгөгдөл $aHTTP = массив("http" => // Ашиглах боодол массив("method" => "POST", // Хүсэлтийн арга // Хүсэлтийн толгойг "толгой" доор тохируулсан => "Агуулга - төрөл: application/x-www-form-urlencoded", "content" => $sPD)); $контекст = stream_context_create($aHTTP); $contents = file_get_contents($sURL, худал, $контекст); echo $contents;

POST хүсэлтийг гүйцэтгэхийн тулд fread ашиглаж байна

Та fread функцийг ашиглан POST хүсэлт гаргах боломжтой. Дараах жишээнд шаардлагатай HTTP хүсэлтийн толгой хэсгийг бүрдүүлэхийн тулд stream_context_create ашигладаг:

$sURL = "http://brugbart.com/Examples/http-post.php"; // POST URL $sPD = "name=Jacob&bench=150"; // POST өгөгдөл $aHTTP = array("http" => // Ашиглах боодол массив("method" => "POST", // Хүсэлтийн арга // Хүсэлтийн толгой хэсгийг "толгой" доор тохируулсан => "Агуулга - төрөл: application/x-www-form-urlencoded", "content" => $sPD)); $контекст = stream_context_create($aHTTP); $ бариул = fopen($sURL, "r", худал, $контекст); $contents = ""; while (!feof($handle)) ( $contents .= fread($handle, 8192); ) fclose($handle); echo $contents;

PHP ашиглан GET хүсэлт гаргах

Бид одоо HTTP болон HTTPS-ээр дамжуулан интернетээс контент татаж авахын тулд fread болон file_get_contents ашиглахад анхаарлаа хандуулах болно. Энэ нийтлэлд тайлбарласан аргуудыг ашиглахын тулд та fopen wrappers сонголтыг идэвхжүүлэх ёстой. Үүнийг хийхийн тулд php.ini файлын allow_url_fopen параметрийг On болгож тохируулах хэрэгтэй.

PHP дээр POST болон GET хүсэлтийг гүйцэтгэх нь вэб сайт руу нэвтрэх, вэб хуудасны агуулгыг сэргээх эсвэл програмын шинэ хувилбарыг шалгахад ашиглагддаг. Бид энгийн HTTP хүсэлтийг хэрхэн хийх талаар авч үзэх болно.

Интернэтээр файл татаж авах, хүлээн авахын тулд fread ашиглах

Вэб хуудсыг унших нь багцын хүртээмжтэй хэсэгт хязгаарлагддаг гэдгийг санаарай. Тиймээс та stream_get_contents функцийг ашиглах хэрэгтэй. file_get_contents-тэй төстэй) эсвэл файлын төгсгөлд хүрэх хүртэл агуулгыг жижиг хэсгүүдэд уншихын тулд while давталт:

PHP POST хүсэлтийг боловсруулах энэ тохиолдолд fread функцийн сүүлчийн аргумент нь фрагментийн хэмжээтэй тэнцүү байна. Энэ нь ерөнхийдөө 8192-оос ихгүй байх ёстой ( 8*1024 ).

Энэ нь илүү том эсвэл жижиг байж болох бөгөөд PHP ажиллаж байгаа системийн тохиргоогоор хязгаарлагдаж болно гэдгийг санаарай.

Сайтын URL-г авахын тулд file_get_contents ашиглаж байна

Файлыг HTTP-ээр уншихдаа энэ аргыг ашиглах нь бүр ч хялбар, учир нь та хэсэг хэсгээр нь уншихаас санаа зовох шаардлагагүй - бүх зүйлийг PHP хэлээр зохицуулдаг.

Энэхүү нийтлэл нь төслийн найрсаг багийнхны бэлтгэсэн "PHP ашиглан шуудангийн хүсэлт гаргах" нийтлэлийн орчуулга юм.

PHP нь одоогоор вэб програмуудыг хэрэгжүүлэх хамгийн алдартай хэлүүдийн нэг юм. Энэ курс нь түүний үндсийг судлахад зориулагдсан болно. Олж авсан ур чадвараа практикт ашиглахад онцгой анхаарал хандуулдаг.

PHP хэл нь интернет дэх тодорхой практик асуудлыг шийдвэрлэх зорилгоор бүтээгдсэн (үүнийг курсын эхний лекцийг унших замаар олж мэдэх боломжтой). Мөн бид онолын үндэслэлд хэт сатаарахгүй байхыг хичээж, лекц бүрт тодорхой асуудлыг шийдвэрлэхийг хичээх болно. Ихэнх жишээг бодит амьдрал дээрх системээс авсан болно: компьютерийн шинжлэх ухааны түүхийн виртуал музей. Хичээлийн эхний хэсэг нь синтакс ба хяналтын бүтцийн үндсийг судлахад зориулагдсан болно. Үүний дараа үйлчлүүлэгч-серверийн технологийг PHP хэлний хэрэглээний үндсэн талбар гэж үздэг. Дараа нь бид өөрсдийнхөө бодлоор хамгийн хэрэгтэй суулгасан функцуудыг судалж, тэдгээрийн тусламжтайгаар практик асуудлыг шийдвэрлэхэд шилжинэ. Хэдийгээр PHP хэл дээрх объектын загвар нь хамгийн баян биш боловч түүний үндсэн оршихуй нь объектын өгөгдлийн загварыг байгалийн жамаар дүрслэх боломжийг олгодог. Үндсэн загвар болгон виртуал компьютерийн шинжлэх ухааны музейн баримт бичгийн загварыг авч үзэх болно. Үүний дараа хэд хэдэн хэрэглээний талыг авч үзэх болно: файлын систем, мэдээллийн сан, мөрүүд, сессүүд, DOM XML-тэй ажиллах - энэ бүхэн нь хэлний практик хэрэглээний гол ажлуудыг авч үзэх боломжийг олгоно.

Дээрх хүснэгтээс харахад Apache сервер тэргүүлэх байр суурийг эзэлдэг. Хэрэв өөрөөр заагаагүй бол вэб серверүүдийн талаар бидний хэлэх бүх зүйл Apache төвтэй. Үүнийг компьютер дээрээ хэрхэн суулгах талаар бид эхний лекц дээр аль хэдийн ярьсан. Одоо амласан ёсоороо HTTP протокол руу шилжье.

HTTP протокол ба сервер рүү өгөгдөл дамжуулах аргууд

Интернэт нь хоёртын мэдээлэл дамжуулах физикийн тал дээр ажилладаг физик давхаргаас эхлээд хэрэглэгч болон сүлжээний хоорондын интерфейсийг хангадаг хэрэглээний давхарга хүртэл олон давхаргат зарчим дээр суурилдаг.

HTTP (HyperText Transfer Protocol) нь интернет дэх гипертекст мэдээлэл солилцох зориулалттай хэрэглээний түвшний протокол юм.

HTTP нь сервер рүү илгээсэн хүсэлтийн зорилгыг тодорхойлох олон аргуудыг өгдөг. Эдгээр аргууд нь лавлагааны сахилга бат дээр суурилдаг бөгөөд энэ аргыг хэрэглэх шаардлагатай нөөцийг зааж өгөхийн тулд Universal Resource Identifier (Universal Resource Locator (URL) эсвэл Universal Resource Name) ашигладаг. ,URN).

HTTP протоколыг ашиглах үед сүлжээгээр дамжуулан мессежүүд нь Интернет шуудангийн мессежийн формат (RFC-822) эсвэл MIME (Multipurpose Internet Mail Exchange) мессежийн форматтай төстэй хэлбэрээр дамждаг.

HTTP нь SMTP (И-мэйл протокол), NNTP (News Transfer Protocol), FTP (File Transfer Protocol), Gopher, WAIS зэрэг одоо байгаа интернет протоколуудад хандах боломжийг олгодог янз бүрийн хэрэглэгчийн програмууд болон гарц програмуудын хооронд харилцахад ашиглагддаг. HTTP нь ийм гарцуудыг прокси серверүүдээр дамжуулан алдагдуулахгүйгээр өгөгдөл дамжуулах боломжийг олгох зорилготой юм.

Протокол нь хүсэлт/хариу өгөх зарчмыг хэрэгжүүлдэг. Хүсэлт гаргаж буй програм - үйлчлүүлэгч хариу өгөх програм - сервертэй харилцан үйлчлэлийг эхлүүлж, дараахь зүйлийг агуулсан хүсэлтийг илгээдэг.

Хандалтын арга;

URI хаяг;

Протоколын хувилбар;

Дамжуулж буй өгөгдлийн төрөл, хүсэлт гаргаж буй үйлчлүүлэгчийн талаарх мэдээлэл, магадгүй мессежийн агуулга (хэлбэр) агуулсан мессеж (MIME-тэй төстэй).

Серверийн хариулт нь:

Протоколын хувилбар болон буцах код (амжилт эсвэл алдаа) агуулсан статусын мөр;

Серверийн мэдээлэл, мета мэдээлэл (өөрөөр хэлбэл мессежийн агуулгын талаарх мэдээлэл) болон мессежийн үндсэн хэсгийг агуулсан мессеж (MIME-тэй төстэй хэлбэрээр).

Протоколд үйлчлүүлэгч болон серверийн хоорондох холболтыг хэн нээж, хаахыг заагаагүй болно. Практикт холболтыг ихэвчлэн үйлчлүүлэгч нээдэг бөгөөд сервер хариу илгээсний дараа тасалбараа эхлүүлдэг.

Хүсэлтүүдийг сервер рүү илгээдэг маягтыг нарийвчлан авч үзье.

Хэрэглэгчийн хүсэлтийн маягт

Үйлчлүүлэгч хүсэлтийг сервер рүү бүтэн эсвэл богиносгосон гэсэн хоёр хэлбэрийн аль нэгээр илгээдэг. Эхний хэлбэрийн хүсэлтийг бүрэн хүсэлт, хоёр дахь хэлбэрээр энгийн хүсэлт гэж нэрлэдэг.

Энгийн хүсэлт нь хандалтын арга болон нөөцийн хаягийг агуулна. Албан ёсоор үүнийг дараах байдлаар бичиж болно.

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

Арга нь GET, POST, HEAD, PUT, DELETE болон бусад байж болно. Тэдгээрийн хамгийн түгээмэл зүйлийн талаар бид дараа нь ярих болно. Хүссэн URI нь ихэвчлэн нөөцийн URL байдаг.

Энгийн хүсэлтийн жишээ:

http://phpbook.info/ АВАХ

Энд GET нь хандалтын арга, өөрөөр хэлбэл. хүссэн нөөцөд хэрэглэх арга бөгөөд http://phpbook.info/ нь хүссэн эх сурвалжийн URL юм.

Бүрэн хүсэлт нь статусын мөр, хэд хэдэн толгой хэсэг (хүсэлтийн толгой, ерөнхий толгой эсвэл агуулгын толгой), магадгүй хүсэлтийн үндсэн хэсгийг агуулна. Албан ёсоор бүрэн хүсэлтийн ерөнхий хэлбэрийг дараах байдлаар бичиж болно.

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

Энд байгаа дөрвөлжин хаалт нь толгойн нэмэлт элементүүдийг зааж өгөх бөгөөд өөр сонголтуудыг босоо шугамаар жагсаасан болно. Бүрэлдэхүүн<Строка состояния>хүсэлтийн арга, нөөцийн URI (энгийн хүсэлттэй адил) ба үүнээс гадна ашигласан HTTP протоколын хувилбарыг агуулдаг. Жишээлбэл, гадаад програм руу залгахын тулд та дараах статусын мөрийг ашиглаж болно.

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

Энэ тохиолдолд POST арга болон HTTP 1.0 хувилбарыг ашиглана.

Хүсэлтийн хоёр хэлбэрийн хувьд хүссэн нөөцийн URI нь чухал үүрэг гүйцэтгэдэг. Хамгийн түгээмэл URI нь нөөцийн URL хэлбэрээр ашиглагддаг. Серверт хандахдаа URL-ийн бүрэн хэлбэр болон хялбаршуулсан хэлбэрийг хоёуланг нь ашиглаж болно.

Бүрэн маягт нь хандалтын протоколын төрөл, нөөцийн серверийн хаяг, сервер дээрх нөөцийн хаягийг агуулна (Зураг 4.2).

Товчилсон хэлбэрээр протокол болон серверийн хаягийг орхигдуулсан бөгөөд зөвхөн серверийн эх сурвалжаас нөөцийн байршлыг зааж өгнө. Хэрэв хүсэлтийг өөр сервер рүү дамжуулах боломжтой бол бүрэн маягтыг ашиглана. Хэрэв ажил зөвхөн нэг сервертэй явагддаг бол товчилсон хэлбэрийг ихэвчлэн ашигладаг.


Цагаан будаа. 4.2.Бүрэн URL маягт

Арга зүй

Өмнө дурьдсанчлан, серверт хийх аливаа үйлчлүүлэгчийн хүсэлт нь аргын тодорхойлолтоос эхлэх ёстой. Энэ арга нь үйлчлүүлэгчийн хүсэлтийн зорилгыг илэрхийлдэг. HTTP протокол нь хэд хэдэн аргыг дэмждэг боловч үнэндээ зөвхөн 3 аргыг ашигладаг: POST, GET, HEAD. GET арга нь нөөцийн хүсэлт дэх URI-аар тодорхойлсон аливаа өгөгдлийг сэргээх боломжийг танд олгоно. Хэрэв URI нь програм руу чиглүүлбэл програмын текстийг биш харин програмын үйлдлийн үр дүнг буцаана (мэдээж хэрэг текст нь түүний үйлдлийн үр дүн биш бол). Хүсэлтийг боловсруулахад шаардлагатай нэмэлт мэдээллийг хүсэлтийн дотор (статусын мөрөнд) оруулсан болно. GET аргыг ашиглах үед хүссэн бодит мэдээллийг (жишээ нь HTML баримт бичгийн текст) нөөцийн үндсэн талбарт буцаана.

GET аргын хувилбар байдаг - нөхцөлт GET. Энэ арга нь хүсэлтийн толгой хэсгийн if-Modified-Since талбарт байгаа нөхцөл үнэн бол л хүсэлтэд хариу өгөх ёстойг серверт хэлдэг. Бүр тодруулбал, хэрэв-Өөрчлөгдсөн-Since-д заасан огнооноос хойш нөөц өөрчлөгдсөн бол хүсэлтийн хариуд нөөцийн хэсгийг дамжуулдаг.

HEAD арга нь GET аргатай төстэй боловч нөөцийн биетийг буцаадаггүй бөгөөд нөхцөлт аналоггүй. HEAD аргыг нөөцийн талаарх мэдээллийг олж авахад ашигладаг. Энэ нь жишээ нь гипертекст холбоосыг шалгах асуудлыг шийдвэрлэхэд хэрэг болно.

POST арга нь нөөцийн тайлбар, мэдээ, шуудангийн мессеж, мэдээллийн санд нэмэх өгөгдөл гэх мэт мэдээллийг сервер рүү дамжуулах зорилготой юм. их хэмжээний, нэлээд чухал мэдээллийг дамжуулахад зориулагдсан. GET болон HEAD аргуудаас ялгаатай нь POST нь маягтын талбарууд эсвэл бусад оролтын эх сурвалжаас хүлээн авсан мэдээлэл болох нөөцийн хэсгийг шилжүүлдэг.

Одоог хүртэл бид зөвхөн онол хийж, үндсэн ойлголттой танилцаж ирсэн. Одоо энэ бүхнийг практикт хэрхэн ашиглах талаар суралцах цаг болжээ. Дараа нь лекцээр бид сервер рүү хэрхэн хүсэлт илгээх, түүний хариуг хэрхэн боловсруулах талаар авч үзэх болно.

HTML маягтыг ашиглан серверт өгөгдөл оруулах

Мэдээллийг сервер рүү хэрхэн дамжуулах вэ? Энэ зорилгоор HTML хэл нь тусгай бүтэцтэй байдаг - маягтууд. Маягт нь хэрэглэгчээс мэдээлэл хүлээн авах зориулалттай. Жишээлбэл, та тухайн сайтын аль хуудсууд руу нэвтрэхийг зөвшөөрч болохыг тодорхойлохын тулд хэрэглэгчийн нэр, нууц үгийг мэдэх хэрэгтэй. Эсвэл түүнтэй холбогдохын тулд хэрэглэгчийн хувийн мэдээлэл хэрэгтэй. Ийм мэдээллийг оруулахын тулд маягтуудыг нарийн ашигладаг. Та тэдгээрт текст оруулах эсвэл жагсаалтаас тохирох сонголтыг сонгож болно. Маягт дээр бичигдсэн өгөгдлийг сервер дээрх тусгай программд (жишээлбэл, PHP скрипт) боловсруулахаар илгээдэг. Хэрэглэгчийн оруулсан өгөгдлөөс хамааран энэ програм нь янз бүрийн вэб хуудас үүсгэх, мэдээллийн санд хүсэлт илгээх, төрөл бүрийн програмуудыг ажиллуулах гэх мэт боломжтой.

HTML маягтын синтаксийг ойлгоцгооё. Олон хүмүүс үүнийг мэддэг байх, гэхдээ энэ нь чухал учраас бид гол санаануудыг давтах болно.

Тиймээс HTML дээр маягт үүсгэхийн тулд FORM тагийг ашигладаг. Дотор нь нэг буюу хэд хэдэн INPUT командууд байдаг. FORM тагийн үйлдэл ба аргын шинж чанаруудыг ашиглан маягтын өгөгдлийг боловсруулах програмын нэр болон хүсэлтийн аргыг тус тус зааж өгнө. INPUT команд нь хүссэн мэдээллийн төрөл, төрөл бүрийн шинж чанарыг тодорхойлдог. Илгээх төрлийн оруулах товчийг дарсны дараа маягтын өгөгдлийг илгээнэ. Програмчлалын захидлын сургуульд оролцогчдыг бүртгэх маягт үүсгэцгээе.

Энэ файлыг хөтчөөр боловсруулсны дараа иймэрхүү харагдах болно:


Цагаан будаа. 4.3.Жишээ html маягт

HTML маягтууд ийм байдлаар бүтээгдэж, харагдах болно. Бид тэдгээрийг хэрхэн бүтээх талаар сурсан эсвэл санаж байсан гэж таамаглах болно. Бидний харж байгаагаар та өгөгдөл дамжуулах аргыг маягт дээр зааж өгч болно. Хэрэв та GET эсвэл POST аргыг зааж өгвөл юу болох, ялгаа нь юу болохыг харцгаая.

GET аргын хувьд

GET аргыг ашиглан маягтын өгөгдлийг илгээх үед маягтын агуулгыг асуултын тэмдгийн дараа URL-д нэр=утга хос болон тэмдэг & тэмдэгтэй холбосон хавсаргана:

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

Энд үйлдэл нь маягтыг боловсруулах ёстой программын URL (эсвэл маягтын тагны үйлдлийн шинж чанарт заасан програм эсвэл тухайн шинж чанарыг орхигдуулсан бол одоогийн програм өөрөө) юм. Name1, name2, name3 нэрс нь маягтын элементийн нэртэй, утга1, утга2, утга3 нь эдгээр элементийн утгатай тохирч байна. Эдгээр параметрийн нэр эсвэл утгуудаас = ба & зэрэг бүх тусгай тэмдэгтүүдийг орхигдуулна. Тиймээс та эдгээр тэмдэгтүүд болон кирилл үсгийг маягтын элементийн нэр эсвэл утгын танигчдад ашиглах ёсгүй.

Хэрэв та оролтын талбарт үйлчилгээний тэмдэгт оруулбал энэ нь 16-тын кодоор дамжих болно, жишээ нь $ тэмдгийг %24-ээр солино. Орос үсгийг ч мөн адил дамжуулдаг.

Текст болон нууц үг оруулах талбаруудын хувьд (эдгээр нь type=text ба type=password шинж чанар бүхий оролтын элементүүд) хэрэглэгчийн оруулсан бүх утга нь байх болно. Хэрэв хэрэглэгч ийм талбарт юу ч оруулахгүй бол нэр нь энэ маягтын элементийн нэртэй тохирч байгаа асуулгын мөрөнд name= элемент байх болно.

Шалгалтын нүд болон радио товчлуурын товчлуурын хувьд товчлуурыг шалгах үед утгыг VALUE шинж чанараар тодорхойлно. Асуулгын мөрийг зохиохдоо шалгаагүй товчлууруудыг бүхэлд нь үл тоомсорлодог. Шаардлагатай бол олон шалгах хайрцагны товчлуурууд нь ижил NAME шинж чанартай (мөн өөр VALUE) байж болно. Радио товчлуурын төрлийн товчлуурууд нь санал болгож буй бүх сонголтуудын аль нэгэнд зориулагдсан тул ижил NAME атрибут болон өөр VALUE шинж чанаруудтай байх ёстой.

Зарчмын хувьд GET аргыг ашиглан өгөгдөл дамжуулахын тулд HTML маягт үүсгэх шаардлагагүй. Та URL мөрөнд хүссэн хувьсагч болон тэдгээрийн утгыг нэмэх боломжтой.

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

Үүнтэй холбогдуулан GET аргыг ашиглан өгөгдөл дамжуулах нь нэг чухал сул талтай байдаг - хэн ч параметрийн утгыг хуурамчаар үйлдэх боломжтой. Тиймээс бид нууц үгээр хамгаалагдсан хуудсууд руу нэвтрэх, програм эсвэл серверийн аюулгүй байдалд нөлөөлөх мэдээллийг дамжуулахын тулд энэ аргыг ашиглахыг зөвлөдөггүй. Нэмж дурдахад та GET аргыг хэрэглэгч өөрчлөхийг хориглосон мэдээллийг шилжүүлэхийн тулд ашиглах ёсгүй.

Эдгээр бүх сул талуудыг үл харгалзан GET аргыг ашиглах нь скриптийг дибаг хийх (дараа нь дамжуулж буй хувьсагчдын утга, нэрийг харж болно) болон аюулгүй байдалд нөлөөлөхгүй параметрүүдийг дамжуулахад маш тохиромжтой.

POST аргын хувьд

Маягтын агуулга нь GET аргын адил кодлогдсон (дээрээс харна уу), гэхдээ URL-д мөр нэмэхийн оронд хүсэлтийн агуулгыг POST үйлдлийн нэг хэсэг болгон өгөгдлийн блок болгон илгээдэг. Хэрэв ACTION атрибут байгаа бол тэнд олдсон URL утга нь энэ блок өгөгдлийн хаашаа илгээхийг тодорхойлно. Өмнө дурьдсанчлан энэ аргыг том өгөгдлийн блокуудыг шилжүүлэхэд ашиглахыг зөвлөж байна.

Хэрэглэгчийн оруулсан, POST аргыг ашиглан сервер рүү илгээсэн мэдээлэл нь үйлдлийн шинж чанараар заасан програмын стандарт оролтоор, эсвэл энэ шинж чанарыг орхигдуулсан бол одоогийн скриптэд үйлчилдэг. Илгээсэн файлын уртыг CONTENT_LENGTH орчны хувьсагчаар дамжуулж, өгөгдлийн төрлийг CONTENT_TYPE хувьсагчаар дамжуулна.

Өгөгдлийг GET шиг толгой хэсэгт биш харин хүсэлтийн үндсэн хэсэгт илгээдэг тул та HTML маягтыг ашиглан зөвхөн POST аргыг ашиглан өгөгдөл илгээх боломжтой. Үүний дагуу та зөвхөн маягтанд оруулсан утгыг өөрчлөх замаар параметрийн утгыг өөрчлөх боломжтой. POST ашиглах үед хэрэглэгч сервер рүү илгээсэн өгөгдлийг харахгүй.

POST хүсэлтийн гол давуу тал нь GET хүсэлттэй харьцуулахад илүү аюулгүй байдал, ажиллагаа юм. Тиймээс POST аргыг чухал мэдээлэл, түүнчлэн том хэмжээний мэдээллийг дамжуулахад илүү ашигладаг. Гэсэн хэдий ч та энэ механизмын аюулгүй байдалд бүрэн найдах ёсгүй, учир нь POST хүсэлтийн өгөгдлийг өөрийн машин дээр HTML файл үүсгэж, шаардлагатай мэдээллээр дүүргэх замаар хуурамчаар үйлдэх боломжтой. Нэмж дурдахад бүх үйлчлүүлэгчид POST аргыг ашиглах боломжгүй бөгөөд энэ нь хэрэглээний тохиолдлыг хязгаарладаг.

Ямар ч аргаар сервер рүү өгөгдөл илгээхдээ зөвхөн хэрэглэгчийн оруулсан өгөгдлийг дамжуулаад зогсохгүй үйлчлүүлэгчийн шинж чанар, түүний үйл ажиллагааны түүх, файлын зам гэх мэт орчны хувьсагч гэж нэрлэгддэг олон тооны хувьсагчдыг дамжуулдаг. Энд зарим орчны хувьсагчууд байна:

REMOTE_ADDR – хүсэлт илгээж буй хостын (компьютер) IP хаяг;

REMOTE_HOST – хүсэлт илгээсэн хостын нэр;

HTTP_REFERER – одоогийн скрипттэй холбосон хуудасны хаяг;

REQUEST_METHOD – хүсэлтийг илгээх үед ашигласан арга;

QUERY_STRING – асуултын тэмдгийн дараа URL дээр байрлах мэдээлэл;

SCRIPT_NAME – гүйцэтгэх ёстой програмын виртуал зам;

HTTP_USER_AGENT – үйлчлүүлэгчийн ашигладаг хөтчийн талаарх мэдээлэл

Одоогоор бид зөвхөн үйлчлүүлэгчийн хүсэлтийг сервер дээр тусгай программ ашиглан боловсруулдаг тухай дурдсан. Үнэн хэрэгтээ бид энэ программыг өөрсдөө, тэр дундаа PHP дээр бичиж болох бөгөөд энэ нь хүлээн авсан өгөгдлөөр бидний хүссэн бүх зүйлийг хийх болно. Энэ програмыг бичихийн тулд та PHP-ийн энэ зорилгоор санал болгож буй зарим дүрэм, хэрэгслүүдтэй танилцах хэрэгтэй.

PHP скрипт дотор HTTP-ээр дамжуулан үйлчлүүлэгчийн илгээсэн өгөгдөлд хандах хэд хэдэн арга байдаг. PHP 4.1.0-ээс өмнө ийм өгөгдөлд хандах хандалтыг шилжүүлсэн хувьсагчдын нэрээр гүйцэтгэдэг байсан (өгөгдөл “хувьсагчийн нэр, “=” тэмдэг, хувьсагчийн утга” гэсэн хос хэлбэрээр дамждаг гэдгийг санаарай). Тиймээс хэрэв жишээлбэл, first_name=Nina дамжуулагдсан бол скрипт дотор Nina утгатай $first_name хувьсагч гарч ирнэ. Хэрэв өгөгдөл ямар аргаар дамжуулагдсаныг ялгах шаардлагатай байсан бол $HTTP_POST_VARS ба $HTTP_GET_VARS ассоциатив массивуудыг ашигласан бөгөөд тэдгээрийн түлхүүрүүд нь шилжүүлсэн хувьсагчдын нэр, утгууд нь тус бүр утгууд байсан. эдгээр хувьсагчдаас. Тиймээс, хэрэв first_name=Nina хосыг GET аргаар дамжуулсан бол $HTTP_GET_VARS["first_name"]="Nina".

Дамжуулсан хувьсагчийн нэрийг шууд программд ашиглах нь аюулгүй биш юм. Тиймээс PHP 4.1.0-аас эхлэн HTTP хүсэлтээр дамжуулж буй хувьсагчдад хандахын тулд тусгай массив – $_REQUEST – ашиглахаар шийдсэн. Энэ массив нь POST болон GET аргууд, мөн HTTP күүки ашиглан дамжуулагдсан өгөгдлийг агуулдаг. Энэ бол супер дэлхийн ассоциатив массив, i.e. түүний утгыг програмын аль ч хэсэгт тохирох хувьсагчийн нэрийг (хэлбэрийн элемент) түлхүүр болгон авах боломжтой.

Жишээ 4.2.Дээрх жишээн дээрх шиг програмчлалын захидлын сургуульд оролцогчдыг бүртгэх маягт үүсгэсэн гэж бодъё. Дараа нь энэ маягтыг боловсруулдаг 1.php файлд та дараах зүйлийг бичиж болно.

$str = "Сайн уу,
".$_REQUEST["first_name"]."
".$_REQUEST["овгийн_нэр"]."!
";
$str .="Та курст суралцахаар сонгосон
".$_REQUEST["kurs"];
echo $str;
?>

Дараа нь бид маягтанд "Вася", "Петров" овог нэрийг оруулаад бүх курсуудын дунд PHP курс сонговол хөтөчийн дэлгэцэн дээр дараах мессежийг хүлээн авах болно.

Сайн уу, Вася Петров!

$_REQUEST массивыг нэвтрүүлсний дараа $HTTP_POST_VARS болон $HTTP_GET_VARS массивуудыг тогтвортой байдлын үүднээс $_POST ба $_GET гэж нэрлэсэн боловч PHP-ийн өмнөх хувилбаруудтай нийцтэй байх шалтгаанаар өөрсдөө ашиглагдаагүй. Өмнөх үеийнхээсээ ялгаатай нь $_POST ба $_GET массивууд нь супер глобал болсон, i.e. шууд болон дотор талд хандах боломжтой функц, аргууд.

Эдгээр массивуудыг ашиглах жишээг өгье. Бид нэр, овог, курс гэсэн оролтын элементүүдийг агуулсан маягтыг боловсруулах хэрэгтэй гэж бодъё (жишээлбэл, дээрх form.html). Өгөгдлийг POST аргыг ашиглан шилжүүлсэн бөгөөд бид өөр аргаар дамжуулсан өгөгдлийг боловсруулахыг хүсэхгүй байна. Үүнийг дараах байдлаар хийж болно.

$str = "Сайн уу,
".$_POST ["first_name"]."
".$_POST ["овгийн_нэр"] ."!
";
$str .= "Та " сэдвээр суралцахаар сонгосон байна.
$_POST["kurs"];
echo $str;
?>

Дараа нь хөтчийн дэлгэцэн дээр бид "Вася", "Петров" овог нэрийг оруулаад, бүх курсуудын дунд PHP курс сонговол өмнөх жишээн дээрх шиг мессежийг харах болно.

Сайн уу, Вася Петров!
Та PHP курст суралцахаар сонгосон байна

Скриптүүдийг PHP 4.1.0-ээс эрт боловсруулах чадварыг хадгалахын тулд register_globals удирдамжийг нэвтрүүлсэн бөгөөд хувьсагчид нэрээр нь шууд хандахыг зөвшөөрдөг эсвэл хориглодог. Хэрэв register_globals=On параметр нь PHP тохиргооны файлд байгаа бол GET болон POST аргыг ашиглан серверт дамжуулагдсан хувьсагчид нэрээр нь хандаж болно (өөрөөр хэлбэл та $first_name гэж бичиж болно). Хэрэв register_globals=Off бол $_REQUEST["first_name"] эсвэл $_POST["first_name"], $_GET["first_name"], $HTTP_POST_VARS["first_name"], $HTTP_GET_VARS["first_name"] гэж бичих шаардлагатай. Аюулгүй байдлын үүднээс энэ удирдамжийг идэвхгүй болгох нь дээр (жишээ нь register_globals=Off). register_globals удирдамжийг идэвхжүүлсэн үед дээр дурдсан массивууд нь үйлчлүүлэгчийн дамжуулсан өгөгдлийг агуулна.

Заримдаа та хүсэлтийг илгээхэд ашигласан арга эсвэл хүсэлтийг илгээсэн компьютерийн IP хаяг гэх мэт орчны хувьсагчийн утгыг мэдэх шаардлагатай болдог. Та getenv() функцийг ашиглан энэ мэдээллийг авах боломжтой. Энэ нь параметр болгон нэрийг нь дамжуулсан орчны хувьсагчийн утгыг буцаана.

getenv("REQUEST_METHOD");
// ашигласан аргыг буцаана
echo getenv("REMOTE_ADDR");
// хэрэглэгчийн IP хаягийг харуулах болно,
// хүсэлтийг хэн илгээсэн
?>

Бидний хэлснээр, хэрэв GET аргыг ашигласан бол нөөцийн URL-д хувьсагч_нэр=утга хос хэлбэрээр асуулгын мөрийг нэмж өгөгдөл дамжуулагдана. URL дээрх асуултын тэмдгийн дараах бүх зүйлийг тушаалыг ашиглан татаж авч болно

getenv("QUERY_STRING");

Үүний ачаар GET аргыг ашиглан өгөгдлийг өөр хэлбэрээр дамжуулах боломжтой. Жишээлбэл, та нэмэх тэмдэг ашиглан зөвхөн хэд хэдэн параметрийн утгыг зааж өгөх боломжтой бөгөөд скрипт дээр асуулгын мөрийг хэсэг болгон задлах эсвэл зөвхөн нэг параметрийн утгыг дамжуулж болно. Энэ тохиолдолд $_GET массивт энэ утгатай тэнцүү түлхүүр бүхий хоосон элемент (асуулгын мөр бүхэлдээ) гарч ирэх ба асуулгын мөрөнд тааралдсан "+" тэмдэгтийг доогуур зураасаар "_"-ээр солино.

POST аргын тусламжтайгаар өгөгдлийг зөвхөн маягт ашиглан дамжуулдаг бөгөөд хэрэглэгч (үйлчлүүлэгч) сервер рүү ямар өгөгдөл илгээж байгааг хардаггүй. Тэдгээрийг харахын тулд хакер бидний маягтыг өөрийн маягтаар солих ёстой. Дараа нь сервер буруу маягтыг боловсруулсны үр дүнг буруу газар руу илгээх болно. Үүнээс зайлсхийхийн тулд та өгөгдөл илгээсэн хуудасны хаягийг шалгаж болно. Үүнийг getenv() функцийг ашиглан дахин хийж болно:

getenv("HTTP_REFERER");

Одоо лекцийн эхэнд томъёолсон асуудлыг шийдэх цаг болжээ.

PHP ашиглан хүсэлтийг боловсруулах жишээ

Даалгавар юу байсныг эргэн санаж, түүний томъёоллыг тодруулцгаая. Та програмчлалын захидлын сургуульд оролцогчдыг бүртгүүлэх маягт бичиж, бүртгүүлсний дараа оролцогч руу мессеж илгээх хэрэгтэй. Бид энэ захиасыг бүх нийтийн захидал гэж нэрлэсэн боловч өмнөх лекц дээр бичсэн захидлаас арай өөр байх болно. Энд бид спам илгээгч шиг байхын тулд имэйлээр юу ч илгээхгүй, харин зүгээр л энэ мессежийг үүсгэн хөтчийн дэлгэц дээр харуулах болно. Бид дээрх бүртгэлийн маягтын анхны хувилбарыг аль хэдийн өгсөн. Бүртгэгч бүр хүссэн олон хичээл сонгох боломжтой байхаар бид үүнийг өөрчлөх бөгөөд бүртгэлийн маягтыг хүлээн авснаа баталгаажуулахгүй.

Энд бүх зүйл маш энгийн бөгөөд ойлгомжтой байдаг. Анхаарах цорын ганц зүйл бол шалгах хайрцагны элементийн утгыг дамжуулах арга юм. Элементийн нэрэнд kurs гэж бичихэд эхний тэмдэглэсэн шалгах нүд нь kurs массивын эхний элемент дээр, хоёр дахь тэмдэглэсэн нүд нь хоёр дахь массивын элемент дээр бичигдэнэ гэсэн үг юм. Мэдээжийн хэрэг та шалгах хайрцагны элементүүдэд өөр өөр нэр өгч болно, гэхдээ энэ нь олон курс байгаа бол өгөгдөл боловсруулахад хүндрэл учруулах болно.

Энэ бүгдийг задлан шинжилж боловсруулах скриптийг 1.php гэж нэрлэдэг (энэ маягт нь үйлдлийн шинж чанарт бичигдсэн энэ файлыг тусгайлан заадаг). Анхдагч байдлаар GET аргыг дамжуулахад ашигладаг боловч бид POST-г зааж өгсөн. Бүртгэгдсэн хүнээс хүлээн авсан мэдээлэлд үндэслэн скрипт нь холбогдох мессежийг үүсгэдэг. Хэрэв хүн зарим хичээлийг сонгосон бол тэр хичээлийг явуулах цаг, тэдгээрийг зааж буй багш нарын тухай мессеж хүлээн авах болно. Хэрэв хүн юу ч сонгоогүй бол програмистуудын захидал харилцааны сургуулийн (ZSH) дараагийн уулзалтын тухай мессеж гарч ирнэ.

HTML маягтууд нь хэрэглэгчийн оруулсан өгөгдлийг сервер рүү илгээх боломжийг олгодог бөгөөд үүнийг цаашид боловсруулах боломжтой. Маягтын засвар үйлчилгээг хоёр үе шаттайгаар гүйцэтгэдэг. Маягтыг эхлээд хэрэглэгчдэд танилцуулах ёстой бөгөөд тэд үүнийг өөрийн мэдээллээр бөглөж, дараа нь серверт илгээнэ. Маягт бүр нь хэрэглэгчийн илгээсэн өгөгдлийг боловсруулахын тулд ачаалах ёстой буух вэб хуудастай. Энэ нь ихэвчлэн маягт үүсгэдэг ижил скрипт файл юм. Энэ тохиолдолд PHP код нь маягтыг үүсгэхийн тулд скриптийг дахин дуудах эсвэл хүлээн авсан өгөгдлийг боловсруулж эхлэх эсэхийг тодорхойлохын тулд маягт дахь өгөгдлийг шалгадаг.

Анхаар! Хичээл хуучирсан. Энэ сэдвийн шинэ хичээлүүд нь PHP-н анхан шатны сургалтанд багтсан болно.

Ихэнх тохиолдолд серверт маягт илгээх нь өгөгдлийн сангийн зарим ажилтай холбоотой байдаг. Жишээлбэл, мэдээллийн санг хайх ажиллагаа нь форумын нийтлэл, хэрэглэгчид эсвэл блог хайх гэх мэт олон төрлийн програмуудад зайлшгүй шаардлагатай үйлдэл юм. Ямар ч тохиолдолд энэ үйлдэл нь хэрэглэгчийн амьдралыг хөнгөвчлөх боломжтой. Учир нь Одоогийн байдлаар бид PHP болон MySQL DBMS-ийн харилцан үйлчлэлтэй танилцаж амжаагүй байгаа тул энэ нийтлэлд бид маягт боловсруулах энгийн жишээнүүдийг авч үзэх бөгөөд миний хувьд хамгийн гол ажил бол PHP хэлийг ашиглан мэдээллийг хэрхэн дамжуулж байгааг харуулах явдал юм. .

РНР хэл ашиглан мэдээлэл дамжуулах

Энэ хэсэг нь вэб хуудсуудын хооронд өгөгдөл хэрхэн дамжуулах талаархи үндсэн мэдээллийг агуулдаг. Эдгээр мэдээллийн зарим нь зөвхөн PHP технологид хамаарахгүй, харин PHP болон HTML хэрэгслүүдийн харилцан үйлчлэлийг дүрсэлсэн эсвэл HTTP протоколтой холбоотой.

HTTP протоколд төрийн дэмжлэг байхгүй байна

Аливаа вэб технологийн хамгийн чухал шинж чанар нь HTTP протокол нь өөрөө харьяалалгүй байдаг. Энэ нь HTTP хүсэлт бүр (ихэнх тохиолдолд HTML хуудас, .jpg файл, загварын хуудас гэх мэт нэг эх сурвалжийг хүлээн авах, хүргэх хүсэлт юм) бусад бүх хүсэлтээс хамааралгүй гэсэн үг юм. ямар ч - үйлчлүүлэгчийн таних мэдээллийг оруулах бөгөөд компьютерийн санах ойд ул мөр үлдээхгүй.

Хэдийгээр сайт нь навигаци, i.e. Нэг хуудаснаас нөгөө хуудас руу шилжих шилжилт нь зөвхөн нэг чиглэлд явагддаг (1-р хуудас нь зөвхөн 2-р хуудас руу хөтөлдөг гэж үзье, энэ нь зөвхөн 3-р хуудас гэх мэт), HTTP протоколыг дэмжих хэрэгсэлд мэдээлэл байхгүй бөгөөд хэрэглэгч үүнийг анхаарч үздэггүй. 2-р хуудсыг үзэх нь 1-р хуудсанд өмнө нь зочилсон байх ёстой. Та 1-р хуудсан дээрх хувьсагчдад утга оноож болохгүй бөгөөд үүнийг HTML ашиглан 2-р хуудсанд импортлохыг хүлээхгүй. HTML кодыг маягтыг харуулахад ашиглаж болох ба энэ кодыг мэдээлэл оруулахад ч ашиглаж болно, гэхдээ оруулсан мэдээллийг өөр хуудас эсвэл програм руу шилжүүлэхийн тулд зарим нэмэлт хэрэгслийг ашиглахгүй бол хувьсагчид өгөгдсөн утга зөөсний дараа алга болно. өөр хуудас руу.

PHP зэрэг маягт боловсруулах технологиуд нь яг энэ асуудлыг шийдэхэд зориулагдсан. PHP нь өмнөх хуудаснаас дараагийн хуудас руу дамжуулж буй хувьсагчийн утгыг таслан авч, дараа нь ашиглах боломжтой болгох боломжийг олгодог. PHP технологи нь эдгээр төрлийн өгөгдөл дамжуулах функцийг маш сайн гүйцэтгэх боломжийг олгодог тул вэбсайтын үйл ажиллагааг хангахтай холбоотой олон төрлийн асуудлыг шийдвэрлэхэд шаардлагатай хэрэгслийг хурдан, хялбар байрлуулах боломжийг олгодог.

HTML маягтууд нь тухайн хуудаснаас цөөн тооны утгыг вэбсайтын аль ч хуудас руу дамжуулахад тохиромжтой арга юм. Цаашдын нийтлэлд авч үзэх күүки, сесс зэрэг удаан үргэлжлэх олон хуудасны харагдацын төлөв байдлыг хадгалах өөр аргууд байдаг. Энэ нийтлэл нь динамикаар үүсгэгдсэн хуудас үүсгэх, маягтын өгөгдлийг боловсруулахын тулд HTTP протоколтой хослуулан GET болон POST аргыг ашигладаг вэб хуудсуудын хооронд мэдээлэл дамжуулах хамгийн энгийн аргуудад голчлон анхаардаг.

GET параметрүүд

GET арга нь параметрүүдийг өмнөх хуудаснаас дараагийн хуудас руу асуулгын мөрийн хэсэг болгон дамжуулдаг бөгөөд энэ нь Uniform Resource Identifier URI форматаар илэрхийлэгддэг. Маягтыг боловсруулахдаа GET аргыг ашиглах үед маягтын action атрибутаар тодорхойлогдсон URL-ийн араас зааглагчийн ард асуултын тэмдэг, дараа нь заасан хувьсагчийн нэр(үүд) ба утга(ууд) орж, дараа нь бүхэл мөр нь байна. боловсруулах агент руу дамжуулсан (энэ тохиолдолд вэб сервер).

GET аргыг ашигладаг HTML маягтын жишээг доор харуулав (энэ тэмдэглэгээг бичээд, файлыг sportselect.html гэж хадгална уу):

PHP үндэс

Өөрийн дуртай спортоо сонго

Хэрэглэгч сонголтоо хийгээд Илгээх товчийг дарсны дараа хөтөч дараах элементүүдийг харуулсан дарааллаар, элементүүдийн хооронд зайгүй холбоно.

  • Үйлдлийн үгийн дараа хашилтанд орсон URL (http://localhost/sports.php).
  • Дараах тэмдэгтүүд GET мөрийг бүрдүүлж байгааг илтгэх асуултын тэмдэг (?).
  • Нэрийн хувьсагч, тэнцүү тэмдэг (=) ба харгалзах утгын параметр (утга=Хоккей).
  • Амперсанд (&) дараа нь нэр=утга хос (хэрэв байгаа бол).

Тиймээс хөтөч дараах URL мөрийг үүсгэх болно:
http://localhost/sports.php?sport=Хоккей

Дараа нь хөтөч нь үүссэн URL мөрийг өөрийн хаягийн орон зайд шинэ хүсэлт болгон дахин чиглүүлдэг. Доорх PHP скрипт (sports.php) маягтыг илгээж, асуулгын мөрийн сүүлчийн хэсгээс GET хувьсагчийн утгыг авч, тэдгээр хувьсагч болон хувьсагчийн утгуудыг $_GET супер глобаль массив руу оруулна. товч тайлбарласан), эдгээр утгуудын тусламжтайгаар шаардлагатай зарим үйлдлийг гүйцэтгэдэг; Энэ тохиолдолд оруулга нь текстийн мөрөнд тохиолддог.

Дээрх HTML маягтын PHP маягтын зохицуулагчийг харуулсан кодын жишээг доор харуулав.

Дуртай спорт

Таны дуртай спорт

Өмнөх хуудсан дээрх name="sport" атрибут бүхий HTML маягтын талбарт оруулсан утгыг $_GET["sport"] нэртэй PHP хувьсагч хэлбэрээр ашиглах боломжтой гэдгийг анхаарна уу. Дараах зураг нь энэ жишээ хэрхэн ажилладагийг харуулж байна.

Одоо бид хуудаснаас хуудас руу дамжуулсан утгуудад хэрхэн хандаж болохыг тайлбарлах хэрэгтэй. Энэ нийтлэлд GET ба POST гэсэн маягтанд ашигласан утгыг дамжуулах хоёр үндсэн аргыг авч үзэх болно. Арга бүр нь түүнтэй холбоотой супер дэлхийн массивтай байдаг. Superglobal массивыг "Хувьсагч ба тогтмол" нийтлэлд илүү дэлгэрэнгүй тайлбарласан болно. Суперглобал массивуудын бусад массивуудаас ялгарах онцлог нь нэрэнд доогуур зураас хэлбэрээр угтвар байгаа явдал юм.

Маягтын процессор нь GET аргыг ашиглан илгээсэн элемент бүрд $_GET массив руу, POST аргыг ашиглан илгээсэн элемент бүрд $_POST массив руу ханддаг. Супер дэлхийн массивын аль ч элементэд хандахад ашигладаг синтаксийн бүтэц нь энгийн бөгөөд бүрэн жигд байна:

$_массив_нэр["индекс_нэр"]

Энд индекс_нэр нь нэр-утга хосын нэрний хэсэг (GET аргын хувьд) эсвэл HTML маягтын талбарын нэр (POST аргын хувьд). Өмнөх жишээний дагуу $_GET["sport"] нь "спорт" нэртэй маягтын сонгох элементийн утгыг зааж өгдөг; Энэ утгыг эх файл дээр гүйцэтгэсэн GET үйлдлийг ашиглан дамжуулсан. Маягт боловсруулагч нь өгөгдлийг илгээсэн аргад тохирох массивыг ашиглах ёстой. Тодруулбал, энэ жишээнд $_POST["sport"]-ын утга тодорхойгүй байна, учир нь анхны маягт нь POST аргыг ашиглан ямар ч өгөгдөл оруулаагүй болно.

GET маягт боловсруулах арга нь POST аргаас нэг чухал давуу талтай бөгөөд энэ нь танд одоогийн нөхцөл байдалд тохирсон URL асуулгын шинэ мөрийг үүсгэх боломжийг олгодог. Хэрэглэгчид энэ хуудсыг тэмдэглэж болно. Нөгөө талаас, POST аргыг ашиглан маягт илгээсэн үр дүнг хавчуурга хийх боломжгүй.

GET параметрүүдийг ашиглан хүссэн функцэд хүрч болно гэдэг нь GET аргыг ашиглах ёстой гэсэн үг биш юм. Ихэнх маягт боловсруулахад байдаг GET аргын сул талууд нь маш чухал юм. 1997 онд хэвлэгдсэн анхны HTML 4.0 ажлын тодорхойлолт нь энэ аргыг хэрэглэхийг зөвлөдөггүй. GET аргын гол сул талуудыг доор жагсаав.

  • GET арга нь бүртгэлийн цонх үүсгэхэд тохиромжгүй, учир нь хэрэглэгчийн нэр, нууц үг нь дэлгэцэн дээр бүрэн харагдах бөгөөд энэ өгөгдлийг үйлчлүүлэгчийн хөтчийн санах ойд зочилсон хуудасны мэдээлэл болгон хадгалах боломжтой.
  • GET шилжүүлгийн үйлдэл бүр, түүний дотор өгөгдлийн багцыг вэб сервер дээр бүртгэдэг.
  • GET арга нь серверийн орчны хувьсагчдад өгөгдлийг хуваарилдаг тул URL-ын урт хязгаарлагдмал байдаг. GET аргыг ашиглан дамжуулахад маш урт URL-ууд ямар харагддагийг та харсан байх, үнэхээр хэн ч энэ аргыг ашиглан 300 үгтэй HTML текстийг илгээхийг хүсэх нь юу л бол.

Анхны HTML тодорхойлолтод асуулгын мөрийн урт 255 тэмдэгтээс хэтрэхгүй байх ёстой гэж заасан. Мэдээжийн хэрэг, энэ хязгаарлалтыг дараа нь устгасан бөгөөд зөвхөн 255 тэмдэгтийн хязгаарыг дагаж мөрдөх зөвлөмж хэвээр үлдсэн боловч урт мөрүүдийг ашиглах нь тасалдал үүсгэж болзошгүй юм.

POST параметрүүд

Одоогийн байдлаар маягтын өгөгдлийг илгээх илүүд үздэг арга бол POST (ялангуяа үйлдлийг гүйцэтгэх нь мэдээллийн санд мэдээлэл оруулах гэх мэт байнгын өөрчлөлтөд хүргэдэг тохиолдолд). Маягтыг боловсруулах агент руу (энэ тохиолдолд РНР орчуулагч) шилжүүлэх үед маягтын өгөгдлийн багц нь маягтын биед багтдаг. URL мөр нь дамжуулагдаж буй өгөгдлийн олон янз байдлыг тусгахын тулд харагдахуйц өөрчлөлтөд ордоггүй.

Хөгжүүлэгчдийн дунд POST аргыг GET-ээс илүү найдвартай гэсэн үндэслэлгүй итгэл үнэмшил түгээмэл байдаг. Бодит байдал дээр аль ч арга нь нөгөөгөөсөө илүү аюулгүй биш юм. Зочин GET аргыг ашиглахын зэрэгцээ POST аргыг ашиглан илгээсэн хувьсагч болон өгөгдлийг харах боломжтой. Цорын ганц ялгаа нь эхний тохиолдолд дамжуулсан өгөгдөл хаягийн мөрөнд олдохгүй байна. Гэхдээ энэ нь тэднийг нуусан гэсэн үг биш юм. POST аргыг ашиглан илгээсэн өгөгдлийг вэбсайтын хэрэглэгч харж, өөрчлөх боломжтой.

Програмчлалын, ялангуяа сүлжээний програмчлалын эхний бөгөөд хамгийн чухал дүрэм бол:
Оруулсан өгөгдөлд хэзээ ч бүү итгэ.

Зочин тухайн програм руу дамжуулж буй өгөгдлийг хорлонтой эсвэл бүр санамсаргүй байдлаар өөрчилсөн байж болзошгүй гэж та үргэлж бодож байх ёстой, тиймээс та энэ өгөгдлийг сайтар шалгаж үзэх хэрэгтэй.

Хүсэлт нь SSL, TLS эсвэл бусад шифрлэлтийн аргыг ашиглан хамгаалагдсан тохиолдолд дамжуулагдсан маягтын өгөгдөл нь илүү их эсвэл бага аюулгүй байдаг. Гэхдээ өгөгдөл нь эцсийн хэрэглэгч эсвэл зочдод тодорхой хэлбэрээр ирдэг тул түүнд ямар нэгэн байдлаар өгөгдлийг харах, өөрчлөх боломжтой хэвээр байна. Үнэн хэрэгтээ SSL протокол нь сүлжээгээр дамжуулж буй өгөгдлийг шифрлэдэг бөгөөд энэ нь илгээгчээс хүлээн авагч руу шилжих үе шатанд өгөгдлийг тодорхой текст хэлбэрээр үзэх боломжийг олгодоггүй. Зочин өгөгдлийн хэлбэрт өөрчлөлт оруулах чадварын хувьд SSL протокол нь үүнээс урьдчилан сэргийлэх ямар ч зүйлийг өгдөггүй.

Өмнөх жишээнд өгөгдөл дамжуулах арга замыг өөрчлөхийн тулд та дараах өөрчлөлтийг хийх хэрэгтэй.

...

Олон утгатай ажиллах

Хэрэв маягт нь шалгах хайрцаг эсвэл радио товчлууртай бол шинэ асуудал гарч ирнэ. Жишээлбэл, хэрэглэгч нэг маягтаас хоёр утгыг нэг дор сонгох боломжтой боловч хувьсагч нь нэгээс олон утгыг хадгалах боломжгүй тул массив ашиглах шаардлагатай болно. Энэ нөхцөл байдлыг доорх жишээн дээр харуулав.

" арга = "Бичлэг">
Дуртай тэжээвэр амьтдаа сонго

Сонгогдсон амьтад: "; foreach ($animal гэж $a) ( echo " ".htmlentities($a).""; } } ?>

Энэ маягт нь хэрэглэгчдэд дуртай тэжээвэр амьтдаа сонгох боломжийг олгодог. Энэ жишээнд хэрэглэгч хэд хэдэн нүдийг нэг дор сонгож болно. Энэ нь PHP скрипт дэх маягтын өгөгдлийг боловсруулахдаа нэг нэр ашиглан олон утгуудад хандах боломжийг олгох шаардлагатай гэсэн үг юм. Бид олон сонголтыг массив болгон илгээх боломжтой байхын тулд нэрийн атрибут дахь нэрний ард хос дөрвөлжин хаалт () тавьсан. Хэрэв дөрвөлжин хаалт орхигдсон бөгөөд хэрэглэгч олон нүдийг шалгасан бол тэдгээрийн сонголтыг хамгийн сүүлд тэмдэглэсэн нүдээр дарж бичнэ. Нэрийн ард дөрвөлжин хаалт хийснээр утгуудыг массив хэлбэрээр хадгалах ёстойг бид зааж өгсөн.

Зохицуулагчид массив нь $animal хувьсагчид хадгалагдаж, ердийн массив шиг foreach гогцоо ашиглан тоологддог.

Маягтын баталгаажуулалт ба форматын хувьсагч

Аппликешн нь хэрэглэгчээс өгөгдөл хүлээн авахдаа түүний зөв эсэхийг шалгах бүрд шаардлагатай. Хэрэв та хэрэглэгчийн оруулсан өгөгдлийг шалгахгүй бол аюулгүй байдлын эрсдэл зэрэг олон асуудал гарч болзошгүй. Суурь шалгалт хийх нь санагдах шиг хэцүү биш юм.

Хэрэглэгчид JavaScript ашиглан үйлчлүүлэгч талаас шалгах нь илүү тохиромжтой боловч энэ шалгалтыг ашигласан эсэхээс үл хамааран сервер талын баталгаажуулалтыг хийх ёстой.

HTML маягт үүсгэх үед анхаарах бас нэг зүйл бол хэрэв маягт нь урьдчилан бөглөсөн оролтыг харуулах шаардлагатай бол утгын шинж чанарыг тохируулах ёстой. Энэ цэг нь мэдээллийн сангаас хүлээн авсан өгөгдлийг засварлахад хэрэглэгддэг ба нэгээс олон удаа өгөгдөл оруулахад зориулагдсан гэсэн хоёр төрлийн маягтын хувьд үнэн юм. Сүүлчийн тохиолдол нь аль хэдийн бөглөсөн өгөгдөлд алдаа илэрсэний дараа маягтыг дахин харуулах шаардлагатай тохиолдолд маш түгээмэл тохиолддог. Жишээ нь хэрэглэгч хүчинтэй имэйл хаяг эсвэл бусад шаардлагатай өгөгдлийг өгөх хүртэл өгөгдлийг боловсруулахад хүлээн зөвшөөрдөггүй бүртгэлийн маягт юм.

Доорх жишээнд маягтыг хэрхэн боловсруулах, үүнд сервер талын баталгаажуулалт болон ижил маягтын хуудсан дээр боловсруулалт хийхийг харуулав.

PHP үндэс

" арга = "Бичлэг">
Холбогдох мэдээлэл "анги"">
"анги"">

Энэ жишээнд filter_var() функцийг ашигладаг бөгөөд энэ нь шүүлтүүр ашиглан хувьсагчийг шалгаж, шүүлтүүрийн төрлийг илтгэх эх мөр ба тогтмол гэсэн хоёр параметрийг авдаг. Имэйл хаягийг (FILTER_VALIDATE_EMAIL) баталгаажуулахаас гадна энэ функц нь дараах тогтмолуудыг дэмждэг: FILTER_VALIDATE_URL - URL-ын зөв эсэхийг шалгана (жишээ нь), FILTER_VALIDATE_IP - IP хаягуудын зөв эсэхийг шалгана, FILTER_VALIDATE_REGEXP - утгыг шалгана. is_bool(), is_float(), is_int() гэх мэт функцүүдийн хувилбар болох тогтмол илэрхийллийн синтакс болон бусад хэд хэдэн тогтмолуудын зөв байдлын хувьд.

Энэ болон дараагийн хэсгүүдэд PHP ашиглан үндсэн вэб программуудыг хэрхэн бүтээх талаар товч өгүүлэх болно. Энэ хэсэгт хэлэлцсэн зүйл нь таны програмд ​​​​хэрэглэгчтэй харилцах, түүний хийсэн үйлдэл эсвэл түүний оруулсан параметрээс хамааран томъёолоход хангалтгүй юм. Юу дутагдаж байна вэ? Хэрэглэгчийн өгөгдөл оруулах, энэ өгөгдлийг сервер рүү шилжүүлэх ажлыг хэрхэн зохион байгуулах талаар хангалттай мэдлэггүй байна. За, та сервер дээр хүлээн авсан мэдээллийг програмын аргаар хэрхэн боловсруулах талаар анхан шатны мэдлэгтэй байх ёстой.

HTTP хүсэлтийн аргууд ба тэдгээрийн параметрүүд

Аливаа динамик вэб програм нь түүний оруулсан параметрийн дагуу эсвэл үйлчлүүлэгчийн хийсэн үйлдлийн дагуу хэрэглэгчийн хариуг үүсгэдэг. Сервертэй холбогдох нь ихэвчлэн GET арга эсвэл POST аргыг ашиглах гэсэн хоёр төрлийн хүсэлтээс хамаардаг. Эдгээр хоёр төрлийн хүсэлтийн ялгааны талаар хэдэн үг хэлье.

GET арга:

    Параметрүүд нь HTTP хүсэлтийн толгой хэсэгт дамждаг тул тэдгээр нь тушаалын мөрөнд харагдах бөгөөд ийм хүсэлтийг хавчуурга болгон хадгалах боломжтой. Толгойн нийт урт хязгаарлагдмал тул GET ашиглан дамжуулсан параметрийн тоо, урт нь бас хязгаарлагдмал.

    Дараалан гүйцэтгэсэн хэд хэдэн ижил GET хүсэлтийн үр дүн ижил байх ёстой гэж үздэг.

POST арга:

    Хүсэлтийн параметрүүд нь HTTP хүсэлтийн үндсэн хэсэгт дамждаг тул тушаалын мөрөнд байхгүй байна. Параметрүүдийн тоо, хэмжээ хязгааргүй байна.

    Олон ижил POST хүсэлтийн үр дүн нь зорилтот объектын шинж чанарыг өөрчилж болзошгүй тул өөр утгыг буцаана гэж үздэг.

GET аргыг зорилтот нөөцийн өгөгдлийн бүтцэд өөрчлөлт оруулах шаардлагагүй үед параметрийн дагуу мэдээллийн нөөцийн агуулгыг сэргээхэд ашиглах ёстой бөгөөд хүсэлтийг (URL) хавчуургад хадгалах нь зүйтэй юм. GET арга нь POST аргыг ашиглан ижил төстэй хүсэлтүүдээс хурдан байж болно.

URL хаягаас сервер рүү дамжуулсан параметрүүдийг нуух шаардлагатай үед POST аргыг ашиглах хэрэгтэй. Энэ аргыг зорилтот нөөцийн агуулгад өөрчлөлт оруулах хүсэлтэд мөн параметрийн эдгээр өөрчлөлтийн тайлбарыг (хүсэлтийн үндсэн хэсэгт) дамжуулахад ашиглах ёстой.

Нөөц рүү хүрэх зам?parameter1=value1¶meter2=value2&…

Хэрэв танд параметрүүдийг бөглөх тусгай HTML маягт байхгүй бол та хөтөчийн командын мөрөнд туршилтын параметрүүдийг шууд дамжуулж PHP програмынхаа ажиллагааг дибаг хийх боломжтой, жишээлбэл:

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

Сервер талын хүсэлтийн параметрүүдэд хандахын тулд та глобал массивыг ашиглах хэрэгтэй $_GETТэгээд $_POSTтус тус. Хэрэв таны аппликешн ямар аргаар хандах нь хамаагүй бол та массив ашиглах хэрэгтэй $_REQUEST, $_GET болон $_POST массивуудын өгөгдлийг нэгтгэдэг, жишээ нь:

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

Энэ жишээнд програм нь "sql" параметрийг дамжуулсан эсэхийг тодорхойлдог: хэрэв тийм бол өөрийн утгыг харгалзах хувьсагчид, үгүй ​​бол хоосон утгыг онооно.

HTML маягтаар дамжуулан HTTP хүсэлтийн параметрүүдийг тодорхойлох

Мэдээжийн хэрэг, хөтчийн командын мөрөнд параметрүүдийг гараар шууд тодорхойлох нь тийм ч тохиромжтой биш юм. Энэ арга нь вэб програмууд хоорондоо холбогдох үед HTTP хүсэлтийг программчлан гүйцэтгэхэд тохиромжтой. Үйлчлүүлэгч тал дээр өгөгдөл оруулах, анхны баталгаажуулалтыг хийхийн тулд та HTML маягт болон . Дараа нь POST аргын параметр болгон серверт дамжуулагдах текстийн параметр (утга) оруулах хамгийн энгийн хэлбэрийн жишээг доор харуулав.

арга = "нийтлэл" үйлдэл =’sql.php’ > SQL:

Маягтын элементийн аргын шинж чанар нь сервер рүү өгөгдөл дамжуулах аргыг тодорхойлох аргыг тодорхойлдог (авах эсвэл илгээх). Үйлдлийн шинж чанарыг тодорхойлдог php файл, энэ нь хүсэлтийг боловсруулах болно. Хэрэв зохицуулагч нь одоогийн файл байх ёстой бол үйлдлийн шинж чанарыг нэмэх шаардлагагүй. Утга нь HTTP хүсэлтийн параметр болгон дамжуулагдах ёстой бүх элементүүдийн хувьд та нэрийн шинж чанарын өвөрмөц утгыг тодорхойлох ёстой. Энэ нь атрибутын утга юм нэрбайх болно индекс$_GET, $_POST эсвэл $_REQUEST массивуудад (дээрх жишээг үзнэ үү). Товч дарж байна оруулахоруулсан бүх утгуудын хамт маягтыг сервер рүү илгээдэг.