Pertimbangkan formulir ini:
<form action="http://www.blabla.com?a=1&b=2" method="GET">
<input type="hidden" name="c" value="3" />
</form>
Saat mengirimkan formulir ini (formulir GET), parameter a dan b menghilang. Apakah ada alasan untuk itu? Apakah ada cara untuk menghindari perilaku ini?
Jawaban:
Bukankah itu parameter tersembunyi untuk memulai dengan ...?
Saya tidak akan mengandalkan browser apa pun yang mempertahankan string kueri yang ada di URL tindakan.
Seperti spesifikasi ( RFC1866 , halaman 46; HTML 4.x bagian 17.13.3) menyatakan:
Mungkin seseorang dapat menyandikan URL tindakan untuk menyematkan tanda tanya dan parameter, dan kemudian semoga saja semua peramban akan membiarkan URL itu seperti itu (dan memvalidasi bahwa server juga memahaminya). Tapi saya tidak akan pernah bergantung pada itu.
By the way: itu tidak berbeda untuk bidang formulir yang tidak tersembunyi. Namun untuk POST, URL tindakan dapat menampung string kueri.
sumber
Dalam HTML5, ini adalah perilaku per-spec.
Lihat http://www.w3.org/TR/2011/WD-html5-20110525/association-of-controls-and-forms.html#form-submission-algorithm
Lihatlah "4.10.22.3 Algoritma pengiriman formulir", langkah 17. Dalam kasus formulir GET ke URI http / s dengan string kueri:
Jadi, browser Anda akan membuang bagian "? ..." yang ada dari URI Anda dan menggantinya dengan yang baru berdasarkan formulir Anda.
Di HTML 4.01, spesifikasi menghasilkan URI yang tidak valid - sebagian besar browser sebenarnya tidak melakukan ini ..
Lihat http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3 , langkah empat - URI akan memiliki? ditambahkan, meskipun sudah mengandung satu.
sumber
?
dalam url tindakan dihapus? Jadi apa, jika parameter GET di url tindakan berisi target, di mana formulir harus diproses? seperti:action="index.php?site=search"
. Saya tidak yakin, jika menempatkan parameter GET dalam bidang input tersembunyi adalah ide yang bagus.Yang bisa Anda lakukan adalah menggunakan foreach sederhana di atas meja yang berisi informasi GET. Misalnya di php:
sumber
Anda harus memasukkan dua item (a dan b) sebagai elemen input tersembunyi serta C.
sumber
Location:
redirect jika Anda tidak ingin ada interaksi dengan pengguna akhir .Saya punya masalah yang sangat mirip di mana untuk tindakan bentuk, saya punya sesuatu seperti:
Tombol akan mengarahkan pengguna ke situs, tetapi info kueri menghilang sehingga pengguna mendarat di laman beranda alih-alih laman konten yang diinginkan. Solusi dalam kasus saya adalah mencari tahu cara membuat kode URL tanpa permintaan yang akan membawa pengguna ke halaman yang diinginkan. Dalam hal ini target saya adalah situs Drupal, sehingga ternyata
/content/something
juga berhasil. Saya juga bisa menggunakan nomor simpul (yaitu/node/123
).sumber
Jika Anda membutuhkan solusi, karena formulir ini dapat ditempatkan di sistem pihak ke-3, Anda dapat menggunakan Apache mod_rewrite seperti ini:
maka formulir baru Anda akan terlihat seperti ini:
dan Apache akan menambahkan parameter ke-3 ke kueri
sumber
Konstruksi Anda ilegal. Anda tidak bisa menyertakan parameter dalam nilai tindakan formulir. Apa yang terjadi jika Anda mencoba ini akan tergantung pada kebiasaan browser. Saya tidak akan terkejut jika itu bekerja dengan satu browser dan bukan yang lain. Bahkan jika tampaknya berfungsi, saya tidak akan bergantung padanya, karena versi browser berikutnya mungkin mengubah perilaku.
"Tetapi katakanlah saya memiliki parameter dalam string kueri dan input tersembunyi, apa yang bisa saya lakukan?" Yang bisa Anda lakukan adalah memperbaiki kesalahan. Bukan untuk bersikap sinis, tapi ini seperti bertanya, "Tapi katakanlah URL saya menggunakan tanda persen alih-alih garis miring, apa yang bisa saya lakukan?" Satu-satunya jawaban yang mungkin adalah, Anda dapat memperbaiki URL.
sumber
Ini sebagai tanggapan terhadap posting di atas oleh Efx:
Jika URL sudah berisi var yang ingin Anda ubah, maka ditambahkan lagi sebagai bidang tersembunyi.
Berikut ini adalah modifikasi dari kode itu untuk mencegah duplikasi vars di URL:
sumber
ubah metode permintaan ke 'POST' alih-alih 'GET'.
sumber
Saya biasanya menulis sesuatu seperti ini:
Ini berfungsi, tetapi jangan lupa untuk membersihkan input Anda terhadap serangan XSS!
sumber