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?

Feras Odeh
źródło
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';
Álvaro González
źródło
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ę ...

MarcoS
źródło
19

Aby upewnić się, że zawsze jesteś po bezpiecznej stronie, bez wszelkiego rodzaju niechcianego wstawiania kodu, użyj FILTRÓW:

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

Więcej informacji na temat funkcji php.net filter_input lub sprawdź opis różnych filtrów

Patrick
źródło
18

Użyj tego:

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

Lub po prostu użyj:

$parameter = $_GET['link'];
echo $parameter ;
Muhammad Ashikuzzaman
źródło
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'];
phil
źródło
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.

użytkownik235510
źródło
3
$Query_String  = explode("&", explode("?", $_SERVER['REQUEST_URI'])[1] );
var_dump($Query_String)

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

Saurabh Chandra Patel
źródło
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>
balazon
źródło
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
Omer Hijazi
źródło