Avatar billede brixendk Nybegynder
02. februar 2008 - 20:29 Der er 19 kommentarer og
1 løsning

print variabel ud fra $_REQUEST[test]

Hej.
er det muligt at kunne lave det sådan at hvis jeg skrev
www.addr.dk/index.php?g=12
at den så tager variablen $12 og udskriver det som er deri?
Avatar billede nielle Nybegynder
02. februar 2008 - 21:01 #1
Sådan?

$variabelNavn = $_GET['q'];
echo $$variabelNavn;
Avatar billede brixendk Nybegynder
02. februar 2008 - 21:15 #2
nemli sådan. skal du ikke skrive et svar før jeg kan give dig point? eller har jeg ikke lige forstået systemet?
Avatar billede erikjacobsen Ekspert
02. februar 2008 - 21:18 #3
Ja, meget sjovt det kan gøres, men nej: du skal ikke lægge det på nettet, for det er et gigantisk sikkerhedshul.
Avatar billede brixendk Nybegynder
02. februar 2008 - 21:24 #4
er det selve iden som har et sikkerhedshul eller nielles forslag?
Avatar billede nielle Nybegynder
02. februar 2008 - 21:26 #5
erikjacobsen  har fuldstændig ret - det er ikke specielt sikker kode. Dertil vil jeg så tilføje at det ikke er specielt pæn kode heller.

I stedet for at arbejde med variable-af-variable vil der som regel altid være en pænere låsning som bruger arrays til den slags:

$q = $_GET['q'];
echo $DitArray[$p];
Avatar billede nielle Nybegynder
02. februar 2008 - 21:29 #6
Man bør *altid* tjekke input som kommer "udefra". Specielt hvis man:

1) bruger det i sine SQL kommandoer.
2) bruger det til at include filer med.
3) bruger det i en eval().

... og så er der sikkert noget jeg har glemt.

Problemet er at en ond hacker-type har masse af muligheder for at *ændre* på den slags input sådan at din kode pludselig gør noget helt andet end den ville gøre hvis inddata var "almindeligt og pænt".
Avatar billede erikjacobsen Ekspert
02. februar 2008 - 21:31 #7
Selve ideen. Forestil dig dit script en dag bruge database. Så har du en

include.php:
<? $user="xxx";
  $pass="yyy";
  mysql_connect("host",$user,$pass);
?>

Og i dit script:

<?
  include("include.php");
  $kurt="flot fyr";
  $variabelNavn = $_GET['q'];
  echo $$variabelNavn;
?>

Så tror du man kalder den:  index.php?q=kurt  og får udskrevet "flot fyr", men man kunne li'så godt kalde den:  index.php?q=pass  - gæt hvad der sker. Og ja, det vil der komme en Brian Bitvender og gøre en dag ;)
Avatar billede brixendk Nybegynder
02. februar 2008 - 21:33 #8
skal det ikke stå $DitArray[$q]; og ikke med p?
Avatar billede nielle Nybegynder
02. februar 2008 - 21:34 #9
Godt fanget :^)
Avatar billede brixendk Nybegynder
02. februar 2008 - 21:38 #10
nielle: ja, det er rigtigt atman skal tjekke det, men princippet behøves vel ingen af delene? self ville det være bedre at have alle variabel dataerne i en MySQL database eller en anden fil, og bruge include, for at koden skulle se bedre ud,

erikjacobsen: ja, kan godt se det, men så kan jeg vel bare blive nød til at holde mine variables inde i den samme fil som jeg har koden?
Avatar billede erikjacobsen Ekspert
02. februar 2008 - 21:41 #11
Nej, du skal høre hvad vi siger: Du skal ikke gøre det på den måde nielle har skrevet først. Det vil aldrig være en god idé. Du kan ikke overholde en programmeringsdisciplin, der sikrer, at det ikke er "følsomme" data i variabler i din kode.

Du skal derimod kigge på hvad nielle foreslår (han kom før mig med forslaget...hehe): put det i et array, og kig kun i det array. Altså ikke:

  $kurt="flot fyr";

men

  $DitArray["kurt"]="flot fyr";
Avatar billede brixendk Nybegynder
02. februar 2008 - 21:47 #12
ok, jeg har bare ikke brugt arrays før, og læste lidt om det på google og kunne ikke ummildbart se forskellen på at bruge
$names[0] = 'John';
$names[1] = 'Paul';
$names[2] = 'Steven';
$names[3] = 'George';
$names[4] = 'David';
mod de alm variabler
$names0 = "John";
$names1 = "Paul";
$names2 = "Steven";
$names3 = "George";
$names4 = "David";
Avatar billede erikjacobsen Ekspert
02. februar 2008 - 21:50 #13
Så må du til at læse lidt op på arrays ;) Det er den bedste opfindelse der er sket, siden fiskene gik på land for en milliard år siden, sådan cirka.
Avatar billede nielle Nybegynder
02. februar 2008 - 21:51 #14
... tæt efterfulgt af hjulet ;^)
Avatar billede brixendk Nybegynder
02. februar 2008 - 22:23 #15
det vil jeg så gøre. men er nielles svar så det jeg skal bruge (og give point for)?
Avatar billede erikjacobsen Ekspert
02. februar 2008 - 23:30 #16
Jeg samler ikke på point, gør med dem hvad du vil :)
Avatar billede nielle Nybegynder
03. februar 2008 - 07:23 #17
Spørgeren bestemmer altid hvad der skal se med point. :^)

Men, du fik svar på dit spørgsmål du fik at vide at du ikke burde kode sådan, og du fik endda at vide hvordan du så burde kode i stedet.

Om du vil kode som 02/02-2008 21:01:22 - forkert.
... eller som 02/02-2008 21:26:02 - rigtigt.

er din selvfølgeligt din egen sag, men du har fået vores argumenter i sagen :^)
Avatar billede nielle Nybegynder
11. februar 2008 - 18:15 #18
Lukketid?
Avatar billede brixendk Nybegynder
11. februar 2008 - 21:29 #19
oh ja, og tak for svarene
Avatar billede nielle Nybegynder
12. februar 2008 - 16:29 #20
Tak for point :^)
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