Anda bisa menggunakan array_diff_key
Luar biasa, saya sangat suka naskah Anda
Saya tertarik dan menambahkan yang berikut dan bertanya-tanya apakah ini bisa disederhanakan?
<?php declare(strict_types=1); // PHP 7 specific error_reporting(-1); ini_set('display_messages', 'true'); function fred($val,$title='Nothing set') { echo '<pre>' .$title .' = '; print_r($val); echo '</pre>'; }// $title = 'casbboy'; $test = '//localhost/aQQQ/kill/index-005.php?x=1&y=2&z=3&two=two&four=four'; // CAN THIS BE SIMPLIFIED??? $ok_keys ['one'] = isset($_GET['one']) ? $_GET['one'] : NULL; $ok_keys ['two'] = isset($_GET['two']) ? $_GET['two'] : NULL; $ok_keys ['three'] = isset($_GET['three']) ? $_GET['three'] : NULL; $ok_keys ['four'] = isset($_GET['four']) ? $_GET['four'] : NULL; $ok_keys ['five'] = isset($_GET['five']) ? $_GET['five'] : NULL; foreach( $ok_keys as $val => $get): if( NULL===$get): unset( $ok_keys[$val] ); endif; endforeach; // CAN THIS BE SIMPLIFIED??? $extras = 'No GET array'; if ($_GET) { $extras = array_diff_key($_GET, $ok_keys); } ?> <!DOCTYPE HTML> <html lang="en"> <head> <title> <?= $title ?> </title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> </head> <body> <h1> <?= $title ?> </h1> <h4> <a href="<?= $test ?> "> <?= $test ?> </a> </h4> <h5> Results </h5> <?php fred($extras, '$extras'); fred($ok_keys, '$ok_keys '); ?> </body> </html>Keluaran
casbboy
http. //localhost/aQQQ/kill/index-005. php?x=1&y=2&z=3&dua=dua&empat=empat
Hasil
$ekstra = Larik
(
=> 1
[y] => 2
[z] => 3
)
$ok_keys = Larik
(
[dua] => dua
[empat] => empat
)
Dalam tutorial PHP pemula ini, kami akan menunjukkan cara mengambil parameter string kueri dari URL. Kami juga akan memberi tahu Anda tentang beberapa jebakan yang paling umum
Ambil URL berikut sebagai contoh, yang berisi dua parameter GET
halaman. php?id=23&halaman=34
Di URL di atas, kami memiliki dua parameter GET. id, yang berisi nilai 23, dan halaman, yang berisi nilai 34
Katakanlah kita ingin mengambil nilai-nilai itu sehingga kita dapat menggunakannya dalam skrip PHP kita
Jika kita ingin mengambil nilai dari kedua parameter tersebut, kita dapat mengakses array superglobal $_GET seperti itu
Meskipun kode PHP akan berfungsi, itu salah mengasumsikan bahwa parameter GET yang dimaksud akan selalu ada
Akibatnya, ada kemungkinan skrip kami akan menampilkan pemberitahuan indeks tidak terdefinisi yang jelek jika pengguna menghapus salah satu parameter dari URL
Ini akan mengakibatkan PHP memuntahkan pesan berikut
Memperhatikan. Indeks yang tak terdefinisi. id di /path/ke/file. php pada baris 4
Untuk menghindari masalah seperti ini, Anda perlu memeriksa apakah variabel GET ada sebelum Anda mencoba menggunakannya
$id = false; if(isset($_GET['id'])){ $id = $_GET['id']; } $page = false; if(isset($_GET['page'])){ $page = $_GET['page']; }Pada contoh di atas, kami menggunakan fungsi isset PHP untuk memeriksa apakah parameter yang dimaksud benar-benar ada atau tidak
Jika memang ada, kami menugaskannya ke salah satu variabel kami. Jika tidak, maka variabel kita akan mempertahankan nilai FALSE defaultnya
Jangan pernah mempercayai parameter GET. Selalu validasi mereka
Parameter GET harus selalu diperlakukan dengan sangat hati-hati
- Anda tidak dapat berasumsi bahwa mereka akan selalu ada
- Jika memang ada, Anda tidak dapat mengabaikan kemungkinan bahwa pengguna telah merusaknya
Dengan kata lain, jika Anda mengharapkan id menjadi nilai integer dan pengguna memutuskan untuk mengubahnya secara manual menjadi "blahblahblah", skrip PHP Anda harus dapat menangani skenario itu
Parameter URL adalah variabel eksternal, dan variabel eksternal tidak pernah bisa dipercaya
Jangan pernah langsung mencetak parameter GET ke halaman
Mencetak parameter GET tanpa membersihkannya adalah resep bencana, karena ini akan membuat aplikasi web Anda terbuka lebar untuk serangan XSS
Ambil contoh berikut
$page = false; if(isset($_GET['page'])){ $page = $_GET['page']; } if($page !== false){ echo '<h1>Page: ' . $page . '</h1>'; }Di sini, kami telah melakukan segalanya dengan benar kecuali langkah terakhir
- Kami memeriksa untuk melihat apakah parameter GET ada sebelum kami mengakses nilainya
- Kami tidak mencetak nomor halaman jika tidak ada
Namun, kami tidak membersihkan variabel sebelum mencetaknya. Ini berarti penyerang dapat dengan mudah mengganti variabel GET kami dengan HTML atau JavaScript dan menjalankannya saat halaman dimuat
Mereka kemudian dapat mengarahkan pengguna lain ke tautan "tercemar" ini
Untuk melindungi diri dari XSS, kita dapat menggunakan fungsi PHP htmlentities
//Guarding against XSS if($page !== false){ echo '<h1>Page: ' . htmlentities($page) . '</h1>'; }_The htmlentities function will guard against XSS by converting all special characters into their relevant HTML entities. For example, will become