[PHP] Naam van variabele dynamisch toewijzen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hello,

Ik heb een formulier met heel erg veel velden, die ook nog wel eens willen wijzigen. Nu gebruik ik in de PHP die het formulier verwerkt de bijzonder handige opdracht:
PHP:
1
list($key[], $value[]) = each($HTTP_POST_VARS);


Dus in een formulier staan bijvoorbeeld twee velden, veld1 en veld2, en de bovenstaande code vult de resulterende array dan dus als volgt:
keyvalue
veld1foo
veld2bar


Alles goed en wel, maar wat ik eigenlijk wil is dat de variabelen $veld1 en $veld2 met de bijbehorende waardes gevuld worden, dus dat de variable-namen on-the-fly gegenereerd worden, i.p.v. dat ik de veldnaam uitlees met $key[n] en de waarde met $value[n]...maar ik staar me hier een beetje blind (of blond) op.

Is wat ik wil überhaupt mogelijk? En zo ja: hoe?

Thx,
/\\ark.

Acties:
  • 0 Henk 'm!

  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 17:10

Knutselsmurf

LED's make things better

En hoe wilde je dan die variabelen met namen die constant veranderen in je code gaan gebruiken?

- This line is intentionally left blank -


Acties:
  • 0 Henk 'm!

  • Noordamski
  • Registratie: Oktober 2002
  • Laatst online: 17-01 14:23

Noordamski

yibbedi yibbeda

ja dat kan met $$variabele

If you can't convince them with facts, dazzle them with bullshit


Acties:
  • 0 Henk 'm!

  • JayVee
  • Registratie: Mei 2002
  • Laatst online: 31-08 10:22

JayVee

shibby++!

1.) Gebruik $_POST ipv $HTTP_POST_VARS
2.) Dat kan!
PHP:
1
$$key[0] = $value[0] // nu is $veld1 == 'foo'

ASCII stupid question, get a stupid ANSI!


Acties:
  • 0 Henk 'm!

  • glashio
  • Registratie: Oktober 2001
  • Laatst online: 18-09 10:13

glashio

C64 > AMIGA > PC

PHP:
1
extract(array_combine($key, $value))
Should do the trick ;)

> Google Certified Searcher
> Make users so committed to Google that it would be painful to leave
> C64 Gospel
> [SjoQ] = SjoQing


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:51

Creepy

Tactical Espionage Splatterer

Je zou er voor kunnen kiezen om het in een array te zetten. Als je al je velden dezelfde naam geeft en er twee blokhaken achterzet (name="blaat[]") dan komt het in 1 array terecht.
Het is mij dan verder wel een raadsel wat je met die waarden wilt gaan doen aangezien je geen idee hebt welke waarde nu wat betekent.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
glashio schreef op donderdag 04 augustus 2005 @ 13:42:
PHP:
1
extract(array_combine($key, $value))
Should do the trick ;)
Kun je dan niet beter gelijk extract($_POST) doen?

@TS:

Heb je wel eens naar foreach() gekeken? Die is ook erg handig met dit soort dingen:
PHP:
1
2
3
4
foreach ( $_POST as $key => $value )
{
  print "key: " . $key . ", value: " . $value . "<br/>";
}

[ Voor 31% gewijzigd door Michali op 04-08-2005 13:54 ]

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
extract($_POST);

Die werkt ook, maar ik zou het lekker in een array laten staan. Veel duidelijker/handiger en bovendien gewoon veel overzichtelijker.
edit:
Argh, spuit 11. :(

[ Voor 16% gewijzigd door NMe op 04-08-2005 13:54 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Okee dan, bedankt lui!
...dat je je zo dood kunt staren op zo iets simpels....zal wel bijna weekend zijn....

Mark.

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Overigens:
Do not use extract() on untrusted data, like user-input ($_GET, ...). If you do, for example, if you want to run old code that relies on register_globals temporarily, make sure you use one of the non-overwriting extract_type values such as EXTR_SKIP and be aware that you should extract $_SERVER, $_SESSION, $_COOKIE, $_POST and $_GET in that order.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Als je al op zo'n manier gaat werken, zet dan gewoon register_globals aan en ga een paar jaar terug in de tijd.

Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Het had ook met de eval()-functie gekunt;

PHP:
1
eval("\$$varnaam = '$varnaam';");

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

frickY schreef op donderdag 04 augustus 2005 @ 16:00:
Het had ook met de eval()-functie gekunt;

PHP:
1
eval("\$$varnaam = '$varnaam';");
Dat is denk ik de meest foute regel code die ik ooit gezien heb...

Acties:
  • 0 Henk 'm!

  • Guru Evi
  • Registratie: Januari 2003
  • Laatst online: 24-08 19:45
Staat nochthans uitgelegd in de manual:

http://php.belnet.be/manu...ge.variables.variable.php

Ik vind nochthans dat de variable variables soms (meestal) getuigen van een slecht/verkeerd design/denken vooral bij user input daar je niet weet wat er uit gaat komen (als je achteraf nog iets gaat doen met die variabelen.)

Als je een nieuwe applicatie bezig bent dan vind je wel een andere manier om je variabelen te behandelen (zeker als ze uit een $_GET of een $_POST komen hebben ze meestal al een key en dan kun je met multidimensionele arrays werken)

Nota bij variables.variable op php.net:
Please note that variable variables cannot be used with PHP's Superglobal arrays. This means you cannot do things like ${$_GET}. If you are looking for a way to handle availability of superglobals and the old HTTP_*_VARS, you might want to try referencing them.

[ Voor 29% gewijzigd door Guru Evi op 04-08-2005 16:11 ]

Pandora FMS - Open Source Monitoring - pandorafms.org


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
frickY schreef op donderdag 04 augustus 2005 @ 16:00:
Het had ook met de eval()-functie gekunt;

PHP:
1
eval("\$$varnaam = '$varnaam';");
Zulke ranzige voorbeelden hoef je hier niet neer te zetten. eval() heb je vrijwel nooit nodig en zeker niet in dit geval. Je voorbeeldje is overigens exact hetzelfde als:
PHP:
1
$$varnaam = $varnaam;

Daar heb je geen eval() voor nodig. En dit werkt overigens niet. Stelt dat $varnaam "banaan" als inhoud zou hebben, dan krijg je dus een variable $banaan met "banaan" als inhoud. En dat is niet echt wat de TS ingedachten had.

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Michali schreef op donderdag 04 augustus 2005 @ 16:10:
[...]

Zulke ranzige voorbeelden hoef je hier niet neer te zetten. eval() heb je vrijwel nooit nodig en zeker niet in dit geval. Je voorbeeldje is overigens exact hetzelfde als:
PHP:
1
$$varnaam = $varnaam;

Daar heb je geen eval() voor nodig. En dit werkt overigens niet. Stelt dat $varnaam "banaan" als inhoud zou hebben, dan krijg je dus een variable $banaan met "banaan" als inhoud. En dat is niet echt wat de TS ingedachten had.
Omhet nog maar niet te hebben over het feit dat met een simpele single quote de gebruiker iedere code op de server uit kan voeren die die wil...
Pagina: 1