Milktea Skrevet 5. november 2008 Del Skrevet 5. november 2008 (endret) 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 5. november 2008 av Milktea Lenke til kommentar
Haraldson Skrevet 5. november 2008 Del Skrevet 5. november 2008 La meg bare utelukke en ting for deg — dette har ikke noe med at du skriver return geyKey; å gjøre? Lenke til kommentar
Milktea Skrevet 5. november 2008 Forfatter Del Skrevet 5. november 2008 Haha, la ikke merke til det. Men er dessverre ikke det som er feilen heller. Brukte faktisk ikke $geyKey i funksjonen min. Må visst ha endret på noe mens jeg postet. Lenke til kommentar
luxus Skrevet 5. november 2008 Del Skrevet 5. november 2008 $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
Milktea Skrevet 6. november 2008 Forfatter Del Skrevet 6. november 2008 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
Ernie Skrevet 6. november 2008 Del Skrevet 6. november 2008 Du legger til global $getVar1 i test. Lenke til kommentar
Milktea Skrevet 6. november 2008 Forfatter Del Skrevet 6. november 2008 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
Ernie Skrevet 6. november 2008 Del Skrevet 6. november 2008 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå