#27418 [Opn]: SimpleXML Object forgetting values.

From: Date: Tue, 02 Mar 2004 13:10:53 +0000
Subject: #27418 [Opn]: SimpleXML Object forgetting values.
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-55778@lists.php.net to get a copy of this message
 ID:               27418
 User updated by:  wb at pro-net dot co dot uk
 Reported By:      wb at pro-net dot co dot uk
 Status:           Open
 Bug Type:         *XML functions
 Operating System: FreeBSD, WindowsXP
 PHP Version:      5.0.0b4 (beta4)
 New Comment:

I hav ebeen reading through the PHP-DEV archive and found message:

http://marc.theaimsgroup.com/?l=php-dev&m=107807524506690&w=

Which contains...

>>>> foreach($xml->user as $user){
>>>>   if (utf8_decode($user->login) == $login &&
>>>>       utf8_decode($user->password) == $password) {
>>>>       // valid users
>>>>   }
>>>> }
>>>>
>>>> Both seem like they should work, but neither do.

This infact does work in the example below with the php5 versions that
i have tried. Just thought that i would point it out even if i am not
quite doing things correctly (what should eb the correct way?).

My main issue/question for this bug is how do i traverse over multiple
site elements for each user? And why does is go from being

[site] => Array
        (
            [0] => www.pro-net.co.uk
            [1] => www.example.com
        )

)

To:

$user->site is:
Array
(
    [0] => simplexml_element Object
        (
        )

    [1] => simplexml_element Object
        (
        )

)

depending on how you call it?


Previous Comments:
------------------------------------------------------------------------

[2004-02-27 09:43:44] wb at pro-net dot co dot uk

Description:
------------
When using simpleXML you are unable to fetch some information. The
information is displayed with print_r() but you can't get it it
directly.

Use the example provided as an example.

Reproduce code:
---------------
<?php
header('Content-type: text/plain');

$xmlstr = '<?xml version="1.0"?>
<access>
    <user>
        <login>user1</login>
        <password>letMeIn</password>
        <site>www.pro-net.co.uk</site>
        <site>www.example.com</site>
    </user>
    <user>
        <login>user2</login>
        <password>myPassword</password>
        <site>www.pro-net.co.uk</site>
    </user>
</access>';

$nl  = "\r\n";
$xml = simplexml_load_string($xmlstr);

print('Current PHP version is : '.phpversion().$nl.$nl);

print('$xml is:'.$nl);
print_r($xml);
print($nl.$nl);

// Test authentication to get the correct user information
$login = 'user1';
$password = 'letMeIn';
print($nl.$nl.'Trying to authenticate "'.$login.'" with password
"'.$password.'".'.$nl.$nl);
$isAuth = false;
foreach($xml->user as $user){
    if(utf8_decode($user->login) == $login &&
utf8_decode($user->password) == $password){
        $isAuth = true;
        break;
    }
}
if(!$isAuth){
    print($nl.$nl.'Invalid User.'.$nl);
    die();
}

// So lets output the variables to see what we have...
print('$user is:'.$nl);
print_r($user);
print($nl.$nl);

print('$user->site is:'.$nl);
print_r($user->site);
print($nl.$nl);

print('$user->site[0] is:'.$nl);
print_r($user->site[0]);
print($nl.$nl);

?> 

Expected result:
----------------
$xml is:
simplexml_element Object
(
    [user] => Array
        (
            [0] => simplexml_element Object
                (
                    [login] => user1
                    [password] => letMeIn
                    [site] => Array
                        (
                            [0] => www.pro-net.co.uk
                            [1] => www.example.com
                        )

                )

            [1] => simplexml_element Object
                (
                    [login] => user2
                    [password] => myPassword
                    [site] => www.pro-net.co.uk
                )

        )

)

Trying to authenticate "user1" with password "letMeIn".

$user is:
simplexml_element Object
(
    [login] => user1
    [password] => letMeIn
    [site] => Array
        (
            [0] => www.pro-net.co.uk
            [1] => www.example.com
        )

)


$user->site is:
Array
(
    [0] => www.pro-net.co.uk
    [1] => www.example.com
)


$user->site[0] is:
www.pro-net.co.uk


Actual result:
--------------
$xml is:
simplexml_element Object
(
    [user] => Array
        (
            [0] => simplexml_element Object
                (
                    [login] => user1
                    [password] => letMeIn
                    [site] => Array
                        (
                            [0] => www.pro-net.co.uk
                            [1] => www.example.com
                        )

                )

            [1] => simplexml_element Object
                (
                    [login] => user2
                    [password] => myPassword
                    [site] => www.pro-net.co.uk
                )

        )

)

Trying to authenticate "user1" with password "letMeIn".

$user is:
simplexml_element Object
(
    [login] => user1
    [password] => letMeIn
    [site] => Array
        (
            [0] => www.pro-net.co.uk
            [1] => www.example.com
        )

)


$user->site is:
Array
(
    [0] => simplexml_element Object
        (
        )

    [1] => simplexml_element Object
        (
        )

)


$user->site[0] is:
simplexml_element Object
(
) 


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=27418&edit=1


Thread (6 messages)

« previous php.bugs (#55778) next »