Dan ). Untuk ini, satu set atribut formaction , formmethod , formenctype dan formtarget digunakan, yang merupakan analog daripada atribut yang sepadan tanpa awalan bentuk. Contoh 4 menunjukkan penggunaan atribut ini.Contoh 4: Menghantar borang
HTML5 IE Cr Op Sa Fx
Menghantar borang
Semua atribut bentuk baharu tidak disokong oleh sesetengah penyemak imbas, terutamanya Internet Explorer dan Safari.
Salah satu fungsi yang paling popular di laman web ini ialah borang permohonan atau pesanan, data yang dihantar melalui e-mel kepada pemilik tapak. Sebagai peraturan, borang sedemikian adalah mudah dan terdiri daripada dua atau tiga medan untuk kemasukan data. Bagaimana untuk membuat borang pesanan sedemikian? Ini memerlukan penggunaan bahasa penanda HTML dan bahasa pengaturcaraan PHP.
Bahasa penanda HTML itu sendiri adalah mudah; anda hanya perlu memikirkan cara dan tempat untuk meletakkan tag tertentu. Dengan bahasa pengaturcaraan PHP, perkara menjadi lebih rumit.
Bagi seorang pengaturcara, mencipta borang sedemikian tidak sukar, tetapi untuk pereka reka letak HTML, beberapa tindakan mungkin kelihatan sukar.
Buat borang penghantaran data dalam html Baris pertama adalah seperti berikut
Sekarang mari kita susun semuanya.
Sekarang mari kita jadikan medan dalam bentuk wajib. Kami mempunyai kod berikut:
Buat fail yang menerima data daripada borang HTML Ini akan menjadi fail yang dipanggil send.php
Dalam fail, pada peringkat pertama, anda perlu menerima data daripada tatasusunan pos. Untuk melakukan ini, kami mencipta dua pembolehubah:
$fio = $_POST["fio"]; $email = $_POST["emel"];
Nama pembolehubah dalam PHP didahului oleh tanda $ dan koma bertitik diletakkan di hujung setiap baris. $_POST ialah tatasusunan di mana data daripada borang dihantar. Dalam borang html, kaedah penghantaran ditentukan sebagai kaedah = "post". Jadi, dua pembolehubah daripada bentuk html diterima. Untuk melindungi tapak anda, anda perlu melepasi pembolehubah ini melalui beberapa penapis - fungsi php.
Fungsi pertama akan menukar semua aksara yang pengguna akan cuba tambah pada borang:
Dalam kes ini, pembolehubah baru tidak dibuat dalam php, tetapi yang sedia ada digunakan. Apa yang akan dilakukan oleh penapis ialah mengubah watak "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
Fungsi kedua menyahkod URL jika pengguna cuba menambahkannya pada borang.
$fio = urldecode($fio); $email = urldecode($email);
Dengan fungsi ketiga kami akan mengalih keluar ruang dari permulaan dan penghujung baris, jika ada:
$fio = trim($fio); $email = trim($email);
Terdapat fungsi lain yang membolehkan anda menapis pembolehubah php. Penggunaannya bergantung pada sejauh mana anda bimbang bahawa penyerang akan cuba menambah kod program pada borang penyerahan e-mel html ini.
Pengesahan data yang dipindahkan daripada borang HTML ke fail PHP
Untuk menyemak sama ada kod ini berfungsi dan sama ada data sedang dipindahkan, anda hanya boleh memaparkannya pada skrin menggunakan fungsi gema:
echo $fio; bergema" "; echo $fio;
Baris kedua di sini diperlukan untuk memisahkan output pembolehubah php ke dalam baris yang berbeza.
Menghantar data yang diterima daripada borang HTML ke e-mel menggunakan PHP Untuk menghantar data melalui e-mel, anda perlu menggunakan fungsi mel dalam PHP.
mail("ke alamat mana yang hendak dihantar", "subjek surat", "Mesej (badan surat)","Dari: dari e-mel mana surat itu dihantar \r\n");
Contohnya, anda perlu menghantar data ke e-mel pemilik atau pengurus tapak [e-mel dilindungi] .
Subjek surat hendaklah jelas, dan mesej surat itu hendaklah mengandungi perkara yang ditentukan oleh pengguna dalam borang HTML.
mel(" [e-mel dilindungi] ", "Permohonan daripada tapak", "Nama penuh:".$fio.". E-mel: ".$email ,"Daripada: [e-mel dilindungi] \r\n");
Ia adalah perlu untuk menambah syarat yang akan menyemak sama ada borang telah dihantar menggunakan PHP ke alamat e-mel yang ditentukan.
jika (mel (" [e-mel dilindungi] ", "Pesanan dari tapak", "Nama penuh:".$fio.". E-mel: ".$email ,"Daripada: [e-mel dilindungi] \r\n")) { echo "mesej berjaya dihantar"; ) lain ( }
Oleh itu, kod program fail send.php, yang akan menghantar data borang HTML ke mel, akan kelihatan seperti ini:
$fio = $_POST["fio"]; $email = $_POST["emel"]; $fio = htmlspecialchars($fio); $email = htmlspecialchars($email); $fio = urldecode($fio); $email = urldecode($email); $fio = trim($fio); $email = trim($email); //echo $fio; //gema" "; //echo $emel; jika (mel (" [e-mel dilindungi] ", "Permohonan daripada tapak", "Nama penuh:".$fio.". E-mel: ".$email ,"Daripada: [e-mel dilindungi] \r\n")) ( echo "mesej berjaya dihantar"; ) lain ( echo "ralat berlaku semasa menghantar mesej"; }?>
Tiga baris untuk menyemak sama ada data sedang dipindahkan ke fail diulas. Jika perlu, ia boleh dialih keluar, kerana ia hanya diperlukan untuk penyahpepijatan.
Kami meletakkan kod HTML dan PHP untuk menghantar borang dalam satu fail Dalam ulasan artikel ini, ramai orang bertanya soalan tentang bagaimana untuk memastikan bahawa kedua-dua bentuk HTML dan kod PHP untuk menghantar data ke e-mel berada dalam satu fail, dan bukan dua.
Untuk melaksanakan kerja ini, anda perlu meletakkan kod HTML borang dalam fail send.php dan menambah syarat yang akan menyemak kehadiran pembolehubah dalam tatasusunan POST (tatasusunan ini dihantar dari borang). Iaitu, jika pembolehubah dalam tatasusunan tidak wujud, maka anda perlu menunjukkan kepada pengguna borang tersebut. Jika tidak, anda perlu menerima data daripada tatasusunan dan menghantarnya kepada penerima.
Mari lihat cara menukar kod PHP dalam fail send.php:
Borang permohonan dari tapak //semak sama ada pembolehubah wujud dalam tatasusunan POST if(!isset($_POST["fio"]) dan !isset($_POST["emel"]))( ?>
) lain ( //tunjukkan borang $fio = $_POST["fio"]; $email = $_POST["emel"]; $fio = htmlspecialchars($fio); $email = htmlspecialchars($email); $fio = urldecode($fio); $email = urldecode($email); $fio = trim($fio); $email = trim($email); jika (mel (" [e-mel dilindungi] ", "Permohonan daripada tapak", "Nama penuh:".$fio.". E-mel: ".$email ,"Daripada: [e-mel dilindungi] \r\n"))( echo "Mesej berjaya dihantar"; ) lain ( echo "Ralat berlaku semasa menghantar mesej"; } } ?>
Kami menyemak kewujudan pembolehubah dalam tatasusunan POST dengan isset() fungsi PHP. Tanda seru sebelum fungsi ini dalam keadaan bermaksud penolakan. Iaitu, jika pembolehubah tidak wujud, maka kita perlu menunjukkan bentuk kita. Jika saya tidak meletakkan tanda seru, syarat itu secara literal bermaksud "jika wujud, maka tunjukkan borang itu." Dan ini salah dalam kes kita. Sememangnya, anda boleh menamakannya kepada index.php. Jika anda menamakan semula fail, jangan lupa untuk menamakan semula nama fail dalam baris
Dengan menyimpan kod ini dalam fail HTML dan melihatnya menggunakan penyemak imbas kegemaran anda, anda akan melihat bentuk HTML biasa:
Tag
, 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, 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. Ini adalah kaedah GET.
Tag 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.
- menentukan elemen bentuk yang ditakrifkan oleh atribut jenis:
Nilai lain mungkin (dan Nilai "teks" menentukan medan input teks satu baris
Nilai "hantar" menentukan butang yang, apabila diklik, menghantar borang ke pelayan
- bukan satu-satunya teg yang menentukan unsur bentuk).
Jadi apa yang berlaku apabila kita mengklik "OK"?
Pelayan menganalisis permintaan yang diterima, menjana respons, menghantarnya ke penyemak imbas dan menutup sambungan
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. Apabila menggunakan
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 yang borang dihantar, dan diisi dengan nilai pembolehubah pelayan PHP_SELF - alamat skrip yang sedang dijalankan.
=$_SERVER["PHP_SELF"]?>- bentuk dipendekkan untuk echo $_SERVER["PHP_SELF"]; ?> .
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" ] ." !"
;
}
?>
Pada baris 8 seseorang boleh menulis dengan mudah
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"
"
;
}
?>
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 dengan cepat mencari kesilapan yang sukar untuk 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 kod sumber halaman yang terhasil.
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"
"
;
}
?>
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 sama sekali sama - phpinfo(32) ;.
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
pelayar membuka sambungan dengan pelayan Penyemak imbas menghantar permintaan kepada pelayan untuk menerima halaman Pelayan menjana respons (paling kerap kod HTML) kepada penyemak imbas dan menutup sambungan Penyemak imbas 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:
Jom lancarkan telnet ya.ru 80 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://i1.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:
Masukkan nama anda: