Steve,
the problem here is, that Apache::Session only stores the data to the
database if it is modified, but Apache::Session only recognizes
modifications on the first level. That means your first push works, because
the array is created, the second push doesn't work because only the array is
changed. This change is on the second level (not directly in %udat). The
solution to this problem is simply to force a change on the first level, so
Apache::Session saves your data. The simplest thing is to add just after
your push a
$udat{dummy}++ ;
Gerald
>
> Am still having a bit of a nightmare with my sessions. This is difficult
to explain but here I go with an attempt - sorry that it's a long one.......
>
> On one page I have three frames.
>
> In the top frame I am filling and array in %udat with data and then
displaying a select box with the list of data out of this array. The value
of each item in the select box is relevant to it's position in the array -
so the first item's value is 0, second is 1 and so on.
>
> "onchange" the form the select box resides in is submitted to the middle
frame which displays more information about the element in the array that
was selected.
>
> Then on a button click I submit the arrays element number to the bottom
frame - which appears blank to the user. Behind the scene it is supposed to
push the data out of the chosen element in the array on to another array.
"onload" it then changes the middle frame to a page that displays a table of
all the items that have been pushed on to this second array.
>
> Unfortunately - It only ever seem to push one element on to the array.
> My initial array is $udat{rtscos} and I wish to push the data out of it a
line at a time when selected on to $udat{rtsco}
>
> This is the code I am using in the bottom frame (Last three lines are to
print debug information):
>
> [-
> $rtscos = $udat{rtscos};
> push (@{ $udat{rtsco} }, $rtscos->[$fdat{rtscoselem}]);
>
> $rtsco = $udat{rtsco};
> print "test" . $rtsco->[0] . "\n";
> print "test1" . $rtsco->[1] . "\n";
> -]
>
> When I hit the page - the top frame displays the list of everything in
$udat{rtscos}. Then I submit the element to the middle frame which displays
more information about the element in the array that was selected.
>
> I then submit the middle frame to the bottom frame which pushes the
element on to the array as desired and a table is displayed in the middle
frame correctly showing the element that has just been pushed on to the
array $udat{rtsco}.
>
> When I go through the process again however - I still only see in the
table in the middle frame the first element that was pushed on to the array.
>
> The debug info in the bottom frame correctly shows that $rtsco->[1]
contains information. If I run through the process again $rtsco[1] then
contains the element that has most recently been selected which should
really have been pushed on to the array and reside in $rtsco->[2].
>
> What I think is happening is that the process works correctly the first
time and the data is correctly stored in the session in the database. Second
time round It gets pushed on to the array and is printed out but doesn't get
stored properly in the database. (I presume the data in %udat is in memory
during processing the page and is stored in the database at the end of
processing)
>
> Any ideas why this is?
>
-------------------------------------------------------------
Gerald Richter ecos electronic communication services gmbh
Internetconnect * Webserver/-design/-datenbanken * Consulting
Post: Tulpenstrasse 5 D-55276 Dienheim b. Mainz
E-Mail: [EMAIL PROTECTED] Voice: +49 6133 925131
WWW: http://www.ecos.de Fax: +49 6133 925152
-------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]