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?


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';

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 ...



18

Benutze das:

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

Oder verwenden Sie einfach:

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

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'];

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.


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

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


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>

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.