Kami mencipta borang maklum balas dalam PHP. PHP _SELF dalam atribut tindakan borang

Pelajaran PHP ini merangkumi konsep asas bahasa: memproses borang dengan menghantar permintaan ke halaman web, membina kawalan PHP asas semasa memproses borang, menulis data daripada borang PHP ke fail, fungsi tarikh dalam PHP date().

1. Biar kami ingatkan anda bahawa semua fail php diuji hanya apabila Denver sedang berjalan dan hanya dari bar alamat penyemak imbas. Anda tidak boleh menjalankan fail php dengan mengklik dua kali!

2. Lancarkan Denver.

Latihan 1. Memproses bentuk mudah

Dalam pelajaran PHP ini kita akan melihat pemprosesan borang pada halaman HTML, mencipta pembolehubah PHP untuk medan borang.

1. Buat bentuk seperti yang ditunjukkan dalam Rajah. 3.1. Difahamkan bahawa apabila anda mengklik pada butang Hantar pesanan, data daripada borang akan dipindahkan kepada pentadbir, dan pelanggan akan melihat respons Pesanan diproses pada skrin. Jika anda mendapati sukar untuk menulis borang, kemudian laksanakan kod di bawah angka dan simpan dalam folder php_2 di bawah nama forma_bob.html Kami mengingatkan anda bahawa alamat pengendali borang ditulis dalam atribut tindakan teg borang .

Rajah 3.1

2. Untuk membolehkan pengguna menerima respons selepas menyerahkan data, perlu mencipta pengendali borang dalam PHP. Cipta kod di bawah dan simpan dalam folder php_2 sebagai zakaz.php

3. Semak kefungsian pengendali. Untuk melakukan ini, jalankan fail forma_bob.html melalui penyemak imbas dengan menaip http://localhost/php_2/forma_bob.html dalam bar alamat penyemak imbas

4. Masukkan sebarang nombor dalam medan borang dan klik butang Hantar pesanan. Keputusan dalam Rajah. 3.2.

Rajah 3.2

Pembolehubah Bentuk

Tujuan keseluruhan menggunakan borang pesanan adalah untuk mendapatkan maklumat pesanan pelanggan yang mereka masukkan pada papan kekunci. Dalam skrip PHP, setiap medan borang boleh diakses sebagai pembolehubah yang mempunyai nama yang sama dengan medan borang. Dalam PHP, pembolehubah mudah dikenali kerana ia bermula dengan tanda dolar $.

Anda boleh mengakses kandungan medan tireqty dengan cara berikut:

$tireqty //gaya pendek

$_POST['tireqty'] //gaya sederhana

$HTTP_POST_VARS[‘tireqty’] //gaya panjang

Kami akan menggunakan gaya panjang untuk merujuk pembolehubah borang, tetapi untuk kemudahan penggunaan kami akan membina versi pendek aplikasi. Ini ialah cara yang mudah dan selamat untuk memanipulasi data yang berfungsi dengan berkesan dalam semua sistem, tanpa mengira versi dan tetapan yang dipilih.

Apabila menyalin kandungan satu pembolehubah kepada yang lain, kami menggunakan pengendali tugasan, yang dilambangkan dalam PHP menggunakan tanda sama dengan (=). Baris kod berikut mencipta pembolehubah baharu yang dipanggil $tireqty dan membungkus kandungan $_POST['tireqty'] ke dalam pembolehubah baharu ini:

$tireqty=$_POST['tireqty']

Memandangkan skrip ini tidak menjana sebarang output, tidak ada bezanya sama ada ia diletakkan di atas atau di bawah . Biasanya blok ini diletakkan pada permulaan skrip.

5. Dalam fail zakaz.php, tukar kod seperti berikut dan semak kefungsian borang. Keputusan dalam Rajah. 3.3. Nombor mungkin berbeza bergantung pada data yang anda masukkan.

Rajah 3.3

Latihan 2: Buat kalkulator untuk borang Bahagian Auto Bob

Dalam tutorial PHP ini, kita akan melihat fungsi aritmetik PHP asas untuk pengiraan.

1. Simpan fail forma_bob.html di bawah nama forma_bob_2.html

2. Simpan fail zakaz.php di bawah nama zakaz_2.php

3. Dalam fail forma_bob_2.html, tukar bentuk "Bahagian auto daripada Bob" supaya ia kelihatan seperti dalam Rajah. 3.4. Jangan lupa tukar nama pengendali kepada zakaz_2.php. Jika anda mengalami kerugian, anda boleh melaksanakan kod di bawah.

Rajah 3.4

4. Buat pemprosesan borang baharu dalam fail zakaz_2.php, menggunakan pengetahuan yang diperoleh daripada pelajaran lepas. Pemprosesan mesti mengandungi data dan syarat keluaran berikut:

1. Kos setiap produk ditentukan oleh pemalar. Pemalar dalam PHP ditentukan oleh fungsi define. Contoh define("POKRPRICE",10); Parameter pertama fungsi ialah nama pemalar, yang ditulis dengan huruf besar, parameter kedua ialah nilai pemalar.

2. Operasi OR logik dilambangkan dengan ||

3. Operasi logik DAN dilambangkan dengan && .

4. Operasi perbandingan: lebih besar daripada >, kurang< , больше или равно >= , kurang daripada atau sama

Tugas: Katakan anda perlu membuat senarai juntai bawah dengan tahun dari 2000 hingga 2050.
Penyelesaian: Anda perlu mencipta borang HTML dengan elemen SELECT dan skrip PHP untuk memproses borang.

Perbincangan:

Mula-mula, mari buat dua fail: form.html dan action.php. Fail form.html akan mengandungi borang html dengan senarai juntai bawah. Selain itu, nilai dalam senarai boleh ditentukan dalam dua cara:

I. Kemasukan data manual:


2000
2001
2002
……………………………………………
2050

II. Memasukkan data melalui gelung:



Seperti yang anda lihat, contoh kedua dengan gelung adalah lebih padat. Saya rasa tidak perlu menyediakan skrip pengendali untuk borang ini, kerana ia diproses sama seperti medan teks, i.e. nilai senarai boleh diambil daripada tatasusunan superglobal $_POST.

Penerangan:

Mari buat borang HTML untuk menghantar fail ke pelayan.




Borang html ini mengandungi elemen semak imbas, yang membuka kotak dialog untuk memilih fail untuk dimuat naik ke pelayan. Apabila anda menekan butang "Pindahkan fail", fail dihantar ke skrip pengendali.

Kemudian anda perlu menskrip tindakan pengendali.php . Sebelum menulis pengendali, kita perlu memutuskan dalam direktori mana kita akan menyalin fail:

Komen

Jika anda mempercayai pengguna untuk memuat naik sebarang fail ke pelayan anda, anda perlu berhati-hati. Penyerang boleh membenamkan kod "buruk" ke dalam gambar atau fail dan menghantarnya ke pelayan. Dalam kes sedemikian, anda perlu mengawal ketat muat turun fail.

Contoh ini menunjukkan mencipta direktori dan menyalin fail ke dalam direktori itu ke pelayan.

Saya juga ingin menunjukkan contoh dengan elemen kotak semak. Elemen ini berbeza sedikit daripada elemen lain kerana jika bukan salah satu elemen kotak semak'a tidak dipilih, maka pembolehubah superglobal $_POST akan mengembalikan nilai kosong:


Biru
Hitam
putih




Jika anda mempunyai sebarang soalan lain atau sesuatu yang tidak jelas - selamat datang ke kami

Salah satu tugas yang paling biasa dalam amalan ialah pelaksanaan borang maklum balas. Maksud anda menulis kod HTMLnya, mereka bentuknya dalam CSS, mencipta skrip PHP yang akan memproses data yang diterima daripada pengguna dan menghantarnya ke mel kami, menulis skrip JS yang akan menyemak borang untuk kecukupan data yang dimasukkan, melindungi cetusan idea kami daripada spam supaya peti mel kami tidak runtuh akibat serangan bot.

Semua perkara di atas akan dibincangkan dalam ulasan kami dan diulas secara terperinci.

Jadi, mari kita mula membuat borang maklum balas:

HTML

Pertama sekali, kami menulis kod HTML, yang menentukan medan yang akan diisi oleh pengguna. Mereka akan dirasmikan pada masa akan datang. Kod borang kelihatan seperti ini:

< form method= "post" action= "mail.php" > < div class = "left" > < label for = "name" >nama:< input maxlength= "30" type= "text" name= "name" /> < label for = "phone" >telefon:< input maxlength= "30" type= "text" name= "phone" /> < label for = "mail" >E-mel:< input maxlength= "30" type= "text" name= "mail" /> < div class = "right" > < label for = "message" >Mesej:< textarea rows= "7" cols= "50" name= "message" > < input type= "submit" value= "Hantar" />

Dan secara visual ia kini kelihatan seperti ini:

Saya bersetuju, setakat ini semuanya hodoh dan tidak ada yang jelas, tetapi kami baru sahaja bermula.

Mari lihat kod di atas secara terperinci:

  • < form method= "post" action= "mail.php" > …


    Untuk membuat borang, anda perlu menggunakan teg borang. Dialah yang menentukan permulaan dan akhir borang untuk jurubahasa kod. Ia, seperti mana-mana teg, mempunyai set keseluruhan atribut, tetapi terdapat hanya dua yang diperlukan untuk borang berfungsi, ini adalah kaedah (kaedah menghantar permintaan ke pelayan, pos digunakan sebagai standard untuk borang) dan tindakan ( menunjukkan laluan ke fail pengendali borang, iaitu dalam Fail ini akan mengandungi skrip PHP, yang kemudiannya akan menghantar nilai yang dimasukkan pengguna kepada kami melalui e-mel. Dalam kes kami, kami melihat bahawa fail ini dipanggil mail.php dan ia terletak dalam direktori tapak yang sama dengan halaman yang kami sedang pertimbangkan).
  • < input maxlength= "30" type= "text" name= "name" />


    Seterusnya kita mempunyai input. Ini sebenarnya adalah medan borang itu sendiri di mana pengguna akan memasukkan maklumat yang kami perlukan (type="text" menunjukkan bahawa ini akan menjadi teks). Atribut panjang maksimum menentukan bilangan aksara yang boleh dimasukkan oleh pengguna dalam medan borang yang diberikan. Atribut yang paling penting ialah nama - ia menentukan nama medan tertentu. Dengan nama-nama inilah skrip PHP akan memproses maklumat yang memasukinya. Jika mahu, anda juga boleh menetapkan atribut pemegang tempat, yang memaparkan teks di dalam medan yang hilang apabila kursor diletakkan di dalamnya. Salah satu masalah dengan pemegang tempat ialah ia tidak disokong oleh beberapa pelayar lama.
  • < label for = "name" >nama:


    Digunakan jika kita telah meninggalkan ruang letak. Tandatangan medan biasa, atribut for memberitahu medan khusus yang dirujuk oleh tandatangan ini. Nilai menunjukkan nama medan yang kami minati.
  • < textarea rows= "7" cols= "50" name= "message" >


    Sama seperti input, ia bertujuan untuk pengguna memasukkan maklumat, cuma kali ini medan itu disesuaikan untuk mesej yang panjang. Baris menentukan saiz medan dalam baris, kol dalam aksara. Secara umum, mereka menetapkan ketinggian dan lebar medan kami.
  • < input type= "submit" value= "Hantar" />


    Type="submit" memberitahu kami bahawa ini ialah butang untuk menyerahkan borang dan nilai menentukan teks yang akan berada di dalam butang ini.
  • < div class = "right" >


    digunakan hanya untuk reka bentuk visual selanjutnya bagi borang.
CSS

Untuk membolehkan borang maklum balas kami kelihatan rapi, ia perlu diformatkan. Untuk mendapatkan hasil berikut:

Kami menggunakan kod ini:

borang ( latar belakang: #f4f5f7; padding: 20px; ) borang . kiri, borang . kanan ( paparan: blok sebaris; jajaran menegak: atas; lebar: 458px; ) bentuk . kanan ( padding- kiri: 20px; ) label ( display: block; font- size: 18px; text- align: center; margin: 10px 0px 0px 0px; ) input, textarea ( sempadan: 1px pepejal #82858D; padding: 10px; saiz fon: 16px; lebar: 436px; ) textarea ( ketinggian: 98px; margin- bawah: 32px; ) input[ type= "submit" ] ( width: 200px; float: right; border: none; background: #595B5F; warna: #fff; text- transform: huruf besar; )

Saya tidak nampak maksud menerangkan CSS secara terperinci; Saya hanya akan menarik perhatian anda kepada perkara utama:

  • Tidak perlu menulis reka bentuk untuk setiap tag dalam borang. Cuba bina pemilih anda dengan cara yang anda boleh mereka bentuk semua elemen yang anda perlukan dalam beberapa baris kod.
  • Jangan gunakan teg jenis yang tidak perlu untuk memecahkan garisan dan membuat lekukan< br>, < p>dsb. CSS dengan paparan: blok dan jidar dengan sifat padding mengatasi tugas ini dengan baik. Lebih lanjut mengenai sebab anda tidak boleh menggunakannya< br>dalam susun atur secara umum, anda boleh membaca dalam artikel Tag br, tetapi adakah ia benar-benar perlu? .
  • Anda tidak boleh menggunakan susun atur jadual untuk borang. Ini bercanggah dengan semantik teg ini dan enjin carian menyukai kod semantik. Untuk membentuk struktur visual dokumen, kami hanya memerlukan teg div dan sifat paparan yang ditentukan dalam CSS: inline-block (menyusun blok dalam satu baris) dan vertical-align: top (menghalangnya daripada berselerak pada skrin) , tetapkan mereka pada ketinggian yang diperlukan dan voila, tiada apa-apa yang berlebihan dan semuanya terletak seperti yang kita perlukan.
  • Bagi mereka yang ingin menjimatkan masa mereka pada reka bentuk laman web, saya boleh mengesyorkan menggunakan rangka kerja CSS semasa membuat laman web, terutamanya yang ditulis sendiri. Pilihan saya dalam hal ini ialah Twitter Bootstrap. Anda boleh menonton pelajaran tentang cara mereka bentuk borang menggunakannya.

    PHP

    Nah, sudah tiba masanya untuk membuat borang kami berfungsi.

    Kami pergi ke direktori akar tapak kami dan mencipta fail mail.php di sana, yang sebelum ini kami tentukan laluan dalam atribut tindakan teg borang.

    Akhirnya kodnya akan kelihatan seperti ini:

    mesej anda telah berjaya dihantar

    Anda boleh melangkau perbincangan bahagian HTML dan CSS dokumen ini. Pada asasnya, ini adalah halaman laman web biasa yang anda boleh reka bentuk mengikut kehendak dan keperluan anda. Mari lihat bahagian terpentingnya - skrip PHP untuk memproses borang:

    $balik = "

    kembalilah

    " ;

    Dengan baris ini kami membuat pautan untuk kembali ke halaman sebelumnya. Memandangkan kami tidak tahu terlebih dahulu dari halaman mana pengguna akan sampai ke halaman ini, ini dilakukan menggunakan fungsi JS yang kecil. Pada masa hadapan, kami hanya akan mengakses pembolehubah ini untuk memaparkannya di tempat yang kami perlukan.

    jika (! kosong ($_POST [ "nama" ] ) dan ! kosong ($_POST [ "telefon" ] ) dan ! kosong ($_POST [ "mel" ] ) dan ! kosong ($_POST [ "mesej" ] ) ) ( //bahagian dalaman pengendali ) else ( echo "Untuk menghantar mesej, isi semua medan! $back " ; keluar ; )

    Di sini kami menambah semakan borang untuk memastikan bahawa medan penuh. Seperti yang anda rasa, dalam bahagian $_POST["name"], dalam petikan, kami menulis nilai atribut nama input kami.

    Jika semua medan diisi, maka skrip akan mula memproses data di bahagian dalamannya, tetapi jika sekurang-kurangnya satu medan belum diisi, maka mesej akan dipaparkan pada skrin pengguna meminta mereka mengisi semua medan borang bergema "Untuk menghantar mesej, isi semua medan! $back" dan pautan untuk kembali ke halaman sebelumnya yang kami buat dengan baris pertama.

    Seterusnya kita tampal ke bahagian dalaman pengendali borang:

    $nama = trim(strip_tags($_POST["nama"])); $telefon = trim(strip_tags($_POST["telefon"])); $mel = trim(strip_tags($_POST["mel"])); $message = trim(strip_tags($_POST["message"]));

    Oleh itu, kami mengosongkan data yang dimasukkan pengguna daripada teg html dan ruang tambahan. Ini membolehkan kami melindungi diri kami daripada menerima kod hasad dalam mesej yang dihantar kepada kami.

    Semakan boleh dibuat lebih rumit, tetapi ini adalah mengikut budi bicara anda. Kami telah memasang perlindungan minimum pada bahagian pelayan. Kami akan melakukan selebihnya di sisi pelanggan menggunakan JS.

    Saya tidak mengesyorkan untuk meninggalkan sepenuhnya perlindungan borang pada bahagian pelayan yang memihak kepada JS, kerana, walaupun sangat jarang berlaku, terdapat yang unik dengan JS dilumpuhkan dalam penyemak imbas.

    Selepas membersihkan teg, tambah menghantar mesej:

    mel ("[email protected]" , "Surat daripada_alamat_tapak_anda" , "Saya menulis kepada anda: " . $name . "
    Nombornya: " . $phone ."
    E-mel beliau: " . $mail ."
    Mesej beliau: " . $message, "Content-type:text/html;charset=windows-1251" );

    Talian inilah yang bertanggungjawab menjana dan menghantar mesej kepada kami. Ia diisi seperti berikut:

  • [email protected]” – di sini anda memasukkan e-mel anda di antara petikan
  • “Surat daripada alamat_tapak anda” ialah subjek mesej yang akan dihantar ke e-mel anda. Anda boleh menulis apa sahaja di sini.
  • "Menulis kepada anda: ".$name."< br />Nombornya: ".$phone."< br />E-melnya: ".$mail."< br />Mesej beliau: ".$message – kami membentuk teks mesej itu sendiri. $name – kami memasukkan maklumat yang diisi oleh pengguna dengan mengakses medan dari langkah sebelumnya, dalam petikan kami menerangkan maksud medan ini, dengan tag< br />Kami memutuskan baris supaya mesej secara keseluruhan boleh dibaca.
  • Content-type:text/html;charset=windows-1251 - pada penghujungnya terdapat petunjuk jelas tentang jenis data yang dihantar dalam mesej dan pengekodannya.
  • PENTING!

    Pengekodan yang dinyatakan dalam "kepala" dokumen (< meta http- equiv= "Content-Type" content= "text/html; charset=windows-1251" />), pengekodan daripada mesej Content-type:text/html;charset=windows-1251 dan secara umum pengekodan fail PHP mesti sepadan, jika tidak, dalam mesej yang diterima melalui mel, "kata-kata gila" akan dipaparkan dan bukannya bahasa Rusia atau huruf Inggeris.

    Ramai orang tidak menyatakan secara eksplisit pengekodan mesej yang dihantar, tetapi pada sesetengah pelanggan e-mel ini mungkin menyebabkan masalah pada masa hadapan (e-mel tidak boleh dibaca dihantar ke mel), jadi saya syorkan tetapkannya.

    Menyemak borang untuk kecukupan data yang dimasukkan

    Untuk memastikan pengguna tidak terlepas medan secara tidak sengaja dan mengisi segala-galanya dengan betul, adalah wajar menyemak data yang dimasukkan.

    Ini boleh dilakukan dalam PHP pada bahagian pelayan dan dalam JS pada bahagian klien. Saya menggunakan pilihan kedua, kerana dengan cara ini seseorang boleh segera mengetahui apa yang dia lakukan salah dan membetulkan ralat tanpa membuat peralihan halaman tambahan.

    Kami menampal kod skrip dalam fail yang sama di mana kami mempunyai bahagian HTML dalam borang. Untuk kes kami ia akan kelihatan seperti ini:

    < script>function checkForm(form) ( var name = form. name. value; var n = name. match(/ ^[ A- Za- zA- Jaa- z ] * [ A- Za- zA- Jaa- z ] + $/ ); jika (! n) ( makluman("Nama yang dimasukkan tidak betul, sila betulkan ralat" ); kembalikan palsu ; ) var phone = borang. telefon. nilai; var p = telefon. padan(/ ^[ 0 - 9 + ] [ 0 - 9 - ] * [ 0 - 9 - ] + $/ ) ;jika (! p) ( makluman("Telefon dimasukkan salah") ; kembalikan palsu ; ) var mel = borang. mel . nilai; var m = mail . match(/ ^[ A- Za- z0- 9 ] [ A- Za- z0- 9 \. _- ] * [ A- Za- z0- 9 _] *@ ([ A- Za- z0- 9 ] + ([ A- Za- z0- 9 - ] * [ A- Za- z0- 9 ] + ) * \. ) + [ A- Za- z] + $/ ) ; jika (! m) ( makluman ("E-mel dimasukkan dengan salah, sila betulkan ralat" ); return false ; ) return true ; )

    Nah, sekarang analisis biasa:

    Untuk kami menyemak borang apabila kami mengklik pada butang hantar, kami melampirkan pelancaran skrip kami pada teg borang:

    < form method= "post" action= "mail.php" onSubmit= "return checkForm(this)" >

    Sekarang mari kita ambil senarai semak poin demi poin:


    Seperti yang anda lihat, cek mini sedemikian ditulis untuk setiap medan kami. Saya menyerlahkan semakan untuk satu medan dalam tangkapan skrin dengan segi empat sama merah; untuk medan lain ia mempunyai struktur yang sama, dan jika terdapat keperluan untuk menambah medan atau mengalih keluarnya, anda kini boleh melakukan ini dengan mudah.

    Artikel ini menerangkan secara terperinci tentang menggunakan pembolehubah PHP _SELF.

    Apakah pembolehubah PHP _SELF?

    Pembolehubah PHP _SELF mengembalikan nama dan laluan fail semasa (berbanding dengan akar dokumen). Anda boleh menggunakan pembolehubah ini dalam atribut tindakan borang. Terdapat juga beberapa nuansa yang perlu anda ketahui. Sudah tentu, kita tidak boleh mengabaikan nuansa ini.

    Mari lihat beberapa contoh.

    Gema $_SERVER["PHP_SELF"];

    1) Mari kita anggap bahawa fail php anda terletak di alamat berikut:

    Http://www.yourserver.com/form-action.php

    Dalam kes ini, pembolehubah PHP _SELF akan mengandungi:

    "/form-action.php"

    2) Mari kita anggap fail php anda terletak di alamat ini:

    Http://www.yourserver.com/dir1/form-action.php

    PHP_SELF akan menjadi:

    "/dir1/form-action.php"

    PHP _SELF dalam atribut tindakan borang. Mengapa dia diperlukan di sana?

    Biasanya pembolehubah PHP _SELF digunakan dalam atribut tindakan teg borang. Atribut tindakan menentukan alamat yang kandungan borang akan dihantar selepas pengesahan (pengguna mengklik butang dengan jenis="serah"). Sebagai peraturan, ini adalah halaman yang sama dari mana borang itu ditinggalkan.

    Walau bagaimanapun, jika anda menamakan semula fail yang dirujuk oleh borang, anda perlu menamakan semula nama fail dalam atribut tindakan, jika tidak, borang itu tidak akan berfungsi.

    Pembolehubah PHP _SELF akan menyelamatkan anda daripada pembetulan yang tidak perlu, kerana alamat halaman akan dijana secara automatik berdasarkan nama fail.

    Katakan anda mempunyai fail borang yang dipanggil form-action.php dan anda mahu borang itu diserahkan kepada fail yang sama selepas pengesahan. Biasanya mereka menulis seperti ini:

    Tetapi anda boleh menggunakan pembolehubah PHP _SELF dan bukannya form-action.php. Dalam kes ini kod akan kelihatan seperti: