Avatar billede encorez Nybegynder
06. marts 2016 - 10:29 Der er 9 kommentarer og
1 løsning

Hvordan fanger jeg en variabel i ny PHP version

Hej
Jeg lavede for nogle år tilbage en hjemmeside i dårlig kode, der bl.a. indebære at alle variable der sendes fra en formular for eksempel blot fanges med $test_variabel istedet for isset($_POST['$test_variabel']).

Nu har mit webhotel opgraderet PHP versionen der går at dette ikke længere er muligt.

Det gør at hjemmesiden nu ikke virker og jeg derfor nødt til at finde den kortsigtede og hurtige løsning at få min hjemmeside til at kunne fange en $test_variabel igen, mens jeg går al koden igennem og retter til.

Kan man lave en ini_set() i starten af index-filen eller i .htaccess som får de gamle settings tilbage, der vil gøre at min gamle kode vil virke igen?

På forhånd mange tak
Avatar billede Slater Ekspert
06. marts 2016 - 10:42 #1
Du kan skrive to linjer i toppen af din kode:

foreach($_POST as $key => $value)
    ${$key} = $value;

Udskift $_POST med $_REQUEST hvis det også skal gælde GET-variabler.

Det vil generere globale variabler på samme måde som i ældre PHP. Så længe variabelnavnet er gyldigt.
Avatar billede nemlig Professor
06. marts 2016 - 12:27 #2
Nogle wehotelller giver mulighed for at bruge en tidligere PHP-version.

Det kan blot være en parameter, der skal sættes i kontrolpanellet.

Jeg selv bruger Unoeuro, og her det så en .htaccess fil, der klarer det.
Avatar billede arne_v Ekspert
06. marts 2016 - 15:48 #3
Nu er der jo en grund til at den feature blev fjernet ...
Avatar billede nemlig Professor
06. marts 2016 - 16:16 #4
Lige præcis... Trådstarter er selv inde på, at han søgte en hurtig løsning, mens han får løst de udfordringer, der er i den gamle "usikre" kode.
Avatar billede encorez Nybegynder
06. marts 2016 - 22:26 #5
veperine, takker :)
Ved at kombinere det med en set_ini safemode off, virker det og siderne er kørende.

Læg et svar som tak for hjælpen :)
Avatar billede Slater Ekspert
07. marts 2016 - 08:34 #6
Så gerne.

Men ja, som du tydeligvis selv er klar over, er det bedst at få opgraderet koden til ikke at behøve det.
Avatar billede encorez Nybegynder
07. marts 2016 - 22:11 #7
Tillægsspørgsmål, jeg kan se at æ, ø og å i det tekst der hentes frem en database nu vises som underlige tegn. Æ, ø og å som står direkte i html filen vises fint. Så der må også være noget nyt i den måde indhold fra mysql databasen hentes frem og skal tolkes.

Nogen forslag til hvad det kan være?
Avatar billede nemlig Professor
07. marts 2016 - 22:53 #8
Lugter lidt af, at serverens standard tegnsæt er skiftet.
Prøv at skrive denne her i toppen og se om det hjælper.

header("Content-Type: text/html; charset=iso-8859-1");

eller

header("Content-Type: text/html; charset=utf-8");
Avatar billede encorez Nybegynder
08. marts 2016 - 21:23 #9
Godt forslag, men det virkede kun delvist efter hensigten. Det løste at siden kunne vise æ, ø og å, men jeg kunne ikke uploade tekst med æ, ø og å til databasen.

Problemet lå i denne ændring i PhP 5.4.0   
Default encoding changed from ISO-8859-1 to UTF-8.

Så jeg skulle lige have den ekstra parametre "ISO-8859-1" på mine htmlentities samt html_entity_decode, så kører det igen :)

Takker
Avatar billede arne_v Ekspert
19. marts 2016 - 18:33 #10
Nogen gange maa man lave hurtige rettelser.

Men hvor meget hurtiger er det at indsaette:

foreach($_POST as $key => $value)
    ${$key} = $value;

i alle POST handlere end at checke hvilke felter man rent faktisk har og indsaette noget a la:

foreach(array('f1','f2') as $fld)
    ${$fld} = $_POST[$fld];

Eksemplet antager 2 valide felter f1 og f2.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester