Получить параметр URL в PHP

190

Я пытаюсь передать URL-адрес в качестве параметра URL в PHP, но когда я пытаюсь получить этот параметр, я ничего не получаю

Я использую следующую форму URL:

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

Я пытаюсь пройти через это:

$_GET['link'];

Но ничего не вернулось. В чем проблема?

Ферас Одех
источник
15
Покажите свой полный код
Pekka
3
сделать var_dumpиз $_GETparam, он должен быть там
Нафтали ака Нил
1
делает $_REQUEST['link']работу? Также имейте в виду, что индексный ключ linkчувствителен к регистру того, что находится в URL.
Dutchie432
Вы на самом деле не пытаетесь, $_GETно, случается, публикуете, не так ли?
Джеймс
И каково было решение этого? Имея ту же проблему
Ixx

Ответы:

283

$_GETэто не функция или языковая конструкция - это просто переменная (массив). Пытаться:

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

В частности, это суперглобальный : встроенная переменная, которая заполняется PHP и доступна во всех областях (вы можете использовать ее внутри функции без ключевого слова global ).

Поскольку переменная может не существовать, вы можете (и должны) убедиться, что ваш код не вызывает уведомления с помощью:

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

В качестве альтернативы, если вы хотите пропустить проверки индекса вручную и, возможно, добавить дополнительные проверки, вы можете использовать расширение фильтра :

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

И последнее, но не менее важное: вы можете использовать оператор объединения нулей (доступен с PHP / 7.0 ) для обработки пропущенных параметров:

echo $_GET['link'] ?? 'Fallback value';
Альваро Гонсалес
источник
14
Если вы ничего не имеете с этим, как я, чем вы должны знать, что «ссылка» является именем переменной в URL-адресе! Так и с $ _GET ['link']; Вам нужно ввести URL-адрес примерно так: localhost /? link = test
Firzen
Я использую WAMP, localhostи это решение не работает. http://localhost/station?type=2 echo $_GET['type'];этоnull
NineCattoRules
Наконец то использовал parse_str(parse_url($actual_link)['query'], $params);. Дополнительная информация stackoverflow.com/a/11480852/4458531
NineCattoRules
Вы говорите: «$ _GET - это не функция или языковая конструкция - это просто переменная (массив)», но мы не обращаемся к значениям через индекс, вместо этого вы обращаетесь к значениям через строку. Это больше словарь, чем массив?
ScottyBlades
1
@ScottyBlades Я говорю в контексте структур данных PHP. В PHP массив представляет собой упорядоченный список комбинаций ключ / значение. Это отличается от того, что другие языки (например, C или JavaScript) называют «массивом».
Альваро Гонсалес,
27

Пожалуйста, оставьте свой код,

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

или

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

делай работу ...

МАРКОС
источник
18

Использовать это:

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

Или просто используйте:

$parameter = $_GET['link'];
echo $parameter ;
Мухаммед Асикуззаман
источник
10

Принятый ответ хорош. Но если у вас есть такой сценарий:

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

Вы можете рассматривать именованный якорь как строку запроса следующим образом:

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

Затем получите к нему доступ так:

$Url = $_GET['state']."#".$_GET['city'];
Фил
источник
3

Я ничего не получал $_GET["..."](например, print_r($_GET)дал пустой массив), но $_SERVER['REQUEST_URI']показал, что вещи должны быть там. В конце концов оказалось, что я только зашел на веб-страницу, потому что мой .htaccess перенаправлял ее туда (мой обработчик 404 был тем же файлом .php, и я сделал опечатку в браузере при тестировании).

Простое изменение имени означало, что тот же самый php-код сработал, как только не началось перенаправление 404!

Так что есть способы, $_GET которые ничего не могут вернуть, даже если код php может быть правильным.

user235510
источник
3
$Query_String  = explode("&", explode("?", $_SERVER['REQUEST_URI'])[1] );
var_dump($Query_String)

Массив ([0] => ссылка = www.google.com)

Саурабх Чандра Патель
источник
0

Кто бы ничего не получил обратно, я думаю, он просто должен заключить результат в HTML-теги,

Как это:

<html>
<head></head>
<body>
<?php
echo $_GET['link'];
?>
<body>
</html>
balazon
источник
5
Нет, HTML-теги не нужны. Простой текст отображается всеми браузерами.
MarcoS
-1

Как сказал Альваро, $ _GET - это не функция, а массив, содержащий параметры. Таким образом, вы можете извлечь один элемент из этого массива, используя

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

Ожидаемый ОП:

www.google.com
Омер Хиджази
источник