OTTIENI il parametro URL in PHP


190

Sto cercando di passare un URL come parametro url in php ma quando provo a ottenere questo parametro non ottengo nulla

Sto usando il seguente modulo URL:

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

Sto cercando di farcela:

$_GET['link'];

Ma non è tornato nulla. Qual è il problema?


15
Mostra il tuo codice completo
Pekka,

3
fare var_dumpdel $_GETparam, dovrebbe essere lì
Naftali aka Neal

1
fa $_REQUEST['link']il lavoro? Inoltre, tieni presente che la chiave di indice linkfa distinzione tra maiuscole e minuscole per ciò che è nell'URL.
Dutchie432,

In realtà non stai provando a $_GETma ti capita di pubblicare post, vero?
James,

E qual è stata la soluzione di questo? Avere lo stesso problema
Ixx,

Risposte:


283

$_GETnon è una funzione o un costrutto di linguaggio, è solo una variabile (un array). Provare:

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

In particolare, è un superglobal : una variabile incorporata popolata da PHP ed è disponibile in tutti gli ambiti (puoi usarla dall'interno di una funzione senza la parola chiave globale ).

Poiché la variabile potrebbe non esistere, potresti (e dovresti) assicurarti che il tuo codice non attivi avvisi con:

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

In alternativa, se si desidera saltare i controlli manuali dell'indice e magari aggiungere ulteriori convalide, è possibile utilizzare l' estensione del filtro :

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

Ultimo ma non meno importante, è possibile utilizzare l' operatore null coalescing (disponibile da PHP / 7.0 ) per gestire i parametri mancanti:

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

14
Se non ottieni nulla con questo, come me, di quanto dovresti sapere, quel "link" è un nome di variabile nell'indirizzo URL! Quindi con $ _GET ['link']; devi inserire l'URL in questo modo: localhost /? link = test
Firzen

Sto usando WAMP localhoste questa soluzione non funziona. http://localhost/station?type=2 echo $_GET['type'];ènull
NineCattoRules

Finalmente ho usato parse_str(parse_url($actual_link)['query'], $params);. Maggiori informazioni stackoverflow.com/a/11480852/4458531
NineCattoRules

Dici "$ _GET non è una funzione o un costrutto di linguaggio, è solo una variabile (un array)" ma non accediamo ai valori tramite l'indice, invece accedete ai valori tramite stringa. È più un dizionario che un array?
ScottyBlades,

1
@ScottyBlades Sto parlando nel contesto delle strutture di dati PHP. In PHP, un array è un elenco ordinato di combinazioni chiave / valore. Ciò differisce da ciò che altre lingue (ad es. C o JavaScript) chiamano "array".
Álvaro González,

27

Per favore pubblica il tuo codice,

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

o

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

fare il lavoro ...



18

Usa questo:

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

O semplicemente usa:

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

10

La risposta accettata è buona. Ma se hai uno scenario come questo:

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

Puoi considerare l'ancoraggio con nome come una stringa di query come questa:

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

Quindi, accedi in questo modo:

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

3

Non stavo ottenendo nulla per nessuno $_GET["..."](ad esempio, ho print_r($_GET)dato un array vuoto) ma ho $_SERVER['REQUEST_URI']mostrato che le cose dovrebbero essere lì. Alla fine si è scoperto che stavo arrivando alla pagina web solo perché il mio .htaccess la stava reindirizzando lì (il mio gestore 404 era lo stesso file .php e durante il test avevo fatto un refuso nel browser).

Semplicemente cambiando il nome significava che lo stesso codice php funzionava quando il reindirizzamento 404 non si avviava!

Quindi ci sono modi per $_GET non restituire nulla anche se il codice php potrebbe essere corretto.


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

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


0

Chiunque non ottenga nulla in cambio, penso che debba solo racchiudere il risultato in tag html,

Come questo:

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

5
No, i tag html non sono necessari. Il testo in chiaro è reso da tutti i browser.
MarcoS,

-1

Come ha detto Alvaro, $ _GET non è una funzione ma una matrice contenente i parametri Quindi puoi recuperare un elemento da quella matrice usando

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

OP previsto:

www.google.com
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.