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(); )
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(); )
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: