Gå til innhold

Importering av "godkjent" $_GET['key'] til $key


Anbefalte innlegg

Hei.

 

Jeg har definert en array med tillatte GET keys som jeg vil omgjøre til variabler med tilsvarende verdi.

 

F. eks:

 

$getVariables = array('act');

 

blir til

 

$act med verdi $_GET['act'];

 

dersom $_GET['act'] har en verdi.

 

Dette har jeg prøvd å gjøre med følgende funksjon:

 

function importGetData($getVariables) {
 foreach($_GET as $getKey => $getData) {
if(in_array($getKey, $getVariables)) {
$$getKey = $getData;
return $$getKey;
}
 }
}

 

Problemet mitt er at $$getKey forblir lokal. return kan altså ikke være riktig vei å gå. Noen som kan hjelpe meg?

 

Eventuelt, finnes det mye bedre måter å gjøre dette på? Er ikke spesielt flink med PHP, så jeg er alltid åpen for forslag. :)

Endret av Milktea
Lenke til kommentar
Videoannonse
Annonse

$GET = Array(
 'getVar1' => 'verdi1',
 'getVar2' => 'verdi2',
 'getVar3' => 'verdi3',
 'getVar4' => 'verdi4'
);

$allowed = Array(
 'getVar1', 'getVar3'
);


function importGetData($get, $allowed) {
 foreach ( $get as $key => $value ) {
if ( in_array($key, $allowed) ) {
  global $$key;
  $$key = $value;
}
 }
}

importGetData($GET, $allowed);
var_dump($getVar1); // string(6) "verdi1"

Når det er sagt er ikke global noe jeg bruker ofte, og generelt sett vil jeg si at det er litt fy-fy og tegn på dårlig struktur. Men der er løsningen hvertfall :-)

Lenke til kommentar

Ser at koden din virker helt fint, men å bruke global ser ikke ut til å løse problemet mitt.

 

Noe jeg glemte hadde noen relevanse er at i koden jeg bruker benyttes importGetData inne i en annen funksjon.

 

Jeg prøvde følgende endring av koden din:

 

// url = test.php?getVar1=verdi

$allowed = Array(
 'getVar1', 'getVar3'
);

function importGetData($get, $allowed) {
 foreach ( $get as $key => $value ) {
if ( in_array($key, $allowed) ) {
  global $$key;
  $$key = $value;
}
 }
}

importGetData($_GET, $allowed);

var_dump($getVar1); // output: string(5) "verdi"

function test($allowed, $get) {
importGetData($get, $allowed);
var_dump($getVar1);
}

test($allowed, $_GET); // output: NULL

 

Så feilen ligger i at selv om $$key gjøres global er den fremdeles ikke tilgjengelig i test? Hvordan kan dette løses?

Lenke til kommentar

Med det ville hele poenget med funksjonen forsvinne. Målet mitt var jo å kunne skrive inn navnet på GET-variablen én og få en funksjon til å automatisere resten, hvis ikke kan jeg jo like gjerne sette alt manuelt. Bruke en eventuell loop nr. 2 med global tror jeg helst at jeg unngår.

 

Men om dette ikke går får jeg heller gå motsatt vei, strippe GET for alt jeg ikke skal ha og bruke extract på resten.

Lenke til kommentar

Hvis jeg nå altså forstår deg korrekt så ønsker du at en «ukjent», global variabel skal være tilgjengelig i en gitt funksjon. Det er isåfall ikke mulig pga. PHPs modell for «scope» hvor man eksplisitt må oppgi hvilke globale variabler man trenger. Alternativene dine er enten å arbeide rett på $_GET eller bruke $GLOBALS, som begge er superglobale og dermed tilgjengelig overalt. Forøvrig kan jeg strengt tatt ikke helt skjønne problemet ditt. Hvorfor trenger du å filtere $_GET? Det er tross alt en forferdelig dårlig ide å lage variabler uhemmet ut fra $_GET, og jeg kan heller ikke se noen grunn til at man skulle ønske det. Det er tross alt ikke verre enn å hente det ut fra $_GET manuelt og ignorere alt annet.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...