webForumDet fria alternativet

Dynamiskt variabelnamn

16 svar · 506 visningar · startad av Skarre

SkarreMedlem sedan apr. 20012 427 inlägg
#1

Jag vill ha en variabel döpt efter värdet från

substr($key,6)

Hur åstadkommer jag detta?

Kent.JMedlem sedan aug. 2001153 inlägg
#2

Med eval kanske? Dock får du tänka på säkerheten... farligt kommando det där :)

http://se.php.net/eval

GeinMedlem sedan sep. 20005 700 inlägg
#3
$var = substr($key,6);
$$var = "innehållet";

Det ska väl gå bra?
(även om jag inte tycker det är speciellt snyggt)

lillemanMedlem sedan feb. 200410 inlägg
#4

Kan även göras på det här viset:

${substr($key, 6)} = 'värdet';
OveRRidEMedlem sedan feb. 200112 078 inlägg
#5

Det blir ju fullständigt oläslig kod om man håller på sådär. :l

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#6

Variabelvariabler är inte snygg programmering. Kör med ett collection-objekt istället.

QimenMedlem sedan juni 20015 009 inlägg
#7

Läsligt eller oläsligt, men jag tycker det borde bli en hel del extra jobb. Varje gång man vill använda variabeln så måste man köra substr. :l

lillemanMedlem sedan feb. 200410 inlägg
#8

Frågan var ju hur man gör det, inte huruvida man ska använda den metoden eller inte. :)

OveRRidEMedlem sedan feb. 200112 078 inlägg
#9

lilleman skrev:

Frågan var ju hur man gör det, inte huruvida man ska använda den metoden eller inte. :)

Jo, fast vad finns det överhuvudtaget för vettig anledning att göra så, såvida inte PHP fullständigt saknar möjligheter att hantera data i collections, vilket jag starkt betvivlar även om jag inte kan ett smack om PHP?

Bara för att det fungerar och för att han frågar hur man gör, så behöver det ju inte betyda att det är så man bör göra eller ens så han behöver göra.

lillemanMedlem sedan feb. 200410 inlägg
#10

OveRRidE skrev:

Jo, fast vad finns det överhuvudtaget för vettig anledning att göra så, såvida inte PHP fullständigt saknar möjligheter att hantera data i collections, vilket jag starkt betvivlar även om jag inte kan ett smack om PHP?

Nu vet jag inte riktigt vad du menar när du säger collections, men jag antar att du syftar på användandet av vektorer (arrays), vilket PHP har ett mycket bra stöd för (många fiffiga funktioner för hantering av vektorer).

OveRRidE skrev:

Bara för att det fungerar och för att han frågar hur man gör, så behöver det ju inte betyda att det är så man bör göra eller ens så han behöver göra.

Det har jag inte påstått heller. ;)

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#11

Vanliga vektorer har ju inte namn för sina värden, men jag gissar att arrayer i PHP är ungefär som i JavaScript där man kan skriva typ foo["ogrish"] = 123. Sen så bör det ju finnas någon schysst hash-algoritm i bakgrunden som gör det snabbt att hitta värden, men det får man väl bara hoppas/anta att det finns..? :)

SkarreMedlem sedan apr. 20012 427 inlägg
#12

Målet är att skapa variabler som motsvarar namn och värden på ett okänt antal formulärfält. Namnen börjar alltid med "title_".

foreach ($_POST as $key => $val) {
	if (substr($key,0,6) == 'title_') {
		${substr($key,6)} = $_POST[substr($key,6)];
	}
}

lillemans metod fungerar alldeles utmärkt, men hur menar ni att jag skulle göra koden effektivare med ett collection-objekt (som jag inte ens hittar i manualen)?

SkarreMedlem sedan apr. 20012 427 inlägg
#13

Nä, jag tänkte väl det. ;)

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#14

Jag ser det där lite som en säkerhetsrisk eftersom att vem som helst kan modifiera variabler.

Jag vet ju inte exakt hur arrayer funkar i PHP, men här är lite psuedo kod.

foreach ($_POST as $key => $val) {
    if (substr($key,0,6) == 'title_') {
        $fields[substr($key,6)] = $_POST[substr($key,6)];
    }
}

Då har man alla värden samlade i en array/collection.

SkarreMedlem sedan apr. 20012 427 inlägg
#15

Hur menar du att en matris innehållande värdena från formuläret är säkrare än en hoper varabler med samma värden. De kommer ju att användas på samma sätt. Det kan ju vara smidigt att ha dem samlade i en matris, men jag är nyfiken på om jag missar något vad gäller säkerheten.

Erik JuhlinMedlem sedan maj 200010 687 inlägg
#16

Jo grejen är ju att om du har en variabel innan loopen som har med något helt annat att göra så kan vem som helst göra en postning med det variabelnamnet och på det sättet modifiera variabeln.

Variabelvariabler är lite som Eval funktionen.

SkarreMedlem sedan apr. 20012 427 inlägg
#17

Erik Juhlin skrev:

Jo grejen är ju att om du har en variabel innan loopen som har med något helt annat att göra så kan vem som helst göra en postning med det variabelnamnet och på det sättet modifiera variabeln.

Det har du väldigt rätt i. Jag får nog tänka om lite. :stud

131 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)