Re: Problem with hidden form input values

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ben Edwards wrote:
> On Wed, 19 Jan 2005 15:22:55 -0800 (PST), Richard Lynch <ceo@xxxxxxxxx>
> wrote:
>> Ben Edwards (lists) wrote:
>> > I know this is not strictly speaking a PHP question but it is to do
>> with
>> > a PHP app.
>> >
>> > I have a form with a number of hidden values in it.  After the post
>> > print_r( $_POST ) shows all the values except these (this is copied
>> from
>> > 'Show Source' in the browser.
>> >
>> > <input type=hidden name=keyField[mb_memberships][0] value=mb_e_id>
>> > <input type=hidden name=keyValue[mb_memberships][0] value=100000>
>> > <input type=hidden name=keyField[mb_memberships][1] value=mb_id>
>> > <input type=hidden name=keyValue[mb_memberships][1] value=1>
>> >
>> > Any idea why they wont post?
>>
>> The *do* POST, but PHP only handles one level of array references in
>> NAME=xxx
>>
>> You can do something like:
>> <?php
>>  while (list($keys, $value) = each($_POST['keyField'])){
>>    $keys = explode('][', $keys);
>>    list($key1, $key2) = $keys;
>>    $realKeyField[$key1][$key2] = $value;
>>  }
>> ?>
>
> Almost follow this but not quite.  Is this the code used to create the
> hidden HTML input tag

No, you have that correct already (though the " marks would be Good to add)

> or the one to unpack the variable after the
> post.

Yes.

What you are receiving from HTTP/POST/PHP is the same as:

$keyField['mb_memberhips][0'] = 'mb_e_id';

Note the lack of intervening apostrophes you expected:
$keyField['mb_memberhips']['0'] = 'mb_e_id';

PHP only parses POST data to *ONE* dimension.

Same as GET data too.

>  What is really spooky is the keys are actually held in a
> variable in an object called keys - your telepathic abilities are very
> impressive;).

Actually, I'd recommend using something more specific than 'keys' -- I
used keys cuz I have no idea what you're doing.

You should NOT use keys, because you DO know what the data is.

'keys' is too generic for Good Programming Style.

>  My first thought was when you said PHP only handles one
> level in post was to serialize the array, put the serialized version
> in as a single hidden HTML tag and unserialize at the other end.  do
> you reckon this is a goer?

This is also an option if you prefer, though I find it difficult to debug
or follow code logic when I can't use a browser's "View Source" to see all
the variables, so generally just un-pack the 2-D arrays as above.

-- 
Like Music?
http://l-i-e.com/artists.htm

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux