Bagaimana cara mendapatkan semua parameter dari url di php?

Bagaimana cara mendapatkan semua parameter dari url di php?
Mittineague

Anda bisa menggunakan array_diff_key

Luar biasa, saya sangat suka naskah Anda

Bagaimana cara mendapatkan semua parameter dari url di php?

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 = 'http://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

//Get our two GET parameters.
$id = $_GET['id'];
$page = $_GET['page'];
_

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

  1. Anda tidak dapat berasumsi bahwa mereka akan selalu ada
  2. 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

  1. Kami memeriksa untuk melihat apakah parameter GET ada sebelum kami mengakses nilainya
  2. 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