Oprettet søn. d. 29. juli 2012 kl. 23:08:50

jokeren77
jokeren77 (1.745 point. Point ude: 90)

lav variabler ud fra array

Jeg har et array som indehold names på POST's fra skemaet på forrige side. Disse har jeg lagt i array som jeg vil bruge til at lade scriptet lave variablerne selv.

Problemet er at Jeg gerne vil lave

$required[0]: navn
ønsker variabel: $navn
ønsket indhold: $_POST[$required[$i]] ($_POST[navn])

Håber i forstår mit problem :-)

// Required field names
$required = array('navn', 'alder', 'farve', 'kon', 'oprind',
'far', 'mor', 'tjent', 'rekord_kort', 'rekord_mellem', 'rekord_lang', 'ejernavn', 'ejerpost', 'ejerby', 'ejerland', 'ejertlf', 'ejeremail', 'beskriv', 'pris');
   
$required_count = count($required);
   
for($i=0; $i < $required_count; $i++)
  {
 
  }

Skrevet søn. d. 29. juli 2012 kl. 23:44:51| #1

scootergrisen
scootergrisen (8.346 point)
Du kan bruge $_POST['navn'] og $_POST['alder'] osv.

Det er en dårlig ide at lade scriptet lave variabler ud fra hvad der bliver sendt en en formular for så kan folk selv lave en formular og ændre på variabler i din kode som du måske ikke havde tænkt skulle ændres på.

Skrevet man. d. 30. juli 2012 kl. 00:12:57| #2

inteeeL
inteeeL (5.816 point)
Mig bekendt er det ikke muligt, at navngive en variabel via et element fra et array. Du kan i stedet deklarere et key i et array - eksempelvis med POST eller SESSION eller et helt almindeligt array. Du kan også definere en global variabel.

for($i=0; $i < $required_count; $i++) {
    $_POST[$required[$i]] = 'VÆRDI';
    $_SESSION[$required[$i]] = 'VÆRDI';
    define($required[$i], "VÆRDI");
}

Skrevet man. d. 30. juli 2012 kl. 00:53:34| #3

@scootergrisen: Ikke så længe, scriptet laver variabler ud fra feltnavne han selv har defineret, og ikke andre end dem, hvilket er præcis det han prøver på i sit script.

@jokeren77: Jeg kan godt se at det kan virke træls at skulle skrive $_POST hver gang, men det er faktisk en dum idé det du har gang i. Variabler repræsenterer i bund og grund en plads i serverens memory, og groft sagt er et array det samme som en variabel, bortset fra den måde dataen gemmes.

Når du smider data fra et array ind i en variabel, forsvinder det jo ikke fra dit array. Derfor fylder du serverens memory op med duplikationer af data, som du allerede havde adgang til via dit array, og derfor egentlig ikke behøver de ekstra variabler. Sidder du og leger med private ting, kan du måske ikke mærke nogen forskel, men når du kommer op og leger med større webapplikationer med tung trafik som nogle af os andre, så kan ting som dette mærkes.

Det er en typisk misforståelse at den korteste og pæneste kode er den bedste. :)

Skrevet man. d. 30. juli 2012 kl. 04:47:18| #4

olebole
olebole (216.718 point)
<ole>

Variabler, du får ind via en post, kan indeholde, hvad som helst. Dem bør du ikke ukritisk behandle i en løkke.

I stedet bør du tjekke, at hver eneste $_POST-variabel indeholder, hvad du forventer, at præcis dén variabel skal indeholde. Først derefter lægger du den over i en anden variabel, som efterfølgende kan betragtes som værende en anelse mere sikker.

Læg mærke til, at du ikke skal tjekke, om variablen indeholder skadeligt indhold. Det har du ikke fantasi til.

Definer i stedet helt præcist, hvad hver variabel må indeholde - og definer det så snævert, som muligt.

/mvh
</bole>

Skrevet man. d. 30. juli 2012 kl. 09:19:35| #5

jokeren77
jokeren77 (1.745 point)
foreach($required as $field) {
    $$field = $_POST[$field]; }   

unset ($required);

Den her lille sløjfer danner nu en liste til mig, hvor jeg får min POST data lagt ind som $data, $alder osv., herefter 'nedlægger' jeg arrayet så det ikke fylder.

Dette var de tjeg gjorde manuelt før, jeg har 24 POST's og har nu reduceret koden til 2 linier og dermed større overblik.

Min kode har FORMen har så en linien hvor man skal gentage et random nummer. Samt 2-3 hidden feltet, hvor behandlingen af scriptet så melder ERROR hvis der står noget i disse POSTs, bare for at undgå BOTs.

Ang. den med at definere hvad folk må skrive, så lyder det til en super ide, er bare i tvivl om hvordan jeg kan gøre det. tidligere har jeg lavet et lille script som har tjekket om en række af ord stod i String, hvis der stod 3 af den, så ERROR.

Skrevet man. d. 30. juli 2012 kl. 14:57:03| #6

olebole
olebole (216.718 point)
Da du ikke viser tegn på at ville lære, ser jeg ikke grund til at spilde mere tid i denne tråd

Skrevet man. d. 30. juli 2012 kl. 15:32:09| #7

jokeren77
jokeren77 (1.745 point)
Olebole: Der er jo ikke meget hjælp at søge herinde, og da slet ikke fra dig når du giver op efter 1 kommentar. Jeg har, ifølge dig, ikke den korrekte indgangsvinkel til at lave dette, og søger viden om hvordan jeg gør tingene mere korrekt.

Der findes jo løsninger og workarounds, og jeg laver åbenbart workarounds, og søger løsningen, og håbede da folk som dig, der besidder den viden, via experten.dk vil dele med os andre.

Du har jo ikke gjort nogen tiltag til at fortælle mig hvad der er galt med mit forslag og i så fald hvad der er det korrekte.

Det handler slet ikke om at jeg ikke vil lære, men er svært at lære hvis der ikke er undervisning eller viden at finde via hint.

Så håber da at du vil give mig et hint om hvilken vej jeg skal gå for at gøre det mest korrekt.

Skrevet man. d. 30. juli 2012 kl. 15:46:03| #8

jokeren77
jokeren77 (1.745 point)
ScooterGrisen:

Det jeg lavede var ikke om indholdet. Men at min VAR kaldes det sammen som POST-navnet

foreach($required as $field) {
    $$field = $_POST[$field]; }

Så bliver indholdet at $_POST[navn] lagt over i variablen $navn. Men ved ikke om det er sådan man skal gøre. Det lyder jo som om min måde ikke er den mest hensigtsmæssige, og søger jo så viden om hvad der er korrekt.

Skrevet man. d. 30. juli 2012 kl. 17:02:51| #9

olebole
olebole (216.718 point)
Du skal bare bruge PHP, som det er meningen, det skal bruges. Da jeg for omkring 14 år siden begyndte at skrive PHP, eksisterede $_POST array'et slet ikke. Hvis et felt med navnet 'foobar' blev posted mod serveren, lå det i $foobar ... ikke i $_POST['foobar']. Med andre ord: PHP fungerede ved fødslen, som du gerne vil have det.

Det viste sig dog, at det var en alt for farlig tilgang. Det viste sig nødvendigt at mærke indkomne variabler som *yderst* farlige. For at have styr på indkomne data og mærke dem som farlige, indførte man $_GET og $_POST.

Efterfølgende forsøgte mange sig med extract, men efterhånden er det vist gået op for de fleste, at det er en dårlig idé - og at der er rigtig gode grunde at have de to arrays.

Når du ser en $_GET eller $_POST variabel, er meningen, at du skal reagerer, som hvis du så en grøn, rillet flaske med et dødningehovede og teksten:

[col=#c00]GIFT! STRÅLINGSFARE! OVERHÆNGENDE LIVSFARE![/col]


Du skal ikke dekantere indholdet til en uskyldigt udseende saftevandsflaske. Gør du det, sætter du vand over til store problemer!

Skrevet man. d. 30. juli 2012 kl. 17:05:38| #10

olebole
olebole (216.718 point)
- og så skal du *altid* bruge gåseøjne ved arraykald, når indeks er en streng. Ikke $_POST[navn] - men $_POST['navn']. PHP kan godt finde ud af det uden, men det er også en sikkerhedsrisiko, da 'navn' i princippet kunne være en defineret konstant. Gåseøjne i arraykald er udtryk for 'god kodestil'  *o)

Skrevet man. d. 13. august 2012 kl. 09:46:15| #11


Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

if med flere SELECT i Mysql

Oprettet den 19. maj 2013 kl. 15.08
artico giver 100 point for svar | Giv et svar »

PHP upload til username

Oprettet den 19. maj 2013 kl. 14.09
Kasperhn giver 60 point for svar | Giv et svar »

Kald et php fra et html dokument

Oprettet den 18. maj 2013 kl. 17.46
side1 giver 200 point for svar | Giv et svar »








Tips & Tricks fra PC World

Teaser billede

Her er seks Google Labs-funktioner, som du skal slå til med det samme

Gmail Labs giver dig adgang til en masse smarte funktioner, som Googles ingeniører leger med i øjeblikket.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Tre smarte trick som gør Windows 8 bedre

Boot direkte til skrivebordet, få en strategisk godt placeret luk-knap og slip for at logge ind. Her er tre tips til Windows 8, som gør det nemmere at blive venner med styresystemet.


Nyheder fra Computerworld

Teaser billede

Galleri: Her er Googles nyeste værktøj og legetøj

Google har i denne uge afholdt udviklerkonferencen I/O i San Francisco. Se her hvad søgegiganten kunne præsentere af nyskabelser.


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger