Avatar billede jokeren77 Nybegynder
29. juli 2012 - 23:08 Der er 10 kommentarer og
1 løsning

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++)
  {
 
  }
Avatar billede scootergrisen Nybegynder
29. juli 2012 - 23:44 #1
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å.
Avatar billede inteeeL Nybegynder
30. juli 2012 - 00:12 #2
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");
}
Avatar billede DeeDawg Nybegynder
30. juli 2012 - 00:53 #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. :)
Avatar billede olebole Juniormester
30. juli 2012 - 04:47 #4
<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>
Avatar billede jokeren77 Nybegynder
30. juli 2012 - 09:19 #5
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.
Avatar billede olebole Juniormester
30. juli 2012 - 14:57 #6
Da du ikke viser tegn på at ville lære, ser jeg ikke grund til at spilde mere tid i denne tråd
Avatar billede jokeren77 Nybegynder
30. juli 2012 - 15:32 #7
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.
Avatar billede jokeren77 Nybegynder
30. juli 2012 - 15:46 #8
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.
Avatar billede olebole Juniormester
30. juli 2012 - 17:02 #9
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!
Avatar billede olebole Juniormester
30. juli 2012 - 17:05 #10
- 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)
Avatar billede jokeren77 Nybegynder
13. august 2012 - 09:46 #11
tak tak....
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