Memproses permintaan http php. Memproses permintaan menggunakan PHP. Mendefinisikan parameter permintaan HTTP melalui formulir HTML




Klien browser dapat mengirim informasi ke server web.

Sebelum browser mengirimkan informasi, browser mengkodekannya menggunakan skema yang disebut pengkodean URL. Dalam skema ini, pasangan nama/nilai digabungkan dengan tanda sama dengan, dan pasangan berbeda dipisahkan dengan tanda ampersand.

Nama1=nilai1&nama2=nilai2&nama3=nilai3

Spasi dihilangkan dan diganti dengan karakter +, dan karakter non-alfanumerik lainnya diganti dengan nilai heksadesimal. Setelah informasi dikodekan, informasi tersebut dikirim ke server.

metode DAPATKAN

Metode GET mengirimkan informasi pengguna yang disandikan yang ditambahkan ke permintaan halaman. Apakah halaman dan informasi yang disandikan terpisah satu sama lain? tanda tanya.

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

  • Metode GET menghasilkan string panjang yang muncul di log server Anda di kolom "Lokasi" browser.
  • Metode GET dibatasi hanya mengirim hingga 1024 karakter saja.
  • Jangan pernah menggunakan metode GET jika Anda memiliki kata sandi atau informasi sensitif lainnya untuk dikirim ke server.
  • GET tidak dapat digunakan untuk mentransfer data biner, seperti gambar atau dokumen teks, ke server.
  • Data yang dikirim dengan metode GET dapat diakses menggunakan variabel lingkungan QUERY_STRING.
  • PHP menyediakan array asosiatif $_GET untuk mengakses semua informasi yang dikirim menggunakan metode GET.

if($_GET["nama"] || $_GET["usia"]) ( echo "Selamat datang ". $_GET["nama"]; echo "Anda adalah ". $_GET["usia"]. " tahun "; KELUAR(); )

Nama: Usia:

metode POSTING

metode POS mengirimkan informasi melalui header HTTP. Informasi tersebut dikodekan seperti yang dijelaskan dalam kasus metode ini MENDAPATKAN, dan ditempatkan di header QUERY_STRING.

  • Metode POST tidak memiliki batasan ukuran data yang perlu dikirim.
  • Metode POST dapat digunakan untuk mengirim data ASCII dan biner.
  • Data yang dikirim menggunakan metode POST melewati header HTTP, sehingga keamanan bergantung pada protokol HTTP. Dengan menggunakan HTTP Aman, Anda dapat memastikan bahwa informasi Anda aman.
  • PHP menyediakan array asosiatif $_POST untuk mengakses semua informasi yang dikirim menggunakan metode POST.

Coba contoh berikut dengan menempatkan kode sumber di skrip test.php.

if($_POST["nama"] || $_POST["usia"]) ( if (preg_match("[^A-Za-z"-]",$_POST["nama"])) ( die (" nama tidak valid dan nama harus alpha"); ) echo "Selamat datang ". $_POST["nama"]; echo "Anda adalah ". $_POST["usia"]. " tahun."; exit(); )

Nama: Usia:

variabel $_REQUEST

variabel PHP $_PERMINTAAN berisi konten seperti $_GET, $_POST, Jadi $_COOKIE. Kita akan membahas variabelnya $_COOKIE ketika kita berbicara tentang cookie.

Variabel PHP $_REQUEST dapat digunakan untuk mengambil hasil dari data formulir yang dikirimkan menggunakan metode GET dan POST.

Untuk metode POST

Konten formulir dikodekan dengan cara yang persis sama seperti metode GET (lihat di atas), namun alih-alih menambahkan string ke URL, konten permintaan dikirim sebagai blok data sebagai bagian dari operasi POST. Jika atribut ACTION ada, maka nilai URL yang ditemukan di sana menentukan ke mana harus mengirim blok data ini. Metode ini, sebagaimana telah disebutkan, direkomendasikan untuk mentransfer blok data besar.

Informasi yang dimasukkan oleh pengguna dan dikirim ke server menggunakan metode POST disajikan pada input standar ke program yang ditentukan oleh atribut tindakan, atau ke skrip saat ini jika atribut ini dihilangkan. Panjang file yang dikirim diteruskan dalam variabel lingkungan CONTENT_LENGTH, dan tipe data diteruskan dalam variabel CONTENT_TYPE.

Anda hanya dapat mengirim data menggunakan metode POST menggunakan formulir HTML, karena data dikirim di badan permintaan, dan bukan di header, seperti di GET. Oleh karena itu, Anda dapat mengubah nilai parameter hanya dengan mengubah nilai yang dimasukkan dalam formulir. Saat menggunakan POST, pengguna tidak melihat data yang dikirim ke server.

Keuntungan utama permintaan POST adalah keamanan dan fungsionalitasnya yang lebih baik dibandingkan permintaan GET. Oleh karena itu, metode POST lebih sering digunakan untuk mengirimkan informasi penting, serta informasi berskala besar. Namun, Anda tidak boleh bergantung sepenuhnya pada keamanan mekanisme ini, karena data permintaan POST juga dapat dipalsukan, misalnya dengan membuat file HTML di mesin Anda dan mengisinya dengan data yang diperlukan. Selain itu, tidak semua klien dapat menggunakan metode POST, sehingga membatasi kasus penggunaannya.

Saat mengirim data ke server dengan metode apa pun, tidak hanya data yang dimasukkan oleh pengguna yang dikirimkan, tetapi juga sejumlah variabel, yang disebut variabel lingkungan, yang mengkarakterisasi klien, riwayat operasinya, jalur file, dll. Berikut adalah beberapa variabel lingkungan:

  • REMOTE_ADDR – Alamat IP host (komputer) yang mengirimkan permintaan;
  • REMOTE_HOST – nama host asal permintaan dikirim;
  • HTTP_REFERER – alamat halaman yang tertaut ke skrip saat ini;
  • REQUEST_METHOD – metode yang digunakan saat mengirim permintaan;
  • QUERY_STRING – informasi terletak di URL setelah tanda tanya;
  • SCRIPT_NAME – jalur virtual ke program yang harus dijalankan;
  • HTTP_USER_AGENT – informasi tentang browser yang digunakan klien

Sejauh ini kami hanya menyebutkan bahwa permintaan klien diproses di server menggunakan program khusus. Faktanya, kita dapat menulis program ini sendiri, termasuk dalam PHP, dan program ini akan melakukan apapun yang kita inginkan dengan data yang diterima. Untuk menulis program ini, Anda perlu memahami beberapa aturan dan alat yang ditawarkan PHP untuk tujuan ini.



Dalam skrip PHP, ada beberapa cara untuk mengakses data yang dikirim oleh klien melalui HTTP. Sebelum PHP 4.1.0, akses ke data tersebut dilakukan dengan nama variabel yang ditransfer (ingat bahwa data ditransfer dalam bentuk pasangan “nama variabel, simbol “=”, nilai variabel”). Jadi, jika, misalnya, first_name=Nina dilewatkan, maka variabel $first_name dengan nilai Nina muncul di dalam skrip. Jika perlu untuk membedakan metode transfer data, maka array asosiatif $HTTP_POST_VARS dan $HTTP_GET_VARS digunakan, kuncinya adalah nama variabel yang ditransfer, dan nilainya masing-masing adalah nilai ​dari variabel-variabel ini. Jadi, jika pasangan first_name=Nina dilewatkan oleh metode GET, maka $HTTP_GET_VARS["first_name"]="Nina".

Tidak aman menggunakan nama variabel yang diteruskan secara langsung dalam suatu program. Oleh karena itu, diputuskan, dimulai dengan PHP 4.1.0, untuk menggunakan array khusus – $_REQUEST – untuk mengakses variabel yang dikirimkan melalui permintaan HTTP. Array ini berisi data yang ditransfer menggunakan metode POST dan GET, serta menggunakan cookie HTTP. Ini adalah susunan asosiatif superglobal, mis. nilainya dapat diperoleh di mana saja dalam program menggunakan nama variabel yang sesuai (elemen formulir) sebagai kunci.

Contoh 4.2. Katakanlah kita membuat formulir untuk mendaftarkan peserta sekolah korespondensi pemrograman, seperti pada contoh di atas. Kemudian pada file 1.php yang memproses form ini, Anda dapat menulis yang berikut ini:

";$str .="Anda telah memilih untuk mempelajari kursus tentang ".$_REQUEST["kurs"];echo $str;?>

Kemudian, jika kita memasukkan nama “Vasya”, nama keluarga “Petrov” ke dalam formulir dan memilih kursus PHP di antara semua kursus, kita akan menerima pesan berikut di layar browser:

Setelah pengenalan array $_REQUEST, array $HTTP_POST_VARS dan $HTTP_GET_VARS masing-masing diganti namanya menjadi $_POST dan $_GET, untuk konsistensi, tetapi array itu sendiri tidak hilang dari penggunaan karena alasan kompatibilitas dengan versi PHP sebelumnya. Berbeda dengan pendahulunya, array $_POST dan $_GET telah menjadi super-global, yaitu dapat diakses secara langsung dan di dalam fungsi dan metode.

Mari kita beri contoh penggunaan array ini. Katakanlah kita perlu memproses formulir yang berisi elemen input bernama nama_depan, nama_belakang, kurs (misalnya form.html di atas). Data ditransfer menggunakan metode POST, dan kami tidak ingin memproses data yang ditransfer dengan metode lain. Hal ini dapat dilakukan sebagai berikut:

";$str .= "Anda telah memilih untuk mempelajari kursus di ". $_POST["kurs"];echo $str;?>

Kemudian pada layar browser, jika kita memasukkan nama “Vasya”, nama belakang “Petrov” dan memilih kursus PHP di antara semua kursus, kita akan melihat pesan, seperti pada contoh sebelumnya:

Halo, Vasya Petrov! Anda telah memilih untuk mempelajari kursus PHP

Untuk mempertahankan kemampuan memproses skrip sebelum PHP 4.1.0, arahan register_globals diperkenalkan, mengizinkan atau menolak akses ke variabel secara langsung berdasarkan namanya. Jika parameter register_globals=On ada di file pengaturan PHP, maka variabel yang diteruskan ke server menggunakan metode GET dan POST dapat diakses hanya dengan namanya (yaitu Anda dapat menulis $first_name). Jika register_globals=Tidak Aktif, maka Anda perlu menulis $_REQUEST["nama_pertama"] atau $_POST["nama_pertama"], $_GET["nama_pertama"], $HTTP_POST_VARS["nama_pertama"], $HTTP_GET_VARS["nama_pertama"]. Dari sudut pandang keamanan, lebih baik menonaktifkan arahan ini (yaitu register_globals=Off). Dengan mengaktifkan direktif register_globals, array yang tercantum di atas juga akan berisi data yang diteruskan oleh klien.

Terkadang Anda perlu mengetahui nilai variabel lingkungan, seperti metode yang digunakan untuk mengirim permintaan atau alamat IP komputer yang mengirimkan permintaan. Anda bisa mendapatkan informasi ini menggunakan fungsi getenv(). Ini mengembalikan nilai variabel lingkungan yang namanya diteruskan sebagai parameter.

Seperti yang telah kami katakan, jika metode GET digunakan, maka data ditransfer dengan menambahkan string kueri dalam bentuk pasangan variabel_nama=nilai ke URL sumber daya. Apa pun setelah tanda tanya di URL dapat diambil menggunakan perintah

Getenv("QUERY_STRING");

Berkat ini, dimungkinkan untuk mentransfer data dalam beberapa bentuk lain menggunakan metode GET. Misalnya, Anda hanya bisa menentukan nilai beberapa parameter menggunakan tanda plus, dan dalam skrip Anda bisa menguraikan string kueri menjadi beberapa bagian, atau Anda bisa meneruskan nilai hanya satu parameter. Dalam hal ini, elemen kosong dengan kunci yang sama dengan nilai ini (seluruh string kueri) akan muncul di array $_GET, dan karakter “+” yang ditemukan dalam string kueri akan diganti dengan garis bawah “_”.

Dengan metode POST, data dikirimkan hanya menggunakan formulir, dan pengguna (klien) tidak melihat data apa yang dikirim ke server. Untuk melihatnya, peretas harus mengganti formulir kita dengan miliknya. Kemudian server akan mengirimkan hasil pengolahan form yang salah ke tempat yang salah. Untuk menghindari hal ini, Anda dapat memeriksa alamat halaman asal pengiriman data. Ini dapat dilakukan lagi dengan menggunakan fungsi getenv() :

Getenv("HTTP_REFERER");

Sekarang saatnya menyelesaikan masalah yang dirumuskan di awal perkuliahan.

(Distribusi Denver) dan Anda telah mempelajari cara menulis program sederhana dalam PHP, maka inilah saatnya mempelajari bagaimana browser (klien) dapat membuat permintaan ke server dan menerima respons yang sesuai. Dengan menggunakan contoh pembuatan formulir HTML sederhana, kita akan mempelajari prinsip dasar interaksi tersebut.

Jika Anda sudah menguasai direktori Denver, Anda dapat membuat file PHP apa pun di direktori yang nyaman bagi Anda dan mulai menulis kode. Bagi yang belum yakin dengan kemampuannya, saya menyarankan Anda untuk melakukan hal berikut: pada disk virtual dengan Denver (biasanya Z) di folder home, buat folder pelajaran. Selanjutnya, di folder ini, buat folder lain - www. Ini adalah folder proyek kerja Anda, yang dapat diakses dari bilah alamat browser Anda. Nyalakan ulang Denver agar host yang dibuat terdaftar di sistem. Terakhir pada folder www, buat file index.php. Ini akan menjadi file utama dengan kode Anda.

Seperti yang Anda lihat, ini adalah markup HTML biasa, tetapi kami menamai file tersebut index.php, yang berarti sekarang kami dapat memasukkan instruksi PHP apa pun ke dalam dokumen.

Jika sekarang Anda membuka http://lessons/ di browser Anda, Anda akan melihat hasil berikut:

Isi kolom (misalnya: nama – Vasya, tahun lahir – 1990) dan klik tombol “kirim”. Apa yang kamu lihat? Tidak ada apa-apa! Sekali lagi bentuknya sama, hanya kosong. Namun, jangan buru-buru marah - lihatlah bilah alamat browser Anda. Itu telah berubah dan sekarang terlihat seperti ini:

Http://lessons/index.php?user_name=Vasya&user_year=1990&submit_form=send

Artinya server akhirnya menerima data Anda!

Mari kita cari tahu sekarang.

metode DAPATKAN

Pertama, apa itu form HTML? Ini adalah antarmuka yang memungkinkan Anda mengirim data apa pun dari browser klien ke server. Lihatlah atribut formulir Anda:

Atribut action bertanggung jawab atas alamat penerima data yang dikirim. Dalam kasus kami, formulir dikirim ke alamat yang sama, yaitu. di pelajaran/index.php.

Yang paling penting adalah atribut metode, yang mendefinisikan metode pengiriman permintaan ke server. Ada beberapa metode seperti itu, dan yang paling umum (dan praktis) adalah metode GET dan POST. Sekarang kita akan tertarik dengan metode GET.

Permintaan GET berarti data akan dikirim ke server langsung melalui bilah alamat. Anda telah melihatnya dengan mengirimkan formulir - data tertentu telah ditambahkan ke baris alamat. Dari mana data ini berasal? Perhatikan tag input pada form HTML. Semuanya memiliki atribut nama, yang menetapkan nama bidang.

Dengan metode GET, karakter "?" ditambahkan ke alamat utama. (tanda tanya) agar server memahami bahwa ada data yang masuk. Setelah "?" Datanya sendiri langsung masuk dalam bentuk nama=nilai. Jika terdapat lebih dari satu data, maka dipisahkan dengan simbol gabungan "&". Kirimkan formulir dengan nilai bidang yang berbeda dan lihat sendiri.

Waktunya telah tiba untuk mempelajari bagaimana “menangkap” dan memproses data yang diterima. Karena atribut action menunjuk ke file index.php saat ini, ini berarti datanya datang ke sini di file yang sama kita akan menulis kode untuk memproses permintaan GET.

Jadi, tepat setelah tag Mari tambahkan kode PHP berikut:

Simpan file, buka http://lessons/ lagi, kirimkan formulir dan - lihatlah! - apa yang kamu lihat?

Tepat setelah mengirimkan formulir, server diterima dan diproses menerima data dan mengirimkan respons Anda ke browser!

Mari kita lihat kode PHP proyek kita, yang mewakili suatu kondisi:

Jika (isset($_GET["submit_form"])) ( )

Server memeriksa apakah variabel permintaan GET bernama submit_form telah diterima? Sederhananya, apakah formulir sudah diserahkan? Jika demikian, kode PHP sisi server mengirimkan markup HTML baru dengan responsnya langsung ke browser pengguna menggunakan pernyataan echo. Jika Anda mempelajari dengan cermat kode pengendali tertulis, maka semuanya akan segera menjadi jelas bagi Anda!

Metode GET ini menarik! Ubah bilah alamat menjadi seperti ini:

Http://lessons/index.php?user_name=Nama-saya&tahun_pengguna=1900&submit_form=kirim

dan tekan tombol "Enter". Server akan menjawab Anda lagi, setelah menerima data lain! Saya pikir semuanya sudah jelas.

Kekurangan metode GET adalah, pertama, terdapat batasan jumlah data yang ditransfer, dan kedua, metode ini terbuka dan informasi apa pun dapat disadap. Itu sebabnya data pribadi pengguna(login, nama, kata sandi, dll.) tidak pernah dapat dikirimkan melalui baris alamat.

metode POSTING

Metode ini melibatkan transmisi data dalam aliran paket terpisah di badan permintaan, yang secara andal melindungi data yang dikirim dan memungkinkan Anda mentransfer sejumlah besar informasi, yang hanya dapat dibatasi oleh pengaturan server. Oleh karena itu, jenis permintaan ini ideal untuk mengirim data pribadi dan semua jenis file.

Edit file Anda dengan mengganti nama variabel $_GET dengan $_POST di kode PHP, dan tulis method="POST" di formulir. Refresh halaman dan kirimkan formulir lagi. Hasilnya akan sama dengan metode GET, tetapi bilah alamat tetap tidak berubah, yang berarti data dikirim dengan aman dalam bentuk terlindungi di badan permintaan itu sendiri.

Untuk mengkonsolidasikan materi, kami akan membuat aplikasi web kecil yang akan meminta login dan kata sandi pengguna untuk masuk ke situs. Kode contohnya akan relatif kompleks dan memerlukan perhatian dan keinginan Anda untuk memahami fungsionalitas program PHP.

File indeks.php:

Jalankan contohnya dan lihat apa yang terjadi. Pertama, login dan kata sandi pengguna diminta (dalam kode kami mendefinisikannya sebagai "admin" dan "rahasia"), jika semuanya benar, kami dibawa ke halaman utama situs, jika datanya salah, yang sesuai peringatan ditampilkan.

Mari kita pertimbangkan penerapan teknologi ini.

Harap dicatat bahwa kami tidak menampilkan seluruh kode formulir HTML secara langsung, tetapi menyimpannya dalam variabel $form.

Hati-hati dengan kutipan! Semua kode HMTL berada di dalam tanda kutip tunggal, jadi tanda kutip internalnya harus berupa tanda kutip ganda. Jika Anda menulis

$form = "...kode Anda...",

maka kode internal akan berisi kebalikannya - tanda kutip tunggal.

Selanjutnya baris 27 mengecek apakah form sudah submit (kondisi 1 pada gambar), jika belum maka akan ditampilkan form HTML dan scriptnya. berhenti bekerja– fungsi mati(). Tidak ada yang lain kecuali formulir yang ditampilkan di browser.

Jika data sudah diterima, maka variabel POST diperiksa kesesuaiannya dengan yang ditentukan (kondisi 2 pada gambar). Jika tidak cocok, pesan peringatan ditampilkan, formulir login HTML ditampilkan, dan skrip keluar lagi (mati()).

Jika kondisi kedua terpenuhi, maka skrip akan melewatkan semua pernyataan lain dan melanjutkan menampilkan halaman utama. (transisi 3 pada Gambar.).

Ini adalah contoh paling sederhana. Secara alami, dalam proyek nyata, pemeriksaan langsung seperti itu tidak dilakukan - login dan kata sandi disimpan dalam bentuk terenkripsi dalam file atau database. Oleh karena itu, artikel ini menjelaskan teknologi interaksi antara klien dan server berdasarkan permintaan GET dan POST. Untuk membuat aplikasi yang lengkap, Anda harus memiliki pengetahuan yang kuat tentang database dan pemrograman berorientasi objek. Lebih lanjut tentang ini di artikel berikut.

Isi formulir dikodekan persis sama dengan metodenya MENDAPATKAN(lihat di atas), tetapi alih-alih menambahkan baris ke dalamnya URL isi permintaan dikirim sebagai blok data sebagai bagian dari operasi POS. Jika atribut ACTION ada, maka nilainya URL, yang ada di sana, menentukan ke mana harus mengirim blok data ini. Metode ini, sebagaimana telah disebutkan, direkomendasikan untuk mentransfer blok data besar.

Informasi dimasukkan oleh pengguna dan dikirimkan server menggunakan metode tersebut POS, diberikan ke input standar ke program yang ditentukan dalam atribut tindakan, atau skrip saat ini jika atribut ini dihilangkan. Panjang file yang dikirim dikirimkan dalam variabel lingkungan CONTENT_LENGTH, dan tipe datanya ada pada variabel CONTENT_TYPE.

Lewati data menggunakan metode POS hanya mungkin dengan bantuan formulir HTML, karena data dikirim di badan permintaan, dan bukan di header, seperti pada MENDAPATKAN. Oleh karena itu, Anda dapat mengubah nilai parameter hanya dengan mengubah nilai yang dimasukkan dalam formulir. Menggunakan POS pengguna tidak melihat yang dikirimkan server data.

Keuntungan utama POS permintaan adalah keamanan dan fungsionalitasnya yang lebih besar dibandingkan dengan permintaan GET. Oleh karena itu metodenya POS Lebih sering digunakan untuk menyampaikan informasi penting, serta informasi berskala besar. Namun, Anda tidak boleh bergantung sepenuhnya pada keamanan mekanisme ini, karena datanya POS Permintaan tersebut juga dapat dipalsukan, misalnya dengan membuat file html di mesin Anda dan mengisinya dengan data yang diperlukan. Apalagi tidak semua klien dapat menerapkan metode tersebut POS, yang membatasi kasus penggunaannya.

Saat mengirim data ke server menggunakan metode apa pun, tidak hanya data yang dimasukkan oleh pengguna yang dikirimkan, tetapi juga sejumlah variabel yang disebut variabel lingkungan, mencirikan klien, riwayat kerjanya, jalur ke file, dll. Berikut ini beberapa di antaranya variabel lingkungan:

    REMOTE_ADDR – Alamat IP host (komputer) yang mengirimkan permintaan;

    REMOTE_HOST – nama host dari mana permintaan dikirim;

    HTTP_REFERER – alamat halaman yang tertaut ke skrip saat ini;

    PERMINTAAN_METHOD – metode yang digunakan saat mengirim permintaan;

    QUERY_STRING - informasi yang terkandung di dalamnya URL setelah tanda tanya;

    SCRIPT_NAME – jalur virtual ke program yang akan dijalankan;

    HTTP_USER_AGENT – informasi tentang browser yang digunakan klien

Menangani permintaan menggunakan php

Sejauh ini kami hanya menyebutkan permintaan itu klien diproses di server menggunakan program khusus. Faktanya, kita dapat menulis program ini sendiri, termasuk dalam PHP, dan program ini akan melakukan apapun yang kita inginkan dengan data yang diterima. Untuk menulis program ini, Anda perlu memahami beberapa aturan dan alat yang ditawarkan PHP untuk tujuan ini.

Dalam skrip PHP ada beberapa cara untuk mengakses data yang dikirimkan klien sesuai dengan protokol HTTP. Sebelum PHP 4.1.0, akses ke data tersebut dilakukan dengan nama variabel yang ditransfer (ingat bahwa data ditransfer dalam bentuk pasangan “nama variabel, simbol “=”, nilai variabel”). Jadi, jika, misalnya, first_name=Nina dilewatkan, maka variabel $first_name dengan nilai Nina muncul di dalam skrip. Jika perlu untuk membedakan metode transfer data, maka array asosiatif digunakan $HTTP_POST_VARS Dan $HTTP_GET_VARS, kuncinya adalah nama variabel yang ditransfer, dan nilainya masing-masing adalah nilai variabel tersebut. Jadi, jika pasangan first_name=Nina diteruskan oleh metode tersebut MENDAPATKAN, lalu $HTTP_GET_VARS["nama_depan"]="Nina".

Tidak aman menggunakan nama variabel yang diteruskan secara langsung dalam suatu program. Oleh karena itu, diputuskan, mulai dari PHP 4.1.0, untuk menggunakan array khusus untuk mengakses variabel yang dikirimkan menggunakan permintaan HTTP - $_PERMINTAAN. Array ini berisi data yang diteruskan oleh metode POS Dan MENDAPATKAN, dan juga dengan bantuan HTTP kue. Ini adalah susunan asosiatif superglobal, mis. nilainya dapat diperoleh di mana saja dalam program menggunakan nama variabel yang sesuai (elemen formulir) sebagai kunci.

Contoh 4.2. Katakanlah kita membuat formulir untuk mendaftarkan peserta sekolah korespondensi pemrograman, seperti pada contoh di atas. Kemudian di file1.php yang memproses formulir ini, Anda dapat menulis yang berikut:

$str = "Halo,

".$_REQUEST["nama_depan"]. "

".$_REQUEST["nama_belakang"]."!
";

$str .="Anda telah memilih untuk mempelajari suatu kursus

".$_REQUEST["kurs"];

Contoh 4.2. Mengajukan1.php,pengolahanmembentukformulir.html(html , txt )

Kemudian, jika kita memasukkan nama “Vasya”, nama keluarga “Petrov” ke dalam formulir dan memilih kursus PHP di antara semua kursus, kita akan menerima pesan berikut di layar browser:

Halo, Vasya Petrov!

Setelah memperkenalkan array $_PERMINTAAN array $HTTP_POST_VARS Dan $HTTP_GET_VARS untuk konsistensi diubah namanya menjadi $_POST Dan $_GET masing-masing, tetapi mereka sendiri tidak hilang dari penggunaan karena alasan kompatibilitas dengan versi PHP sebelumnya. Berbeda dengan pendahulunya, array $_POST Dan $_GET telah menjadi super-global, yaitu dapat diakses secara langsung dan di dalam fungsi dan metode.

Mari kita beri contoh penggunaan array ini. Katakanlah kita perlu memproses formulir yang berisi elemen masukan bernama nama_depan,nama_belakang,kurs (misalnya, form.html di atas). Data ditransfer menggunakan metode POS, dan kami tidak ingin memproses data yang dikirimkan dengan metode lain. Hal ini dapat dilakukan sebagai berikut:

$str = "Halo,

".$_POST ["nama_depan"]."

".$_POST ["nama_belakang"] ."!
";

$str .= "Anda telah memilih untuk mempelajari kursus di ".

Kemudian pada layar browser, jika kita memasukkan nama “Vasya”, nama belakang “Petrov” dan memilih kursus PHP di antara semua kursus, kita akan melihat pesan, seperti pada contoh sebelumnya:

Halo, Vasya Petrov!

Anda telah memilih untuk mempelajari kursus PHP

Untuk mempertahankan kemampuan memproses skrip lebih awal dari PHP 4.1.0, sebuah arahan diperkenalkan register_globals, mengizinkan atau menolak akses ke variabel secara langsung berdasarkan namanya. Jika parameter register_globals=On di file pengaturan PHP, maka variabel lolos server metode MENDAPATKAN Dan POS, Anda cukup menghubungi mereka dengan nama mereka (yaitu Anda dapat menulis $nama_pertama). Jika register_globals=Tidak Aktif, maka Anda perlu menulis $_REQUEST["nama_pertama"] atau $_POST["nama_pertama"], $_GET["nama_pertama"], $HTTP_POST_VARS["nama_pertama"], $HTTP_GET_VARS["nama_pertama"]. Dari sudut pandang keamanan, lebih baik menonaktifkan arahan ini (yaitu register_globals=Off). Saat arahan diaktifkan register_globals array yang tercantum di atas juga akan berisi data yang dikirimkan klien.

Terkadang ada kebutuhan untuk mencari tahu arti dari beberapa hal variabel lingkungan, seperti metode yang digunakan untuk mengirimkan permintaan atau alamat IP komputer yang mengirimkan permintaan tersebut. Anda dapat memperoleh informasi tersebut menggunakan fungsi tersebut dapatkanv(). Ini mengembalikan nilai variabel lingkungan, yang namanya diteruskan sebagai parameter.

getenv("PERMINTAAN_METHOD");

// akan mengembalikan metode yang digunakan

echo getenv("REMOTE_ADDR");

// akan menampilkan alamat IP pengguna,

// siapa yang mengirim permintaan

Contoh 4.3. Menggunakan fungsi getenv() (html , txt )

Seperti yang sudah kami katakan, jika metode tersebut digunakan MENDAPATKAN, kemudian data dikirimkan dengan menambahkan query string berupa pasangan “variable_name=value to URL-alamat sumber daya." Segala sesuatu yang tertulis di dalamnya URL setelah tanda tanya, dapat diperoleh dengan menggunakan perintah

getenv("QUERY_STRING");

Berkat ini, dimungkinkan untuk menggunakan metode ini MENDAPATKAN mengirimkan data dalam beberapa bentuk lain. Misalnya, Anda hanya bisa menentukan nilai beberapa parameter menggunakan tanda plus, dan dalam skrip Anda bisa menguraikan string kueri menjadi beberapa bagian, atau Anda bisa meneruskan nilai hanya satu parameter. Dalam hal ini, dalam array $_GET elemen kosong dengan kunci yang sama dengan nilai ini (seluruh string kueri) akan muncul, dan karakter “+” yang ditemukan dalam string kueri akan diganti dengan garis bawah “_”.

metode POS data ditransfer hanya menggunakan formulir, dan pengguna ( klien) tidak melihat data apa yang sedang dikirim server. Untuk melihatnya, peretas harus mengganti formulir kita dengan miliknya. Kemudian server akan mengirimkan hasil pengolahan formulir yang salah ke tempat yang salah. Untuk menghindari hal ini, Anda dapat memeriksa alamat halaman asal pengiriman data. Ini dapat dilakukan lagi dengan menggunakan fungsi tersebut dapatkanv():

getenv("HTTP_REFERER");

Sekarang saatnya menyelesaikan masalah yang dirumuskan di awal perkuliahan.

PHP saat ini menjadi salah satu bahasa terpopuler untuk mengimplementasikan aplikasi web. Kursus ini dikhususkan untuk mempelajari dasar-dasarnya. Penekanannya adalah pada penerapan praktis dari keterampilan yang diperoleh.

Bahasa PHP diciptakan untuk memecahkan masalah praktis tertentu di Internet (yang dapat diketahui dengan membaca kuliah pertama kursus). Kami juga akan berusaha untuk tidak terlalu terganggu oleh penalaran teoretis, dan akan berusaha memecahkan masalah tertentu di setiap perkuliahan. Sebagian besar contoh diambil dari sistem kehidupan nyata: museum virtual sejarah ilmu komputer. Bagian pertama dari kursus ini dikhususkan untuk mempelajari dasar-dasar sintaksis dan struktur kontrol. Setelah itu, teknologi client-server dianggap sebagai bidang aplikasi utama bahasa PHP. Kemudian kami melanjutkan mempelajari fungsi bawaan yang paling berguna menurut kami dan memecahkan masalah praktis dengan bantuannya. Meskipun model objek dalam bahasa PHP bukan yang terkaya, keberadaan mendasarnya memungkinkan Anda untuk mendeskripsikan model data objek secara alami. Sebagai model dasar, model dokumen museum ilmu komputer virtual akan dipertimbangkan. Setelah ini, sejumlah aspek terapan akan dipertimbangkan: bekerja dengan sistem file, dengan database, string, sesi, DOM XML - semua ini akan memungkinkan kita untuk mempertimbangkan tugas utama penggunaan praktis bahasa tersebut.

Seperti terlihat pada tabel di atas, server Apache menempati posisi terdepan. Segala sesuatu yang kami katakan tentang server web berpusat pada Apache kecuali dinyatakan lain. Kami telah membicarakan cara menginstalnya di komputer Anda pada kuliah pertama. Dan sekarang, seperti yang dijanjikan, mari beralih ke protokol HTTP.

Protokol HTTP dan metode transfer data ke server

Internet dibangun berdasarkan prinsip berlapis-lapis, mulai dari lapisan fisik, yang berhubungan dengan aspek fisik transfer informasi biner, hingga lapisan aplikasi, yang menyediakan antarmuka antara pengguna dan jaringan.

HTTP (HyperText Transfer Protocol) adalah protokol lapisan aplikasi yang dirancang untuk bertukar informasi hypertext di Internet.

HTTP menyediakan serangkaian metode untuk menentukan tujuan permintaan yang dikirim ke server. Metode ini didasarkan pada disiplin referensi, di mana Pengidentifikasi Sumber Daya Universal, baik sebagai Pencari Sumber Daya Universal (URL) atau Nama Sumber Daya Universal, digunakan untuk menunjukkan sumber daya yang mana metode tersebut harus diterapkan.

Pesan melalui jaringan saat menggunakan protokol HTTP dikirimkan dalam format yang mirip dengan format pesan surat Internet (RFC-822) atau format pesan MIME (Multi Purpose Internet Mail Exchange).

HTTP digunakan untuk komunikasi antara berbagai program pengguna dan program gateway yang menyediakan akses ke protokol Internet yang ada seperti SMTP (Email Protocol), NNTP (News Transfer Protocol), FTP (File Transfer Protocol), Gopher, dan WAIS. HTTP dirancang untuk memungkinkan gateway tersebut mentransfer data melalui server proxy tanpa kehilangan.

Protokol menerapkan prinsip permintaan/tanggapan. Program yang meminta - klien memulai interaksi dengan program yang merespons - server dan mengirimkan permintaan yang berisi:

Metode akses;

alamat URI;

Versi protokol;

Sebuah pesan (bentuknya mirip dengan MIME) berisi informasi tentang tipe data yang dikirimkan, informasi tentang klien yang membuat permintaan, dan mungkin isi (isi) pesan.

Respons server berisi:

Baris status yang mencakup versi protokol dan kode pengembalian (berhasil atau kesalahan);

Sebuah pesan (dalam bentuk mirip MIME) yang mencakup informasi server, informasi meta (yaitu informasi tentang isi pesan), dan isi pesan.

Protokol tidak menentukan siapa yang harus membuka dan menutup koneksi antara klien dan server. Dalam praktiknya, koneksi biasanya dibuka oleh klien, dan server, setelah mengirimkan respons, memulai penghentiannya.

Mari kita lihat lebih dekat bentuk permintaan yang dikirim ke server.

Formulir Permintaan Pelanggan

Klien mengirimkan permintaan ke server dalam salah satu dari dua bentuk: penuh atau dipersingkat. Permintaan dalam bentuk pertama disebut permintaan penuh, dan dalam bentuk kedua disebut permintaan sederhana.

Permintaan sederhana berisi metode akses dan alamat sumber daya. Secara formal dapat ditulis seperti ini:

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

Caranya bisa GET, POST, HEAD, PUT, DELETE dan lain-lain. Kami akan membicarakan yang paling umum nanti. URI yang diminta paling sering adalah URL sumber daya.

Contoh permintaan sederhana:

DAPATKAN http://phpbook.info/

Di sini GET adalah metode aksesnya, mis. metode yang harus diterapkan pada sumber daya yang diminta, dan http://phpbook.info/ adalah URL sumber daya yang diminta.

Permintaan lengkap berisi baris status, beberapa header (header permintaan, header umum, atau header konten), dan mungkin isi permintaan. Secara formal, bentuk umum permintaan secara lengkap dapat dituliskan sebagai berikut:

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

Tanda kurung siku di sini menunjukkan elemen header opsional, dan opsi alternatif dicantumkan melalui bilah vertikal. Elemen<Строка состояния>berisi metode permintaan dan URI sumber daya (seperti permintaan sederhana) dan, sebagai tambahan, versi protokol HTTP yang digunakan. Misalnya, untuk memanggil program eksternal, Anda dapat menggunakan baris status berikut:

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

Dalam hal ini, metode POST dan HTTP versi 1.0 digunakan.

Dalam kedua bentuk permintaan tersebut, URI sumber daya yang diminta memainkan peran penting. URI yang paling umum digunakan dalam bentuk URL sumber daya. Saat mengakses server, Anda dapat menggunakan URL lengkap dan sederhana.

Formulir lengkap berisi jenis protokol akses, alamat server sumber daya, dan alamat sumber daya di server (Gambar 4.2).

Dalam bentuk yang disingkat, protokol dan alamat server dihilangkan, hanya menunjukkan lokasi sumber daya dari root server. Formulir lengkap digunakan jika memungkinkan untuk meneruskan permintaan ke server lain. Jika pekerjaan dilakukan hanya dengan satu server, maka bentuk yang disingkat sering digunakan.


Beras. 4.2. Formulir URL lengkap

Metode

Seperti telah disebutkan, setiap permintaan klien ke server harus dimulai dengan spesifikasi metode. Metode mengkomunikasikan tujuan permintaan klien. Protokol HTTP mendukung beberapa metode, namun hanya tiga yang benar-benar digunakan: POST, GET dan HEAD. Metode GET memungkinkan Anda mengambil data apa pun yang diidentifikasi oleh URI dalam permintaan sumber daya. Jika URI mengarah ke suatu program, maka hasil pengoperasian program akan dikembalikan, bukan teksnya (kecuali, tentu saja, teks tersebut adalah hasil pengoperasiannya). Informasi tambahan yang diperlukan untuk memproses permintaan dimasukkan ke dalam permintaan itu sendiri (di baris status). Saat menggunakan metode GET, informasi sebenarnya yang diminta (teks dokumen HTML, misalnya) dikembalikan di bidang isi sumber daya.

Ada variasi metode GET - GET bersyarat. Metode ini memberitahu server bahwa permintaan harus dijawab hanya jika kondisi yang terdapat dalam bidang if-Modified- Since pada header permintaan benar. Lebih khusus lagi, isi sumber daya diteruskan sebagai respons terhadap permintaan jika sumber daya telah diubah sejak tanggal yang ditentukan dalam if-Modified- Since.

Metode HEAD mirip dengan metode GET, tetapi tidak mengembalikan isi sumber daya dan tidak memiliki pasangan bersyarat. Metode HEAD digunakan untuk memperoleh informasi tentang suatu sumber daya. Hal ini dapat berguna, misalnya, ketika memecahkan masalah pengujian link hypertext.

Metode POST dirancang untuk mentransfer informasi ke server seperti anotasi sumber daya, berita dan pesan email, data yang akan ditambahkan ke database, mis. untuk mengirimkan informasi dalam jumlah besar dan cukup penting. Berbeda dengan metode GET dan HEAD, POST mentransfer badan sumber daya, yaitu informasi yang diterima dari kolom formulir atau sumber input lainnya.

Selama ini kita baru berteori dan mengenal konsep dasar saja. Sekarang saatnya mempelajari bagaimana menerapkan semua ini dalam praktik. Nanti di kuliah kita akan melihat bagaimana mengirim permintaan ke server dan bagaimana memproses tanggapannya.

Menggunakan Formulir HTML untuk Mengirimkan Data ke Server

Bagaimana cara mentransfer data ke server? Untuk tujuan ini, bahasa HTML memiliki konstruksi khusus - formulir. Formulir dirancang untuk menerima informasi dari pengguna. Misalnya, Anda perlu mengetahui login dan kata sandi pengguna untuk menentukan halaman situs mana yang boleh dia akses. Atau Anda memerlukan data pribadi pengguna untuk dapat menghubunginya. Formulir justru digunakan untuk memasukkan informasi tersebut. Anda dapat memasukkan teks ke dalamnya atau memilih opsi yang sesuai dari daftar. Data yang ditulis dalam formulir dikirim untuk diproses ke program khusus (misalnya skrip PHP) di server. Tergantung pada data yang dimasukkan oleh pengguna, program ini dapat menghasilkan berbagai halaman web, mengirimkan permintaan ke database, meluncurkan berbagai aplikasi, dll.

Mari kita pahami sintaks formulir HTML. Mungkin banyak yang mengetahuinya, namun kami akan tetap mengulangi poin utamanya karena ini penting.

Jadi untuk membuat form di HTML digunakan tag FORM. Di dalamnya ada satu atau lebih perintah INPUT. Dengan menggunakan atribut tindakan dan metode dari tag FORM, Anda menentukan nama program yang akan memproses data formulir dan metode permintaan. Perintah INPUT menentukan jenis dan berbagai karakteristik informasi yang diminta. Data formulir dikirim setelah menekan tombol input jenis kirim. Mari buat formulir untuk mendaftarkan peserta sekolah pemrograman korespondensi.

Setelah diproses oleh browser, file ini akan terlihat seperti ini:


Beras. 4.3. Contoh formulir html

Seperti inilah bentuk dan tampilan formulir HTML. Kita akan berasumsi bahwa kita telah mempelajari atau mengingat cara membuatnya. Seperti yang bisa kita lihat, Anda dapat menentukan metode transfer data di formulir. Mari kita lihat apa yang terjadi jika Anda menentukan metode GET atau POST, dan apa perbedaannya.

Untuk metode GET

Saat mengirimkan data formulir menggunakan metode GET, konten formulir ditambahkan ke URL setelah tanda tanya sebagai pasangan nama=nilai yang digabungkan dengan ampersand &:

tindakan?nama1=nilai1&nama2=nilai2&nama3=nilai3

Di sini tindakan adalah URL program yang harus memproses formulir (baik program yang ditentukan dalam atribut tindakan tag formulir, atau program saat ini sendiri jika atribut tersebut dihilangkan). Nama name1, name2, name3 sesuai dengan nama elemen formulir, dan value1, value2, value3 sesuai dengan nilai elemen ini. Semua karakter khusus, termasuk = dan &, akan dihilangkan dari nama atau nilai parameter ini. Oleh karena itu, Anda tidak boleh menggunakan simbol dan karakter Sirilik ini dalam pengidentifikasi nama atau nilai elemen formulir.

Jika Anda memasukkan beberapa karakter layanan di kolom input, itu akan dikirimkan dalam kode heksadesimalnya, misalnya simbol $ akan diganti dengan %24. Surat-surat Rusia juga dikirimkan dengan cara yang sama.

Untuk kolom input teks dan kata sandi (ini adalah elemen input dengan atribut type=text dan type=password), nilainya akan berapa pun yang dimasukkan pengguna. Jika pengguna tidak memasukkan apa pun ke dalam bidang tersebut, maka elemen name= akan ada dalam string kueri, di mana nama sesuai dengan nama elemen formulir ini.

Untuk tombol kotak centang dan tombol radio, nilainya ditentukan oleh atribut VALUE ketika tombol tersebut dicentang. Tombol yang tidak dicentang akan diabaikan sepenuhnya saat membuat string kueri. Beberapa tombol kotak centang dapat memiliki atribut NAME yang sama (dan VALUE berbeda) jika diperlukan. Tombol berjenis tombol radio ditujukan untuk salah satu dari semua opsi yang ditawarkan dan oleh karena itu harus memiliki atribut NAME yang sama dan atribut VALUE yang berbeda.

Pada prinsipnya tidak perlu membuat form HTML untuk mengirimkan data menggunakan metode GET. Anda cukup menambahkan variabel yang diinginkan dan nilainya ke string URL.

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

Dalam hal ini, transmisi data menggunakan metode GET memiliki satu kelemahan signifikan - siapa pun dapat memalsukan nilai parameter. Oleh karena itu, kami tidak menyarankan penggunaan metode ini untuk mengakses halaman yang dilindungi kata sandi atau untuk mengirimkan informasi yang mempengaruhi keamanan program atau server. Selain itu, Anda tidak boleh menggunakan metode GET untuk mentransfer informasi yang tidak boleh diubah oleh pengguna.

Terlepas dari semua kelemahan ini, penggunaan metode GET cukup nyaman saat men-debug skrip (kemudian Anda dapat melihat nilai dan nama variabel yang diteruskan) dan untuk meneruskan parameter yang tidak memengaruhi keamanan.

Untuk metode POST

Konten formulir dikodekan dengan cara yang persis sama seperti metode GET (lihat di atas), namun alih-alih menambahkan string ke URL, konten permintaan dikirim sebagai blok data sebagai bagian dari operasi POST. Jika atribut ACTION ada, maka nilai URL yang ditemukan di sana menentukan ke mana harus mengirim blok data ini. Metode ini, sebagaimana telah disebutkan, direkomendasikan untuk mentransfer blok data besar.

Informasi yang dimasukkan oleh pengguna dan dikirim ke server menggunakan metode POST disajikan pada input standar ke program yang ditentukan oleh atribut tindakan, atau ke skrip saat ini jika atribut ini dihilangkan. Panjang file yang dikirim diteruskan dalam variabel lingkungan CONTENT_LENGTH, dan tipe data diteruskan dalam variabel CONTENT_TYPE.

Anda hanya dapat mengirim data menggunakan metode POST menggunakan formulir HTML, karena data dikirim di badan permintaan, dan bukan di header, seperti di GET. Oleh karena itu, Anda dapat mengubah nilai parameter hanya dengan mengubah nilai yang dimasukkan dalam formulir. Saat menggunakan POST, pengguna tidak melihat data yang dikirim ke server.

Keuntungan utama permintaan POST adalah keamanan dan fungsionalitasnya yang lebih baik dibandingkan permintaan GET. Oleh karena itu, metode POST lebih sering digunakan untuk mengirimkan informasi penting, serta informasi berskala besar. Namun, Anda tidak boleh bergantung sepenuhnya pada keamanan mekanisme ini, karena data permintaan POST juga dapat dipalsukan, misalnya dengan membuat file HTML di mesin Anda dan mengisinya dengan data yang diperlukan. Selain itu, tidak semua klien dapat menggunakan metode POST, sehingga membatasi kasus penggunaannya.

Saat mengirim data ke server dengan metode apa pun, tidak hanya data yang dimasukkan oleh pengguna yang dikirimkan, tetapi juga sejumlah variabel, yang disebut variabel lingkungan, yang mengkarakterisasi klien, riwayat operasinya, jalur file, dll. Berikut adalah beberapa variabel lingkungan:

REMOTE_ADDR – Alamat IP host (komputer) yang mengirimkan permintaan;

REMOTE_HOST – nama host asal permintaan dikirim;

HTTP_REFERER – alamat halaman yang tertaut ke skrip saat ini;

REQUEST_METHOD – metode yang digunakan saat mengirim permintaan;

QUERY_STRING – informasi terletak di URL setelah tanda tanya;

SCRIPT_NAME – jalur virtual ke program yang harus dijalankan;

HTTP_USER_AGENT – informasi tentang browser yang digunakan klien

Sejauh ini kami hanya menyebutkan bahwa permintaan klien diproses di server menggunakan program khusus. Faktanya, kita dapat menulis program ini sendiri, termasuk dalam PHP, dan program ini akan melakukan apapun yang kita inginkan dengan data yang diterima. Untuk menulis program ini, Anda perlu memahami beberapa aturan dan alat yang ditawarkan PHP untuk tujuan ini.

Dalam skrip PHP, ada beberapa cara untuk mengakses data yang dikirim oleh klien melalui HTTP. Sebelum PHP 4.1.0, akses ke data tersebut dilakukan dengan nama variabel yang ditransfer (ingat bahwa data ditransfer dalam bentuk pasangan “nama variabel, simbol “=”, nilai variabel”). Jadi, jika, misalnya, first_name=Nina dilewatkan, maka variabel $first_name dengan nilai Nina muncul di dalam skrip. Jika perlu untuk membedakan metode transfer data, maka array asosiatif $HTTP_POST_VARS dan $HTTP_GET_VARS digunakan, kuncinya adalah nama variabel yang ditransfer, dan nilainya masing-masing adalah nilai ​dari variabel-variabel ini. Jadi, jika pasangan first_name=Nina dilewatkan oleh metode GET, maka $HTTP_GET_VARS["first_name"]="Nina".

Tidak aman menggunakan nama variabel yang diteruskan secara langsung dalam suatu program. Oleh karena itu, diputuskan, dimulai dengan PHP 4.1.0, untuk menggunakan array khusus – $_REQUEST – untuk mengakses variabel yang dikirimkan melalui permintaan HTTP. Array ini berisi data yang ditransfer menggunakan metode POST dan GET, serta menggunakan cookie HTTP. Ini adalah susunan asosiatif superglobal, mis. nilainya dapat diperoleh di mana saja dalam program menggunakan nama variabel yang sesuai (elemen formulir) sebagai kunci.

Contoh 4.2. Katakanlah kita membuat formulir untuk mendaftarkan peserta sekolah korespondensi pemrograman, seperti pada contoh di atas. Kemudian pada file 1.php yang memproses form ini, Anda dapat menulis yang berikut ini:

$str = "Halo,
".$_REQUEST["nama_depan"]. "
".$_REQUEST["nama_belakang"]."!
";
$str .="Anda telah memilih untuk mempelajari suatu kursus
".$_REQUEST["kurs"];
gema $str;
?>

Kemudian, jika kita memasukkan nama “Vasya”, nama keluarga “Petrov” ke dalam formulir dan memilih kursus PHP di antara semua kursus, kita akan menerima pesan berikut di layar browser:

Halo, Vasya Petrov!

Setelah pengenalan array $_REQUEST, array $HTTP_POST_VARS dan $HTTP_GET_VARS masing-masing diganti namanya menjadi $_POST dan $_GET, untuk konsistensi, tetapi array itu sendiri tidak hilang dari penggunaan karena alasan kompatibilitas dengan versi PHP sebelumnya. Berbeda dengan pendahulunya, array $_POST dan $_GET telah menjadi super-global, yaitu dapat diakses secara langsung dan di dalam fungsi dan metode.

Mari kita beri contoh penggunaan array ini. Katakanlah kita perlu memproses formulir yang berisi elemen input bernama nama_depan, nama_belakang, kurs (misalnya form.html di atas). Data ditransfer menggunakan metode POST, dan kami tidak ingin memproses data yang ditransfer dengan metode lain. Hal ini dapat dilakukan sebagai berikut:

$str = "Halo,
".$_POST ["nama_depan"]."
".$_POST ["nama_belakang"] ."!
";
$str .= "Anda telah memilih untuk mempelajari kursus di ".
$_POST["kurs"];
gema $str;
?>

Kemudian pada layar browser, jika kita memasukkan nama “Vasya”, nama belakang “Petrov” dan memilih kursus PHP di antara semua kursus, kita akan melihat pesan, seperti pada contoh sebelumnya:

Halo, Vasya Petrov!
Anda telah memilih untuk mempelajari kursus PHP

Untuk mempertahankan kemampuan memproses skrip sebelum PHP 4.1.0, arahan register_globals diperkenalkan, mengizinkan atau menolak akses ke variabel secara langsung berdasarkan namanya. Jika parameter register_globals=On ada di file pengaturan PHP, maka variabel yang diteruskan ke server menggunakan metode GET dan POST dapat diakses hanya dengan namanya (yaitu Anda dapat menulis $first_name). Jika register_globals=Tidak Aktif, maka Anda perlu menulis $_REQUEST["nama_pertama"] atau $_POST["nama_pertama"], $_GET["nama_pertama"], $HTTP_POST_VARS["nama_pertama"], $HTTP_GET_VARS["nama_pertama"]. Dari sudut pandang keamanan, lebih baik menonaktifkan arahan ini (yaitu register_globals=Off). Dengan mengaktifkan direktif register_globals, array yang tercantum di atas juga akan berisi data yang diteruskan oleh klien.

Terkadang Anda perlu mengetahui nilai variabel lingkungan, seperti metode yang digunakan untuk mengirim permintaan atau alamat IP komputer yang mengirimkan permintaan. Anda bisa mendapatkan informasi ini menggunakan fungsi getenv(). Ini mengembalikan nilai variabel lingkungan yang namanya diteruskan sebagai parameter.

getenv("PERMINTAAN_METHOD");
// akan mengembalikan metode yang digunakan
echo getenv("REMOTE_ADDR");
// akan menampilkan alamat IP pengguna,
// siapa yang mengirim permintaan
?>

Seperti yang telah kami katakan, jika metode GET digunakan, maka data ditransfer dengan menambahkan string kueri dalam bentuk pasangan variabel_nama=nilai ke URL sumber daya. Apa pun setelah tanda tanya di URL dapat diambil menggunakan perintah

getenv("QUERY_STRING");

Berkat ini, dimungkinkan untuk mentransfer data dalam beberapa bentuk lain menggunakan metode GET. Misalnya, Anda hanya bisa menentukan nilai beberapa parameter menggunakan tanda plus, dan dalam skrip Anda bisa menguraikan string kueri menjadi beberapa bagian, atau Anda bisa meneruskan nilai hanya satu parameter. Dalam hal ini, elemen kosong dengan kunci yang sama dengan nilai ini (seluruh string kueri) akan muncul di array $_GET, dan karakter “+” yang ditemukan dalam string kueri akan diganti dengan garis bawah “_”.

Dengan metode POST, data dikirimkan hanya menggunakan formulir, dan pengguna (klien) tidak melihat data apa yang dikirim ke server. Untuk melihatnya, peretas harus mengganti formulir kita dengan miliknya. Kemudian server akan mengirimkan hasil pengolahan form yang salah ke tempat yang salah. Untuk menghindari hal ini, Anda dapat memeriksa alamat halaman asal pengiriman data. Ini dapat dilakukan lagi dengan menggunakan fungsi getenv() :

getenv("HTTP_REFERER");

Sekarang saatnya menyelesaikan masalah yang dirumuskan di awal perkuliahan.

Contoh pemrosesan request menggunakan PHP

Mari kita mengingat kembali apa tugasnya dan memperjelas rumusannya. Anda perlu menulis formulir untuk mendaftarkan peserta di sekolah pemrograman korespondensi dan setelah pendaftaran mengirim pesan ke peserta. Pesan ini kami sebut sebagai surat universal, namun akan sedikit berbeda dengan surat yang kami susun pada kuliah sebelumnya. Disini kami juga tidak akan mengirimkan apapun melalui email, agar tidak menjadi seperti spammer, namun hanya akan menghasilkan pesan ini dan menampilkannya di layar browser. Formulir pendaftaran versi awal sudah kami sediakan di atas. Kami akan mengubahnya sehingga setiap pendaftar dapat memilih kursus sebanyak yang mereka ingin ikuti, dan kami tidak akan mengkonfirmasi penerimaan formulir pendaftaran.

Semuanya di sini cukup sederhana dan jelas. Satu-satunya hal yang perlu diperhatikan adalah cara nilai elemen kotak centang diteruskan. Ketika kita menulis kurs pada nama elemen, artinya elemen kotak centang pertama yang dicentang akan ditulis ke elemen array kurs yang pertama, kotak centang yang dicentang kedua akan ditulis ke elemen array kedua, dan seterusnya. Anda tentu saja dapat memberikan nama yang berbeda pada elemen kotak centang, tetapi ini akan mempersulit pemrosesan data jika terdapat banyak kursus.

Script yang akan mengurai dan memproses semua ini disebut 1.php (formulir mengacu pada file ini, yang ditulis dalam atribut action-nya). Secara default, metode GET digunakan untuk transmisi, tetapi kami menentukan POST. Berdasarkan informasi yang diterima dari orang yang terdaftar, skrip menghasilkan pesan yang sesuai. Jika seseorang telah memilih suatu mata kuliah, ia akan menerima pesan tentang waktu diadakannya dan dosen yang mengajarnya. Jika seseorang belum memilih apa pun, maka pesan tentang pertemuan Sekolah Korespondensi Pemrogram (ZSH) berikutnya akan ditampilkan.