DAPATKAN parameter URL dalam PHP

190

Saya mencoba meneruskan URL sebagai parameter url di php tetapi ketika saya mencoba untuk mendapatkan parameter ini saya tidak mendapatkan apa-apa

Saya menggunakan formulir url berikut:

http://localhost/dispatch.php?link=www.google.com

Saya mencoba melewatinya:

$_GET['link'];

Tapi tidak ada yang kembali. Apa masalahnya?

Feras Odeh
sumber
15
Tunjukkan kode lengkap Anda
Pekka
3
melakukan var_dumpdari $_GETparam, harus ada
Naftali alias Neal
1
apakah $_REQUEST['link']bekerja? Perlu diingat juga bahwa kunci indeks linkpeka terhadap apa yang ada di url.
Dutchie432
Anda tidak benar-benar mencoba $_GETtetapi kebetulan memposting, bukan?
James
Dan apa solusinya? Memiliki masalah yang sama
Ixx

Jawaban:

283

$_GETbukan fungsi atau konstruksi bahasa — itu hanya variabel (array). Mencoba:

<?php
echo $_GET['link'];

Secara khusus, ini adalah superglobal : variabel bawaan yang diisi oleh PHP dan tersedia di semua lingkup (Anda dapat menggunakannya dari dalam suatu fungsi tanpa kata kunci global ).

Karena variabel mungkin tidak ada, Anda dapat (dan harus) memastikan kode Anda tidak memicu pemberitahuan dengan:

<?php
if (isset($_GET['link'])) {
    echo $_GET['link'];
} else {
    // Fallback behaviour goes here
}

Atau, jika Anda ingin melewati pemeriksaan indeks manual dan mungkin menambahkan validasi lebih lanjut Anda dapat menggunakan ekstensi filter :

<?php
echo filter_input(INPUT_GET, 'link', FILTER_SANITIZE_URL);

Terakhir, Anda dapat menggunakan operator penggabungan nol (tersedia sejak PHP / 7.0 ) untuk menangani parameter yang hilang:

echo $_GET['link'] ?? 'Fallback value';
Álvaro González
sumber
14
Jika Anda tidak mendapatkan apa-apa dengan ini, seperti saya, daripada yang seharusnya Anda ketahui, 'tautan' itu adalah nama variabel di alamat URL! Jadi dengan $ _GET ['tautan']; Anda perlu memasukkan URL seperti ini: localhost /? link = test
Firzen
Saya menggunakan WAMP localhostdan solusi ini tidak berfungsi. http://localhost/station?type=2 echo $_GET['type'];adalahnull
NineCattoRules
Akhirnya saya pakai parse_str(parse_url($actual_link)['query'], $params);. Info lebih lanjut stackoverflow.com/a/11480852/4458531
NineCattoRules
Anda mengatakan "$ _GET bukan membangun fungsi atau bahasa — itu hanya variabel (array)" tetapi kami tidak mengakses nilai melalui indeks, sebaliknya Anda mengakses nilai melalui string. Apakah ini lebih dari sebuah kamus daripada sebuah array?
ScottyBlades
1
@ScottyBlades Saya berbicara dalam konteks struktur data PHP. Dalam PHP, array adalah daftar kombinasi kunci / nilai yang diurutkan. Itu berbeda dari bahasa lain (misalnya C atau JavaScript) yang disebut "array".
Álvaro González
27

Silakan kirim kode Anda,

<?php
    echo $_GET['link'];
?>

atau

<?php
    echo $_REQUEST['link'];
?>

lakukan pekerjaan ...

Lars
sumber
19

Untuk memastikan Anda selalu berada di sisi yang aman, tanpa mendapatkan semua jenis penyisipan kode yang tidak diinginkan, gunakan FILTER:

echo filter_input(INPUT_GET,"link",FILTER_SANITIZE_STRING);

Lebih banyak membaca di fungsi filter php.net , atau lihat deskripsi dari berbagai filter

patrick
sumber
18

Gunakan ini:

$parameter = $_SERVER['QUERY_STRING'];
echo $parameter;

Atau cukup gunakan:

$parameter = $_GET['link'];
echo $parameter ;
Muhammad Ashikuzzaman
sumber
10

Jawaban yang diterima bagus. Tetapi jika Anda memiliki skenario seperti ini:

http://www.mydomain.me/index.php?state=California.php#Berkeley

Anda dapat memperlakukan jangkar bernama sebagai string kueri seperti ini:

http://www.mydomain.me/index.php?state=California.php&city=Berkeley

Lalu, akses seperti ini:

$Url = $_GET['state']."#".$_GET['city'];
phil
sumber
3

Saya belum mendapatkan apa-apa untuk apa pun $_GET["..."](misalnya print_r($_GET)memberi array kosong)$_SERVER['REQUEST_URI'] menunjukkan hal-hal yang harus ada. Pada akhirnya ternyata saya hanya sampai di halaman web karena .htaccess saya mengarahkan ulang di sana (404 handler saya adalah file .php yang sama, dan saya telah membuat kesalahan ketik di browser saat pengujian).

Cukup mengubah nama berarti kode php yang sama berfungsi setelah pengalihan 404 tidak berhasil!

Jadi ada cara yang $_GET bisa mengembalikan apa-apa meskipun kode php mungkin benar.

pengguna235510
sumber
3
$Query_String  = explode("&", explode("?", $_SERVER['REQUEST_URI'])[1] );
var_dump($Query_String)

Array ([0] => tautan = www.google.com)

Saurabh Chandra Patel
sumber
0

Siapa pun yang tidak mendapatkan apa-apa, saya pikir dia hanya harus menyertakan hasilnya dalam tag html,

Seperti ini:

<html>
<head></head>
<body>
<?php
echo $_GET['link'];
?>
<body>
</html>
balazon
sumber
5
Tidak, tag html tidak diperlukan. Teks biasa diterjemahkan oleh semua browser.
MarcoS
-1

Seperti yang dikatakan Alvaro, $ _GET bukan fungsi tetapi array yang mengandung parameter Jadi Anda dapat mengambil satu elemen dari array itu menggunakan

<?php
$link = $_GET['link'];
echo $link;
?>

OP yang diharapkan:

www.google.com
Omer Hijazi
sumber