GET paramètre URL en PHP

190

J'essaye de passer une URL en tant que paramètre d'url en php mais quand j'essaye d'obtenir ce paramètre je n'obtiens rien

J'utilise le formulaire d'URL suivant:

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

J'essaye de le faire passer:

$_GET['link'];

Mais rien n'est revenu. Quel est le problème?

Feras Odeh
la source
15
Afficher votre code complet
Pekka
3
faire var_dumpdu $_GETparam, il devrait être là
Naftali aka Neal
1
ça $_REQUEST['link']marche? Gardez également à l'esprit que la clé d'index linkest sensible à la casse de ce qui se trouve dans l'URL.
Dutchie432
Vous n'essayez pas vraiment $_GETde publier un message, n'est-ce pas?
James
Et quelle était la solution à cela? Avoir le même problème
Ixx

Réponses:

283

$_GETn'est pas une fonction ou une construction de langage - c'est juste une variable (un tableau). Essayer:

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

En particulier, c'est une superglobale : une variable intégrée qui est remplie par PHP et est disponible dans toutes les étendues (vous pouvez l'utiliser depuis l'intérieur d'une fonction sans le mot clé global ).

Étant donné que la variable peut ne pas exister, vous pouvez (et devriez) vous assurer que votre code ne déclenche pas d'avis avec:

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

Sinon, si vous souhaitez ignorer les vérifications d'index manuelles et peut-être ajouter d'autres validations, vous pouvez utiliser l' extension de filtre :

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

Enfin, vous pouvez utiliser l' opérateur de fusion nul (disponible depuis PHP / 7.0 ) pour gérer les paramètres manquants:

echo $_GET['link'] ?? 'Fallback value';
Álvaro González
la source
14
Si vous n'avez rien avec cela, comme moi, que vous devriez savoir, ce «lien» est un nom de variable dans l'adresse URL! Donc avec $ _GET ['link']; vous devez entrer une URL comme celle-ci: localhost /? link = test
Firzen
J'utilise WAMP localhostet cette solution ne fonctionne pas. http://localhost/station?type=2 echo $_GET['type'];isnull
NineCattoRules
Enfin j'ai utilisé parse_str(parse_url($actual_link)['query'], $params);. En savoir plus stackoverflow.com/a/11480852/4458531
NineCattoRules
Vous dites "$ _GET n'est pas une fonction ou une construction de langage - c'est juste une variable (un tableau)" mais nous n'accédons pas aux valeurs via un index, à la place vous accédez aux valeurs via une chaîne. Est-ce plus un dictionnaire qu'un tableau?
ScottyBlades
1
@ScottyBlades Je parle dans le contexte des structures de données PHP. En PHP, un tableau est une liste ordonnée de combinaisons clé / valeur. Cela diffère de ce que les autres langages (par exemple C ou JavaScript) appellent "array".
Álvaro González
27

Veuillez poster votre code,

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

ou

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

faire le travail ...

MarcoS
la source
18

Utilisez ceci:

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

Ou utilisez simplement:

$parameter = $_GET['link'];
echo $parameter ;
Muhammad Ashikuzzaman
la source
10

La réponse acceptée est bonne. Mais si vous avez un scénario comme celui-ci:

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

Vous pouvez traiter l'ancre nommée comme une chaîne de requête comme ceci:

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

Ensuite, accédez-y comme ceci:

$Url = $_GET['state']."#".$_GET['city'];
phil
la source
3

Je n'obtenais rien pour tout $_GET["..."](par exemple, j'ai print_r($_GET)donné un tableau vide) mais $_SERVER['REQUEST_URI']j'ai montré que des choses devraient être là. En fin de compte, il s'est avéré que j'arrivais à la page Web uniquement parce que mon .htaccess la redirigeait là-bas (mon gestionnaire 404 était le même fichier .php, et j'avais fait une faute de frappe dans le navigateur lors du test).

Changer simplement le nom signifiait que le même code php fonctionnait une fois que la redirection 404 ne fonctionnait pas!

Il existe donc des moyens de$_GET ne rien renvoyer même si le code php est correct.

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

Tableau ([0] => lien = www.google.com)

Saurabh Chandra Patel
la source
0

Quiconque ne récupère rien, je pense qu'il doit juste insérer le résultat dans des balises html,

Comme ça:

<html>
<head></head>
<body>
<?php
echo $_GET['link'];
?>
<body>
</html>
balazon
la source
5
Non, les balises html ne sont pas nécessaires. Le texte brut est rendu par tous les navigateurs.
MarcoS
-1

Comme Alvaro l'a dit, $ _GET n'est pas une fonction mais un tableau contenant les paramètres.Vous pouvez donc récupérer un élément de ce tableau en utilisant

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

OP attendu:

www.google.com
Omer Hijazi
la source