NHẬN tham số URL trong PHP


189

Tôi đang cố gắng truyền URL dưới dạng tham số url trong php nhưng khi tôi cố gắng nhận tham số này, tôi không nhận được gì

Tôi đang sử dụng mẫu url sau:

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

Tôi đang cố gắng vượt qua:

$_GET['link'];

Nhưng không có gì trở lại. Vấn đề là gì?


15
Hiển thị mã đầy đủ của bạn
Pekka

3
làm điều tối var_dumpquan trọng $_GET, nó sẽ ở đó
Naftali aka Neal

1
không $_REQUEST['link']làm việc Ngoài ra, hãy nhớ rằng khóa chỉ mục phân linkbiệt chữ hoa chữ thường với những gì trong url.
Dutchie432

Bạn đang không thực sự cố gắng $_GETnhưng tình cờ được đăng là bạn?
James

Và giải pháp của việc này là gì? Có cùng một vấn đề
Ixx

Câu trả lời:


281

$_GETkhông phải là một chức năng hoặc ngôn ngữ xây dựng, nó chỉ là một biến số (một mảng). Thử:

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

Đặc biệt, đó là một superglobal : tích hợp sẵn trong biến đó là dân cư bằng PHP và có sẵn trong tất cả các phạm vi (bạn có thể sử dụng nó từ bên trong một hàm mà không có sự toàn cầu từ khóa).

Vì biến có thể không tồn tại, bạn có thể (và nên) đảm bảo mã của bạn không kích hoạt các thông báo với:

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

Ngoài ra, nếu bạn muốn bỏ qua kiểm tra chỉ mục thủ công và có thể thêm xác nhận hợp lệ, bạn có thể sử dụng tiện ích mở rộng bộ lọc :

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

Cuối cùng nhưng không kém phần quan trọng, bạn có thể sử dụng toán tử hợp nhất null (có sẵn từ PHP / 7.0 ) để xử lý các tham số bị thiếu:

echo $_GET['link'] ?? 'Fallback value';

14
Nếu bạn không có gì với điều này, như tôi, hơn bạn nên biết, 'liên kết' là tên của biến trong địa chỉ URL! Vì vậy, với $ _GET ['link']; bạn cần nhập URL như thế này: localhost /? link = test
Firzen

Tôi đang sử dụng WAMP localhostvà giải pháp này không hoạt động. http://localhost/station?type=2 echo $_GET['type'];null
NineCattoRules

Cuối cùng tôi đã sử dụng parse_str(parse_url($actual_link)['query'], $params);. Thêm thông tin stackoverflow.com/a/11480852/4458531
NineCattoRules

Bạn nói "$ _GET không phải là một hàm hoặc ngôn ngữ xây dựng, nó chỉ là một biến (một mảng)" nhưng chúng tôi không truy cập các giá trị qua chỉ mục, thay vào đó bạn đang truy cập các giá trị qua chuỗi. Đây có phải là một từ điển nhiều hơn một mảng?
ScottyBlades

1
@ScottyBlades Tôi đang nói trong bối cảnh cấu trúc dữ liệu PHP. Trong PHP, một mảng là một danh sách được sắp xếp của các kết hợp khóa / giá trị. Điều đó khác với những gì các ngôn ngữ khác (ví dụ C hoặc JavaScript) gọi là "mảng".
Álvaro González

27

Vui lòng gửi mã của bạn,

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

hoặc là

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

làm việc ...



18

Dùng cái này:

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

Hoặc chỉ sử dụng:

$parameter = $_GET['link'];
echo $parameter ;

10

Câu trả lời được chấp nhận là tốt. Nhưng nếu bạn có một kịch bản như thế này:

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

Bạn có thể coi neo được đặt tên là một chuỗi truy vấn như thế này:

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

Sau đó, truy cập nó như thế này:

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

3

Tôi đã không nhận được gì cho bất kỳ $_GET["..."](ví dụ như print_r($_GET)đưa ra một mảng trống) nhưng $_SERVER['REQUEST_URI']cho thấy công cụ nên ở đó. Cuối cùng, hóa ra tôi chỉ truy cập trang web vì .htaccess của tôi đang chuyển hướng nó ở đó (trình xử lý 404 của tôi là cùng một tệp .php và tôi đã mắc lỗi đánh máy trong trình duyệt khi kiểm tra).

Chỉ cần thay đổi tên có nghĩa là cùng một mã php đã hoạt động khi chuyển hướng 404 không hoạt động!

Vì vậy, có những cách $_GET có thể trả về không có gì mặc dù mã php có thể đúng.


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

Mảng ([0] => link = www.google.com)


0

Bất cứ ai không nhận lại được gì, tôi nghĩ anh ta chỉ cần đưa kết quả vào thẻ html,

Như thế này:

<html>
<head></head>
<body>
<?php
echo $_GET['link'];
?>
<body>
</html>

5
Không, thẻ html là không cần thiết. Văn bản thuần túy được hiển thị bởi tất cả các trình duyệt.
MarcoS

-1

Như Alvaro đã nói, $ _GET không phải là một hàm mà là một mảng chứa các tham số Vì vậy bạn có thể truy xuất một phần tử từ mảng đó bằng cách sử dụng

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

OP dự kiến:

www.google.com
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.