2016-05-06 153 views
0

一直试图存储来自XML文件的值,但它释放了错误。将XML值存储到会话变量

我该如何解决这个问题?

enter image description here

<?php 

session_start(); 
$success = 0; 
session_unset(); 
$clients= simplexml_load_file('client.xml'); 
    if(isset($_POST['submit'])){ 
     foreach($clients -> client_info as $client){ 
      if($_POST['username'] == $client->username && $_POST['pwd'] == $client->pwd){ 
       $success = $success + 1; 
        $_SESSION["id"] = $client['id']; 

       break;  
      } 
     }  
} 



if (isset($_SESSION["id"])) { 
    echo $_SESSION["id"]; 
} 
else { 
    echo "no session"; 
} 

那的代码。

但问题是,当我外出例如

<?php 
     session_start(); 
echo $_SESSION["id"]; 
?> 

它说未定义的ID。

对此问题的任何解决方案?

+0

噢,对不起等待生病编辑 –

+0

您是否尝试使用simplexml_load_file的($客户端)的结果存储在一个会话变量?它不可序列化以将其保存在会话文件中。 –

+0

是的。可串行化的含义是什么,或者我该如何解决这个问题? –

回答

0

如果您需要保存simplexml_load_file()结果的完整元素,请使用asXML()方法(将元素格式化为XML字符串)。存储任何内容元素的字符串值使用__toString()方法:

例子:

$_SESSION["id"] = $client['id']->__toString(); //for attributes 

如果你想保存XML标记的文本内容:

$_SESSION["clientContent"] = $client->__toString(); //text content of client tag 

将整个XML部分保存为XML字符串:

$_SESSION["client"] = $client->asXML(); //for elements 

,并恢复$客户端变量:

$client=simplexml_load_string($_SESSION["client"]); //$client as object again 
+0

你想要' - > asXML()'not' - > toXML()'http://php.net/manual/en/class.simplexmlelement.php –

+0

使用' - > asXML()'更新,增加了存储示例标签的文字内容。 –

+0

我为什么要恢复它?我只想实际得到一个值 –