[php] variabel in variabel

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zoek een manier om in een $_POST[Naam] weer met een variabel te werken.

Ik probeer het uit te leggen..

Ik heb een while loop.
Daarin heb ik formulieren om gegevens aan te passen.
In deze loop zorg ik ervoor dat ieder afzonderlijk veld een unieke naam krijgt.

HTML:
1
<input name="Naam<?php echo $bestuurchange->ID; ?>" type="text" />


Nadat er op verzenden is gedrukt wil ik de gegevens graag gaan gebruiken.
Daarvoor laat ik wederom een loop lopen zodat alles ook weer aangepast wordt. Maar, hiervoor moet ik hetgeen opvragen middels een $_POST[Naam] . Alleen moet hij dan achter Naam nog de id plakken en dan pas de variabele ophalen.

Ik heb verschillende dingen geprobeerd. Waaronder door een punt de variabelen te koppen, maar dan koppelt hij slechts de inhoud.

Voor degenen die het verhaal begrijpen ;) wie heeft er een oplossing?

Acties:
  • 0 Henk 'm!

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 22:49
PHP:
1
$$var


http://us3.php.net/manual/en/language.variables.variable.php

?

[ Voor 50% gewijzigd door SyphOn op 21-07-2009 20:22 ]


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dat is nooit de oplossing. Hoogstens is het de enige mogelijke hack, maar dan moet je toch wel met een bijzonder goede use case komen. ;) In ieder geval kan je niet onderbouwd binnen 1 minuut met $$ aan komen zetten. :X

Hier is nadenken over naamgeving, of bedenken dat je wellicht wel een array wil gebruiken een betere denkrichting.

[ Voor 10% gewijzigd door Voutloos op 21-07-2009 20:27 ]

{signature}


Acties:
  • 0 Henk 'm!

  • SyphOn
  • Registratie: Juni 2001
  • Laatst online: 22:49
Dat snap ik, maar het is wel wat hij vroeg ;)

HTML:
1
<input name="Naam[<?php echo $bestuurchange->ID; ?>]" type="text" />


Dan kan je er toch ook met een loop door heen?

Acties:
  • 0 Henk 'm!

  • muksie
  • Registratie: Mei 2005
  • Laatst online: 17-09 18:14
En waarom kun je niet ook weer een loop gebruiken voor het verwerken?

Wat eventueel ook kan, is de namen in een hidden input te zetten, bijvoorbeeld zoiets:
HTML:
1
2
3
4
<input type="hidden" name="fields[]" value="Naam1" />
<input type="hidden" name="fields[]" value="Naam2" />
<input type="hidden" name="fields[]" value="Naam3" />
<input type="hidden" name="fields[]" value="Naam4" />

Acties:
  • 0 Henk 'm!

Verwijderd

Automatisch gegenereerde globale variabelen? O jee.

Gebruik liever een hash om je gegevens in op te slaan, of iets dergelijks.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Middels een array krijg ik denk ik hetzelfde probleem.
Ik heb namelijk een pagina vol met allemaal velden die ik dan wil aanpassen.

De $$var is op zich het idee dat goed gaat. Maar ik moet de waarden in elk geval voor de eerste keer opvragen. Dus het moet eigenlijk iets in de richting van het volgende worden.
PHP:
1
2
3
4
5
<?php
while {
echo $_POST[Naam$beheerchange->ID];
}
?>


Maar zoals verwacht, werkt dat natuurlijk niet..

Acties:
  • 0 Henk 'm!

  • muksie
  • Registratie: Mei 2005
  • Laatst online: 17-09 18:14
Misschien kun je gewoon met een loopje door je $_POST heenlopen? Blijkbaar hebben al je variabelen de prefix 'Naam', dus dat kun je dan gebruiken om eventuele andere post-gegevens te skippen. Je krijgt dan zoiets:
PHP:
1
2
3
4
5
foreach ($_POST as $key => $value) {
    if (substr($key, 0, 4) === 'Naam') {
        doe_iets($value);
    }
}

Acties:
  • 0 Henk 'm!

  • Joolee
  • Registratie: Juni 2005
  • Niet online
Dat komt omdat je nu Naam gebruikt als een konstante. Je gebruikt normaal gesproken zeker ook het volgende?
PHP:
1
$_POST[Naam]

Wat je nu doet is gebruik maken van een foute beslissing in PHP. Als je een konstante aanroept die niet beschikbaar is (Naam) dan wordt de string 'Naam' gebruikt. Nu loop je ertegenaan dat je deze niet kunt koppelen.
Het juiste gebruik is:
PHP:
1
$_POST['Naam']

En dan is het koppelen van een extra variabele daaraan ook ineens niet zo lastig meer:
PHP:
1
$_POST['Naam' . $var]


//Edit:
http://nl.php.net/manual/...anguage.types.array.donts

[ Voor 7% gewijzigd door Joolee op 21-07-2009 21:00 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
En dat werkt idd.
Ik had het ook al geprobeerd. Maar toen zat er nog een ander stukje code dat het belemmerde. (Waardoor dat stuk code niet werd uitgevoerd.)
Enfin. Het werkt. En bedankt daarvoor.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 19-09 08:51

Janoz

Moderator Devschuur®

!litemod

sorry, ik zie hier een berg ranzige concatenatie en eval code voorbij komen....


De enige imho juiste methode is
PHP:
1
2
3
?>
<input type="text" value="naam[<?php echo $bestuurchange->ID; ?>]" />
<?

En vervolgens uitlezen met
PHP:
1
$_POST['naam'][$id];

of
PHP:
1
2
3
foreach ($_POST['naam'] as $id => $value) {
  //dostuff
}

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Janoz schreef op dinsdag 21 juli 2009 @ 22:13:
sorry, ik zie hier een berg ranzige concatenatie en eval code voorbij komen....
PHP:
1
2
3
foreach ($_POST[naam] as $id => $value) {
  //dostuff
}
PHP:
1
2
3
foreach ($_POST['naam'] as $id => $value) {
  //dostuff
}

bedoel je natuurlijk :+

variabele variabelen zijn zoals Voutloos zegt eigenlijk nooit een goed idee. Volgens mij kom je hier alleen op terecht doordat je ergens eerder een denkfout gemaakt hebt.

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
De ID ook meeposten:

HTML:
1
2
3
<input type="hidden" name="id" value="<?php echo $bestuurchange->ID; ?>" />

<input type="text" name="naam_<?php echo $bestuurchange->ID; ?>" />


In je PHP doe je dan zo:

PHP:
1
2
$id = (int)$_POST['id'];
$naam = $_POST['naam_'. $id];

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
En wat voegt dat toe bovenop RobIII's post, behalve talloze velden die allemaal 'id' heten? ;)

Echt schokkend hoe moeilijk iedereen over een array doet...

[ Voor 27% gewijzigd door Voutloos op 22-07-2009 09:29 ]

{signature}


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 19-09 08:51

Janoz

Moderator Devschuur®

!litemod

Voutloos schreef op woensdag 22 juli 2009 @ 09:28:
En wat voegt dat toe bovenop RobIII's post?
RobIII?
Echt schokkend hoe moeilijk iedereen over een array doet...
QFT

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Pfff, iemand met een rode nickname. :+

{signature}


Acties:
  • 0 Henk 'm!

  • !null
  • Registratie: Maart 2008
  • Laatst online: 19-09 08:38
Janoz heeft het bij het rechte eind, enige nette manier volgens mij.
Al wil je het dan niet meer 'naam' noemen, maar 'AutomaticFieldList' of zoiets, iets duidelijkers iig.
Als je er dan veldnaampjes van je database tabel in zet dan oid kan je met SQL en de $id/$value combi dingen snel automatiseren.

Ampera-e (60kWh) -> (66kWh)

Pagina: 1