Kegilaan melakukan tindakan php. PHP dan borang. #1 Cangkuk biasa

RxGroovy mempunyai beberapa varian Do.

  • Javadoc:
  • Javadoc:

  • Javadoc:

Pengendali doOnRequest (baru dalam RxGroovy 1.1) mendaftarkan Tindakan yang akan dipanggil apabila pemerhati meminta item tambahan daripada Observable yang terhasil. Tindakan itu menerima sebagai parameternya bilangan item yang diminta oleh pemerhati.

  • Javadoc:

  • Javadoc:

  • Javadoc:

  • Javadoc:

  • Javadoc:

sebelum ini

  • Javadoc:

selepas Observable yang terhasil ditamatkan, sama ada secara normal atau dengan ralat.

Kod Contoh

nombor def = Boleh diperhatikan.daripada(); numbers.finallyDo(( println("Akhirnya"); )).subscribe(( println(it); ), // onNext ( println("Ralat: " + it.getMessage()); ), // onError ( println ("Jujukan selesai"); ) // onCompleted);

1 2 3 4 5 Urutan selesai Akhirnya

  • Javadoc:

RxJava mempunyai beberapa varian Do.

Pengendali doOnEach membolehkan anda membuat panggilan balik yang Observable yang terhasil akan memanggil setiap kali ia mengeluarkan item. Anda boleh menghantar panggilan balik ini sama ada dalam bentuk Tindakan yang mengambil pelbagai Pemberitahuan onNext sebagai parameter tunggalnya, atau anda boleh menghantar dalam Pemerhati yang kaedah onNextnya akan dipanggil seolah-olah ia telah melanggan Observable.

  • Javadoc:
  • Javadoc:

Pengendali doOnNext adalah sama seperti doOnEach(Action1) kecuali Tindakan yang anda berikan sebagai parameter tidak menerima Pemberitahuan tetapi sebaliknya hanya menerima item yang dipancarkan.

Kod Contoh

Observable.just(1, 2, 3).doOnNext(new Action1() ( @Override public void call(Integer item) ( if(item > 1) ( throw new RuntimeException("Item melebihi nilai maksimum"); ) ) ) ).subscribe(Pelanggan baharu() ( @Override public void onNext(Integer item) ( System.out.println("Next: " + item); ) @Override public void onError(Throwable error) ( System.err.println( "Ralat: " + error.getMessage()); ) @Override public void onCompleted() ( System.out.println("Sequence complete."); ) ));

Seterusnya: 1 Ralat: Item melebihi nilai maksimum

  • Javadoc:

Pengendali doOnRequest (baru dalam RxJava 1.1) mendaftarkan Tindakan yang akan dipanggil apabila pemerhati meminta item tambahan daripada Observable yang terhasil. Tindakan itu menerima sebagai parameternya bilangan item yang diminta oleh pemerhati.

  • Javadoc:

Pengendali doOnSubscribe mendaftarkan Tindakan yang akan dipanggil apabila pemerhati melanggan Observable yang terhasil.

  • Javadoc:

Pengendali doOnUnsubscribe mendaftarkan Tindakan yang akan dipanggil apabila pemerhati berhenti melanggan daripada Observable yang terhasil.

  • Javadoc:

Pengendali doOnCompleted mendaftarkan Tindakan yang akan dipanggil jika Observable yang terhasil ditamatkan secara normal, memanggil onCompleted .

  • Javadoc:

Pengendali doOnError mendaftarkan Tindakan yang akan dipanggil jika Observable yang terhasil ditamatkan secara tidak normal, memanggil onError . Tindakan ini akan diluluskan Throwable yang mewakili ralat.

  • Javadoc:

Pengendali doOnTerminate mendaftarkan Tindakan yang akan dipanggil adil sebelum ini Observable yang terhasil ditamatkan, sama ada secara normal atau dengan ralat.

  • Javadoc:

finallyDo ditamatkan sejak RxJava 1.1.1, memihak kepada doAfterTerminate dengan tingkah laku yang sama.

Pengendali finallyDo mendaftarkan Tindakan yang akan dipanggil just selepas Observable yang terhasil ditamatkan, sama ada secara normal atau dengan ralat.

  • Javadoc:

Pengendali doAfterTerminate mendaftarkan Tindakan yang akan dipanggil adil selepas Observable yang terhasil ditamatkan, sama ada secara normal atau dengan ralat.

  • Javadoc:


RxJS melaksanakan pengendali Do asas seperti melakukan atau ketik (dua nama untuk operator yang sama). Anda mempunyai dua pilihan untuk cara menggunakan operator ini:

  • Anda boleh menyampaikannya sebagai Pemerhati, dalam hal ini lakukan / ketik akan memanggil kaedah Pemerhati itu seolah-olah Pemerhati itu telah melanggan kepada Pemerhati yang terhasil.
  • Anda boleh menghantar satu set 1-3 fungsi individu (onNext , onError , dan onCompleted) yang lakukan / ketik akan memanggil bersama-sama dengan fungsi yang dinamakan serupa bagi mana-mana pemerhatinya.
  • Kod Contoh

    /* Menggunakan pemerhati */ var observer = Rx.Observer.create(function (x) ( console.log("Do Next: %s", x); ), function (err) ( console.log("Do Error : %s", err); ), fungsi () ( console.log("Do Completed"); )); var source = Rx.Observable.range(0, 3) .do(observer); var langganan = source.subscribe(fungsi (x) ( console.log("Seterusnya: %s", x); ), fungsi (err) ( console.log("Ralat: %s", err); ), fungsi () ( console.log("Selesai"); ));

    /* Menggunakan fungsi */ var source = Rx.Observable.range(0, 3) .do(function (x) ( console.log("Do Next:", x); ), function (err) ( console. log("Lakukan Ralat:", err); ), function () ( console.log("Do Completed"); )); var langganan = source.subscribe(fungsi (x) ( console.log("Seterusnya: %s", x); ), fungsi (err) ( console.log("Ralat: %s", err); ), fungsi () ( console.log("Selesai"); ));

    Lakukan Seterusnya: 0 Seterusnya: 0 Lakukan Seterusnya: 1 Seterusnya: 1 Lakukan Seterusnya: 2 Seterusnya: 2 Lakukan Selesai Selesai


    RxJS juga melaksanakan doOnNext atau tapOnNext (dua nama untuk operator yang sama). Ia ialah bentuk khusus Do yang hanya bertindak balas kepada kes onNext, dengan memanggil fungsi panggil balik yang anda sediakan sebagai parameter. Anda juga boleh secara pilihan menghantar parameter kedua yang akan menjadi objek " ini " dari sudut pandangan fungsi panggil balik anda apabila ia dilaksanakan.

    Kod Contoh

    var source = Rx.Observable.range(0, 3) .doOnNext(function () ( this.log("Do Next: %s", x); ), console); var langganan = source.subscribe(fungsi (x) ( console.log("Seterusnya: %s", x); ), fungsi (err) ( console.log("Ralat: %s", err); ), fungsi () ( console.log("Selesai"); ));

    Lakukan Seterusnya: 0 Seterusnya: 0 Lakukan Seterusnya: 1 Seterusnya: 1 Lakukan Seterusnya: 2 Seterusnya: 2 Selesai


    RxJS juga melaksanakan doOnError atau tapOnError (dua nama untuk operator yang sama). Ia adalah bentuk khusus Do yang bertindak balas hanya kepada kes onError, dengan memanggil fungsi panggil balik yang anda sediakan sebagai parameter. Anda juga boleh secara pilihan menghantar parameter kedua yang akan menjadi objek " ini " dari sudut pandangan fungsi panggil balik anda apabila ia dilaksanakan.

    Kod Contoh

    var source = Rx.Observable.throw(new Error()); .doOnError(function (err) ( this.log("Do Error: %s", err); ), console); var langganan = source.subscribe(fungsi (x) ( console.log("Seterusnya: %s", x); ), fungsi (err) ( console.log("Ralat: %s", err); ), fungsi () ( console.log("Selesai"); ));

    Lakukan Ralat: Ralat Ralat: Ralat


    RxJS juga melaksanakan doOnCompleted atau tapOnCompleted (dua nama untuk operator yang sama). Ia ialah bentuk khusus Do yang hanya bertindak balas kepada kes onCompleted, dengan memanggil fungsi panggil balik yang anda sediakan sebagai parameter. Anda juga boleh secara pilihan menghantar parameter kedua yang akan menjadi objek " ini " dari sudut pandangan fungsi panggil balik anda apabila ia dilaksanakan.

    Kod Contoh

    var source = Rx.Observable.range(0, 3) .doOnCompleted(function () ( this.log("Do Completed"); ), console); var langganan = source.subscribe(fungsi (x) ( console.log("Seterusnya: %s", x); ), fungsi (err) ( console.log("Ralat: %s", err); ), fungsi () ( console.log("Selesai"); ));

    Seterusnya: 0 Seterusnya: 1 Seterusnya: 2 Selesai Selesai


    RxJS juga melaksanakan pengendali akhirnya. Ia memerlukan fungsi yang akan dipanggil selepas Observable yang terhasil ditamatkan, sama ada biasanya (onCompleted) atau abnormal (onError).

    Kod Contoh

    var source = Rx.Observable.throw(new Error()) .finally(function () ( console.log("Akhirnya"); )); var langganan = source.subscribe(fungsi (x) ( console.log("Seterusnya: " + x); ), fungsi (err) ( console.log("Ralat: " + err);), fungsi () ( konsol .log("Selesai"); ));

    Ralat: Ralat Akhirnya

    do / tap , doOnNext / tapOnNext , doOnError / tapOnError , doOnCompleted / tapOnCompleted , dan akhirnya ditemui dalam setiap pengedaran berikut:

    • rx.js
    • rx.all.js
    • rx.all.compat.js
    • rx.compat.js
    • rx.lite.js
    • rx.lite.compat.js

    RxPHP melaksanakan pengendali ini seperti yang dilakukan .

    Menimbulkan tindakan untuk setiap elemen dalam urutan yang boleh diperhatikan dan memanggil tindakan apabila penamatan urutan yang boleh diperhatikan dengan anggun atau luar biasa. Kaedah ini boleh digunakan untuk penyahpepijatan, pengelogan, dsb. tingkah laku pertanyaan dengan memintas aliran mesej untuk menjalankan tindakan sewenang-wenangnya untuk mesej pada saluran paip. Apabila menggunakan do, adalah penting untuk ambil perhatian bahawa Pemerhati mungkin menerima acara tambahan selepas strim selesai atau ralat (seperti apabila menggunakan ulangan atau melanggan semula). Jika anda menggunakan Observable yang memanjangkan AbstractObservable, anda tidak akan menerima peristiwa ini. Untuk kes khas ini, gunakan DoObserver. doOnNext, doOnError dan doOnCompleted menggunakan DoObserver secara dalaman dan akan menerima acara tambahan ini.

    Kod Contoh

    //daripada https://github.com/ReactiveX/RxPHP/blob/master/demo/do/do.php $source = \Rx\Observable::range(0, 3) ->do(function ($x) ( echo "Do Next:", $x, PHP_EOL; ), fungsi (Throwable $err) ( echo "Do Ralat:", $err->getMessage(), PHP_EOL; ), fungsi () ( echo "Do Completed" , PHP_EOL; )); $langganan = $sumber->langgan($stdoutObserver);

    Lakukan Seterusnya:0 Nilai seterusnya: 0 Lakukan Seterusnya:1 Nilai seterusnya: 1 Lakukan Seterusnya:2 Nilai seterusnya: 2 Lakukan Selesai Selesai!

    RxPHP juga mempunyai operator doOnError .

    Kod Contoh

    //daripada https://github.com/ReactiveX/RxPHP/blob/master/demo/do/doOnError.php $source = \Rx\Observable::error(new Exception("Oops")) ->doOnError(function (Boleh Lempar $err) ( echo "Lakukan Ralat:", $err->getMessage(), PHP_EOL; )); $langganan = $sumber->langgan($stdoutObserver);

    Lakukan Ralat:Ops Pengecualian:Op

    RxPHP juga mempunyai operator doOnCompleted .

    Kod Contoh

    //dari https://github.com/ReactiveX/RxPHP/blob/master/demo/do/doOnCompleted.php $source = \Rx\Observable::empty() ->doOnCompleted(function () ( echo "Do Completed ", PHP_EOL; )); $langganan = $sumber->langgan($stdoutObserver);

    Selesai Selesai!

    RxPHP juga mempunyai operator akhirnya.

    Akan memanggil fungsi tertentu apabila sumber tamat apabila lengkap atau ralat.

    Kod Contoh

    //dari https://github.com/ReactiveX/RxPHP/blob/master/demo/finally/finally.php Rx\Observable::range(1, 3) ->finally(function() ( echo "Akhirnya\n "; )) ->langgan($stdoutObserver);

    Nilai seterusnya: 1 Nilai seterusnya: 2 Nilai seterusnya: 3 Lengkap! Akhirnya

    //dari https://github.com/ReactiveX/RxPHP/blob/master/demo/finally/finally-error.php Rx\Observable::range(1, 3) ->map(function($value) (​ ​if ($value == 2) ( throw new \Exception("error"); ) return $value; )) ->finally(function() ( echo "Akhirnya\n"; )) ->subscribe($stdoutObserver );

    Nilai seterusnya: 1 Pengecualian: ralat Akhirnya

    "Jangan gunakan operator goto," itulah yang guru di akademi memberitahu kami, dan sememangnya, pengendali ini mengubah kod menjadi kucar-kacir. Pembangun PHP menyelesaikan masalah secara radikal - ia tidak wujud dalam PHP3 dan PHP4. Apakah motivasi mereka pada mulanya? Mungkin mereka mahu menanamkan dalam diri kita semua gaya pengaturcaraan yang betul? Nah, kita boleh mengatakan bahawa mereka benar-benar berjaya - kita semua sudah terbiasa, iaitu, kita telah kehilangan tabiat pengendali ini, mungkin ini yang terbaik, kerana pada satu masa saya terpaksa menghasilkan pembinaan logik yang sepenuhnya. diberi pampasan untuk goto yang paling malang ini.
    Saya tidak tahu bagaimana keadaannya untuk sesiapa sahaja, tetapi bagi saya, saya sering mempunyai keinginan untuk menggunakan goto apabila membuat pengendali borang html, apabila banyak data dihantar dari pengguna ke pelayan, yang mana skrip php mesti semak langkah demi langkah. Proses ini, sebagai peraturan, berlaku dalam beberapa peringkat: mencetak borang itu sendiri, menyemak data yang diterima, paparan awal, dan, sebagai contoh, menyimpan. Lebih-lebih lagi, beberapa peringkat mungkin diulang: jika pengesahan data tidak berjalan lancar, kami meneruskan untuk mencetak borang, atau jika paparan awal tidak sesuai dengan pengguna, dia boleh kembali memasukkan data. Ringkasnya, beberapa keping kod boleh digunakan beberapa kali. Menggunakan fungsi dalam keadaan ini juga tidak begitu mudah - terdapat banyak pembolehubah input dan output, fungsi mesti melakukan tindakan yang terlalu kompleks, secara amnya ternyata kekok dan kebolehbacaan kod menurun dengan mendadak.
    Dan saya datang dengan reka bentuk ini.

    .
    Awak tua.

    Contoh output program ini:

    Hello, Sergey. Anda berumur 30 tahun.

    Jika anda tidak mengambil kira kepingan kod dengan htmlspecialchars() dan (int), prinsip operasi kod ini hendaklah mudah dan boleh difahami. htmlspecialchars() memastikan bahawa aksara HTML "istimewa" dikodkan dengan betul supaya HTML atau Javascript yang berniat jahat tidak dimasukkan ke dalam halaman anda. Medan umur, yang kita tahu sepatutnya nombor, kita hanya boleh menukar kepada integer, yang secara automatik akan menyingkirkan aksara yang tidak diingini. PHP juga boleh melakukan ini secara automatik menggunakan sambungan penapis. Pembolehubah $_POST["nama"] dan $_POST["umur"] ditetapkan secara automatik untuk anda oleh PHP. Sebelum ini kami menggunakan pembolehubah superglobal $_SERVER, tetapi di sini kami juga menggunakan pembolehubah superglobal $_POST, yang mengandungi semua data POST. perasan, itu kaedah penghantaran(kaedah) borang kami adalah POST. Jika kita menggunakan kaedah tersebut DAPATKAN, maka maklumat borang kami akan berada dalam pembolehubah superglobal $_GET . Sebagai alternatif, anda boleh menggunakan pembolehubah $_REQUEST jika sumber data tidak penting. Pembolehubah ini mengandungi campuran data GET, POST, COOKIE.

    15 tahun yang lalu

    Menurut spesifikasi HTTP, anda harus menggunakan kaedah POST apabila anda menggunakan borang untuk menukar keadaan sesuatu pada hujung pelayan. Contohnya, jika halaman mempunyai borang untuk membenarkan pengguna menambah ulasan mereka sendiri, seperti ini halaman di sini, borang harus menggunakan POST. Jika anda mengklik "Muat Semula" atau "Muat Semula" pada halaman yang anda capai melalui POST, hampir selalu ralat -- anda tidak sepatutnya menyiarkan ulasan yang sama dua kali -- itulah sebabnya halaman ini tidak ditandakan atau dicache.

    Anda harus menggunakan kaedah GET apabila borang anda, baik, mendapatkan sesuatu dari pelayan dan tidak benar-benar mengubah apa-apa. Sebagai contoh, borang untuk enjin carian harus menggunakan GET, memandangkan carian tapak Web tidak seharusnya mengubah apa-apa yang pelanggan mungkin mengambil berat tentang, dan menanda halaman atau menyimpan cache hasil pertanyaan enjin carian adalah sama berguna seperti menanda halaman atau cache. halaman HTML statik.

    2 tahun yang lalu

    Perlu dijelaskan:

    POST tidak lebih selamat daripada GET.

    Sebab untuk memilih GET vs POST melibatkan pelbagai faktor seperti niat permintaan (adakah anda "menyerahkan" maklumat?), saiz permintaan (terdapat had untuk berapa lama URL boleh dibuat dan parameter GET dihantar dalam URL), dan betapa mudahnya anda mahu Tindakan itu boleh dikongsi -- Contoh, Carian Google GET kerana ia memudahkan untuk menyalin dan berkongsi pertanyaan carian dengan orang lain hanya dengan berkongsi URL.

    Keselamatan hanyalah pertimbangan di sini kerana fakta bahawa GET lebih mudah dikongsi daripada POST. Contoh: anda tidak mahu kata laluan dihantar oleh GET, kerana pengguna mungkin berkongsi URL yang terhasil dan secara tidak sengaja mendedahkan kata laluan mereka.

    Walau bagaimanapun, GET dan POST sama-sama mudah untuk dipintas oleh orang jahat yang diletakkan dengan baik jika anda tidak menggunakan TLS/SSL untuk melindungi sambungan rangkaian itu sendiri.

    Semua Borang yang dihantar melalui HTTP (biasanya port 80) adalah tidak selamat, dan hari ini (2017), tidak banyak sebab yang baik untuk tapak web awam tidak menggunakan HTTPS (yang pada asasnya HTTP + Transport Layer Security).

    Sebagai bonus, jika anda menggunakan TLS anda meminimumkan risiko pengguna anda mendapat kod (IKLAN) yang disuntik ke dalam trafik anda yang tidak anda letakkan di sana.

    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="serahkan"). 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: