GET URL-Parameter in PHP

189

Ich versuche, eine URL als URL-Parameter in PHP zu übergeben, aber wenn ich versuche, diesen Parameter zu erhalten, erhalte ich nichts

Ich verwende das folgende URL-Formular:

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

Ich versuche es durchzuhalten:

$_GET['link'];

Aber nichts kehrte zurück. Was ist das Problem?

Feras Odeh
quelle
15
Zeigen Sie Ihren vollständigen Code
Pekka
3
Do var_dumpof the $_GETParam, es sollte da sein
Naftali aka Neal
1
funktioniert $_REQUEST['link']? Beachten Sie auch, dass der Indexschlüssel zwischen linkGroß- und Kleinschreibung der URL unterscheidet.
Dutchie432
Du versuchst es nicht wirklich, $_GETsondern postest es, oder?
James
Und was war die Lösung dafür? Das gleiche Problem haben
Ixx

Antworten:

281

$_GETist keine Funktion oder kein Sprachkonstrukt - es ist nur eine Variable (ein Array). Versuchen:

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

Insbesondere ist es superglobal : eine integrierte Variable, die von PHP ausgefüllt wird und in allen Bereichen verfügbar ist (Sie können sie innerhalb einer Funktion ohne das globale Schlüsselwort verwenden).

Da die Variable möglicherweise nicht vorhanden ist, können (und sollten) Sie sicherstellen, dass Ihr Code keine Benachrichtigungen auslöst mit:

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

Alternativ, wenn Sie manuelle Index überprüft überspringen wollen und vielleicht weitere Validierungen hinzufügen können Sie die verwenden Filtererweiterung:

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

Zu guter Letzt können Sie den Null-Koaleszenz-Operator (verfügbar seit PHP / 7.0 ) verwenden, um fehlende Parameter zu behandeln:

echo $_GET['link'] ?? 'Fallback value';
Álvaro González
quelle
14
Wenn Sie wie ich nichts damit zu tun haben, als Sie wissen sollten, ist dieser 'Link' ein Variablenname in der URL-Adresse! Also mit $ _GET ['link']; Sie müssen URL wie
folgt
Ich verwende WAMP localhostund diese Lösung funktioniert nicht. http://localhost/station?type=2 echo $_GET['type'];istnull
NineCattoRules
Endlich habe ich benutzt parse_str(parse_url($actual_link)['query'], $params);. Weitere Informationen stackoverflow.com/a/11480852/4458531
NineCattoRules
Sie sagen "$ _GET ist keine Funktion oder kein Sprachkonstrukt - es ist nur eine Variable (ein Array)", aber wir greifen nicht über den Index auf Werte zu, sondern Sie greifen über eine Zeichenfolge auf Werte zu. Ist das eher ein Wörterbuch als ein Array?
ScottyBlades
1
@ScottyBlades Ich spreche im Kontext von PHP-Datenstrukturen. In PHP ist ein Array eine geordnete Liste von Schlüssel / Wert-Kombinationen. Das unterscheidet sich von dem, was andere Sprachen (z. B. C oder JavaScript) "Array" nennen.
Álvaro González
27

Bitte posten Sie Ihren Code,

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

oder

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

tun Arbeit ...

MarcoS
quelle
18

Benutze das:

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

Oder verwenden Sie einfach:

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

Die akzeptierte Antwort ist gut. Aber wenn Sie ein Szenario wie dieses haben:

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

Sie können den benannten Anker wie folgt als Abfragezeichenfolge behandeln:

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

Greifen Sie dann folgendermaßen darauf zu:

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

Ich bekam nichts für irgendetwas $_GET["..."](z print_r($_GET). B. gab ein leeres Array), $_SERVER['REQUEST_URI']zeigte aber, dass Sachen da sein sollten. Am Ende stellte sich heraus, dass ich nur auf die Webseite kam, weil mein .htaccess sie dort umleitete (mein 404-Handler war dieselbe .php-Datei, und ich hatte beim Testen einen Tippfehler im Browser gemacht).

Das einfache Ändern des Namens bedeutete, dass der gleiche PHP-Code funktionierte, sobald die 404-Umleitung nicht mehr aktiv war!

So gibt es Möglichkeiten $_GET , kann nichts zurück , auch wenn der PHP - Code korrekt.

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

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

Saurabh Chandra Patel
quelle
0

Wer nichts zurückbekommt, muss das Ergebnis wohl nur in HTML-Tags einfügen.

So was:

<html>
<head></head>
<body>
<?php
echo $_GET['link'];
?>
<body>
</html>
Balazon
quelle
5
Nein, HTML-Tags sind nicht erforderlich. Nur-Text wird von allen Browsern gerendert .
MarcoS
-1

Wie Alvaro sagte, ist $ _GET keine Funktion, sondern ein Array, das die Parameter enthält. Sie können also ein Element aus diesem Array mit abrufen

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

Erwartete OP:

www.google.com
Omer Hijazi
quelle