[PHP] Namen van variabelen aanpassen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Hallo,

Stel, ik heb de variabele $test_1 tot en met $test_10 die uit een formulier zijn gepost, en ik wil dit getal met een while bepalen op deze manier

code:
1
2
3
4
5
$teller=0;
while($teller<=10){
   echo "$test_".$teller." <br>";
   $teller++;
}


Dan werkt dit niet!
Hoe moet het dan wel (gebruik maken van formulierarrays is niet mogelijk)?

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
eval() misschien?

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Je wilt dus een variabele evalueren om in een variabelenaam te gebruiken, die daarna nog geëvalueerd moet worden?

[ Voor 51% gewijzigd door Confusion op 27-09-2005 11:43 ]

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Dit kan idd zo goed als niet.

Wat je bijvoorbeeld wel kan doen is er een array van maken:
code:
1
2
3
4
5
while($teller <= 10)
{
  echo $test[$teller];
  $teller++;
}

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

Verwijderd

In je voorbeeld, wat post je dan precies?

volgens mij gewoon een string met die test namen..

[ Voor 7% gewijzigd door Verwijderd op 27-09-2005 11:44 ]


Acties:
  • 0 Henk 'm!

  • MichelVH
  • Registratie: Oktober 2001
  • Laatst online: 16-09 20:54
Het is vies, maar het werkt wel:
PHP:
1
2
3
4
5
6
$teller = 0;
while($teller <= 10) {
    $varname = 'test_' . $teller;
    echo $$varname;
    $teller++;
}

Don't be afraid of the dark, be afraid of what it hides


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Untested:

PHP:
1
2
3
4
5
$teller=0;
while($teller<=10){
   echo $test_{$teller}.'<br>';
   $teller++;
}

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

Verwijderd

Als je velden in een formulier zo genoemd hebt en dat gesubmit hebt, zitten de waarden natuurlijk in $_POST[], dus kan je daar doorheen loopen en de juiste waardes eruit halen.


Edit:
/me is voor de verandering eens Spuit 1 :+

[ Voor 14% gewijzigd door Verwijderd op 27-09-2005 11:53 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Als ze gepost zijn, dan staan ze toch al in $_POST?
PHP:
1
$_POST['test_'.$teller];

zou voldoende moeten zijn.

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!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Dark Wanderer schreef op dinsdag 27 september 2005 @ 11:32:
Hoe moet het dan wel (gebruik maken van formulierarrays is niet mogelijk)?
Als het echt niet mogelijk is formulierarray's te gebruiken (al zie ik niet in waarom dat niet zou kunnen) dan zou ik zelf de $_POST array loopen en eruit halen wat ik nodig (begint de key met 'test_'?) heb ipv vieze constructies te gebruiken waarbij de structuur en het overzicht snel weg is :)

edit:
Ik begin traag te worden :o

[ Voor 7% gewijzigd door Erkens op 27-09-2005 11:50 ]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Dark Wanderer schreef op dinsdag 27 september 2005 @ 11:32:
Hallo,

Stel, ik heb de variabele $test_1 tot en met $test_10 die uit een formulier zijn gepost, en ik wil dit getal met een while bepalen op deze manier

code:
1
2
3
4
5
$teller=0;
while($teller<=10){
   echo "$test_".$teller." <br>";
   $teller++;
}


Dan werkt dit niet!
Hoe moet het dan wel (gebruik maken van formulierarrays is niet mogelijk)?
PHP:
1
2
3
4
5
6
$teller=0;
while($teller<=10){
// $_POST voor post variablen en $_GET voor get variablen 
   echo $_POST[$test ."_".$teller]. "<br>";
   $teller++;
}


:( spuit 11

[ Voor 8% gewijzigd door LuCarD op 27-09-2005 11:52 ]

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • Ciqniz
  • Registratie: Oktober 2002
  • Laatst online: 07-09-2023

Ciqniz

On the move...

Geef gewoon in je formulier de namen van je input-velden aan met naam[0] naam[1] enz.
Als je ze uitleest heb je een array. Wil je de grootte weten => count($naam).

Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Ok ik zal ff iets meer vertellen

Het formulier is zo gemaakt (als voorbeeld 10 tekstvelden):

code:
1
2
3
4
5
6
7
8
<form tag blabla>
<?
$teller=0;
while($teller<=10){
   ?><input type="text" name="test_<?echo$teller;?>">/n<?
   $teller++;
}
?>


En nu wil ik deze velden op dezelfde manier echo'en, maar ik weet niet hoe ik die variabele naam moet maken. ik dacht dus zo

code:
1
2
3
4
5
6
7
8
<?
$teller=0;
while($teller<10){
   $var='$_POST[\'test_$teller\']';
   echo $var; echo "<br>";
   $teller++;
}
?>


En dat echo-en wil dus niet

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

Verwijderd

Bij alle oplossingen krijg je toch echt de melding: Undefined variable $test
(in PHP5 in ieder geval zeker weten)

Waarom uberhaupt het jezelf moeilijk maken door er $test_ voor te zetten?
Met alleen getallen werk je toch iets soepeler.

Persoonlijk vind ik dat je gewoon een andere manier moet zoeken, maar dat mag je
natuurlijk helemaal zelf weten

Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Dark Wanderer schreef op dinsdag 27 september 2005 @ 11:54:
code:
1
2
3
4
5
6
7
8
<form tag blabla>
<?
$teller=0;
while($teller<=10){
   ?><input type="text" name="test_<?echo$teller;?>">/n<?
   $teller++;
}
?>

En dat echo-en wil dus niet
code:
1
2
3
4
5
6
7
8
<form tag blabla>
<?
$teller=0;
while($teller<=10){
   ?><input type="text" name="test[<?echo$teller;?>]">/n<?
   $teller++;
}
?>

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Dark Wanderer schreef op dinsdag 27 september 2005 @ 11:54:
Het formulier is zo gemaakt (als voorbeeld 10 tekstvelden):
Als je het formulier zelf maakt zie ik geen enkele reden om zo moeilijk te doen.

PHP:
1
2
3
4
5
6
7
8
9
<form tag blabla>
<?
$teller=0;
while($teller<=10){
   ?><input type="text" name="test_<?echo $teller;?>">/n<? <!-- Oude -->
   ?><input type="text" name="test[<?echo $teller;?>]">/n<? <!-- Nieuwe -->
   $teller++;
}
?>



En wat heb je hier een lompe toekenning in???
PHP:
1
2
3
4
5
6
7
8
9
<?
$teller=0;
while($teller<10){
   $var='$_POST[\'test_$teller\']'; // oud
   $var=$_POST['test_'.$teller]; // werkt beter
   echo $var; echo "<br>";
   $teller++;
}
?>

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!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Verwijderd schreef op dinsdag 27 september 2005 @ 11:54:
Waarom uberhaupt het jezelf moeilijk maken door er $test_ voor te zetten?
Met alleen getallen werk je toch iets soepeler.
Jij wilt getallen als variabelenaam gebruiken? Dan wil ik nooit code van jou lezen.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Confusion schreef op dinsdag 27 september 2005 @ 12:04:
[...]

Jij wilt getallen als variabelenaam gebruiken? Dan wil ik nooit code van jou lezen.
Ik denk dat je dat anyway niet wilt. ;)

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
LuCarD schreef op dinsdag 27 september 2005 @ 11:51:
[...]


PHP:
1
2
3
4
5
6
$teller=0;
while($teller<=10){
// $_POST voor post variablen en $_GET voor get variablen 
   echo $_POST[$test ."_".$teller]. "<br>";
   $teller++;
}


:( spuit 11
Joow, dit werkte
Bedankt!

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

Verwijderd

Confusion schreef op dinsdag 27 september 2005 @ 12:04:
[...]

Jij wilt getallen als variabelenaam gebruiken? Dan wil ik nooit code van jou lezen.
Nee dat niet, ik zou uberhaupt niet op deze wijze programmeren.
Maar mijn code lezen wil je ook niet :P

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

waar komt die $test vandaan :?
verder is het beter als je eerst kijkt of een bepaalde POST/GET variabele wel gezet is voordat je hem uit leest (wat niet kan, en waarom je dan dus een notice krijgt) aangezien je nooit zeker kan weten dat de client wel alles netjes heeft verstuurd.

Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Jah $test is ff voorbeeldsituatie, ik hoef niet te checken want het is een select veld. Ik zit in andermand code, en die wil het zo en zo hebben, op deze lompe manier, dus dan moet het maar, ik heb ook niet voor deze aanpak gekozen :P

Bedankt!

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Dark Wanderer schreef op dinsdag 27 september 2005 @ 12:22:
Jah $test is ff voorbeeldsituatie, ik hoef niet te checken want het is een select veld. Ik zit in andermand code, en die wil het zo en zo hebben, op deze lompe manier, dus dan moet het maar, ik heb ook niet voor deze aanpak gekozen :P

Bedankt!
waarom zou je een select veld niet moeten checken? userinput == userinput

Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Erkens schreef op dinsdag 27 september 2005 @ 12:23:
[...]

waarom zou je een select veld niet moeten checken? userinput == userinput
Het wordt al gevalideerd met een javascript onsubmit()

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • MichelVH
  • Registratie: Oktober 2001
  • Laatst online: 16-09 20:54
En dan save ik de pagina, sloop ik de onSubmit() validatie eruit, en submit ik mijn eigen pagina...

Don't be afraid of the dark, be afraid of what it hides


Acties:
  • 0 Henk 'm!

  • disjfa
  • Registratie: April 2001
  • Laatst online: 03-07 14:47

disjfa

be

Of ik zet mn javascript uit, Ook handig :)

disjfa - disj·fa (meneer)
disjfa.nl


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

kortom, userinput is _nooit_ te vertrouwen :)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

disjfa schreef op dinsdag 27 september 2005 @ 11:55:
[...]

code:
1
...<?echo$teller;?>...
Daar hebben ze de <?= voor uitgevonden

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
hmm daar heb ik niet bij nagedacht, bedankt voor de tip.

Maarre, kan je met php niet checken wat de url van de postreferrer is?

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Dark Wanderer schreef op dinsdag 27 september 2005 @ 14:03:
hmm daar heb ik niet bij nagedacht, bedankt voor de tip.

Maarre, kan je met php niet checken wat de url van de postreferrer is?
die referrer wordt ingesteld door de client, dus ook niet 100% betrouwbaar (als die al meegestuurd wordt)

Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Dus altijd na het posten checken, en dan pas goedkeuren ?

Bedankt voor de tip.

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

Verwijderd

Maak altijd eerst server side validatie, en daarna pas client side meuk om het wat sneller te maken voor de gebruiker ...

Edit:
Ik had het inderdaad over de volgorde van het implementeren. Erkens en Janoz gaat door voor de vaatwasser ...

[ Voor 34% gewijzigd door Verwijderd op 27-09-2005 16:05 ]


Acties:
  • 0 Henk 'm!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Verwijderd schreef op dinsdag 27 september 2005 @ 14:18:
Maak altijd eerst server side validatie, en daarna pas client side meuk om het wat sneller te maken voor de gebruiker ...
Ik denk dat jij andersom bedoelde

hand·te·ke·ning (de ~ (v.))


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Dark Wanderer schreef op dinsdag 27 september 2005 @ 15:20:
[...]


Ik denk dat jij andersom bedoelde
Nee, altijd eerst zorgen dat alle validatie werkt op de server, eventueel kan je dan clientside validatie later nog toevoegen om het voor de gebruiker wat makkelijker te maken. Als je altijd op deze manier te werk gaat zullen je scripts/sites een stuk veiliger (kunnen) zijn :)

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Dark Wanderer schreef op dinsdag 27 september 2005 @ 15:20:
[...]


Ik denk dat jij andersom bedoelde
Hij heeft het over de volgorde van ontwikkelen, niet de volgorde van uitvoeren ;)

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!

  • Dark Wanderer
  • Registratie: September 2003
  • Laatst online: 11-08-2024
Janoz schreef op dinsdag 27 september 2005 @ 15:35:
[...]


Hij heeft het over de volgorde van ontwikkelen, niet de volgorde van uitvoeren ;)
Oh, op die fiets (ook wel een persoons tendem genoemd) :P

Ik heb altijd wel server side gevalidate, maar was sinds kort over gestapt op clientside. Dacht dat het niet uitmaakte. Maar ik ga nu weer lekker terug naar serverside :P

hand·te·ke·ning (de ~ (v.))

Pagina: 1