Borang untuk menghantar data dalam PHP (POST, GET). Borang HTML. Kaedah untuk menghantar data ke pelayan menggunakan borang

Penggunaan kaedah GET dan POST dalam PHP adalah sukar untuk dinilai terlalu tinggi, kerana kaedah ini terdapat di hampir setiap laman web. Sebelum mempelajari bahan yang diterangkan di bawah, saya menasihati anda untuk membiasakan diri dengan tag html

. Mari kita lihat setiap kaedah ini secara terperinci.

kaedah GET

Kaedah GET menggunakan rentetan URL untuk memindahkan data. Anda mungkin perasan URL yang panjang dan tidak jelas. Sebagai contoh: function.php?login=Alex&email=dezyakin. Dalam kes ini, data diproses dalam function.php. Selepas tanda soal "?" terdapat senarai parameter yang diluluskan (parameter dipisahkan dengan "&") dengan nilai: parameter log masuk diberikan nilai Alex, dan pembolehubah e-mel diberikan nilai dezyakin. Data akan disimpan dalam tatasusunan superglobal $_GET. Contoh penggunaan kaedah GET dibentangkan di bawah:

Log masuk: e-mel: Menggunakan tatasusunan superglobal $_GET, kami memaparkan nilai yang diterima:*/ gema "
log masuk = ". $_GET["log masuk"] ; echo "
e-mel = ". $_GET["e-mel"] ; ?>

Perhatikan cara kita membaca nilai daripada tatasusunan superglobal $_GET: $_GET["nama_pembolehubah"]. Dalam contoh kami, nama pembolehubah telah diisytiharkan dalam bentuk (nama=log masuk dan nama=e-mel).

Nasihat:
Sebelum memproses nilai yang diterima, saya menasihati anda untuk menyemak kewujudannya melalui fungsi isset(nama_pembolehubah) atau kosong(nama_pembolehubah)- fungsi ini telah dibincangkan dalam pelajaran 2 sebelumnya: pembolehubah dalam PHP. Sebagai contoh:

menyemak kewujudan menggunakan isset: if isset ($_GET["log masuk"] ) ( pengendali untuk mengendalikan log masuk ... } //atau semak kewujudan menggunakan kosong: jika kosong ($_GET["e-mel"] ) ( operator untuk pemprosesan e-mel ... } ?>

Dalam borang, anda boleh menentukan nama fail yang akan memproses nilai yang dipindahkan. Ini dilakukan menggunakan atribut tindakan borang, yang boleh diberikan alamat fail ini. Secara lalai, fail ini diberikan kepada fail semasa (iaitu, ia diproses dalam fail di mana borang itu terletak). Berikut ialah contoh di mana data daripada borang dipindahkan ke fail srcipt.php untuk diproses:

Log masuk: e-mel:

Fail script.php mesti mengandungi beberapa jenis pengendali maklumat, jika tidak maklumat akan dihantar dalam keadaan kosong.

Kaedah GET mempunyai banyak kelemahan:

  • Pengguna melihat nilai parameter yang diluluskan;
  • Pengguna boleh dengan mudah memalsukan parameter yang diluluskan;
  • Penghantaran maklumat binari yang menyusahkan (anda perlu mengekodnya ke dalam format teks);
  • Jumlah data yang dipindahkan adalah terhad - 8 KB;

Disebabkan oleh kelemahan di atas, kaedah GET hanya digunakan dalam kes di mana sejumlah kecil data perlu dipindahkan, dan data ini tidak diklasifikasikan dalam apa jua cara.

kaedah POST

Kaedah POST berbeza daripada GET kerana data dipindahkan dalam bentuk peribadi. Terdapat tatasusunan superglobal $_POST dari mana data boleh dibaca seperti ini: $_POST["nama_pembolehubah"]. Sebagai contoh:

Log masuk: "> E-mel: ">
Menggunakan tatasusunan superglobal $_POST, kami memaparkan nilai yang diterima:*/ gema "
log masuk = ". $_POST["log masuk"] ; echo "
e-mel = ". $_POST["e-mel"] ; ?>

Hasil daripada melaksanakan kod di atas ditunjukkan dalam rajah di bawah:

Seperti yang anda lihat, URL tidak mempunyai sebarang postscript, tetapi data telah diterima dan dipaparkan.

Catatan:
1) Jumlah nilai yang dipindahkan menggunakan kaedah POST dihadkan secara lalai dan bersamaan dengan 8 MB. Untuk meningkatkan nilai ini anda perlu menukar arahan post_max_size dalam php.ini.

2) Dalam versi PHP yang lebih awal, bukannya nama tatasusunan superglobal pendek $_GET dan $_POST, nama yang lebih panjang digunakan: $HTTP_GET_VARS dan $HTTP_POST_VARS . Secara lalai ia dilumpuhkan dalam PHP 5, tetapi anda boleh mendayakannya dalam fail konfigurasi php.ini menggunakan parameter register_long_arrays. Dalam versi php 6 nama-nama panjang ini tidak akan tersedia.

3) Sebelum memproses pembolehubah daripada $_POST, saya menasihati anda untuk menyemak pembolehubah untuk kehadirannya, sama seperti yang dilakukan dengan kaedah GET.

Borang HTML. Tatasusunan $_POST dan $_GET

Borang HTML. Kaedah untuk menghantar data ke pelayan

Anda mungkin telah menemui borang HTML:

Masukkan nama anda:

Dengan menyimpan kod ini dalam fail HTML dan melihatnya menggunakan penyemak imbas kegemaran anda, anda akan melihat bentuk HTML biasa:

Masukkan nama anda:

Tag

, mempunyai tag hujung berpasangan
, sebenarnya menetapkan borang. Atributnya adalah pilihan:

  • tindakan - menentukan URL (penuh atau relatif) yang borang akan dihantar. Jika atribut ini tidak dinyatakan, kebanyakan penyemak imbas (lebih tepat lagi, semua penyemak imbas yang saya kenali) menghantar borang ke dokumen semasa, iaitu, "kepada dirinya sendiri." Ini adalah trengkas yang mudah, tetapi menurut standard HTML, atribut tindakan diperlukan.
  • kaedah - kaedah menghantar borang. Terdapat dua daripada mereka.
    • GET - menghantar data borang dalam bar alamat.
      Anda mungkin perasan di pelbagai tapak web terdapat "?" di hujung URL. dan data berikut dalam parameter format=nilai. Di sini "parameter" sepadan dengan nilai atribut nama elemen borang (lihat di bawah tentang teg ), dan "nilai" ialah kandungan atribut nilai (contohnya, ia mengandungi input pengguna ke dalam medan teks teg yang sama ).
      Sebagai contoh, cuba cari sesuatu dalam Yandex dan perhatikan bar alamat penyemak imbas. Ini adalah kaedah GET.
    • POST - data borang dihantar dalam badan permintaan. Jika tidak sepenuhnya jelas (atau tidak jelas sepenuhnya) apakah ini, jangan risau, kami akan kembali kepada isu ini tidak lama lagi.
    Jika atribut kaedah tidak dinyatakan, GET diandaikan.

Tag - menentukan elemen bentuk yang ditakrifkan oleh atribut jenis:

  • Nilai "teks" menentukan medan input teks satu baris
  • Nilai "hantar" menentukan butang yang, apabila diklik, menghantar borang ke pelayan

Nilai lain mungkin (dan - bukan satu-satunya teg yang menentukan unsur bentuk).

Jadi apa yang berlaku apabila kita mengklik "OK"?

  1. Penyemak imbas melihat elemen yang disertakan dalam borang dan membina data borang daripada nama dan atribut nilainya. Katakan nama Vasya dimasukkan. Dalam kes ini, data borang ialah name=Vasya&okbutton=OK
  2. Penyemak imbas mewujudkan sambungan dengan pelayan, menghantar kepada pelayan permintaan untuk dokumen yang dinyatakan dalam atribut tindakan teg
    , menggunakan kaedah penghantaran data yang dinyatakan dalam atribut kaedah (dalam kes ini - GET), menghantar data borang dalam permintaan.
  3. Pelayan menganalisis permintaan yang diterima, menjana respons, menghantarnya ke penyemak imbas dan menutup sambungan
  4. Pelayar memaparkan dokumen yang diterima daripada pelayan

Menghantar permintaan yang sama secara manual (menggunakan telnet) kelihatan seperti ini (dengan mengandaikan nama domain tapak ialah www.example.com):

Telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n Hos: www.example.com\r\n \r\n

Seperti yang anda mungkin telah meneka, mengklik butang serah pada borang dengan kaedah serah "DAPATKAN" adalah sama seperti menaip URL yang sepadan (dengan tanda soal dan data borang di hujung) ke dalam bar alamat penyemak imbas:

Http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK

Malah, kaedah GET digunakan apabila anda meminta dokumen daripada pelayan dengan hanya memasukkan URLnya atau mengklik pada pautan. menggunakan , URL hanya dilampirkan dengan tanda soal dan data borang.

Mungkin semua butiran teknikal dan latihan dengan telnet ini kelihatan sangat membosankan dan bahkan tidak perlu kepada anda (“apa kaitan PHP dengannya?”). Tetapi sia-sia. :) Ini adalah asas bekerja dengan protokol HTTP, yang perlu diketahui oleh setiap pengaturcara Web, dan ini bukan pengetahuan teori - semua ini akan berguna dalam amalan.

Sekarang mari kita gantikan baris pertama borang kita dengan yang berikut:

Kami menentukan kaedah penghantaran sebagai "POST". Dalam kes ini, data dihantar ke pelayan dengan cara yang sedikit berbeza:

Telnet www.example.com 80 POST /cgi-bin/form_handler.cgi HTTP/1.0\r\n Hos: www.example.com\r\n Content-Type: application/x-www-form-urlencoded\r\ n Panjang Kandungan: 41263\r\n \r\n name=Vasya&okbutton=OK

Apabila menggunakan kaedah POST, data borang dihantar selepas "dua Masuk" - dalam badan permintaan. Semua di atas sebenarnya adalah pengepala permintaan (dan apabila kami menggunakan kaedah GET, data borang dihantar dalam pengepala). Untuk membolehkan pelayan mengetahui bait mana untuk berhenti membaca badan permintaan, pengepala mengandungi baris Content-Length; bahawa data borang akan dihantar dalam bentuk parameter1=value1¶meter2=value2... , dan nilai-nilai dihantar dalam bentuk urlencode - iaitu, betul-betul sama seperti menggunakan kaedah GET, tetapi dalam badan permintaan - pengepala Kandungan memberitahu pelayan -Type: application/x-www-form-urlencoded .

Kelebihan kaedah POST ialah tiada had pada panjang baris data borang.

Apabila menggunakan kaedah POST, anda tidak boleh menyerahkan borang dengan hanya "mengikuti pautan" seperti yang berlaku dengan GET .

Apabila menggunakan borang POST, dalam atribut tindakannya anda boleh menentukan selepas tanda soal parameter borang GET. Oleh itu, kaedah POST termasuk kaedah GET.

Tatasusunan $_GET dan $_POST

Jadi, borang adalah cara utama untuk bertukar-tukar data antara pelayan web dan penyemak imbas, iaitu, ia menyediakan interaksi pengguna - sebenarnya, untuk apa pengaturcaraan web.

Mari lihat contoh mudah:



jika ($_SERVER [ "REQUEST_METHOD" ] == "POST" ) (
bergema"

helo, " . $_POST [ "nama" ] ."

!" ;
}
?>
">
Masukkan nama anda:






Borang yang ditunjukkan pada baris 8-12 mengandungi dua elemen: nama dan butang ok. Atribut kaedah menentukan kaedah penyerahan borang POST, manakala atribut tindakan menentukan URL ke mana borang dihantar dan diisi dengan nilai pembolehubah pelayan PHP_SELF - alamat skrip yang sedang dijalankan.

- bentuk dipendekkan untuk .

Katakan kita memasukkan nilai Vasya dalam medan nama dan mengklik butang OK. Dalam kes ini, penyemak imbas menghantar permintaan POST ke pelayan. Badan permintaan: name=Vasya&okbutton=OK . PHP secara automatik mengisi tatasusunan $_POST:

$_POST ["nama" ] = "Vasya"
$_POST ["butang ok" ] = "OK"

Pada hakikatnya, nilai "Vasya" dihantar oleh penyemak imbas dalam bentuk urlencode; untuk pengekodan windows-1251 nilai ini kelihatan seperti %C2%E0%F1%FF . Tetapi memandangkan PHP secara automatik mengendalikan penyahkodan yang diperlukan, kami boleh "melupakan" ciri ini - sehingga kami perlu berurusan dengan permintaan HTTP secara manual.

Memandangkan badan permintaan hanya menentukan nama dan nilai, tetapi bukan jenis elemen bentuk, PHP tidak tahu sama ada $_POST["nama"] sepadan dengan rentetan input, butang atau kotak senarai. Tetapi kami, secara amnya, tidak memerlukan maklumat ini sama sekali. :)

Memandangkan kita tidak perlu tahu apa yang dinyatakan oleh butang serah, kita boleh mengalih keluar atribut nama pada baris 11, memendekkan perihalan butang kepada . Dalam kes ini, penyemak imbas akan menghantar POST request name=Vasya.

Dan sekarang perkara yang sama, tetapi untuk borang GET:



if (isset($_GET [ "nama" ])) (
bergema"

helo, " . $_GET [ "nama" ] ."

!" ;
}
?>
">
Masukkan nama anda:







Pada baris 8 seseorang boleh menulis dengan mudah

: GET ialah kaedah lalai. Kali ini penyemak imbas menghantar permintaan GET, yang sama dengan memasukkan alamat dalam bar alamat: http://site-address/script-name.php?name=Vasya.

PHP melakukan perkara yang sama dengan borang GET seperti yang dilakukan dengan POST, dengan perbezaan bahawa tatasusunan $_GET diisi.

Perbezaan utama adalah dalam baris 4. Memandangkan hanya memasukkan alamat dalam baris penyemak imbas ialah permintaan GET, semak jika ($_SERVER["REQUEST_METHOD"] == "GET") tidak bermakna. Oleh itu, kami menggunakan binaan isset(), yang mengembalikan benar jika pembolehubah ditakrifkan (iaitu, ia telah diberikan nilai), dan palsu jika pembolehubah tidak ditakrifkan. Jika borang telah diisi - seperti yang telah anda fahami, PHP secara automatik memberikan $_GET["name"] nilai yang sesuai.

Kaedah pengesahan menggunakan isset() adalah universal; ia juga boleh digunakan untuk borang POST. Selain itu, ia adalah lebih baik kerana ia membolehkan anda mengetahui medan borang yang diisi.

Contoh yang lebih kompleks.




echo "Sila masukkan nama!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
bergema
"
;
) lain (

" ;

echo "Kepada awak " . $umur . "tahun
" ;
}
bergema"


" ;
}
?>
">
Masukkan nama anda:


Masukkan tahun lahir anda:







Tiada teknik baru digunakan di sini. Fikirkannya, jalankan kod, cuba ubah suai...

Mari kita ubah contoh terakhir supaya pengguna tidak perlu mengisi ruangan lagi. Untuk melakukan ini, isikan atribut nilai elemen borang dengan nilai yang baru kami masukkan.



$nama = isset($_POST [ "nama" ]) ? $_POST [ "nama" ] : "" ;
$tahun = isset($_POST [ "tahun" ]) ? $_POST [ "tahun" ] : "" ;

Jika (isset($_POST [ "nama" ], $_POST [ "tahun" ])) (
jika ($_POST [ "nama" ] == "" ) (
echo "Sila masukkan nama!
" ;
) jika tidak ($_POST [ "tahun" ]< 1900 || $_POST [ "year" ] > 2004 ) {
bergema "Sila nyatakan tahun lahir! Julat nilai yang sah: 1900..2004
"
;
) lain (
echo "Hello," . $_POST [ "nama" ] . "!
" ;
$umur = 2004 - $_POST [ "tahun" ];
echo "Kepada awak " . $umur . "tahun
" ;
}
bergema"


" ;
}
?>
">
Masukkan nama anda:


Masukkan tahun lahir anda:







Baris 4 dan 5 mungkin agak mengelirukan. Semuanya sangat mudah: baris 4 boleh ditulis seperti ini:

if (isset($_POST [ "nama" ]))
$nama = $_POST ["nama" ];
lain
$nama = "" ;

Persoalannya mungkin timbul - mengapa tidak membuang baris 4-5 dan menulis:

Masukkan nama anda: ">

Masukkan tahun lahir anda: ">

Intinya ialah jika pembolehubah POST ini tidak ditakrifkan - dan ini akan berlaku jika borang belum diisi - PHP akan mengeluarkan amaran tentang penggunaan pembolehubah yang tidak dimulakan (dan, agak munasabah: mesej sedemikian membolehkan anda untuk cepat mencari kesilapan yang sukar dikesan dalam nama berubah-ubah, dan juga memberi amaran tentang kemungkinan "lubang" di tapak). Anda boleh, sudah tentu, meletakkan kod isset terus ke dalam borang, tetapi ia akan menjadi terlalu rumit.

faham? Sekarang cuba cari ralat dalam kod yang diberikan. Nah, bukan kesilapan, tetapi kecacatan.

htmlspecialchars()

Tidak menjumpainya? Saya akan memberi anda petunjuk. Masukkan, sebagai contoh, dalam medan "nama" petikan berganda dan beberapa teks, contohnya, "Va" Hantar borang dan lihat pada kod sumber halaman yang terhasil. Baris keempat akan mempunyai sesuatu seperti:

Masukkan nama anda:

Iaitu, tiada yang baik. Bagaimana jika pengguna licik memasukkan kod JavaScript?

Untuk menyelesaikan masalah ini, anda perlu menggunakan fungsi htmlspecialchars(), yang akan menggantikan aksara khas dengan perwakilan HTML mereka (contohnya, petikan dengan "):



$nama = isset($_POST [ "nama" ]) ? htmlspecialchars ($_POST [ "nama" ]): "" ;
$tahun = isset($_POST [ "tahun" ]) ? htmlspecialchars ($_POST [ "tahun" ]): "" ;

Jika (isset($_POST [ "nama" ], $_POST [ "tahun" ])) (
jika ($_POST [ "nama" ] == "" ) (
echo "Sila masukkan nama!
" ;
) jika tidak ($_POST [ "tahun" ]< 1900 || $_POST [ "year" ] > 2004 ) {
bergema "Sila nyatakan tahun lahir! Julat nilai yang sah: 1900..2004
"
;
) lain (
echo "Hello," . $nama. "!
" ;
$umur = 2004 - $_POST [ "tahun" ];
echo "Kepada awak " . $umur . "tahun
" ;
}
bergema"


" ;
}
?>
">
Masukkan nama anda:


Masukkan tahun lahir anda:







Ulangi percubaan dan pastikan kod HTML kini betul.

Ingat - fungsi htmlspecialchars() mesti digunakan apabila memaparkan kandungan pembolehubah yang mungkin mengandungi aksara khas HTML.

phpinfo()

Fungsi phpinfo() adalah salah satu yang paling penting dalam PHP. Ia memaparkan maklumat tentang tetapan PHP, nilai pelbagai pembolehubah konfigurasi...

Mengapa saya menyebutnya dalam artikel tentang borang? phpinfo() ialah alat penyahpepijatan yang mudah. phpinfo(), antara lain, mencetak nilai semua pembolehubah $_GET, $_POST dan $_SERVER. Jadi jika pembolehubah borang hilang, cara paling mudah untuk mengetahui apa yang salah ialah menggunakan fungsi phpinfo(). Untuk memastikan bahawa fungsi hanya memaparkan nilai pembolehubah (dan tanpa anda perlu menatal melalui berpuluh-puluh halaman), ia harus dipanggil seperti berikut: phpinfo(INFO_VARIABLES); , atau - yang sememangnya perkara yang sama - phpinfo(32) ;.



">
Masukkan nama anda:


phpinfo(32);
?>



Atau, sebagai contoh, situasi ini: anda ingin mengetahui alamat IP pelawat. Anda ingat bahawa pembolehubah yang sepadan disimpan dalam tatasusunan $_SERVER, tetapi - nasib malang - anda terlupa apa sebenarnya pembolehubah dipanggil. Sekali lagi, hubungi phpinfo(32); , cari alamat IP anda dalam tanda dan cari dalam baris $_SERVER["REMOTE_ADDR"] .

Kerja makmal 1. Protokol HTTP. Kaedah GET, POST. Borang HTML.

Bahagian teori

Kitaran Hayat Permintaan HTTP

  1. pelayar membuka sambungan dengan pelayan
  2. Penyemak imbas menghantar permintaan kepada pelayan untuk menerima halaman
  3. Pelayan menjana respons (paling kerap kod HTML) kepada penyemak imbas dan menutup sambungan
  4. Pelayar memproses kod HTML dan memaparkan halaman

Beri perhatian kepada yang ditonjolkan berani. Malah sebelum anda melihat halaman yang diminta pada skrin, sambungan ke pelayan ditutup dan ia telah melupakan anda. Dan apabila anda memasukkan alamat yang berbeza (atau sama), atau klik pada pautan, atau klik pada butang borang HTML, corak yang sama akan berulang lagi.

Jenis kerja ini dipanggil "pelayan pelanggan". Pelanggan dalam kes ini ialah penyemak imbas.

Jadi, sambungan ke pelayan web hanya bertahan beberapa saat (atau pecahan saat) - ini ialah tempoh masa antara mengklik pada pautan (atau jenis permintaan lain) dan halaman mula dipaparkan. Kebanyakan pelayar memaparkan beberapa jenis penunjuk semasa sambungan, contohnya, MS Internet Explorer memaparkan animasi di sudut kanan atas.

Untuk selamanya menyingkirkan persepsi HTTP sebagai "kotak hitam", mari "berpura-pura" menjadi pelayar menggunakan telnet:

  1. Jom lancarkan telnet ya.ru 80
  2. Mari masukkan yang berikut dalam tetingkap terminal (jika input tidak dipaparkan, tidak mengapa):

GET / HTTP/1.0[tekan Enter di sini]
Hos: ya.ru[di sini tekan Enter dua kali]

Menekan Enter biasanya sepadan dengan gabungan aksara CR + LF, dilambangkan sebagai \r\n. Notasi ini akan digunakan di bawah.

Kod HTML halaman http://ya.ru/ akan dipaparkan pada skrin. Seperti yang anda lihat, tiada yang rumit.

Kod sumber halaman semasa boleh dilihat dalam hampir mana-mana pelayar dengan memilih "Lihat|Sumber" daripada menu.

Gambar, bingkai - semua ini adalah permintaan tambahan, betul-betul sama. Sebenarnya, dari mana datangnya gambar dalam tetingkap penyemak imbas: apabila menghuraikan (memproses) kod HTML, penyemak imbas menemui teg https://i2.wp.com/ gambar"> membuat permintaan tambahan kepada pelayan - permintaan Gambar, dan memaparkannya di tempat di mana teg itu berada .



Cuba:

Telnet www.google.ru 80

DAPATKAN /php/php5ru.png HTTP/1.0\r\n
Hos: ya.ru\r\n\r\n

Perkara yang anda akan lihat jika anda melihat fail png ini dalam penyunting teks akan berkelip pada skrin.

saya-2. Borang HTML. Kaedah untuk menghantar data ke pelayan

Anda mungkin telah menemui borang HTML:

  1. Masukkan nama anda:

Dengan menyimpan kod ini dalam fail HTML dan melihatnya menggunakan penyemak imbas kegemaran anda, anda akan melihat bentuk HTML biasa:

Masukkan nama anda:

Mari kita lihat lebih dekat pada tag yang digunakan dalam contoh ringkas ini.

Tag

, mempunyai tag hujung berpasangan
, sebenarnya menetapkan borang. Atributnya adalah pilihan:

  • tindakan- menentukan URL (penuh atau relatif) yang dihantar bentuk. Menghantar borang adalah permintaan yang sama kepada pelayan seperti semua yang lain (seperti yang telah saya nyatakan di atas).

Jika atribut ini tidak dinyatakan, kebanyakan penyemak imbas (lebih tepat lagi, semua penyemak imbas yang saya kenali) menghantar borang ke dokumen semasa, iaitu, "kepada dirinya sendiri." Ini adalah trengkas yang mudah, tetapi menurut standard HTML, atribut tindakan diperlukan.

  • kaedah - cara menghantar borang. Terdapat dua daripada mereka.
    • DAPATKAN- menghantar data borang dalam bar alamat.
      Anda mungkin perasan di pelbagai tapak web terdapat "?" di hujung URL. dan data berikut dalam format parameter=nilai. Di sini "parameter" sepadan dengan maksudnya atribut nama elemen bentuk (lihat di bawah tentang teg ), dan "nilai" - kandungan atribut nilai(ia mengandungi, sebagai contoh, input pengguna ke dalam medan teks dengan tag yang sama ).
      Sebagai contoh, cuba cari sesuatu dalam Yandex dan perhatikan bar alamat penyemak imbas. Ini adalah kaedah GET.
    • POS- data borang dihantar ke badan permintaan. Jika tidak sepenuhnya jelas (atau tidak jelas sepenuhnya) apakah ini, jangan risau, kami akan kembali kepada isu ini tidak lama lagi.

Jika atribut kaedah tidak dinyatakan - "GET" tersirat.

Tag - set unsur bentuk, ditakrifkan oleh atribut menaip :

  • Maknanya "teks" menentukan medan input teks satu baris
  • Maknanya "serahkan" menentukan butang yang, apabila ditekan, menyebabkan menghantar borang ke pelayan

Nilai lain mungkin (dan - bukan satu-satunya teg yang mentakrifkan elemen bentuk), tetapi kita akan melihatnya dalam bab berikut.

Jadi apa yang berlaku apabila kita mengklik "OK"?

  1. Penyemak imbas melihat elemen yang disertakan dalam borang dan membentuk nama dan atribut nilai daripadanya data bentuk. Katakan nama telah dimasukkan Vasya. Dalam kes ini, data borang adalah name=Vasya&okbutton=OK
  2. Penyemak imbas mewujudkan sambungan dengan pelayan, menghantar permintaan kepada pelayan untuk dokumen yang dinyatakan dalam atribut tindakan tag
    , menggunakan kaedah penghantaran data yang dinyatakan dalam atribut kaedah(dalam kes ini - GET), menghantar data borang dalam permintaan.
  3. Pelayan menganalisis permintaan yang diterima, menjana respons, menghantarnya ke penyemak imbas dan menutup sambungan
  4. Pelayar memaparkan dokumen yang diterima daripada pelayan

Menghantar permintaan yang sama secara manual (menggunakan telnet) kelihatan seperti ini (dengan mengandaikan nama domain tapak ialah www.example.com):

telnet www.example.com 80

DAPATKAN /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP/1.0\r\n
Hos: www.example.com\r\n
\r\n

Seperti yang anda mungkin telah meneka, mengklik butang serah pada borang dengan kaedah serah "DAPATKAN" adalah sama seperti menaip URL yang sepadan (dengan tanda soal dan data borang di hujung) ke dalam bar alamat penyemak imbas: http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK

Malah, kaedah GET digunakan apabila anda meminta dokumen daripada pelayan dengan hanya memasukkan URLnya atau mengklik pada pautan. menggunakan , URL hanya dilampirkan dengan tanda soal dan data borang.

Sekarang mari kita gantikan baris pertama borang kita dengan yang berikut:

Kami menentukan kaedah penghantaran sebagai "POST". Dalam kes ini, data dihantar ke pelayan dengan cara yang sedikit berbeza:

telnet www.example.com 80

POST /cgi-bin/form_handler.cgi HTTP/1.0\r\n
Hos: www.example.com\r\n
Jenis Kandungan: application/x-www-form-urlencoded\r\n
Panjang Kandungan: 22\r\n
\r\n
name=Vasya&okbutton=OK

Apabila menggunakan kaedah POST, data borang dihantar selepas "dua Masuk" - kepada badan permintaan. Semua di atas adalah benar tajuk permintaan (dan apabila kami menggunakan kaedah GET, data borang telah dihantar dalam pengepala). Untuk membolehkan pelayan mengetahui bait mana untuk berhenti membaca badan permintaan, pengepala mengandungi baris Panjang Kandungan; bahawa data borang akan dihantar dalam bentuk parameter1=nilai1¶meter2=nilai2..., dan nilai dihantar dalam bentuk urlencode - iaitu, sama seperti menggunakan kaedah GET, tetapi dalam badan permintaan - pelayan dimaklumkan oleh pengepala "Content-Type: application/x- www-form-urlencoded".

Kelebihan kaedah POST ialah tiada had pada panjang baris data borang.

Apabila menggunakan kaedah POST, anda tidak boleh menghantar borang dengan hanya "mengikuti pautan", seperti yang berlaku dengan GET.

Apabila menggunakan borang POST, dalam atributnya tindakan Anda juga boleh menentukan parameter borang GET selepas tanda soal. Oleh itu, kaedah POST termasuk kaedah GET.

Dikemas kini 12/12/2015

Walaupun topik menghantar mesej e-mel terus dari halaman laman web sudah agak digodam, berdasarkan surat yang saya terima daripada pelawat ke laman web saya, saya membuat kesimpulan bahawa masih ramai yang mempunyai jurang pengetahuan dalam isu ini.

Jadi dalam tutorial ini kita akan belajar bagaimana untuk melakukannya borang untuk menghantar mesej e-mel dari halaman tapak web dengan menyemak kemasukan data yang betul. Itu. jika mana-mana medan borang tidak diisi, skrip akan menjana ralat dan memberitahu pelawat mengenainya. Anda boleh melihat contoh cara borang ini berfungsi. Jika anda mengisi borang ini dan klik butang: hantar satu mesej, maka saya akan menerima mesej anda.

Kelebihan menghantar mesej dengan cara ini adalah jelas:

1. Anda tidak perlu "menyinarkan" alamat e-mel anda di Internet, yang bermaksud ia tidak akan sampai kepada pengirim spam.

2. Jika pelawat ingin bertanya kepada anda soalan atau bertanya kepadanya sesuatu, dia tidak perlu menyalin alamat e-mel, membuka klien e-melnya, menulis mesej, dsb. Pelawat akan segera mengisi data yang diperlukan dalam borang dan menghantar mesej kepada anda.

3. Dengan organisasi maklum balas daripada pelawat sedemikian, kebarangkalian mesej dihantar kepada anda adalah hampir 100%, terutamanya jika alamat e-mel dipautkan ke domain anda. Lagipun, nod perantaraan dikecualikan daripada rantaian mel yang panjang. Ini bermakna kebolehpercayaan penghantaran mel meningkat secara mendadak.

Bagaimana untuk membuat borang penghantaran mesej?

Biasanya, skrip tersebut terdiri daripada dua bahagian dan kod tersebut terletak dalam dua fail berbeza:

  • Fail pertama- ini adalah borang itu sendiri di mana data mesej diisi.
  • Fail kedua- ini ialah fail pengendali yang menerima data daripada borang (fail pertama) dan menghantarnya ke alamat e-mel yang dinyatakan dalam skrip. Tetapi bahagian skrip ini sentiasa berfungsi secara berpasangan.

Kami meletakkan bahagian pertama skrip ke dalam fail berasingan dan memanggilnya: mail.php. Fail ini akan mengandungi borang kemasukan data. Nama fail mail.php Saya mengambilnya dengan bersyarat, anda boleh memanggil fail ini apa sahaja yang anda suka. Fail ini mungkin mempunyai sambungan lain, contohnya .html.

Untuk menghubungi pelawat tapak ke fail ini, mereka biasanya membuat pautan mudah: Tulis kepada pengarang tapak, Hantar mesej atau sesuatu seperti itu. Apabila pelawat mengklik pada pautan sedemikian, dia dibawa ke halaman berasingan dengan borang di mana dia mesti memasukkan data (maklumat) untuk menghantar mesej.

Jadi, buat fail baharu, beri nama: mail.php atau mail.html dan tampal kod ke dalamnya Penyenaraian 1.

Penyenaraian 1









Untuk menghantar mesej kepada pengarang tapak, gunakan borang berikut:



Nama awak:


Emel anda:


Mesej anda:




Ini adalah bentuk yang paling mudah, terdiri daripada hanya 3 medan untuk kemasukan data. Saya memanggil medan ini: nama awak, Emel anda, mesej anda. Jika perlu, bilangan medan boleh ditambah.

Dua bidang pertama: nama awak, Emel anda, diterangkan dengan tag:

Nama awak:

tetapi setiap daripada mereka diberi nama sendiri, yang memanggil dirinya sendiri pengecam: nama = "nama" Dan nama = "e-mel" sewajarnya.

Medan ketiga untuk memasukkan mesej diterangkan oleh tag:

Mesej anda:

Medan ini mempunyai pengecam: name="kekacauan".

Dan sudah tentu terdapat dua butang: hantar satu mesej Dan Borang yang jelas.

Data (maklumat) yang dimasukkan pelawat ke dalam borang diberikan pengecam yang sesuai: nama, emel Dan keadaan huru-hara, ingat - ini penting!

Untuk kemudahan reka bentuk, keseluruhan borang diletakkan di dalam jadual biasa, rupa yang boleh direka bentuk menggunakan , bagi saya ini adalah kelas: class="td_border", saya tidak membentangkannya di sini; jika perlu, tambah sendiri, mengikut citarasa anda.

Pengendali fail.

Bahagian kedua skrip terdiri daripada fail pengendali: mel2.php, di mana kaedah POS Semua data dengan pengecam yang sepadan dihantar: nama, emel Dan keadaan huru-hara. Di sini data ini diletakkan dalam pembolehubah: $nama, $emel, $kekacauan.

Buat fail mel2.php dan tulis kod ke dalamnya Penyenaraian 2:

Penyenaraian 2

$nama = $_POST["nama"];
$email = $_POST["emel"];
$kekacauan = $_POST["kekacauan"];

$REMOTE_ADDR = $_POST["REMOTE_ADDR"];

jika (isset ($nama))
{
$nama = substr($nama,0,20); //Tidak boleh lebih daripada 20 aksara
jika (kosong ($nama))
{
bergema"

Nama tidak dinyatakan!!!

";
gema "";
keluar;
}
}
lain
{
$name = "tidak dinyatakan";
}

jika (isset ($e-mel))
{
$email = substr($email,0,20); //Tidak boleh lebih daripada 20 aksara
jika (kosong ($e-mel))
{
bergema"

E-mel tidak dinyatakan!!!

";
bergema" Balik dan isi borang dengan betul.";
keluar;
}
}
lain
{
$email = "tidak dinyatakan";
}

jika (isset ($kekacauan))
{
$kekacauan = substr($kekacauan,0,1000); //Tidak boleh melebihi 1000 aksara
jika (kosong ($kekacauan))
{
bergema"

Mesej tidak ditulis!!!

";
bergema" Balik dan isi borang dengan betul.";
keluar;
}
}
lain
{
$mess = "tidak dinyatakan";
}

$i = "tidak dinyatakan";
jika ($nama == $i DAN $e-mel == $i DAN $kekacauan == $i)
{
echo "Perhatian! Ralat berlaku! Anda tidak mengisi medan mesej!";
keluar;
}

$to = "admin@site";
$subjek = " Mesej daripada tapak tapak";
$message = "Nama pengirim: $name .\nAlamat e-mel: $email\nMesej: $mess .\nAlamat IP: $_SERVER";
mel ($kepada,$subjek,$mesej,"Content-type:text/plain; charset = windows-1251 ") atau cetak "Saya tidak boleh menghantar surat!!!";
bergema"

Terima kasih kerana menghantar mesej anda.

Ia sangat penting bagi saya!

Anda pasti akan menerima jawapan tidak lama lagi.";
keluar;
?>

Fail ini menyemak data yang dimasukkan oleh pelawat tapak ke dalam borang dan kemudian menghantar mesej ke alamat e-mel yang ditentukan.

Jika medan dibiarkan kosong atau diisi dengan salah, skrip akan mengembalikan mesej kepada pelawat yang menunjukkan sebab tertentu.

Sila ambil perhatian bahawa fail: mel2.php mesti mempunyai sambungan .php , kerana menghantar mesej dijalankan menggunakan fungsi mel PHP.

Dan sudah tentu Hosting anda mesti menyokong PHP. Ini terutamanya terpakai untuk pengehosan percuma, walaupun baru-baru ini bahkan pengehosan percuma telah dipasang PHP hampir di mana-mana.

Dalam kod Penyenaraian 2 Mudah sahaja, betulkan semua nilai yang diserlahkan dalam warna merah agar sesuai dengan keperluan anda, iaitu:

  • daftarkan milik anda Alamat emel, kepada mana mesej akan dihantar (pembolehubah $kepada);
  • betulkan subjek mesej (pembolehubah $subjek);
  • perhatikan pengekodan ( charset=windows-1251). Masukkan pengekodan yang digunakan di tapak anda. Di Internet bahasa Rusia, pengekodan boleh: "utf-8" atau "windows-1251". Jika anda membuat kesilapan dengan pengekodan, teks dalam surat akan dipaparkan secara tidak betul (gila).

Itu sahaja, yang tinggal sekarang ialah memuat naik fail: mail.php Dan mel2.php dan borang yang mudah untuk menghantar mesej akan muncul di tapak web anda.



Komen pada artikel ini (pelajaran):

Terima kasih atas pengajaran. Memang benar apa yang mereka katakan: semuanya datang tepat pada masanya. Hari ini saya akan mencari di internet untuk cara membuat borang hubungan untuk tapak web, dan borang yang bebas. Saya faham bahawa ini akan berjaya.

Pengajaran yang bagus! Terima kasih!

Terima kasih Andrey, pengajaran yang baik.

Terima kasih, saya rasa ia akan berguna

Savin Dmitry Aleksandrovich (SAVIN DMITRY ALEXANDROVICH) menulis kepada anda, saya ingin mengetahui segala-galanya dengan lebih terperinci tentang borang dalam CSS, saya tahu sedikit tentang ini: dengan lebih terperinci tentang sifat tindakan, kerana saya tahu tindakan adalah pautan ke dokumen di mana permintaan data dihantar atau data itu sendiri daripada borang, atau sesuatu seperti itu.method="post" memproses data dalam saiz yang lebih besar daripada yang diperoleh, dsb. Sila, lebih lanjut mengenai borang, saya hampir rugi dengan mereka.

Hello Andrei! Berkenaan dengan awak, Ahmad. Jadi saya juga ingin membuat "Tambah Komen Anda" di tapak supaya pelawat boleh meninggalkan Ulasan mereka. Kod apa yang perlu saya tulis? Terima kasih, saya menyukainya. Ahmad

kacak! info yang sangat berguna!

Ia berguna, ia berguna, tetapi ia tidak berfungsi. Selepas mengisi borang, senarai mail2.php dipaparkan

Ia berguna, ia berguna, tetapi ia tidak berjalan. Selepas mengisi borang, senarai mail2.php dipaparkan

Semuanya berfungsi dengan baik, cuma butangnya tidak besar seperti pengarang. Bolehkah seseorang memberitahu saya cara membuat butang besar? Terima kasih kepada penulis!

tetapi ia tidak berkesan untuk saya. Lebih tepat lagi, ia berfungsi separuh. Surat itu dihantar, tetapi kosong. data dari mel1 tidak pergi ke mel2

Tidak datang ke e-mel. Apakah tangkapan? Saya tidak faham bagaimana dia boleh menghantar apa-apa tanpa log masuk dan kata laluan. Adakah ini pelayan mel? Bentuk mudah dan itu sahaja

Terima kasih atas borang! Berfungsi! Jika ia tidak berkesan untuk anda, ikuti setiap langkah dengan berhati-hati. Ia tidak berjaya untuk saya serta-merta. Andrey, terima kasih sekali lagi!

Tolong bantu, saya memasukkan borang dan semuanya nampaknya OK, tetapi mesej itu tidak sampai ke alamat e-mel yang saya nyatakan, walaupun ia mengatakan mesej dihantar...

Beritahu saya, bagaimana saya boleh memastikan bahawa selepas menghantar/tidak berjaya menghantar surat, tetingkap baharu tidak dibuka dan penulisan dilakukan dalam tetingkap lama?

Andrey. Saya faham bahawa pengendali dipanggil. Saya belum tahu banyak tentang PHP. Tetapi inilah yang saya ingin capai: hanya ada satu halaman dengan borang mel, i.e. Selepas mengklik "Hantar mesej", tetingkap baharu tidak dibuka, tetapi halaman semasa berubah. Iaitu, seperti yang saya faham, ia adalah dinamik. Saya belum tahu bagaimana untuk melakukannya sendiri, jadi saya meminta nasihat.

Andrey, sila beritahu saya, borang ini berfungsi dengan baik dalam Chrome, tetapi terdapat masalah dengan Explorer. E-mel tidak dihantar dan ralat atau menghantar mesej tidak dipaparkan. Apa masalahnya? Terima kasih terlebih dahulu

Pelajaran yang keren! Terima kasih!

Terima kasih. Semuanya berfungsi dengan baik)

Tiada tag penutup /p dalam kod. kenapa?

Amaran: mail(): "sendmail_from" tidak ditetapkan dalam php.ini atau pengepala "From:" tersuai tiada dalam E:Roomsu362571transport-online.netwwwmail.php pada baris 66 Saya tidak dapat menghantar surat!!! Wah - macam mana pulak?

Saya tidak dapat memahami pengekodan. Jika anda memasukkan windows-1251, teks skrip dalam mesej adalah normal, tetapi teks mesej itu sendiri dihantar ke mel dalam buaya. dan jika anda meletakkan utf-8 - teks skrip dalam mesej dalam mel - tanda soal, dan teks mesej dari borang - normal. Bagaimanakah saya boleh memastikan bahawa kedua-duanya adalah normal?

Ia tidak berfungsi untuk saya, tetapi tapak tersebut belum lagi dihoskan, bilakah saya akan menyiarkannya?

Semuanya berfungsi, terima kasih atas skrip! Sila beritahu saya bagaimana untuk memastikan bahawa apabila anda mengklik butang hantar, halaman baharu dengan pengendali tidak dibuka. Supaya tapak kekal pada halaman di mana ia berada sebelum menekan butang hantar?

bagaimana untuk menjadikan medan input e-mel lebih tinggi?

Jika anda perlu menghantar surat ke beberapa alamat, cuma tambahkan alamat yang diperlukan dipisahkan dengan koma seperti ini: $to = "admin@site, [e-mel dilindungi], [e-mel dilindungi]";

Bagaimanakah saya boleh memastikan bahawa selepas menghantar mesej terdapat ubah hala ke halaman lain?

terdapat $to = "admin@site"; Soalan: jika perlu hantar ke 2 alamat! salah satu alamat dalam bentuk $to = "$email"; dalam erti kata lain, fungsi "syor kepada rakan" dengan penduaan mesej ke e-mel saya yang ditentukan. Terima kasih.

Atas sebab tertentu borang maklum balas tidak berfungsi untuk saya dan tiada satu pun daripadanya berfungsi. Berpura-pura bahawa mesej telah dihantar, tetapi ia tidak sampai dalam mel.

hello! Sila jelaskan mengapa ia tidak berfungsi pada pengehosan, ia berkata: "Saya tidak boleh menghantar surat." Dan pada localhost di Denver ia berfungsi dengan baik. Apa masalahnya?...

mengapa lebih daripada satu borang saya tidak berfungsi?

Terima kasih banyak - banyak. Semuanya sangat mudah dan boleh diakses. Saya menggunakan contoh anda di laman web gosdogovor.ru. Saya hanya mengubah sedikit reka bentuk agar sesuai dengan diri saya dan komposisi medan: http://www.gosdogovor.ru/easuzcon.html. Terima kasih sekali lagi.

Lelaki, jika anda cuba menghantar mesej dari pelayan tempatan anda, iaitu, dari tapak yang belum disiarkan di Internet, anda tidak akan berjaya. Letakkannya pada beberapa pengehosan, dan anda akan gembira)

Andrey, bagaimana saya boleh membuatnya supaya apabila saya menekan butang, mesej dengan teks tertentu dihantar ke alamat tertentu? Tolong saya: [e-mel dilindungi]

Borang itu sendiri biasanya bertujuan untuk menerima maklumat daripada pengguna untuk menghantarnya selanjutnya ke pelayan, di mana data borang diterima oleh program pengendali. Program sedemikian boleh ditulis dalam mana-mana bahasa pengaturcaraan sebelah pelayan seperti PHP, Perl, dll. Alamat program ditunjukkan dalam atribut tindakan teg

, seperti yang ditunjukkan dalam contoh 1.

Contoh 1: Menyerahkan data borang

HTML5 IE Cr Op Sa Fx

Data borang



Dalam contoh ini, data borang yang ditunjukkan oleh atribut nama (log masuk dan kata laluan) akan dihantar ke fail di /example/handler.php. Jika atribut tindakan tidak ditentukan, maka pemindahan berlaku ke alamat halaman semasa.

Pemindahan ke pelayan berlaku dalam dua kaedah berbeza: GET dan POST, untuk menetapkan kaedah dalam teg

Atribut kaedah digunakan, dan nilainya ialah kata kunci dapatkan dan siarkan. Jika atribut kaedah tidak ditentukan, maka secara lalai data dihantar ke pelayan menggunakan kaedah GET. Dalam jadual Rajah 1 menunjukkan perbezaan antara kaedah ini.

Kaedah yang digunakan boleh ditentukan dengan mudah oleh bar alamat penyemak imbas. Jika tanda soal muncul di dalamnya dan alamatnya kelihatan seperti ini, maka ini pastinya GET.

http://www.google.ru/search?q=%D1%81%D0%B8%D1%81%D1%8C%D0%BA%D0%B8&ie=utf-8

Gabungan unik parameter dalam bar alamat secara unik mengenal pasti halaman, jadi halaman dengan alamat ?q=node/add dan ?q=node dianggap berbeza. Ciri ini digunakan oleh sistem pengurusan kandungan (CMS, Sistem pengurusan kandungan) untuk mencipta banyak halaman laman web. Pada hakikatnya, satu fail digunakan yang menerima permintaan GET dan, menurutnya, menjana kandungan dokumen.

Disenaraikan di bawah adalah aplikasi biasa kaedah ini di tapak.

DAPATKAN

Memindahkan data teks kecil ke pelayan; Carian tapak.

Enjin carian dan borang carian tapak sentiasa dihantar menggunakan kaedah GET, ini membolehkan anda berkongsi hasil carian dengan rakan, menghantar pautan melalui mel atau menyiarkannya di forum.

POS

Memindahkan fail (foto, arkib, program, dll.); menghantar komen; menambah dan menyunting mesej di forum, blog.

Secara lalai, borang diproses dalam tab penyemak imbas semasa; namun, apabila menyerahkan borang, anda boleh menukar parameter ini dan membuka pengendali borang dalam tab atau bingkai baharu. Tingkah laku ini ditentukan melalui "nama konteks", yang merupakan nilai atribut sasaran teg . Nilai popular adalah _kosong untuk membuka borang dalam tetingkap atau tab baharu, dan nama bingkai, yang ditentukan oleh atribut nama tag



Dalam contoh ini, apabila anda mengklik butang Hantar, hasil penyerahan borang dibuka dalam bingkai yang dipanggil kawasan .

Elemen bentuk biasanya diletakkan di dalam teg

, dengan itu menentukan data yang akan dihantar ke pelayan. Pada masa yang sama, HTML5 mempunyai keupayaan untuk memisahkan borang daripada elemennya. Ini dilakukan untuk kemudahan dan serba boleh, jadi susun atur yang kompleks mungkin mengandungi beberapa bentuk yang tidak sepatutnya bersilang antara satu sama lain, atau, sebagai contoh, beberapa elemen dipaparkan menggunakan skrip di satu tempat pada halaman, dan borang itu sendiri terletak di tempat lain. . Sambungan antara borang dan elemennya berlaku dalam kes ini melalui pengecam borang, dan atribut borang dengan nilai yang sama dengan pengecam ini harus ditambahkan pada elemen (contoh 3).

Contoh 3: Memautkan borang ke medan

HTML5 IE Cr Op Sa Fx

Borang



Dalam contoh ini tag

dikenal pasti secara unik melalui pengecam pengesahan, dan form="auth" ditambahkan pada medan yang harus diserahkan melalui borang. Dalam kes ini, tingkah laku elemen tidak berubah, apabila butang diklik, log masuk dan kata laluan dihantar kepada pengendali handler.php.

Walaupun parameter pemindahan borang secara tradisinya ditentukan dalam teg , mereka juga boleh dipindahkan ke butang hantar borang (