Parâmetro de URL GET em PHP


190

Estou tentando passar uma URL como um parâmetro de URL no php, mas quando tento obter esse parâmetro, não recebo nada

Estou usando o seguinte formulário de URL:

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

Estou tentando passar por isso:

$_GET['link'];

Mas nada voltou. Qual é o problema?


15
Mostre seu código completo
Pekka

3
fazer var_dumpdo $_GETparam, ele deve estar lá
Naftali aka Neal

1
faz $_REQUEST['link']o trabalho? Lembre-se também de que a chave de índice diferencia linkmaiúsculas de minúsculas do conteúdo do URL.
Dutchie432

Você não está realmente tentando $_GETpostar, mas está postando, está?
James

E qual foi a solução disso? Tendo o mesmo problema
Ixx

Respostas:


282

$_GETnão é uma construção de função ou linguagem - é apenas uma variável (uma matriz). Experimentar:

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

Em particular, é uma superglobal : uma variável interna que é preenchida pelo PHP e está disponível em todos os escopos (você pode usá-la de dentro de uma função sem a palavra-chave global ).

Como a variável pode não existir, você pode (e deve) garantir que seu código não acione avisos com:

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

Como alternativa, se você quiser pular verificações manuais de índice e talvez adicionar mais validações, poderá usar a extensão de filtro :

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

Por último, mas não menos importante, você pode usar o operador coalescente nulo (disponível desde o PHP / 7.0 ) para manipular os parâmetros ausentes:

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

14
Se você não conseguiu nada com isso, como eu, do que deveria saber, esse 'link' é um nome de variável no endereço URL! Assim, com $ _GET ['link']; você precisa digitar URL assim: localhost / link = teste?
Firzen

Estou usando o WAMP localhoste esta solução não está funcionando. http://localhost/station?type=2 echo $_GET['type'];énull
NineCattoRules

Finalmente eu usei parse_str(parse_url($actual_link)['query'], $params);. Mais informações stackoverflow.com/a/11480852/4458531
NineCattoRules

Você diz que "$ _GET não é uma construção de função ou linguagem - é apenas uma variável (uma matriz)", mas não acessamos valores via índice, em vez disso, você está acessando valores via string. Isso é mais um dicionário do que uma matriz?
ScottyBlades

1
@ScottyBlades Estou falando no contexto de estruturas de dados PHP. No PHP, uma matriz é uma lista ordenada de combinações de chave / valor. Isso difere do que outros idiomas (por exemplo, C ou JavaScript) chamam de "matriz".
Álvaro González

27

Por favor, poste seu código,

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

ou

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

fazer o trabalho ...



18

Usa isto:

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

Ou apenas use:

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

10

A resposta aceita é boa. Mas se você tiver um cenário como este:

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

Você pode tratar a âncora nomeada como uma sequência de consultas como esta:

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

Em seguida, acesse-o assim:

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

3

Eu não estava conseguindo nada $_GET["..."](por exemplo, print_r($_GET)deu uma matriz vazia), mas $_SERVER['REQUEST_URI']mostrei que as coisas deveriam estar lá. No final, descobri que eu estava apenas acessando a página da Web porque meu .htaccess a estava redirecionando para lá (meu manipulador 404 era o mesmo arquivo .php, e eu cometi um erro de digitação no navegador durante o teste).

Simplesmente mudar o nome significava que o mesmo código php funcionava quando o redirecionamento 404 não estava chegando!

Portanto, existem maneiras de $_GET não retornar nada, mesmo que o código php possa estar correto.


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

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


0

Quem não receber nada em troca, acho que ele apenas deve incluir o resultado em tags html,

Como isso:

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

5
Não, as tags html não são necessárias. O texto sem formatação é renderizado por todos os navegadores.
Marcos

-1

Como Alvaro disse, $ _GET não é uma função, mas uma matriz que contém os parâmetros. Assim, você pode recuperar um elemento dessa matriz usando

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

OP esperado:

www.google.com
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.