Re: Re: SESSION array problems UPDATE

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

 



Jim Lucas wrote:
Jim Lucas wrote:
tedd wrote:
At 11:10 PM +0100 10/1/08, Nathan Rixham wrote:
[tested - works]
-snip-
?>
regards! nathan :)
I need to re-address this.. tedd your original code works fine over
here; as does the code I sent you, and the code jay submitted first..

do us a favour, copy and paste exactly what I just handed through and
run it; are the results correct?
To all:

The code provided by nathan works for me as well. However, the problem
is not easily explained, but I can demonstrate it -- try this:

http://www.webbytedd.com/zzz/index.php

* A complete listing of the code follows the demo.

When the code is first loaded, the session variables are defined and
populated. Proof of this is shown in the top left corner of the page,
which reports:

Cable Diane
Ron Big
Dirt Joe

Now click the "Continue" button and you will be presented with the next
step which shows a list of the SESSION variables in both the top left
corner AND immediately below "Step 2". Everything is righteous to there.

However, the next portion of the code is the foreach loop where the
first SESSION pair is output correctly, but the rest aren't.

This is followed by another listing of the SESSION variables and this
time is shows that they have completely disappeared.

Okay gang -- what's up with that?

Cut and paste the code and see for yourself.

Cheers,

tedd

Well, I would have to say it is a configuration issue on your server.

Here is the results for my test with your code.  Works fine.

http://www.cmsws.com/examples/php/testscripts/tedd.sperling@xxxxxxxxx/002.php


With RG off, it works as expected.  But, with RG on it gives the results he
was seeing.


that explains my earlier post on the matter:

in this case.. what's happened is:
$_SESSION['first_name'] is a reference to a variable $first (or whatever is in your for loop) $_SESSION['last_name'] is a reference to a variable $last (or whatever is in your for loop)

when you've set $last and $first to string's in the for loop it's passed the variable by reference back to $_SESSION['first_name'] and $_SESSION['last_name'] as strings;

when it hit's the second iteration on the for loop it now has strings to deal with so uses the $key (holding integer 1 at this stage) as a string offset thus giving you the second character (offset [1]) of the string variables $last/$first. now set to 'cable'/'diane' thus giving you the 'a'/'i'. when it does pass three there is no offset [2] so gives you nothing.

*phew*

reproduce code!

<?php

$userids = array('6156','1234','8867');
$first = array('Diane','Big','Joe');
$last = array('Cable','Ron','Dirt');

function save_to_session( ) {
 global $userids , $first , $last;
 $_SESSION['user_id'] = &$userids;
 $_SESSION['first_name'] = &$first;
 $_SESSION['last_name']= &$last;
}

save_to_session( );

print_r( $_SESSION );

$num_users = count($_SESSION['user_id']);

for ($i = 0; $i < $num_users; $i++) {
    $first = $_SESSION['first_name'][$i];
    $last = $_SESSION['last_name'][$i];
    echo "$last, $first\n";
}
?>

lol to think ti was just register globals - thats why i don't use globals!

ps: tedd; you could have got to the bottom of this earlier by having error reporting set to include notices :)

--
nathan ( nathan@xxxxxxxxxxx )
{
  Senior Web Developer
  php + java + flex + xmpp + xml + ecmascript
  web development edinburgh | http://kraya.co.uk/
}

--
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