PDA

Bekijk Volledige Versie : Re: PHP : Array versturen met een <form>



Maarten Wierda
29/12/02, 15:03
Haico Spaapen wrote:

[f'up -> nl.internet.www.server-side]

> Mijn vraag is of, en eventueel hoe het mogelijk is om een Array met een
> formulier te versturen naar een ander PHP bestand dat dan natuurlijk die
> Array weer moet kunnen lezen.

[....]

> echo ("<form action='zomaar.php' method='post'> ");
> $pcs= array ("2","4","1","6","3","2","4") ;
> echo("<input type='hidden' name='pcs' value='$pcs'>");

Dat kan natuurlijk niet.

Waarom geen meerdere hidden fields? Dus iets als:

$pcs = array ("2","4","1","6","3","2","4");

for ($x=0; $x<sizeof($pcs); $x++) {
print("<INPUT type='hidden' name='foo[]' value='$pcs[$x]'>\n");
}

Op deze manier komen de waarden uit $pcs als een array binnen.

[....]

--
Cheers, Maarten Wierda

Haico Spaapen
29/12/02, 15:40
"Maarten Wierda" <moart3nAT@norecessDOT.com> schreef in bericht
news:3E0EF28C.A45039F1@norecessDOT.com...

> Dat kan natuurlijk niet.
>
> Waarom geen meerdere hidden fields? Dus iets als:
>
> $pcs = array ("2","4","1","6","3","2","4");
>
> for ($x=0; $x<sizeof($pcs); $x++) {
> print("<INPUT type='hidden' name='foo[]' value='$pcs[$x]'>\n");
> }
>
> Op deze manier komen de waarden uit $pcs als een array binnen.

Logisch, bedankt! Nu kan ik weer verder puzzelen.

Haico

Daniel Tryba
29/12/02, 16:26
In nl.internet.www.server-side Maarten Wierda <moart3nAT@norecessdot.com> wrote:
>> Mijn vraag is of, en eventueel hoe het mogelijk is om een Array met een
>> formulier te versturen naar een ander PHP bestand dat dan natuurlijk die
>> Array weer moet kunnen lezen.
>
> [....]
>
>> echo ("<form action='zomaar.php' method='post'> ");
>> $pcs= array ("2","4","1","6","3","2","4") ;
>> echo("<input type='hidden' name='pcs' value='$pcs'>");
>
> Dat kan natuurlijk niet.

'Natuurlijk niet' is een beetje overdreven, het enige wat mist is een
serialize():

echo "<input type='hidden' name='pcs' value='".serialize($pcs)."'.">";

[knip de multi hidden fields optie]

Dat werkt in dit geval natuurlijk perfect en het simpelst, echter bij
een meerdimensionaal array of een object wordt het al minder :)

BTW als er al gegevens van de ene pagina naar de andere moeten worden
overgeheveld is het natuurlijk niet verstandig om dat via de browser te
doen, aangezien de gebruiker op dat moment de mogelijkheid heeft te gaan
rotzooien. Een betere oplossing zou een sessie zijn.

--

Daniel Tryba

Maarten Wierda
29/12/02, 17:36
Daniel Tryba wrote:

> > > echo ("<form action='zomaar.php' method='post'> ");
> > > $pcs= array ("2","4","1","6","3","2","4") ;
> > > echo("<input type='hidden' name='pcs' value='$pcs'>");
> >
> > Dat kan natuurlijk niet.
>
> 'Natuurlijk niet' is een beetje overdreven, het enige wat mist is een
> serialize():
>
> echo "<input type='hidden' name='pcs' value='".serialize($pcs)."'.">";

Als ik deze hidden field binnen een form zet, en na de submit de waarde
op deze manier wil tonen, werkt het niet:

if (isset($submitButton)) {
echo "foo:".unserialize($pcs);
}

Hoe toon ik deze weer netjes?

> [knip de multi hidden fields optie]
>
> Dat werkt in dit geval natuurlijk perfect en het simpelst, echter bij
> een meerdimensionaal array of een object wordt het al minder :)

Maar de OP gaf niet aan dat hij/zij dat wilde gebruiken, toch? ;-)

> BTW als er al gegevens van de ene pagina naar de andere moeten worden
> overgeheveld is het natuurlijk niet verstandig om dat via de browser te
> doen, aangezien de gebruiker op dat moment de mogelijkheid heeft te gaan
> rotzooien. Een betere oplossing zou een sessie zijn.

Ja die optie wilde ik ook nog posten maar de oplossing hidden fields
leek me het meest eenvoudige.

--
Cheers, Maarten Wierda

Daniel Tryba
29/12/02, 17:48
Maarten Wierda <moart3nAT@norecessdot.com> wrote:
>> echo "<input type='hidden' name='pcs' value='".serialize($pcs)."'.">";
>
> Als ik deze hidden field binnen een form zet, en na de submit de waarde
> op deze manier wil tonen, werkt het niet:
>
> if (isset($submitButton)) {
> echo "foo:".unserialize($pcs);
> }
>
> Hoe toon ik deze weer netjes?

Hmmmm, een addslashes doet wellicht wonderen. Bekijk even de source van
de geserializde output om te controleren.

BTW http://www.php.net/manual/en/function.serialize.php
<q>
oji at programmer dot net
12-Oct-2000 01:17


PASSING AN ARRAY BETWEEN PAGES WITH SERIALIZE;

1st PAGE)
$var=array("a","b","c");
$var=serialize($var);
$var=urlencode($var);
#pass the $var via hidden or get method
2nd PAGE)
$var=//http post/get ["var"]
$var=stripslashes($var); //no need to urldecode...rather strip the
slashes
$var=unserialize($var);
foreach($var as $element){
echo "this->$element
";
}

-oji
;0)
</q>

>> [knip de multi hidden fields optie]
>>
>> Dat werkt in dit geval natuurlijk perfect en het simpelst, echter bij
>> een meerdimensionaal array of een object wordt het al minder :)
>
> Maar de OP gaf niet aan dat hij/zij dat wilde gebruiken, toch? ;-)

Afentoe moet je vooruit denken :)

--

Daniel Tryba

Haico Spaapen
02/01/03, 10:23
Mhhhmmm,

Ik dacht dat ik reeds een mailtje gepost had om te bedanken voor deze
oplossing, zeker teveel champagne...

Bij deze alsnog bedankt!

Haico