Dynamiskt variabelnamn
16 svar · 506 visningar · startad av Skarre
Med eval kanske? Dock får du tänka på säkerheten... farligt kommando det där :)
$var = substr($key,6);
$$var = "innehållet";
Det ska väl gå bra?
(även om jag inte tycker det är speciellt snyggt)
Det blir ju fullständigt oläslig kod om man håller på sådär. :l
Variabelvariabler är inte snygg programmering. Kör med ett collection-objekt istället.
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
Frågan var ju hur man gör det, inte huruvida man ska använda den metoden eller inte. :)
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.
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. ;)
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..? :)
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)?
Nä, jag tänkte väl det. ;)
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.
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.
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.
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