Pobierz parametr URL w PHP


190

Próbuję przekazać adres URL jako parametr adresu URL w php, ale kiedy próbuję uzyskać ten parametr, nic nie dostaję

Używam następującego formularza URL:

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

Próbuję przejść przez:

$_GET['link'];

Ale nic nie wróciło. Jaki jest problem?


15
Pokaż swój pełny kod
Pekka

3
zrobić var_dumpz $_GETparam, powinien tam być
Naftali alias Neal

1
nie $_REQUEST['link']działa? Pamiętaj też, że w kluczu indeksu linkrozróżniana jest wielkość liter w stosunku do zawartości adresu URL.
Dutchie432

Właściwie to nie próbujesz, $_GETale zdarza się, że piszesz, prawda?
James

A jakie było na to rozwiązanie? Mając ten sam problem
Ixx

Odpowiedzi:


283

$_GETnie jest funkcją ani konstrukcją języka - jest tylko zmienną (tablicą). Próbować:

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

W szczególności jest to superglobal : wbudowana zmienna zapełniana przez PHP i dostępna we wszystkich zakresach (możesz jej użyć z wnętrza funkcji bez globalnego słowa kluczowego ).

Ponieważ zmienna może nie istnieć, możesz (i powinieneś) upewnić się, że Twój kod nie wyzwala powiadomień za pomocą:

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

Alternatywnie, jeśli chcesz pominąć ręczne sprawdzanie indeksu i być może dodać dalsze sprawdzanie poprawności, możesz użyć rozszerzenia filtru :

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

Last but not least, możesz użyć zerowego operatora koalescencyjnego (dostępnego od PHP / 7.0 ) do obsługi brakujących parametrów:

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

14
Jeśli nie masz nic takiego, jak ja, to powinieneś wiedzieć, że „link” to nazwa zmiennej w adresie URL! Więc z $ _GET ['link']; musisz wprowadzić adres URL w ten sposób: localhost /? link = test
Firzen

Używam WAMP localhosti to rozwiązanie nie działa. http://localhost/station?type=2 echo $_GET['type'];jestnull
NineCattoRules

Wreszcie użyłem parse_str(parse_url($actual_link)['query'], $params);. Więcej informacji stackoverflow.com/a/11480852/4458531
NineCattoRules

Mówisz, że „$ _GET nie jest konstrukcją funkcji ani języka - jest tylko zmienną (tablicą)”, ale nie uzyskujemy dostępu do wartości za pomocą indeksu, zamiast tego uzyskujesz dostęp do wartości za pomocą łańcucha. Czy to bardziej słownik niż tablica?
ScottyBlades

1
@ScottyBlades Mówię w kontekście struktur danych PHP. W PHP tablica jest uporządkowaną listą kombinacji klucz / wartość. Różni się to od tego, co inne języki (np. C lub JavaScript) nazywają „tablicą”.
Álvaro González

27

Proszę opublikować swój kod,

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

lub

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

wykonać pracę ...



18

Użyj tego:

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

Lub po prostu użyj:

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

10

Przyjęta odpowiedź jest dobra. Ale jeśli masz taki scenariusz:

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

Nazwaną kotwicę można traktować jako ciąg zapytania w następujący sposób:

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

Następnie przejdź do tego w następujący sposób:

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

3

Jeszcze nic nie dostawałem $_GET["..."](np. print_r($_GET)Podałem pustą tablicę)$_SERVER['REQUEST_URI'] pokazałem, że rzeczy powinny tam być. W końcu okazało się, że wchodzę tylko na stronę internetową, ponieważ mój .htaccess przekierowuje ją tam (mój program obsługi 404 był tym samym plikiem .php, a podczas testowania napisałem literówkę w przeglądarce).

Po prostu zmiana nazwy oznaczała, że ​​działał ten sam kod php, gdy przekierowanie 404 nie było uruchamiane!

więc sposoby, by$_GET nic nie zwracać, nawet jeśli kod php może być poprawny.


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

Tablica ([0] => link = www.google.com)


0

Ktokolwiek nic nie odzyskuje, myślę, że musi zawrzeć wynik w tagach HTML,

Lubię to:

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

5
Nie, tagi HTML nie są konieczne. Zwykły tekst jest renderowany przez wszystkie przeglądarki.
MarcoS

-1

Jak powiedział Alvaro, $ _GET nie jest funkcją, ale tablicą zawierającą parametry, więc możesz pobrać jeden element z tej tablicy za pomocą

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

Oczekiwany PO:

www.google.com
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.